基于matlab设计的滤波器
低通滤波器
%系统采样频率
fs=1200%原始信号
N=400;
n=0:N-1;
t=n/fs;
fl=100
fh=400
y=sin(2*pi*fl*t)+sin(2*pi*fh*t);%显示原始信号
subplot(321)
plot(t,y)
title('输入信号');xlabel('t/s');ylabel('幅度');
%对原始信号频谱分析
sfft=fft(y);
subplot(322);
plot((1:length(sfft)/2)*fs/length(sfft),2*abs(sfft(1:length(sfft)/2))/length(sfft));
title('信号频谱');xlabel('频率/Hz');ylabel('幅度');
%设计低通滤波器
K = 2;
Wc =250;
[z,p,k] = buttap(K); %z、p、k分别为零点列向量、极点列向量和增益系数
[b,a] = zp2tf(z,p,k);
[b,a] = lp2lp(b,a,2*pi*Wc); % lp2lp转换命令把滤波器转化成具有不同截止频率的lp2hp,lp2bp和lp2bs
[b1,a1] = bilinear(b,a,fs); %将模拟信号转为数字信号
[H,W] = freqz(b1,a1,N,fs); %求数字低通滤波器的频率响应
subplot(323)
plot(W,abs(H));
title('低通滤波器');
grid on;
%滤波
y1=filter(b1,a1,y); %叠加函数y经过低通滤波器以后的新函数
%显示滤波后的波形及频谱
subplot(324);
plot(t,y1);
title('输出信号');xlabel('t/s');ylabel('幅度');
y2=fft(y1); %傅里叶变换
subplot(325);
plot((1:length(y2)/2)*fs/length(y2),2*abs(y2(1:length(y2)/2))/length(y2));
title('低通滤波后频谱');xlabel('频率/Hz');ylabel('幅度');