流信号的统计数据
这个例子展示了如何使用MATLAB®命令行中提供的DSP系统工具箱™功能对输入数据流执行统计测量。计算信号统计量的最小值、最大值、均值、方差、峰比均方根和信号功率谱密度并绘制图。
简介
这个例子使用DSP系统工具箱系统对象计算信号统计。这些对象自动处理它们的状态,减少了更新状态所需的手动代码的数量,减少了编码错误的可能性。
这些System对象预先计算处理中使用的许多值。当您在循环中处理具有相同属性的信号时,这非常有用。例如,在频谱估计应用程序中计算FFT时,一旦知道了输入的属性,就可以计算和存储正弦和余弦的值,并且可以在后续调用中重用这些值。此外,对象只检查每次调用中的输入属性是否与前面的输入类型相同。
初始化
这里初始化代码中使用的一些变量,并实例化处理中使用的System对象。这些对象还预先计算任何必要的变量或表,从而在循环中稍后进行有效的处理调用。
frameSize = 1024;在一个循环中要处理的一个信号块的大小Fs = 48 e3;%采样率numFrames = 100;要处理的帧数%
本例中的输入信号是经过低通FIR滤波器的高斯白噪声。创建FIR Filter System对象™,用于过滤噪声信号:
冷杉= dsp。FIRFilter (“分子”fir1(32。3));
创建一个Spectrum Estimator System对象来估计输入的功率谱密度。
spect = dsp。SpectrumEstimator (“SampleRate”Fs,...“SpectrumType”,的功率密度,...“FrequencyRange”,“单向的”,...“窗口”,“皇帝”);
创建系统对象来计算平均值、方差、峰值至均方根、最小值和最大值,并将它们设置为运行模式。这些对象是产品中可用的统计系统对象的子集。在运行模式中,计算输入在过去的整个长度的统计信息,而不是仅计算当前输入的统计信息。
runMean = dsp。MovingAverage (“SpecifyWindowLength”、假);runVar = dsp。MovingVariance (“SpecifyWindowLength”、假);runPeaktoRMS = dsp。PeakToRMS (“RunningPeakToRMS”,真正的);runMin = dsp。MovingMinimum (“SpecifyWindowLength”、假);runMax = dsp。MovingMaximum (“SpecifyWindowLength”、假);
初始化范围系统对象,用于可视化统计信息和频谱
meanScope = timescope (“SampleRate”Fs,...“TimeSpanSource”,“属性”,...“时间间隔”numFrames * frameSize / Fs,...“标题”,“移动平均”,...“YLabel”,“的意思是”,...“YLimits”、(-0.1 1。)...“位置”,[43 308 420 330]);p2rmsScope = timescope (“SampleRate”Fs,...“TimeSpanSource”,“属性”,...“时间间隔”numFrames * frameSize / Fs,...“标题”,“运行Peak-To-RMS”,...“YLabel”,“Peak-To-RMS”,...“YLimits”, [0 5),...“位置”,[480 308 420 330]);minmaxScope = timescope (“SampleRate”Fs,...“TimeSpanSource”,“属性”,...“时间间隔”numFrames * frameSize / Fs,...“ShowGrid”,真的,...“标题”,...“运行最小和最大的信号”,...“YLabel”,信号幅度的,...“YLimits”3 [3],...“位置”,[43 730 422 330]);spectrumScope = dsp。ArrayPlot (“SampleIncrement”,....5 * Fs/(frameSize/2 + 1),...“PlotType”,“行”,...“标题”,的功率谱密度,...“包含”,的频率(赫兹),...“YLabel”,“功率/频率(dB / Hz)”,...“YLimits”(-120 -30),...“位置”,[475 730 420 330]);
流处理循环
在这里,您调用处理循环来过滤高斯白噪声,并使用System对象计算其平均值、方差、峰值至均方根、最小值、最大值和频谱。
注意,System对象是在循环内部调用的。由于输入数据属性不会改变,因此对象被重用,从而减少了内存的使用。
为我= 1:numFrames通过FIR滤波器传递高斯白噪声sig =冷杉(randn (frameSize 1));计算功率谱密度ps = spect(团体);runMean System对象跟踪过去的信息%的样本,给出到目前为止达到的平均值。相同的是对于runMin和runMax系统对象% true。meanval = runMean(团体);方差= runVar(sig);peak2rms = runPeaktoRMS(团体);最小值= runMin(sig);最大= runMax(团体);绘制您处理过的数据minmaxScope((团体、最小、最大));spectrumScope (10 * log10 (ps));meanScope (meanval);p2rmsScope (peak2rms);结束释放(minmaxScope);
释放(spectrumScope);
释放(meanScope);
释放(p2rmsScope);
结论
您已经直观地看到,代码只涉及使用适当的输入参数调用连续的System对象,而不涉及维护任何更多的变量,如索引或计数器来计算统计信息。这种技术有助于更快和无错误的编码。预先计算对象内部的常量变量通常会导致更快的处理时间。