Rs=0.01;fs=200;%采样频率
fcuts=[0.25 0.3 40 45];a=[0 1 0];
dev=Rs*ones(1, length(a));
[M, Wc, beta, ftype]=kaiserord(fcuts,a,dev,fs);
%M为能够满足设计要求的滤波器的最小阶数,Wc为滤波器的截止频率点
%第一个元素fcuts为待设计滤波器的过渡带的起始点和结束点
%第二个元素a指定第一个元素频率段的理想幅度值
%第三个元素值dev中的元素为各通带和阻带内允许的幅度最大误差
M=mod(M, 2)+M;
windows=Kaiser(M+1,beta);b=fir1(M,Wc,ftype,windows);
%输入的第一个参数是滤波器的阶数
%第二个参数是滤波器的截止频率
%第三个参数是滤波器的类型,stop为带阻滤波器
%第四个参数是采用窗函数
[h,f]=freqz(b,1,32);%滤波器的幅频特性图
%[H,W]=freqz(B,A,N)当N是一个整数时函数返回N点频率向量和幅频响应向量
figure(1)
plot(f*fs/(2*pi),20*log10(abs(h)))%参数分别是频率和幅值
xlabel('频率/赫兹');ylabel('增益/分贝');title('滤波器的增益响应');
f1=5;f2=15;f3=70;f4=90;%待滤波正弦信号频率
t=(0:200)/fs;%定义时间的步长
s=sin(2*f1*pi*t)+sin(2*f2*pi*t)+sin(2*f3*pi*t)+sin(2*f4*pi*t);
sf=filter(b,1,s);%使用filter函数对信号进行滤波
figure(2)
subplot(211)
plot(t,s);%滤波前的信号图像
xlabel('时间/秒');ylabel('幅度');title('信号滤波前时域图');
subplot(212)
Fsf=fft(sf,512);%滤波后的信号频域图
AFsf=abs(Fsf);%信号频域图的幅值
f=(0:255)*fs/512;%采样频率
plot(f,AFsf(1:256))%滤波后的信号频域图
xlabel('频率/赫兹');ylabel('幅度');title('信号滤波后频域图');