这个我刚好做过一个滤波器,事实上对时域信号做FFT,截取一定点数再做逆FFT相当于理想滤波。设计滤波器代码如下:f1=100;f2=200;%待滤波正弦信号频率fs=2000;%采样频率m=(0.3*f1)/(fs/2)
;%定义过度带宽M=round(8/m)
;%定义窗函数的长度N=M-1;%定义滤波器的阶数b=fir1(N,f2/fs)
;%使用fir1函数设计滤波器%输入的参数分别是滤波器的阶数和截止频率figure(1)[h,f]=freqz(b,1,512);%滤波器的幅频特性图%[H,W]=freqz(B,A,N)当N是一个整数时函数返回N点的频率向量和幅频响应向量plot(f*fs/(2*pi),20*log10(abs(h))
)%参数分别是频率与幅值xlabel('频率/赫兹')
;ylabel('增益/分贝')
;title('滤波器的增益响应')
;figure(2)subplot(211)t=0:1/fs:0.5;%定义时间范围和步长s=sin(2*pi*f1*t)+sin(2*pi*f2*t)
;%滤波前信号plot(t,s)
;%滤波前的信号图像xlabel('时间/秒')
;ylabel('幅度')
;title('信号滤波前时域图')
;subplot(212)Fs=fft(s,512)
;%将信号变换到频域AFs=abs(Fs)
;%信号频域图的幅值f=(0:255)*fs/512;%频率采样plot(f,AFs(1:256))
;%滤波前的信号频域图xlabel('频率/赫兹');ylabel('幅度')
;title('信号滤波前频域图')
;figure(3)sf=filter(b,1,s)
;%使用filter函数对信号进行滤波%参数分别为滤波器系统函数的分子和分母多项式系数向量和待滤波信号输入subplot(211)plot(t,sf)%滤波后的信号图像xlabel('时间/秒');ylabel('幅度')
;title('信号滤波后时域图')
;axis([0.2 0.5 -2 2])
;%限定图像坐标范围subplot(212)Fsf=fft(sf,512)
;%滤波后的信号频域图AFsf=abs(Fsf)
;%信号频域图的幅值f=(0:255)*fs/512;%频率采样plot(f,AFsf(1:256)
)%滤波后的信号频域图xlabel('频率/赫兹')
;ylabel('幅度')
;title('信号滤波后频域图');