MATLAB 中的流信号处理简介
使用 System object 在 MATLAB® 中处理流信号。在每个处理循环中,以逐帧(或逐模块)方式读取和处理信号。您可以控制每帧的大小。
在此示例中,在每个处理循环中使用陷波-峰值滤波器对包含 1024 个采样的帧进行滤波。输入是从 dsp.SineWave 对象逐帧流式传输的正弦波信号。滤波器是使用 dsp.NotchPeakFilter 对象创建的陷波-峰值滤波器。为了确保在对每帧进行滤波时平滑进行,System object 会自动保持滤波器从一帧到下一帧的状态。
初始化流分量
初始化正弦波源以生成正弦波,初始化陷波-峰值滤波器以对正弦波进行滤波,并初始化频谱分析仪以显示滤波后的信号。输入正弦波有两个频率:一个为 100 Hz,另一个为 1000 Hz。创建两个 dsp.SineWave 对象,一个用于生成 100 Hz 正弦波,另一个用于生成 1000 Hz 正弦波。
Fs = 2500; Sineobject1 = dsp.SineWave(SamplesPerFrame=1024,... SampleRate=Fs,Frequency=100); Sineobject2 = dsp.SineWave(SamplesPerFrame=1024,... SampleRate=Fs,Frequency=1000); SA = spectrumAnalyzer(SampleRate=Fs,... Method="welch",... AveragingMethod="exponential",... ForgettingFactor=0.1,... PlotAsTwoSidedSpectrum=false,... ChannelNames=["SinewaveInput","NotchOutput"],ShowLegend=true);
创建陷波-峰值滤波器
创建一个二阶 IIR 陷波-峰值滤波器以对正弦波信号进行滤波。该滤波器在 750 Hz 处有一个陷波,Q 因子为 35。Q 因子越高,导致的陷波 3-dB 带宽越窄。如果您在流式传输期间调节滤波器参数,会立即在频谱分析仪输出中看到效果。
Wo = 750;
Q = 35;
BW = Wo/Q;
NotchFilter = dsp.NotchPeakFilter(Bandwidth=BW,...
CenterFrequency=Wo,SampleRate=Fs);
filterAnalyzer(NotchFilter);
流式传入并处理信号
构造一个运行 3000 次迭代的 for 循环。在每次迭代中,流式传入正弦波的 1024 个采样(一帧),并对输入信号的每帧应用陷波滤波器。为了生成输入信号,将两个正弦波相加。得到的信号是一个具有两个频率的正弦波:一个频率为 100 Hz,另一个频率为 1000 Hz。根据 VecIndex 的值,滤波器的陷波调节到 100、500、750 或 1000 Hz 的频率。滤波器带宽会相应更改。当滤波器参数在流式传输期间发生变化时,频谱分析仪中的输出会相应更新。
FreqVec = [100 500 750 1000]; VecIndex = 1; VecElem = FreqVec(VecIndex); for Iter = 1:3000 Sinewave1 = Sineobject1(); Sinewave2 = Sineobject2(); Input = Sinewave1 + Sinewave2; if (mod(Iter,350)==0) if VecIndex < 4 VecIndex = VecIndex+1; else VecIndex = 1; end VecElem = FreqVec(VecIndex); end NotchFilter.CenterFrequency = VecElem; NotchFilter.Bandwidth = NotchFilter.CenterFrequency/Q; Output = NotchFilter(Input); SA(Input,Output); end

filterAnalyzer(NotchFilter)

在处理循环结束时,CenterFrequency 为 100 Hz。在滤波器输出中,100 Hz 频率被陷波滤波器完全消除,而 1000 Hz 的频率不受影响。
另请参阅
Filter Frames of a Noisy Sine Wave Signal in MATLAB | Filter Frames of a Noisy Sine Wave Signal in Simulink | Multirate Filtering in MATLAB and Simulink