FIR(Finite Impulse Response)滤波器:有限长单位冲激响应滤波器,又称为非递归型滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。

Vivado自带的FIR滤波器IP核已经很好用,这里借FIR滤波器的设计,介绍Simulink图形设计编程方法。Simulink可以使设计更直观,使硬件资源得到更为高效的利用。

使用vivado的System Generator可以在simulink下快速的通过matlab的强大设计功能设计滤波器。这里使用fdatool设计了一个15阶的FIR滤波器。

软件环境:【vivado2014.2+matlab2013b】

1.  fdatool设计滤波器

通过matlab可以快速的设计滤波器,直接导出滤波器系数,方便大家快速设计。上图使用Kaiser窗函数设计了一个采样率为30.72MHz的15阶8M低通滤波器。File – Export 将设计好的滤波器系数Num导出到Workspace。

2.系数处理

由于系数都是小数,需要重新量化,以充分利用dsp48的精度。

本例直接将系数扩大2^16倍后取整。

Num = { -0.0007 -0.0071 0.0070 0.0287 -0.0305 -0.0827 0.1244 0.4610 0.4610 0.1244 -0.0827 -0.0305 0.0287 0.0070 -0.0071 -0.0007 }

a = round ( Num * 2^16) = { -46 -467 459 1879 -2002 -5418 8152 30211 30211 8152 -5418 -2002 1879 459 -467 -46 }

3. Simulink设计模型

y(n) = h(0)*(x(n)+x(n-15))+h(1)*(x(n-1)+x(n-14))+h(2)*(x(n-2)+x(n-13))+h(3)*(x(n-3)+x(n-12))+h(4)*(x(n-4)+x(n-11))+h(5)*(x(n-5)+x(n-10))+h(6)*(x(n-6)+x(n-9))+h(7)*(x(n-7)+x(n-8))

利用FIR滤波器系数的对称性,采用折叠方式,可节省一半的DSP48用量,考虑到7系的DSP48普遍可以跑到200-300MHz,如信号采样率低的话,可以采用多路复用的方式大量节省DSP使用量,若只有一路信号也可以采用提高工作时钟的方式减少DSP使用量。空间与时间的相互关系,在这里表现的淋漓尽致。

模型设计的时候特别需要注意每个模块的时延,时延一定要计算清楚。

上图设计的fir滤波器,DSP的PCIN输入为上一级DSP的PCOUT信号,这样做的目的是充分利用DSP的快速进位链,使实现变得容易。最后一拍数据直接使用的DSP的P端输出。

4. 模型仿真

为设计好的模型增加一个顶层,添加两个信号源作为仿真激励,使用两个频谱分析仪观测结果。

由滤波器幅值响应图可知,当信号采样率为245.76MHz时(提升了8倍),通带(原为5M提升8倍为40MHz)内信号抖动为0.03db以内,此滤波器对100MHz(对应图中12.5MHz)的抑制能力为-61db。

测试使用两个幅度相同、频率不同的正弦信号(25M与100M)相加作为信号输入,使用频谱分析仪观测FIR模型输出,开始仿真观测频谱仪信号。

上面左图为滤波器输入信号,右图为滤波器输出信号。观测可知此滤波器对25MHz信号功率没有影响,对100MHz信号衰减了约60db左右,将图放大可知输入100MHz功率为83.2dbm输出为21.6dbm,衰减了61.2db。由此可知与fdatool设计的滤波器性能相同。
 
xilinx在新版本的vivado中将simulink中的WaveScope删掉了,信号观测方式换为和vivado debug相同的窗口,更为灵活和人性化。添加信号的方式更为简单,选择好需要观测的信号后直接右键单击Xilinx Add to Viewer。这时启动仿真将自动打开vivado的Waveform窗口,可以在时域上观察每一个点的数据。

上图为单个25M正弦波作为激励信号的模型输入和输出信号。当前光标位置输入数据为1025,此fir滤波器时域上对信号有19个周期的延迟,19个周期后的数据为1024,那么20lg(1025/1024)=0.008db 抖动小于通带内抖动值0.03db。

通过将输入信号改为脉冲信号,脉冲宽度为1个周期,此时可观测到此fir滤波器的冲击响应。

经过以上步骤,基本验证此滤波器的设计能够达到需求。

5. 将模型导入到vivado工程

System Generator提供了几种导入方法:

1、  直接生成hdl网表文件。

生成的.v或.vhd文件直接例化dsp的IP核,用户可直接将代码文件添加至自己的工程内。就好像模型是自己用代码完成的一样。

2、  以IP核形式生成IP。

添加IP信息,生成IP核。用户以IP核的形式直接调用。

3、  Synthesized Checkpoint形式生成网表文件(推荐)。

选择此项,用户可直接在simulink下综合出网表和约束文件,打包至.dcp文件中,用户可在vivado下直接加载dcp文件调用模型。

4、  直接在vivado中添加模型文件(推荐)。

Vivado的Add source中可选择Add or Create DSP Sources,直接将模型文件(.mdl或.slx)添加至工程中,综合的时候,系统将自动调用matlab分析模型文件,自动生成需要HDL文件。效果等同于自动操作的方法1,缺点是使用此方法综合工程必须装有对应版本的matlab。

写在最后:

Vivado设计套件,赛灵思公司2012年发布的集成设计环境,随着每季度的按时更新,现已发布最新版本为2014.2。目前来看命名规则较为简单,为年份+发布季度。若有比已安装的版本更新的版本发布后,启动vivado后会有版本升级通知,方便用户及时更新版本。总的来说新产品不是特别完善前总会或多或少有一些bug,两年多过去了,相信已经非常稳定了。

7系列芯片总的构架都一样,用户可以非常方便的在Aritix7、Kintex7、Virtex7系列之间移植设计。在这必须说明的是vivado只支持7系列及以后的片子,或许构架的原因让大量的spartan-6用户未免有些遗憾。不过好消息是在2013.4版本中就见到了Aritix7系列的小容量芯片,应该很快就会面世。习惯了Spartan6的用户可以开始考虑Aritix7了,未来低端是Aritix的天下,另外使用7系列以后就可以使用强大了Vivado了。

Vivado经典案例——使用Simulink设计FIR滤波器相关推荐

  1. Vivado经典案例:使用Simulink设计FIR滤波器

    今天给大侠带来Vivado经典案例:使用Simulink设计FIR滤波器,话不多说,上货. FIR(Finite Impulse Response)滤波器:有限长单位冲激响应滤波器,又称为非递归型滤波 ...

  2. matlab凯塞窗设计,转载:用MATLAB设计FIR滤波器的方法解析

    介绍了利用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法:程序设计法.FDATool设计法和SPTool设计法,给出了详细的设计步骤,并将设计的滤波器应用到一个混和正弦波信号,以验证滤波器的 ...

  3. fir fpga 不同截止频率_用MATLAB设计FIR滤波器的方法

    用MATLAB设计FIR滤波器的方法 摘  要 介绍了利用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法:程序设计法.FDATool设计法和SPTool设计法,给出了详细的设计步骤,并将设计 ...

  4. 数字滤波器(六)--设计FIR滤波器

    设计FIR滤波器 引 1. 线性相位FIR滤波器 1.1 相位与特点 1.2 幅度函数的特点 1.3 FIR滤波器的零点 2. 窗函数设计法 2.1 窗函数设计原理 2.2 窗函数的设计思路 2.3 ...

  5. 数字信号处理实验4:用窗口法设计FIR滤波器

    杭电_数字信号处理课程设计_实验4 一.实验目的 了解一个实际滤波器设计过程,加深掌握用窗口法设计FIR滤波器的原理和窗函数对滤波器性能的影响. 二.实验要求及内容 实验题目: 1.用改进余弦窗设计一 ...

  6. matlab fir滤波器程序,使用MATLAB设计FIR滤波器

    1.      采用fir1函数设计,fir1函数可以设计低通.带通.高通.带阻等多种类型的具有严格线性相位特性的FIR滤波器.语法形式: b = fir1(n, wn) b = fir1(n, wn ...

  7. 切比雪夫逼近法设计FIR滤波器

    切比雪夫逼近法设计FIR滤波器 概念 切比雪夫逼近法,是在所需要的区间[a,b]内,使误差函数E(x)=|p(x)-f(x)|较均匀一致,并且通过合理选择p(x),使E(x)的最大值En达到最小. 切 ...

  8. matlab 滤波窗函数,Matlab窗函数设计FIR滤波器

    一.设计目的 1.熟悉FIR滤波器设计的基本方法. 2.掌握用窗函数设计FIR滤波器的基本原理和方法,熟悉MATLAB语言. 3.熟悉线性相位FIR滤波器的幅频特性和相位特性. 4.了解各种不同窗函数 ...

  9. matlab 设计出滤波器使用,用MATLAB设计FIR滤波器的方法解析

    介绍了利用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法:程序设计法.FDATool设计法和SPTool设计法,给出了详细的设计步骤,并将设计的滤波器应用到一个混和正弦波信号,以验证滤波器的 ...

最新文章

  1. stm32显示flash下载失败_STM32大神笔记,超详细单片机学习汇总资料(干货分享4)...
  2. Android Service的onStartCommand返回值用法
  3. mysql查看执行计划_如何查看MySQL的执行计划
  4. 20145233《网络对抗》Exp8 Web基础
  5. 安装mysql出现由于找不到VCRUNTIME140_1.dll,无法继续执行代码,请重新安装程序
  6. 最小二乘法拟合非线性函数及其Matlab/Excel 实现(转)
  7. 广州 office365的开发者训练营交流活动简报
  8. VS2015开发Android,自带模拟器无法调试、加载程序,算是坑吗
  9. ffmpeg yuv数据存储方式_一文理解 YUV
  10. zebradesginer zpl代码_Zebra斑马打印机通过VB编程实现ZPL代码控制打印标签
  11. 链路聚合_链路聚合的配置命令
  12. 项目沟通:小故事中的大道理
  13. 企业为什么要构建双活数据中心?F5怎么样?
  14. 不知足者常乐:SAP云在中国的落地
  15. php todo和其他备注,帮助 | 高效ToDo
  16. Python删除txt文件指定行
  17. IntelliJ IDEA 2020.3.3 遇到Cannot resolve table ‘goods’
  18. 【荐】联通域名纠错 联通域名DNS劫持 您输入的域名有误或站点访问失败
  19. 【PCB开源分享】STC32G12K128/STC8H8K64U开发板
  20. 海康威视硬盘录像机无法删除通道问题

热门文章

  1. 张高兴的 .NET Core IoT 入门指南:(四)使用 SPI 进行通信
  2. matlab计算欧式距离代码,欧式距离计算公式
  3. Oracle例外表学习笔记
  4. 【Python习题】面向对象的人机猜拳小游戏
  5. 人人都能买得起的百万医疗保险:蚂蚁保险好医保长期医疗和平安e生保怎么样?哪个好?
  6. lnmp mysql启动不起来_LNMP常见问题
  7. 赛马网ACM试题(原杭电oj ACM)java版答案(1000,10001,1002)
  8. 儿知错父之过下一句_谚语父之过的上一句是什么,“子不孝父之过”的下半句是什么?...
  9. 由浅入深 65个JS常考面试题
  10. Java架构直通车——大型网站的特点与设计宗旨