MATLAB中流式信号处理的介绍

这个例子展示了如何使用系统对象在MATLAB中进行流信号处理。在每个处理循环中,信号被读入并逐帧(或逐块)处理。您可以控制每个帧的大小。

在本例中,在每个处理循环中使用一个缺口峰值滤波器来过滤1024个样本的帧。输入是一个正弦波信号,从a帧开始逐帧流式传输dsp.SineWave对象。该筛选器是使用dsp.NotchPeakFilter对象。为了确保顺利的处理,每个帧被过滤,系统对象下自动保持所述过滤器的从一个帧的状态到。

初始化流组件

初始化正弦波源,生成正弦波;初始化缺口峰值滤波器,生成正弦波;初始化频谱分析仪,生成滤波后的信号。输入正弦波有两个频率:一个是100hz,另一个是1000hz。创建两个dsp.SineWave对象,一个生成100hz的正弦波,另一个生成1000hz的正弦波。

Fs = 2500;Sineobject1 = dsp.SineWave (“SamplesPerFrame”,1024,...“SampleRate”Fs,'频率',100);Sineobject2 = dsp.SineWave(“SamplesPerFrame”,1024,...“SampleRate”Fs,'频率',1000);SA = dsp.SpectrumAnalyzer (“SampleRate”Fs,“NumInputPorts”2,...'PlotAsTwoSidedSpectrum',假,...'ChannelNames'{“SinewaveInput”,“NotchOutput”},“ShowLegend”,真正的);

创建Notch的峰值滤波器

创建一个二阶IIR缺口峰值滤波器来过滤正弦波信号。该滤波器的陷波为750赫兹,q因子为35。q因子越高,陷波的3-dB带宽越窄。如果您在流式期间调整滤波器参数,您可以立即在频谱分析仪输出中看到效果。

我们= 750;Q = 35;BW =我们/ Q;NotchFilter = dsp.NotchPeakFilter (“带宽”BW,...“CenterFrequency”我们,“SampleRate”Fs);fvtool (NotchFilter);

输入和处理信号

构造一个for循环来运行3000次迭代。在每个迭代中,输入1024个样本(一帧)的正弦波,并在输入信号的每一帧上应用陷波滤波器。要生成输入信号,将两个正弦波相加。合成的信号是两种频率的正弦波:一种是100hz,另一种是1000hz。滤波器的陷波根据的值调整为100、500、750或1000 HzVecIndex。滤波器带宽也随之改变。当滤波参数在流式传输过程中发生变化时,频谱分析仪的输出也随之更新。

FreqVec = [100 500 750 1000];VecIndex = 1;VecElem = FreqVec (VecIndex);Iter = 1:3000 Sinewave1 = Sineobject1();Sinewave2 = Sineobject2 ();输入= Sinewave1 + Sinewave2;如果(mod (Iter, 350) = = 0)如果则VecIndex <4则VecIndex =则VecIndex + 1;其他的VecIndex = 1;结束VecElem = FreqVec (VecIndex);结束NotchFilter。CenterFrequency = VecElem;NotchFilter。带宽= NotchFilter.CenterFrequency / Q;= NotchFilter输出(输入);SA(输入、输出);结束fvtool(NotchFilter)

在处理循环结束时,该CenterFrequency是100赫兹。在滤波器输出中,100hz的频率被陷波滤波器完全消除,而1000hz的频率不受影响。

另请参阅

|||