主要内容

流信号的统计数据

这个例子展示了如何使用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对象,而不涉及维护任何更多的变量,如索引或计数器来计算统计信息。这种技术有助于更快和无错误的编码。预先计算对象内部的常量变量通常会导致更快的处理时间。

Baidu
map