此示例显示如何在MATLAB中使用系统对象进行流式传输信号处理。在每个处理循环中,通过帧(或通过块)读取和处理帧的帧。您可以控制每个帧的大小。
在该示例中,使用每个处理循环中的凹口峰值滤波器过滤1024个样本的帧。输入是由帧流流帧的正弦波信号dsp.sinewave.
对象。过滤器是使用a创建的凹口峰值滤波器dsp.notchpeakfilter
对象。为了确保在过滤每一帧时进行平滑处理,System对象自动维护从一帧到下一帧的过滤器状态。
初始化正弦波源以生成正弦波,凹口峰值过滤器过滤正弦波,以及频谱分析仪以显示滤波器的信号。输入正弦波有两个频率:一个在100 Hz,另一个处于1000 Hz。创建二dsp.sinewave.
对象,一个要生成100 Hz正弦波,另一个生成1000 Hz正弦波。
FS = 2500;sineObject1 = dsp.sinewave('samplesperframe',1024,......'采样率',fs,“频率”, 100);Sineobject2 = dsp。SineWave ('samplesperframe',1024,......'采样率',fs,“频率”,1000);sa = dsp.spectrumanalyzer('采样率',fs,'numinputports'2,......“PlotAsTwoSidedSpectrum”假的,......“ChannelNames”,{'sinewaveinpul'那'notchoutput'},'陈旧',真的);
创建二阶IIR Notch峰值滤波器以过滤正弦波信号。过滤器具有750 Hz的凹口,Q系数为35.更高的Q因子导致缺口的较窄的3-dB带宽。如果在流过程中调整过滤器参数,则可以在Spectrum Analyzer输出中立即看到效果。
WO = 750;q = 35;bw = wo / q;notchfilter = dsp.notchpeakfilter('带宽',bw,......'中心罚款',禾,'采样率',fs);FVTool(NotchFilter);
构建用于运行3000次迭代的for-循环。在每次迭代中,在1024个样本(一帧)的SINEWAVE中的流并在输入信号的每个帧上应用凹口滤波器。要生成输入信号,请添加两个正弦波。得到的信号是具有两个频率的正弦波:一个在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 < 4 = VecIndex+1;别的vecindex = 1;结尾vecelem = freqvec(vecindex);结尾NotchFilter.Centerfrequency = Vecelem;NotchFilter.BandWidth = NotchFilter.Centerfrequency / Q;输出= NotchFilter(输入);SA(输入,输出);结尾fvtool (NotchFilter)
在处理循环的末尾,CenterFrequency
是100赫兹。在过滤器输出中,陷波滤波器完全耗尽100Hz频率,而1000Hz的频率不受影响。
设计多速率过滤器|MATLAB中嘈杂的正弦波信号的滤波器框架|Simulink中噪声的噪声帧金宝app|Simulink中的Lowpass IIR过滤器设计金宝app