FIR滤波器的设计和仿真

论坛 期权论坛     
选择匿名的用户   2021-5-30 19:46   186   0
<div class="blogpost-body" id="cnblogs_post_body">
<p> 主要参照杜勇老师的《数字调制解调技术的MATLAB与FPGA实现》,在这里记录一下,并记录出现的问题</p>
<div>
  <strong><span style="font-size:14pt;">1、先根据系统所需要的FIR滤波器的参数在Matlab中设计出FIR的参数,保存到txt文件内。</span></strong>
</div>
<div>
  程序如下:
</div>
<div>
  <div>
     %E4_5_LpfDesign.m  
  </div>
  <div>
     %设计一个低通滤波器。采样频率fs&#61;8MHz,过渡带fc&#61;[1MHz 2MHz];
  </div>
  <div>
     %绘出滤波器第数量化前后的幅频响应图;将量化后的滤波器系数写入指定的txt文本文件中
  </div>
  <div>
     function h_pm&#61;LpfDesign
  </div>
  <div>
     fs&#61;12.5*10^6;          %采样频率
  </div>
  <div>
     qm&#61;12;                 %滤波器系数量化位数
  </div>
  <div>
     fc&#61;[2.5*10^6 3*10^6];  %过渡带
  </div>
  <div>
     mag&#61;[1 0];             %窗函数的理想滤波器幅度
  </div>
  <div>
     %设置通带容限a1及阻带容限a2
  </div>
  <div>
     %通带衰减ap&#61;-20*log10(1-a1)&#61;0.915dB,阻带衰减为as&#61;-20*log10(a2)&#61;40dB
  </div>
  <div>
     a1&#61;0.1;a2&#61;0.01;
  </div>
  <div>
     dev&#61;[a1 a2];
  </div>
  <div>
     %采用凯塞窗函数获取满足要求的最小滤波器阶数
  </div>
  <div>
     %因为凯塞窗具有可调选项,因此可以根据过渡带和波纹参数等计算出凯塞窗的β值和滤波器阶数
  </div>
  <div>
     %n:阶数     Wn:归一化频带边缘      beta:Kaiser窗beta参数   ftype:滤波器类型用于fir1函数
  </div>
  <div>
     [n,wn,beta,ftype] &#61; kaiserord(fc,mag,dev,fs)
  </div>
  <div>
   
  </div>
  <div>
     %采用firpm函数设计最优滤波器
  </div>
  <div>
     %因为用firpm函数(最优滤波器)和凯塞窗和海明窗滤波器比较,第一旁瓣电平比凯塞窗约低2.5db,且阻带波纹相同,而凯塞窗的阻带波纹却逐渐减少
  </div>
  <div>
     fpm&#61;[0 fc(1)*2/fs fc(2)*2/fs 1];  %firpm函数的频段向量
  </div>
  <div>
     magpm&#61;[1 1 0 0];                  %firpm函数的幅值向量
  </div>
  <div>
     h_pm&#61;firpm(n,fpm,magpm);          %设计最优滤波器
  </div>
  <div>
   
  </div>
  <div>
     %量化滤波系数
  </div>
  <div>
     a&#61;abs(h_pm);
  </div>
  <div>
     b&#61;max(a);
  </div>
  <div>
     c&#61;h_pm/b;
  </div>
  <div>
     q_pm&#61;round(h_pm/max(abs(h_pm))*(2^(qm-1)-1));
  </div>
  <div>
   
  </div>
  <div>
     %将生成的滤波器系数数据写入FPGA所需的txt文件中
  </div>
  <div>
   <span style="color:#ff0000;">  fid&#61;fopen(&#39;E:\毕设\4、code\2、FIR\FIR滤波器_YH\MATLAB图例\lpf.txt&#39;,&#39;w&#39;);</span>
  </div>
  <div>
   <span style="color:#ff0000;">  for k&#61;1:length(h_pm)</span>
  </div>
  <div>
   <span style="color:#ff0000;">       fprintf(fid,&#39;%12.12f\r\n&#39;,h_pm);</span>
  </div>
  <div>
   <span style="color:#ff0000;">       if(k~&#61;length(h_pm))</span>
  </div>
  <div>
   <span style="color:#ff0000;">          fprintf(fid,&#39;\r\n&#39;);</span>
  </div>
  <div>
   <span style="color:#ff0000;">       end</span>
  </div>
  <div>
   <span style="color:#ff0000;">  end</span>
  </div>
  <div>
   <span style="color:#ff0000;">  fclose(fid);</span>
  </div>
  <div>
   
  </div>
  <div>
     %获取量化前后滤波器的幅频响应数据
  </div>
  <div>
     m_pm&#61;20*log10(abs(fft(h_pm,1024)));   m_pm&#61;m_pm-max(m_pm);
  </div>
  <div>
     q_pm&#61;20*log10(abs(fft(q_pm,1024)));   q_pm&#61;q_pm-max(q_pm);
  </div>
  <div>
   
  </div>
  <div>
     %设置幅频响应的横坐标单位为MHz
  </div>
  <div>
     x_f&#61;[0:(fs/length(m_pm)):fs/2]/10^6;  
  </div>
  <div>
     %只显示正频率部分的幅频响应
  </div>
  <div>
     mf_pm&#61;m_pm(1:length(x_f));
  </div>
  <div>
     mf_qm&#61;q_pm(1:length(x_f));
  </div>
  <div>
   
  </div>
  <div>
     %绘制幅频响应曲线
  </div>
  <div>
     plot(x_f,mf_pm,&#39;--&#39;,x_f,mf_qm,&#39;-&#39;);
  </div>
  <div>
     xlabel(&#39;频率(MHz)&#39;);ylabel(&#39;幅度(dB)&#39;);
  </div>
  <div>
     legend(&#39;未量化&#39;,&#39;12位量化&#39;);
  </div>
  <div>
     grid;
  </div>
  <div>
   <img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-6cfde23f5fb45d5ba8c31f4482d98399.png">
   <p></p>
  </div>
  <div>
   上边红色部分:需要注意的就是最后一个系数后面不能有回车,否则导入系数文件的时候又会被FIR Complier识别为一个新的系数。
  </div>
  <div>
   
  </div>
  <div>
   <div>
    <span style="font-size:14pt;"><strong>2、产生测试激励信号文件</strong></span>
   </div>
   <div>
      clear all;clc;
   </div>
   <div>
      Fs&#61;12500000;%设定采样频率
   </div>
   <div>
      f1&#61;2500000;%信号频率 2.5MHZ
   </div>
   <div>
      f2&#61;3100000;%信号频率 3.1MHZ
   </div>
   <div>
      N&#61;12; %量化位数
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP