主要内容

MATLAB流信号处理入门

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

在本例中,在每个处理循环中使用notch-peak滤波器过滤1024个样本的帧。输入是一个正弦波信号,它是一帧一帧地从a传输过来的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缺口峰滤波器来过滤正弦波信号。该滤波器的陷波频率为750hz, q因子为35。较高的q因子导致缺口的3db带宽变窄。如果在流媒体期间调整滤波器参数,您可以立即在频谱分析仪输出中看到效果。

Wo = 750;Q = 35;BW = Wo/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: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)

{

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

另请参阅

|||