gusucode.com > ​matlab FIR 底通和带通滤波器和IIR 底通和带通滤波器完整程序 > MATLAB_FIR_IIR/FIRdaitong.m

    clear all
clc
N1=1024;t=0:1:N1-1;
fs=5000;
s=(sin(2*100*pi*t/fs)+sin(2*pi*500*t/fs)+2*sin(2*pi*1000*t/fs))+randn(1,length(t/fs));
Y=fft(s);
wn1=[0.15 0.25];
b = fir1(32,wn1,'DC-0');
y1=filter(b,1,s);
Y1=fft(y1);
Ts=t(2)-t(1); 
Ws=2*pi/Ts;
Wn=Ws/2;
f=linspace(0,Wn/(2*pi),length(t)/2);
Ya=abs(Y(1:length(t)/2));
Ya1=abs(Y1(1:length(t)/2));
figure(1)
freqz(b,1,64,fs);axis([0,1500,-100,0]);grid;
title('设计的FIR带通滤波器');
figure(2);
subplot(121);plot(f*fs,Ya);axis([0,1500,0,1000]);grid;
xlabel('f');
ylabel('频谱幅值F(\omega)');
title('原信号的频谱');
subplot(122);plot(f*fs,Ya1);axis([0,1500,0,1000]);grid;
xlabel('f');
ylabel('频谱幅值F(\omega)');
title('经过FIR带通滤波器后的信号频谱');
figure(3);
subplot(121)
plot(t,s);title('原信号时域图');
axis([0,150,-5,5]);grid;
ss=ifft(Y1(1:length(t)));
subplot(122)
plot(t,ss);title('滤波后的时域图');
axis([0,150,-5,5]);grid;