主要内容

流信号统计

此示例显示如何使用Matlab®命令行可用的DSP System Toolbox™功能对输入数据流进行统计测量。您将计算最小,最大,平均值,方差和峰值到rms的信号统计信息和信号功率谱密度并绘制它们。

介绍

此示例使用DSP系统工具箱系统对象计算信号统计信息。这些对象处理其状态自动减少更新状态所需的手代码量,从而减少了编码错误可能的可能性。

这些系统对象预先计算处理中使用的许多值。当您在循环中处理相同属性的信号时,这非常有用。例如,在计算频谱估计应用中的FFT中,一旦了解输入的属性,就可以计算和存储正弦和余弦值,并且可以为后续调用重复使用这些值。此外,对象仅检查输入属性是否与每个呼叫中​​的先前输入相同的类型。

初始化

在这里,您可以初始化代码中使用的一些变量,并实例化处理中使用的系统对象。这些对象还预先计算了任何必要的变量或表,从而稍后在循环中稍后产生有效的处理呼叫。

框架= 1024;以一个循环处理的一块信号的大小的大小FS = 48E3;% 采样率numframes = 100;%要处理的帧数

此示例中的输入信号是通过低通终端滤波器传递的白色高斯噪声。创建用于过滤噪声信号的FIR滤波器系统对象:

fir = dsp.firfilter('分子',fir1(32,32));

创建频谱估计系统对象以估计输入的功率频谱密度。

Spect = dsp.spectrumestimator('采样率',fs,......'spectrumtype''功率密度'......'频率范围''片面'......'窗户''kaiser');

创建系统对象以计算平均值,方差,峰值,rms,最小和最大值,并将其设置为运行模式。这些对象是产品中可用的统计系统对象的子集。在运行模式下,您将在过去的统计信息中计算输入的整个长度的统计信息,而不是仅当前输入。

runmean = dsp.movi​​ngaverage('specifywindowlength', 错误的);runvar = dsp.movi​​ngvariance('specifywindowlength', 错误的);runpeaktorms = dsp.peaktorms('跑步跑车',真的);runmin = dsp.movi​​ngminimum('specifywindowlength', 错误的);runmax = dsp.movi​​ngmaximm('specifywindowlength', 错误的);

初始化范围系统对象,用于可视化统计和频谱

meaciercope = timescope('采样率',fs,......'timespansource''财产'......'时间跨度',numframes * framesize / fs,......'标题''跑步意味着'......'ylabel''意思是'......'ylimits',[ -  0.1 .1],......'位置',[43 308 420 330]);p2rmsscope = timescope('采样率',fs,......'timespansource''财产'......'时间跨度',numframes * framesize / fs,......'标题''运行峰-RMS'......'ylabel''峰-NO-RMS'......'ylimits',[0 5],......'位置',[480 308 420 330]);minmaxscope = timescope('采样率',fs,......'timespansource''财产'......'时间跨度',numframes * framesize / fs,......'showgrid',真的,......'标题'......“运行最小和最大值”的信号'......'ylabel''信号幅度'......'ylimits',[ -  3 3],......'位置',[43330 422 330]);spectrumscope = dsp.arrayplot('SampleIncrement'.......5 * FS /(FRAMESIZE / 2 + 1),......'plottype''线'......'标题''功率谱密度'......'xlabel''频率(Hz)'......'ylabel''电源/频率(DB / Hz)'......'ylimits',[ -  120 -30],......'位置',[475 730 420 330]);

流处理循环

在这里,您将呼叫您的处理循环,该循环将过滤白色高斯噪声并使用系统对象计算其平均值,方差,峰值,rms,min,max和频谱。

请注意,系统对象在循环中调用。由于输入数据属性不会更改,因此可以在此处重用对象。这减少了内存使用率。

为了i = 1:numframes%通过FIR滤波器通过白色高斯噪声sig = fir(randn(框架化,1));%计算功率谱密度ps = spect(sig);%runmean系统对象会跟踪有关过去的信息%样本并为您提供平均值达到现在。同样的是runmin和runmax系统对象的%true。意思是=克隆(SIG);variance = runvar(sig);peak2rms = runpeaktorms(sig);最小= runmin(sig);最大= runmax(sig);%绘制您已处理的数据minmaxscope([sig,最小,最大]);光谱探测器(10 * log10(ps));手段(均值);p2rssscope(peak2rms);结尾释放(minmaxscope);释放(光谱);释放(均衡);释放(P2RSSSCOPE);

结论

您在视觉上看到了代码涉及使用适当的输入参数调用连续的系统对象,并且不涉及维护更多的变量,例如指数或计数器,以计算统计数据。这有助于更快和无错误编码。对象内部的恒定变量的预计算通常导致更快的处理时间。