主要内容

MATLAB中的流信号处理简介

这个例子展示了如何使用System对象在MATLAB®中做流信号处理。在每个处理循环中,信号被读取并逐帧(或逐块)处理。你可以控制每帧的大小。

在这个例子中,1024帧的样本在每个处理循环中使用一个陷峰滤波器进行滤波。输入是一个正弦波信号,一帧一帧地流从dsp。SineWave对象。该滤波器是一个使用dsp。NotchPeakFilter对象。为了确保在过滤每一帧时进行平滑处理,System对象自动维护从一帧到下一帧的过滤器状态。

初始化流组件

初始化正弦波源产生正弦波,陷波滤波器对正弦波进行滤波,频谱分析仪显示滤波后的信号。输入的正弦波有两个频率:一个是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。简介(“SampleRate”Fs,“NumInputPorts”,2,...“PlotAsTwoSidedSpectrum”假的,...“ChannelNames”, {“SinewaveInput”,“NotchOutput”},“ShowLegend”,真正的);

创建Notch-Peak过滤器

创建一个二阶IIR陷波滤波器对正弦波信号进行滤波。滤波器在750hz有一个陷波器,q因子为35。较高的q因子导致缺口的3db带宽较窄。如果您在流期间调整滤波器参数,您可以立即在频谱分析仪输出中看到效果。

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

输入和处理信号

构造一个for循环来运行3000次迭代。在每次迭代中,流1024个样本(一帧)的正弦波,并对每一帧输入信号应用陷波滤波器。为了产生输入信号,将两个正弦波相加。合成的信号是一个正弦波,有两个频率:一个是100hz,另一个是1000hz。滤波器的陷波被调谐到频率为100,500,750,或1000hz,基于的值VecIndex.滤波器带宽也随之改变。当滤波参数在流处理过程中发生变化时,频谱分析仪的输出也随之更新。

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

在处理循环的末尾,CenterFrequency是100赫兹。在滤波器输出中,100 Hz的频率被陷波器完全抵消,而1000 Hz的频率不受影响。

另请参阅

|||