主要内容

MATLAB中流信号处理的介绍

使用系统对象在MATLAB®中处理流信号。在每个处理循环中,信号被逐帧(或逐块)读取和处理。你可以控制每帧的大小。

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

初始化流组件

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

Fs = 2500;sinineobject1 = dsp。SineWave (“SamplesPerFrame”, 1024,...“SampleRate”Fs,“频率”, 100);sinineobject2 = dsp。SineWave (“SamplesPerFrame”, 1024,...“SampleRate”Fs,“频率”, 1000);光谱分析仪(“SampleRate”Fs,...“方法”“韦尔奇”...“AveragingMethod”“指数”...“ForgettingFactor”, 0.1,...“PlotAsTwoSidedSpectrum”假的,...“ChannelNames”, {“SinewaveInput”“NotchOutput”},“ShowLegend”,真正的);

创建Notch-Peak滤波器

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

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

图1:量级响应(dB)包含一个坐标轴对象。标题为幅度响应(dB)的axis对象包含一个类型为line.

输入和处理信号

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

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

fvtool (NotchFilter)

图2:量级响应(dB)包含一个坐标轴对象。标题为幅度响应(dB)的axis对象包含一个类型为line.

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

另请参阅

|||

Baidu
map