引言:数字滤波器是语音与图像处理、模式识别、雷达信号处理、频谱分析等应用中的一种基本的处理部件,它能满足波器对幅度和相位特性的严格要求,避免模拟滤波器所无法克服的电压漂移、温度漂移和噪声等问题。有限冲激响应(FIR)滤波器能在设计任意幅频特性的同时保证严格的线性相位特性。

  一、FIR数字滤波器

  FIR滤波器用当前和过去输入样值的加权和来形成它的输出,如下所示的前馈差分方程所描述的。

  FIR滤波器又称为移动均值滤波器,因为任何时间点的输出均依赖于包含有最新的M个输入样值的一个窗。由于它的响应只依赖于有限个输入,FIR滤波器对一个离散事件冲激有一个有限长非零响应,即一个M阶FIR滤波器对一个冲激的响应在M个时钟周期之后为零。

  FIR滤波器可用图1所示的z域块图来描述。

  其中每个标有z-1的方框都代表了有一个时钟周期延时的寄存器单元。这个图中标出了数据通道和必须由滤波器完成的操作。滤波器的每一级都保存了一个已延时的输入样值,各级的输入连接和输出连接被称为抽头,并且系数集合{hk}称为滤波器的抽头系数。一个M阶的滤波器有M+1个抽头。通过移位寄存器

用每个时钟边沿n(时间下标)处的数据流采样值乘以抽头,并且求和得到输出yFIR[n]。滤波器的加法和乘法必须足够快,在下一个时钟来到之前形成y[n]。并且在每一级中都必须测量它们的大小以适应他们数据通道的宽度。在要求精度的实际应用中,Lattice结构可以减少有限字长的影响,但增加了计算成本。一般的目标是尽可能快地滤波,以达到高采样率。通过组合逻辑的最长信号通路包括M级加法和一级乘法运算。FIR结构指定机器的每一个算术单元有限字长,并且管理运算过程中数据流。

  二、FIR数字滤波器设计的实现

  目前FIR滤波器的实现方法有三种:利用单片通用数字滤波器集成电路、DSP器件和可编程逻辑器件实现。单片通用数字滤波器使用方便,但由于字长和阶数的规格较少,不能完全满足实际需要。使用DSP器件实现虽然简单,但由于程序顺序执行,执行速度必然不快。FPGA/CPLD有着规整的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理任务,相对于串行运算为主导的通用DSP芯片来说,其并行性和可扩展性更好。但长期以来,FPGA/CPLD一直被用于系统逻辑或时序控制上,很少有信号处理方面的应用,其原因主要是因为在FPGA/CPLD中缺乏实现乘法运算的有效结构。

  现在的FPGA产品已经能够完全胜任这种任务了。其中Altera公司的Stratix系列产品采用1.5V内核,0.13um全铜工艺制造,它除了具有以前Altera FPGA芯片的所有特性外,还有如下特点:芯片内有三种RAM块,即512bit容量的小RAM(M512)、4KB容量的标准RAM(M4K) 、512KB的大容量RAM(MegaRAM)。内嵌硬件乘法器和乘加结构的DSP块,适于实现高速信号处理;采用全新的布线结构,分为三种长度的行列布线,在保证延时可预测的同时增加布线的灵活性;增加片内终端匹配电阻,提高信号完整性,简化PCB布线;同时具有时钟管理和锁相环能力。

  FIR滤波器的Verilog HDL设计实例

  1、设计意图

  本例主要是在Stratix器件内实现基本有限脉冲响应滤波器。

  FIR的基本结构包括一系列的乘法和加法。FIR的运算可用式(1)的方程描述,现重写如下:

  一个L=8的FIR设计如图2,利用了输入的8个样本。因此称之为8抽头滤波器。该结构是有一个移位寄存器,乘法器和加法器组成的,可实现L=8阶的FIR。其数据通道必须足够宽,以适应乘法器和加法器的输出。这些采样值被编码为有限字长的形式,然后通过M个寄存器并行移动。可见用一个MAC级连链就可以构成这种机器。每个寄存器提供一个单位样本内延迟。这些延迟输入与各自的系数相乘,然后叠加得到输出。图2所示为基于MAC的8阶FIR数字滤波器结构

  在该设计中有八个抽头,各抽头有18位输入和滤波器系数。由于一个DSP块可以支持4个18位输入的分支,所以设计需要2个DSP块。输入数据串行加载到DSP块中,DSP内部的移入/移出寄存器链用于产生延迟。滤波器系数从TriMatrix™ 的ROM存储器中加载。

2、Verilog HDL代码编写风格

  HDL代码编写应该具有很好的易读性和可重用性,而自顶向下的分割方法可以帮助我们达到最佳的结果。HDL代码在达到功能的情况下要尽可能的简洁,尽量避免使用带有特殊库单元的实例,因为这样会使得整个进程变得不可靠。

  在本设计中,我们将设计划分成一个顶级文件和三个次级文件,并且调用了QuartusII中的MegaFunction功能辅助完成整个设计。

  图3显示FIR滤波器的顶级方块图

  表1:FIR滤波器的设计范例的端口列表

      3、验证仿真

  完全可综合设计的一个优点就是同样的HDL代码能够用于验证和综合。在使用HDL代码之前必须要验证设计的功能,最好且最简单的方法就是利用验证工具,其次是利用仿真工具作有目的的仿真。

  QuartusII内部带有仿真器,只要通过建立正确的Vector Waveform File(向量波形文件)就可以开始仿真了。图4所示为QuartusII内部仿真器得到的8阶FIR的脉冲响应波形。

  五、结论

  利用Verilog HDL设计数字滤波

器的最大优点就是可使设计更加灵活。比较硬件电路图设计,Verilog HDL语言设计的参数可以很容易在Verilog程序中更改,通过综合工具的简化和综合即可以得到电路图,其效率要高出利用卡诺图进行人工设计许多。而且编译过程也非常简单高效。优秀编码风格能够在综合过程中节省芯片使用的单元,从而降低设计成本。

  参考文献:

  [1]. 夏宇闻。VerilogHDL数字系统设计教程,北京航空航天大学出版社,北京. 2003.

  [2]. Altera Corporation. Introduction to QuartusII. 2003

  [3]. Michael D. Ciletti. Advanced Digital Design with Verilog HDL. Prentice Hall, NJ.2005.

  [4].彭保等.基于VerilogHDL的FPGA设计. 微计算机信息, 2004年第20卷第10期

(多图) 基于Verilog HDL的FIR数字滤波器设计与仿真相关推荐

  1. (多图) 基于FPGA的FIR数字滤波器设计与仿真

    1 引言 实现数字化是控制系统的重要发展方向,而数字信号处理已在通信.语音.图像.自动控制.雷达.军事.航空航天等领域广泛应用.数字信号处理方法通常涉及变换.滤波.频谱分析.编码解码等处理.数字滤波是 ...

  2. 基于Verilog HDL的数字秒表、波形发送器等设计

    基于Verilog HDL的数字秒表设计 一.EDA 二.基于Verilog HDL的数字秒表设计 1. 用Verilog HDL设计一个数字跑表,所需引脚和功能如下所示: 2.代码示例 3. 结果: ...

  3. 用MATLAB设计FIR数字滤波器实验,基于Matlab的FIR数字滤波器设计

    摘要:提出FIR敷字滤波器的设计方案,并基于Matlab实现滤波仿真.通过使用Matlab信号处理工具箱提供的函数,选择适当的窗函数编写程序,其中窗函数按照实际信号的处理需求,参数折中选择.实验获得了 ...

  4. 基于等波纹最佳逼近法的FIR数字滤波器实现matlab仿真

    目录 一.理论基础 二.案例背景 三.MATLAB核心代码 四.仿真结论分析 一.理论基础 等波纹最佳逼近法,其本质是一种优化算法,该方法有效克服了基于窗函数的FIR滤波器设计方法以及基于频率抽样的F ...

  5. 基于Verilog HDL的数字时钟

    目录 一.实验目的 二.实验概述 三.实验过程 一.实验目的 1.学习相关的设计方法及原理 2.学习设计方法 二.实验概述 基于Verilog HDL设计一个时钟 三.实验过程 新建一个工程 选择芯片 ...

  6. 巴特列特窗的matlab代码,基于MATLAB的FIR数字滤波器设计与优化分析.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspmatlab 基于MATLAB的FIR数字滤波器设计与优化分析. ...

  7. 基于matlab fir数字滤波器设计 程序流程图,实验五:FIR数字滤波器设计与软件实现...

    实验五:FIR 数字滤波器设计与软件实现 一.实验目的 (1)掌握用窗函数法设计FIR 数字滤波器的原理和方法. (2)掌握用等波纹最佳逼近法设计FIR 数字滤波器的原理和方法. (3)掌握FIR 滤 ...

  8. matlab4fsk软件解调代码,4fsk调制与解调基于Verilog HDL语言

    [实例简介] 4fsk调制与解调基于Verilog HDL语言 [实例截图] [核心代码] 4fsk调制与解调基于VerilogHDL语言 └── kechengsheji ├── dac0832(1 ...

  9. FIR数字滤波器设计(中)

    今天给大侠带来FIR数字滤波器设计,由于篇幅较长,分三篇.今天带来第二篇,FIR数字滤波器设计基础,包括FIR数字滤波器的特点.线性相位条件以及基本结构.话不多说,上货. 数字滤波器的输入输出均为数字 ...

最新文章

  1. Migo估价记录不存在
  2. 汇编语言王爽第二版-课后答案以及解析
  3. 野火Linux开发板接入华为云,Huawei_LiteOS——STM32F1移植(野火开发板)
  4. pipline中替换tag变量
  5. 配色方案专辑上线,宠溺设计师的好素材!
  6. 23种设计模式(六)单一职责之桥模式
  7. ARM 和 RISC-V 公然开撕,GNOME 之父指责 ARM
  8. c语言putchar_C语言写一个小程序,胖胖的爱心桃
  9. 卡巴斯基终身免费用的方法
  10. CMake | include_guard命令详解
  11. 中选择语句如何并列_如何做好诗歌鉴赏中的选择题
  12. MyEclipse小结
  13. StarUML用户手册
  14. 如何通过URL打开图片(Python)
  15. RAID磁盘阵列详解and软阵列(raid0,raid1,raid5,raid1+0 热备盘)配置实验
  16. 做网站申请域名有什么方法?
  17. VS 断点不会命中的情况
  18. VCS产生vpd波形文件
  19. 古典密码学与现代密码学
  20. 通过FTP以及SMB实现电脑,手机,ipad的文件同步访问

热门文章

  1. 踢毽也能治胃病,适当的运动带来健康,健康带来快乐
  2. python函数中参数前面的*和**的含义
  3. SpringMVC实现文件的上传和下载
  4. rabbitmq的整体架构一览
  5. 如何退出Activity?如何安全退出已调用多个Activity的Application?
  6. MVC中一个表单实现多个提交按钮(一个action搞定添删改)
  7. Mocha BSM产品亮点——关联事件分析
  8. Fedora 30系统的升级方法
  9. iOS 11.3立春后发布,电量用得快的人千万别升级!
  10. 【WPF】使用控件MediaElement播放视频