- %窗函数法设计FIR低通滤波器
- clear;closeall
- N=45;wc=pi/4;
- n=0:N-1;r=(N-1)/2;
- hdn=sin(wc*(n-r))/pi./(n-r);%计算理想低通单位脉冲响应
- ifrem(N,2)~=0hdn(r+1)=wc/pi;end%N为奇数时,处理n=r点的0/0型
- wn1=boxcar(N);%矩形窗
- hn1=hdn.*wn1';%加窗
- %以上两条语句可代以fir函数:hn1=fir1(N-1,wc/pi,boxcar(N));
- wn2=hamming(N);%hamming窗
- hn2=hdn.*wn2';%加窗
- wn3=triang(N);%triang窗
- hn3=hdn.*wn3';%加窗
- wn4=hanning(N);%hanning(窗
- hn4=hdn.*wn4';%加窗
- wn5=blackman(N);%blackman窗
- hn5=hdn.*wn5';%加窗
- wn6=kaiser(N,5.658);%kaiser窗
- hn6=hdn.*wn6';%加窗
- %以上两条语句可代以fir函数:hn2=fir1(N-1,wc/pi,hamming(N));k=3
- [hw1,w]=freqz(hn1,1);
- [hw2,w]=freqz(hn2,1);
- [hw3,w]=freqz(hn3,1);
- [hw4,w]=freqz(hn4,1);
- [hw5,w]=freqz(hn5,1);
- [hw6,w]=freqz(hn6,1);
- %显示最大化
- set(gcf,'outerposition',get(0,'screensize'));
- %显示窗函数
- subplot(4,3,1);stem(n,hn1,'.');xlabel('矩形窗系数序列');ylabel('h(n1)');
- subplot(4,3,2);stem(n,hn2,'.');xlabel('海明窗系数序列');ylabel('h(n2)');
- subplot(4,3,3);stem(n,hn3,'.');xlabel('三角窗系数序列');ylabel('h(n1)');
- subplot(4,3,4);stem(n,hn4,'.');xlabel('汉宁窗系数序列');ylabel('h(n2)');
- subplot(4,3,5);stem(n,hn5,'.');xlabel('布拉克曼窗系数序列');ylabel('h(n1)');
- subplot(4,3,6);stem(n,hn6,'.');xlabel('凯泽窗系数序列');ylabel('h(n2)');
- %频域相应
- %subplot(4,3,7);plot(w,abs(hw1),w,abs(hw2),':');xlabel('幅频特性');ylabel('│H(w1)│');
- %legend('矩形窗','海明窗')
- %单位为db的频域相应
- subplot(4,3,7);
- plot(w,20*log10(abs(hw1)),w,20*log10(abs(hw1)),':');xlabel('幅频特性');ylabel('dB');
- legend('矩形窗','矩形窗')
- subplot(4,3,8);
- plot(w,20*log10(abs(hw1)),w,20*log10(abs(hw2)),':');xlabel('幅频特性');ylabel('dB');
- legend('矩形窗','海明窗')
- subplot(4,3,9);
- plot(w,20*log10(abs(hw1)),w,20*log10(abs(hw3)),':');xlabel('幅频特性');ylabel('dB');
- legend('矩形窗','三角窗')
- subplot(4,3,10);
- plot(w,20*log10(abs(hw1)),w,20*log10(abs(hw4)),':');xlabel('幅频特性');ylabel('dB');
- legend('矩形窗','汉宁窗')
- subplot(4,3,11);
- plot(w,20*log10(abs(hw1)),w,20*log10(abs(hw5)),':');xlabel('幅频特性');ylabel('dB');
- legend('矩形窗','布拉克曼窗')
- subplot(4,3,12);
- plot(w,20*log10(abs(hw1)),w,20*log10(abs(hw6)),':');xlabel('幅频特性');ylabel('dB');
- legend('矩形窗','凯泽窗')
- clear;closeall
- set(gcf,'outerposition',get(0,'screensize'));%最大化显示
- N=21;%阶数
- b=fir1(N,0.25,'low',triang(N+1));n=0:N;%设计FIR数字滤波器系数
- subplot(3,2,1);stem(n,b,'.');
- legend('三角窗')
- xlabel('n');ylabel('h(n)');
- axis([0,21,-0.4,0.5]),line([0,21],[0,0])
- [h,w]=freqz(b,1,256);
- subplot(3,2,2);plot(w/pi,20*log10(abs(h)));
- legend('三角窗');grid
- axis([0,1,-80,0]);xlabel('w/pi');ylabel('幅度(dB)');
- b=fir1(N,0.25,'low',hanning(N+1));n=0:N;%设计FIR数字滤波器系数
- subplot(3,2,3);stem(n,b,'.');
- legend('汉宁窗')
- xlabel('n');ylabel('h(n)');
- axis([0,21,-0.4,0.5]),line([0,21],[0,0])
- [h,w]=freqz(b,1,256);
- subplot(3,2,4);plot(w/pi,20*log10(abs(h)));
- legend('汉宁窗');grid
- axis([0,1,-80,0]);xlabel('w/pi');ylabel('幅度(dB)');
- b=fir1(N,0.25,'low',blackman(N+1));n=0:N;%设计FIR数字滤波器系数
- subplot(3,2,5);stem(n,b,'.');
- legend('布拉克曼窗')
- xlabel('n');ylabel('h(n)');
- axis([0,21,-0.4,0.5]),line([0,21],[0,0])
- [h,w]=freqz(b,1,256);
- subplot(3,2,6);plot(w/pi,20*log10(abs(h)));
- legend('布拉克曼窗');grid
- axis([0,1,-80,0]);xlabel('w/pi');ylabel('幅度(dB)');