FIR低通滤波器的MATLAB仿真及效果验证

 时间:2026-02-15 08:55:29

1、实际应用背景:若信号为一个10Hz与一个30Hz的余弦信号相加,那么如何滤除30Hz的信号?

2、首先产生原始信号。采样率设置为100Hz,时宽2s。

MATLAB程序如下:

        f1=10;%第一个点频信号分量频率

        f2=30;%第二个点频信号分量频率

        fs=100;%采样率

        T=2;%时宽

        B=20;%带宽

        n=round(T*fs);%采样点个数

        t=linspace(0,T,n);

        y=cos(2*pi*f1*t)+cos(2*pi*f2*t);

3、观察原始信号的时域波形和频谱,从频谱图中可以明显看出其10Hz与30Hz的分量。

MATLAB程序如下:

        figure;

        plot(t,y);

        title('原始信号时域');

        xlabel('t/s');

        ylabel('幅度');

        figure;

        fft_y=fftshift(fft(y));

        f=linspace(-fs/2,fs/2,n);

        plot(f,abs(fft_y));

        title('原始信号频谱');

        xlabel('f/Hz');

        ylabel('幅度');

        axis([ 0 50 0 100]);

FIR低通滤波器的MATLAB仿真及效果验证

FIR低通滤波器的MATLAB仿真及效果验证

4、设计FIR滤波器:为滤除30Hz的分量,我们选用20Hz截止频率的低通滤波器,阶数为40阶(若要获得更陡峭的过渡带,阶数可以选择的更高)。MATLAB中用fir1函数实现滤波器冲击响应系数的计算。注意:模拟频率f=20Hz需要按f/(fs/2)的式子化为数字频率,作为fir1函数中的参数。

MATLAB程序如下:

        b=fir1(40, B/(fs/2));  %滤波产生指定带宽的噪声信号

        figure;

        freqz(b);%画滤波器频响

FIR低通滤波器的MATLAB仿真及效果验证

5、信号通过FIR滤波器:采用filter函数。

MATLAB程序:

        y_after_fir=filter(b,1,y);  %信号通过滤波器

6、观察滤波后输出信号的时域与频谱

从频谱中可以明显看出,30Hz的分量被滤除,留下了10Hz的分量。时域波形也可以看出这一点。同时需要注意,输出信号的前面一段是无效的。该段的长度为滤波器阶数的一半。

MATLAB程序:

        figure;

        plot(t,y_after_fir);

        title('滤波后信号时域');

        xlabel('t/s');

        ylabel('幅度');

        

        fft_y1=fftshift(fft(y_after_fir));

        f=linspace(-fs/2,fs/2,n);

        figure;

        plot(f,abs(fft_y1));

        title('滤波后信号频谱');

        xlabel('f/Hz');

        ylabel('幅度');

        axis([ 0 50 0 100]);

FIR低通滤波器的MATLAB仿真及效果验证

FIR低通滤波器的MATLAB仿真及效果验证

  • 阅读量:153
  • 阅读量:183
  • 阅读量:173
  • 阅读量:184
  • 阅读量:83
  • 热门搜索
    重庆旅游景点 众信旅游 旅游景点 中国旅游景点 新疆旅游景点 聊城旅游 张家界旅游攻略 河北旅游景点 去泰国旅游要多少钱 贵州旅游景点