数字信号处理实验姓名:彭金金学号:071041219同组成员:王春香实验三IIR数字滤波器的设计及滤波实现一、程序如下:wp=0.2*pi;ws=0.3*pi;Rp=1;As=15;ripple=10^(-Rp/20);Attn=10^(-As/20);T=0.02*pi;Fs=1/T;Omgp=(2/T)*tan(wp/2);Omgs=(2/T)*tan(ws/2);[n,Omgc]=buttord(Omgp,Omgs,Rp,As,'s');[bal,aal]=butter(n,Omgc,'s');[bd,ad]=bilinear(bal,aal,Fs);[sos,g]=tf2sos(bd,ad);[H,w]=freqz(bd,ad);dbH=20*log10((abs(H)+eps)/max(abs(H)));plot(w/pi,dbH);title('滤波器的幅频响应');ylabel('dB');xlabel('频率(\pi)');axis([0,0.5,-40,5]);set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,0.5]);set(gca,'YTickMode','manual','YTick',[-50,-15,-1,0]);gridn=0:55;x=[-4-20-4-6-4-2-4-6-6-4-4-6-6-261280-16-38-60-84-90-66-32-4-2-48121210666400000-2-4000-2-200-2-2-2-20];figureplot(n,x,'k');xlabel('n');ylabel('x');title('心电图信号线图');gridfigurestem(n,x,'m')xlabel('n');ylabel('x');title('心电图离散序列')gridw1=linspace(-2*pi,2*pi,500);N=length(x);n=0:N-1;X=x*exp(-j*n'*w1);figureplot(w1,abs(X),'r')xlabel('w1'),ylabel('X')title('心电图幅频特性')gridh=ifft(H);n=0:length(h)-1;figurestem(n,h,'g')axis([0,50,-0.3,0.3])xlabel('n'),ylabel('h')title('数字滤波器时域响应')gridhx=conv(x,h);n2=0:length(hx)-1;figurestem(n2,hx,'g')xlabel('n'),ylabel('hx')title('滤波后的心电图信号')axis([0,60,-50,10])gridn1=0:length(hx)-1;HX=hx'*exp(-j*n1'*w1);figureplot(w1,abs(HX))xlabel('w1')ylabel('HX')title('滤波后心电图信号的幅频响应')grid二、各信号的波形如下:00.20.30.5-15-10滤波器的幅频响应dB(频率)0102030405060-100-80-60-40-20020nx心电图信号线图0102030405060-100-80-60-40-20020nx心电图离散序列-8-6-4-202468050100150200250300350400w1X心电图幅频特性05101520253035404550-0.25-0.2-0.15-0.1-0.0500.050.10.150.20.25nh数字滤波器时域响应0102030405060-50-40-30-20-10010nhx滤波后的心电图信号-8-6-4-202468050100150200250300350400w1HX滤波后心电图信号的幅频响应三、思考题:用双线性变换发设计数字滤波器过程中,变换公式中T是我取值对设计结果有无影响?为什么?解:用双线性变换发设计数字滤波器过程中,变换公式中T是我取值对设计结果没有影响,因为T只是一个参数,在设计滤波器的过程中其值可以被约去,对滤波器的特性没有任何影响。四、实验结论:实验中对心电图信号进行滤波有两种方法,一种是频域相乘,一种是时域卷积,由滤波器的时域特性可以看出它是一个N值很小的离散信号,采用反傅里叶变换将其转换为时域与心电图信号卷积更为方便。对一次滤波后的信号进行2次3次滤波得到的信号波形如下:hhx=conv(h,hx);n3=0:length(hhx)-1;figurestem(n3,hhx)axis([0,70,-40,10])xlabel('n3'),ylabel('hhx'),title('二次滤波后的心电图信号'),grid010203040506070-40-35-30-25-20-15-10-50510n3hhx二次滤波后的心电图信号hhhx=conv(h,hhx);n4=0:length(hhhx)-1;stem(n4,hhhx)xlabel('n4')ylabel('hhhx')axis([0,70,-40,10])title('三次滤波后的心电图信号')010203040506070-40-35-30-25-20-15-10-50510n4hhhx三次滤波后的心电图信号