matlab中窗函数的使用(二)

来源:互联网 发布:类似于易企秀的软件 编辑:程序博客网 时间:2024/06/04 19:53

一、摘要

这里主要是对窗函数的简单应用做些介绍,是在已知滤波器阶数的情况下,设计滤波器。多数情况下,在不能直接知道滤波器阶数的时候,可参考“http://www.cnblogs.com/sunev/archive/2011/11/23/2260579.html”。

二、MATLAB中的窗函数

(1)矩形窗(Rectangle Window)     调用格式:w=boxcar(n),根据长度 n 产生一个矩形窗 w。

(2)三角窗(Triangular Window)    调用格式:w=triang(n),根据长度 n 产生一个三角窗 w。

(3)汉宁窗(Hanning Window)       调用格式:w=hanning(n),根据长度 n 产生一个汉宁窗 w。

(4)海明窗(Hamming Window)       调用格式:w=hamming(n),根据长度 n 产生一个海明窗 w。

(5)布拉克曼窗(Blackman Window)  调用格式:w=blackman(n),根据长度 n 产生一个布拉克曼窗 w。

(6)恺撒窗(Kaiser Window)        调用格式:w=kaiser(n,beta),根据长度 n 和影响窗函数旁瓣的β参数产生一个恺撒窗w。

 

三、基于窗函数的 FIR 滤波器设计

利用 MATLAB 提供的函数 fir1来实现

调用格式:fir1(n,Wn,’ftype’,Window),n 为阶数、Wn 是截止频率(如果输入是形如[W1 W2]的矢量时,本函数将设计带通/带阻滤波器。

 

[例]设计一个长度为 8 截止频率为0.4π的线性相位 FIR 滤波器。

 

用矩形窗:

Window=boxcar(8);

b=fir1(7,0.4,Window);

freqz(b,1)

 

用blackman窗:

Window=blackman(8);

b=fir1(7,0.4,Window);

freqz(b,1)

 

[例] 设计线性相位带通滤波器,其长度N=15,上下边带截止频率分别为W1= 0.3π,W2=0.5π

Window=blackman(16);

b=fir1(15,[0.3 0.5],Window);

freqz(b,1)


[plain] view plain copy 在CODE上查看代码片派生到我的代码片
  1.   
[plain] view plain copy 在CODE上查看代码片派生到我的代码片
  1. %{  
  2. ---------------------------------------------------------------------------   
[plain] view plain copy 在CODE上查看代码片派生到我的代码片
  1. File:Matlab的窗函数,矩形窗                                 
[plain] view plain copy 在CODE上查看代码片派生到我的代码片
  1. 功能:降低旁瓣水平  
  2. 参数:   
  3. ---------------------------------------------------------------------------   
  4. %}  
  5. %N =51   
  6. %==========================================================================  
  7. %求矩形窗的频率响应图    
  8. %==========================================================================  
  9. W = linspace(-pi,pi,4096);  
  10. wn0 = rectwin(51)   %矩形窗函数   
  11. %20*log10(abs(WN))    
  12. [h1,w0] = freqz(wn0,1,W);   
  13. %subplotfigure(5,1,1);    
  14. subplot(511);  
  15. plot(w0/pi,20*log10(abs(h1/max(h1))));    
  16. axis([-1 1 -100 0]);   
  17. xlabel('归一化频率 /\pi');    
  18. ylabel('20log_{10}|W(e^{j\omega})| /dB');    
  19. title('矩形窗的傅里叶变换');   
  20. set(gca,'YTick',[-100 -80 -60 -40 -20 0])    
  21. set(gca,'XTick',[-1 :0.2: 1])     
  22. %set(gca,'XAxisLocation','top');%设置X轴在上方    
  23. %set(gca,'XAxisLocation','buttom');%设置X轴在下方    
  24. set(gca,'YAxisLocation','left'); %设置Y轴在左方    
  25. text(1,-124,'\pi');%gtext('\pi');  
  26.   
  27. %==========================================================================  
  28. %求三角窗的频率响应图    
  29. %==========================================================================  
  30. wn1 = bartlett(51)  
  31. [h1,w1] = freqz(wn1,1,W);    
  32. %figure(5,1,2);   
  33. subplot(512);  
  34. plot(w1/pi,20*log10(abs(h1/max(h1))));    
  35. %plot(w/pi,20*log10(h1/max(h1))); % 警告: 复数 X 和/或 Y 参数的虚部已忽略   
  36. axis([-1 1 -100 0]);   
  37. xlabel('归一化频率 /\pi');    
  38. ylabel('20log_{10}|W(e^{j\omega})| /dB');   
  39. title('三角窗的傅里叶变换');     
  40. set(gca,'YTick',[-100 -80 -60 -40 -20 0])   
  41. set(gca,'XTick',[-1 :0.2: 1])    
  42. %set(gca,'XAxisLocation','top');%设置X轴在上方    
  43. set(gca,'YAxisLocation','left'); %设置Y轴在左方    
  44. text(1,-124,'\pi');%gtext('\pi');  
  45. %==========================================================================  
  46. %hanning 窗的频率响应图     
  47. %==========================================================================  
  48. wn2 = hanning(51)    
  49. [h1,w2] = freqz(wn2,1,W);    
  50. %figure(5,1,3);   
  51. subplot(513);  
  52. plot(w2/pi,20*log10(abs(h1/max(h1))));    
  53. axis([-1 1 -100 0]);   
  54. xlabel('归一化频率 /\pi');    
  55. ylabel('20log_{10}|W(e^{j\omega})| /dB');    
  56. title('Hanning的傅里叶变换');  
  57. set(gca,'YTick',[-100 -80 -60 -40 -20 0]);    
  58. set(gca,'XTick',[-1 :0.2: 1]);    
  59. %set(gca,'XAxisLocation','top');%设置X轴在上方    
  60. set(gca,'YAxisLocation','left'); %设置Y轴在左方   
  61. text(1,-124,'\pi');%gtext('\pi');  
  62. %==========================================================================  
  63. %hamming 窗的频率响应图      
  64. %==========================================================================  
  65. wn3 = hamming(51)   
  66. [h1,w3] = freqz(wn3,1,W); %离散系统频响特性的函数freqz()  
  67. %figure(5,1,4);    
  68. subplot(514);  
  69. plot(w3/pi,20*log10(abs(h1/max(h1))));   
  70. axis([-1 1 -100 0]);   
  71. xlabel('归一化频率 /\pi');   
  72. ylabel('20log_{10}|W(e^{j\omega})| /dB');    
  73. title('Hamming的傅里叶变换');  
  74. set(gca,'YTick',[-100 -80 -60 -40 -20 0])    
  75. set(gca,'XTick',[-1 :0.2: 1])    
  76. %set(gca,'XAxisLocation','top');%设置X轴在上方    
  77. set(gca,'YAxisLocation','left'); %设置Y轴在左方   
  78. text(1,-124,'\pi');%gtext('\pi');  
  79. %==========================================================================  
  80. %Blackman   wn1 = blackman(51)   
  81. %==========================================================================  
  82. wn4 = blackman(51)  
  83. [h1,w4] = freqz(wn4,1,W);   
  84. %figure(5,1,5);   
  85. subplot(515);  
  86. plot(w4/pi,20*log10(abs(h1/max(h1))));     
  87. axis([-1 1 -100 0]);    
  88. xlabel('归一化频率 /\pi');   
  89. ylabel('20log_{10}|W(e^{j\omega})| /dB');    
  90. title('Blackman的傅里叶变换');   
  91. set(gca,'YTick',[-100 -80 -60 -40 -20 0])   
  92. set(gca,'XTick',[-1 :0.2: 1])   
  93. %set(gca,'XAxisLocation','top');%设置X轴在上方    
  94. set(gca,'YAxisLocation','left'); %设置Y轴在左方   
  95. text(1,-124,'\pi');%gtext('\pi');  


0 0