今天给大侠带来Vivado经典案例:使用Simulink设计FIR滤波器,话不多说,上货。

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年发布的集成设计环境,随着每季度的按时更新,现已发布最新版本为2019+。目前来看命名规则较为简单,为年份+发布季度。若有比已安装的版本更新的版本发布后,启动vivado后会有版本升级通知,方便用户及时更新版本。总的来说新产品不是特别完善前总会或多或少有一些bug,八年多过去了,已经非常不错了。

大侠,有缘再见!

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

  1. 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. 报名 | IBM苏中:从深蓝到AlphaGo,从大数据到认知商业
  2. springboot + elasticsearch
  3. 阿里达摩院青橙奖再颁发!10名大陆青年科学家各获100万,最小获奖者28岁
  4. Spring中的AOP在Advice方法中获取目标方法的参
  5. python 通登录银行_Python3 适合初学者学习的银行账户登录系统实例
  6. query和prototype库冲突的解决方法
  7. 给程序员的忠告:九种不值得你追随的老板
  8. UISwitch 开关控件—IOS开发
  9. 检测和校准实验室能力认可准则_CNAS-CL01:2018检测和校准实验室能力认可准则之管理体系...
  10. 牛客网–华为机试在线训练9:提取不重复的数
  11. ShortcutMapper 是应用程序的键盘快捷键
  12. Rhinoceros技巧:有关曲线和曲面的分析
  13. android禁止屏幕自动旋转_在android程序中禁止屏幕旋转和避免重启Activity
  14. wine linux安装目录,[Linux]WINE安装教程
  15. 煲耳机,看到一篇文章分享下
  16. 【蓝桥杯】等差素数列
  17. 老男孩MySqI DBA周末班(三期)
  18. 服务器防火墙关闭开机自启解决方案
  19. 电路设计中晶体和晶振的区别
  20. 小米手机系统好牛,真是国产系统的佼佼者

热门文章

  1. 12. 对日企4年的简单反省
  2. 《哈迪斯》经济系统分析
  3. Cadence 16.6 Allegro差分线的蛇形走线
  4. Android 解决MediaPlayer seekTo定位不准确(无需修改关键帧)
  5. SeekBar与MediaPlayer(生命周期)的seekTo()问题
  6. docker-desktop启动k8s
  7. 如果有梦想 就去守护它
  8. stm32和电机开发(直流有刷电机和步进电机)
  9. 回味小时候拿着诺基亚玩的推箱子
  10. 使用Unity+HTC VIVE做VR时如何创建用户体验较强的菜单