资源描述:
《数字信号处理实验_用窗函数法设计fir滤波器.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验四用窗函数法设计FIR数字滤波器%实验四:用窗函数法设计FIR数字滤波器clearallcloseallN=input('输入窗函数长度N=?(输入0=退出)');%注意加分号与不加分号的区别while(N~=0)wc=input('输入希望逼近的理想低通滤波器的截止频率Wc=?');%注意截止频率pi/4的输入,matlab中已经默认定义了pin=0:(N-1);alpha=(N-1)/2;m=n-alpha+eps;hd=sin(wc*m)./(pi*m);%得到理想低通滤波器(教材P33
2、3式7-41)k=input('请选择窗函数类型(1=矩形;2=汉宁;3=海明;4=布莱克曼):');ifk==1B=boxcar(N);%产生矩形窗string=['Boxcar,N=',num2str(N)];%text函数使用字符串string在图中标明所用窗的类型及长度elseifk==2%注意elseif与elseif的区别,有几个独立的if就要求有几个endB=hamming(N);string=['Hamming,N=',num2str(N)];elseifk==3B=hanning
3、(N);string=['Hanning,N=',num2str(N)];elseB=blackman(N)string=['Blackman,N=',num2str(N)];endh=hd.*(B)';%得到FIR数字滤波器h(n)=hd(n)w(n),注意*是矩阵相乘,.*是矩阵的对应元素相乘[H,w]=freqz(h,[1],1024);%求滤波器h(n)的频率响应;对FIR而言,H(z)分子分母多项式的系数向量b=[1],a=h;返回向量H的点数N=1024db=20*log10(abs(
4、H)+eps);%得到幅值pha=angle(H);%得到相位%绘制单位脉冲响应h(n)、幅频衰减特性20lg︱H(ejw)︱)、相频特性和幅频特性︱H(ejw)︱的波形figure;%加figure语句,下一个plot所绘出的图不会把上次的图给取代。也可在每次运行完plot之后,加figure语句subplot(2,2,1)stem(n,h,'.r');%绘制单位脉冲响应h(n)波形axis([0,N-1,-0.1,0.3]);xlabel('n');ylabel('h(n)');title('
5、实际低通滤波器的h(n)');text((0.28*N),0.275,string);%创建text图形句柄对象函数,text(x,y,string)在图形中指定的位置上(x,y)上显示字符串stringsubplot(2,2,2)plot(w/pi,db,'m');%绘制幅频衰减特性20lg︱H(ejw)︱)波形axis([0,1,-100,0]);xlabel('w/pi');ylabel('dB');title('衰减特性(dB)');grid;%添加网格线set(gca,'xtick',0
6、:0.2:1,'ytick',-100:20:0)%设置网格线的密度subplot(2,2,3)plot(w,pha);%绘制相频特性波形holdon;plot(0:4,zeros(5),'-k');%绘制零相位基线title('相频特性');xlabel('频率W(rad)');ylabel('相位(rad)');axis([0,3.15,-4,4]);subplot(2,2,4);plot(w,abs(H));%绘制幅频特性︱H(ejw)︱波形title('频率特性');xlabel('频率W
7、(rad)');ylabel('幅值');axis([0,3.15,0,1.5]);text(0.9,1.3,string);N=input('输入窗函数长度N=?(输入0=退出)');endplot(x,y)以x元素为横坐标值,y元素为纵坐标值绘制曲线。(1)x,y都是向量,则以x中元素为横坐标,y中元素为纵坐标作平面曲线。此时x,y必须具有相同长度。(2)x,y都是矩阵,则将x的列和y中相应的列相组合,绘制多条平面曲线。此时x,y必须具有相同的大小。(3)x是向量,y是矩阵,若x的长度与y的行
8、数相等,则将x与y中的各列相对应,绘制多条平面曲线;否则,若x的长度与y的列数相等,则将x与y中的各行相对应,绘制多条平面曲线。此时x的长度必须等于y的行数或列数。%实验四:用窗函数法设计FIR数字滤波器%MATLAB主程序clearall;closeall;b=1;i=0;while(b);temp=menu('选择窗函数长度N','N=10','N=15','N=20','N=25','N=30','N=33','N=35','N=40','N=45','N=50','N=55