MATLAB滤波器

Code:
  1. %窗函数法设计FIR低通滤波器
  2. clear;closeall
  3. N=45;wc=pi/4;
  4. n=0:N-1;r=(N-1)/2;
  5. hdn=sin(wc*(n-r))/pi./(n-r);%计算理想低通单位脉冲响应
  6. ifrem(N,2)~=0hdn(r+1)=wc/pi;end%N为奇数时,处理n=r点的0/0型
  7. wn1=boxcar(N);%矩形窗
  8. hn1=hdn.*wn1';%加窗
  9. %以上两条语句可代以fir函数:hn1=fir1(N-1,wc/pi,boxcar(N));
  10. wn2=hamming(N);%hamming窗
  11. hn2=hdn.*wn2';%加窗
  12. wn3=triang(N);%triang窗
  13. hn3=hdn.*wn3';%加窗
  14. wn4=hanning(N);%hanning(窗
  15. hn4=hdn.*wn4';%加窗
  16. wn5=blackman(N);%blackman窗
  17. hn5=hdn.*wn5';%加窗
  18. wn6=kaiser(N,5.658);%kaiser窗
  19. hn6=hdn.*wn6';%加窗
  20. %以上两条语句可代以fir函数:hn2=fir1(N-1,wc/pi,hamming(N));k=3
  21. [hw1,w]=freqz(hn1,1);
  22. [hw2,w]=freqz(hn2,1);
  23. [hw3,w]=freqz(hn3,1);
  24. [hw4,w]=freqz(hn4,1);
  25. [hw5,w]=freqz(hn5,1);
  26. [hw6,w]=freqz(hn6,1);
  27. %显示最大化
  28. set(gcf,'outerposition',get(0,'screensize'));
  29. %显示窗函数
  30. subplot(4,3,1);stem(n,hn1,'.');xlabel('矩形窗系数序列');ylabel('h(n1)');
  31. subplot(4,3,2);stem(n,hn2,'.');xlabel('海明窗系数序列');ylabel('h(n2)');
  32. subplot(4,3,3);stem(n,hn3,'.');xlabel('三角窗系数序列');ylabel('h(n1)');
  33. subplot(4,3,4);stem(n,hn4,'.');xlabel('汉宁窗系数序列');ylabel('h(n2)');
  34. subplot(4,3,5);stem(n,hn5,'.');xlabel('布拉克曼窗系数序列');ylabel('h(n1)');
  35. subplot(4,3,6);stem(n,hn6,'.');xlabel('凯泽窗系数序列');ylabel('h(n2)');
  36. %频域相应
  37. %subplot(4,3,7);plot(w,abs(hw1),w,abs(hw2),':');xlabel('幅频特性');ylabel('│H(w1)│');
  38. %legend('矩形窗','海明窗')
  39. %单位为db的频域相应
  40. subplot(4,3,7);
  41. plot(w,20*log10(abs(hw1)),w,20*log10(abs(hw1)),':');xlabel('幅频特性');ylabel('dB');
  42. legend('矩形窗','矩形窗')
  43. subplot(4,3,8);
  44. plot(w,20*log10(abs(hw1)),w,20*log10(abs(hw2)),':');xlabel('幅频特性');ylabel('dB');
  45. legend('矩形窗','海明窗')
  46. subplot(4,3,9);
  47. plot(w,20*log10(abs(hw1)),w,20*log10(abs(hw3)),':');xlabel('幅频特性');ylabel('dB');
  48. legend('矩形窗','三角窗')
  49. subplot(4,3,10);
  50. plot(w,20*log10(abs(hw1)),w,20*log10(abs(hw4)),':');xlabel('幅频特性');ylabel('dB');
  51. legend('矩形窗','汉宁窗')
  52. subplot(4,3,11);
  53. plot(w,20*log10(abs(hw1)),w,20*log10(abs(hw5)),':');xlabel('幅频特性');ylabel('dB');
  54. legend('矩形窗','布拉克曼窗')
  55. subplot(4,3,12);
  56. plot(w,20*log10(abs(hw1)),w,20*log10(abs(hw6)),':');xlabel('幅频特性');ylabel('dB');
  57. legend('矩形窗','凯泽窗')

Code:
  1. clear;closeall
  2. set(gcf,'outerposition',get(0,'screensize'));%最大化显示
  3. N=21;%阶数
  4. b=fir1(N,0.25,'low',triang(N+1));n=0:N;%设计FIR数字滤波器系数
  5. subplot(3,2,1);stem(n,b,'.');
  6. legend('三角窗')
  7. xlabel('n');ylabel('h(n)');
  8. axis([0,21,-0.4,0.5]),line([0,21],[0,0])
  9. [h,w]=freqz(b,1,256);
  10. subplot(3,2,2);plot(w/pi,20*log10(abs(h)));
  11. legend('三角窗');grid
  12. axis([0,1,-80,0]);xlabel('w/pi');ylabel('幅度(dB)');
  13. b=fir1(N,0.25,'low',hanning(N+1));n=0:N;%设计FIR数字滤波器系数
  14. subplot(3,2,3);stem(n,b,'.');
  15. legend('汉宁窗')
  16. xlabel('n');ylabel('h(n)');
  17. axis([0,21,-0.4,0.5]),line([0,21],[0,0])
  18. [h,w]=freqz(b,1,256);
  19. subplot(3,2,4);plot(w/pi,20*log10(abs(h)));
  20. legend('汉宁窗');grid
  21. axis([0,1,-80,0]);xlabel('w/pi');ylabel('幅度(dB)');
  22. b=fir1(N,0.25,'low',blackman(N+1));n=0:N;%设计FIR数字滤波器系数
  23. subplot(3,2,5);stem(n,b,'.');
  24. legend('布拉克曼窗')
  25. xlabel('n');ylabel('h(n)');
  26. axis([0,21,-0.4,0.5]),line([0,21],[0,0])
  27. [h,w]=freqz(b,1,256);
  28. subplot(3,2,6);plot(w/pi,20*log10(abs(h)));
  29. legend('布拉克曼窗');grid
  30. axis([0,1,-80,0]);xlabel('w/pi');ylabel('幅度(dB)');

你可能感兴趣的:(matlab)