FIR滤波器的设计和仿真

 主要参照杜勇老师的《数字调制解调技术的MATLAB与FPGA实现》,在这里记录一下,并记录出现的问题

1、先根据系统所需要的FIR滤波器的参数在Matlab中设计出FIR的参数,保存到txt文件内。
程序如下:
  %E4_5_LpfDesign.m  
  %设计一个低通滤波器。采样频率fs=8MHz,过渡带fc=[1MHz 2MHz];
  %绘出滤波器第数量化前后的幅频响应图;将量化后的滤波器系数写入指定的txt文本文件中
  function h_pm=LpfDesign
  fs=12.5*10^6;          %采样频率
  qm=12;                 %滤波器系数量化位数
  fc=[2.5*10^6 3*10^6];  %过渡带
  mag=[1 0];             %窗函数的理想滤波器幅度
  %设置通带容限a1及阻带容限a2
  %通带衰减ap=-20*log10(1-a1)=0.915dB,阻带衰减为as=-20*log10(a2)=40dB
  a1=0.1;a2=0.01;
  dev=[a1 a2];
  %采用凯塞窗函数获取满足要求的最小滤波器阶数
  %因为凯塞窗具有可调选项,因此可以根据过渡带和波纹参数等计算出凯塞窗的β值和滤波器阶数
  %n:阶数     Wn:归一化频带边缘      beta:Kaiser窗beta参数   ftype:滤波器类型用于fir1函数
  [n,wn,beta,ftype] = kaiserord(fc,mag,dev,fs) 
 
  %采用firpm函数设计最优滤波器
  %因为用firpm函数(最优滤波器)和凯塞窗和海明窗滤波器比较,第一旁瓣电平比凯塞窗约低2.5db,且阻带波纹相同,而凯塞窗的阻带波纹却逐渐减少
  fpm=[0 fc(1)*2/fs fc(2)*2/fs 1];  %firpm函数的频段向量
  magpm=[1 1 0 0];                  %firpm函数的幅值向量 
  h_pm=firpm(n,fpm,magpm);          %设计最优滤波器
 
  %量化滤波系数
  a=abs(h_pm);
  b=max(a);
  c=h_pm/b;
  q_pm=round(h_pm/max(abs(h_pm))*(2^(qm-1)-1));
 
  %将生成的滤波器系数数据写入FPGA所需的txt文件中
  fid=fopen('E:\毕设\4、code\2、FIR\FIR滤波器_YH\MATLAB图例\lpf.txt','w');
  for k=1:length(h_pm)
       fprintf(fid,'%12.12f\r\n',h_pm);
       if(k~=length(h_pm))
          fprintf(fid,'\r\n');
       end
  end
  fclose(fid);
 
  %获取量化前后滤波器的幅频响应数据
  m_pm=20*log10(abs(fft(h_pm,1024)));   m_pm=m_pm-max(m_pm);
  q_pm=20*log10(abs(fft(q_pm,1024)));   q_pm=q_pm-max(q_pm);
 
  %设置幅频响应的横坐标单位为MHz
  x_f=[0:(fs/length(m_pm)):fs/2]/10^6;  
  %只显示正频率部分的幅频响应
  mf_pm=m_pm(1:length(x_f));
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值