如何用用FPGA实现FIR滤波器

如何用用FPGA实现FIR滤波器,第1张

如何用用FPGA实现FIR滤波器

你接到要求用FPGA实现FIR滤波器的任务时,也许会想起在学校里所学的FIR基础知识,但是下一步该做什么呢?哪些参数是重要的?做这个设计的最佳方法是什么?还有这个设计应该怎样在FPGA中实现?现在有大量的低成本IP核和工具来帮助你进行设计,因为FIR是用FPGA实现的最普通的功能。

  基础和主要参数

  也许你在听FIR滤波器课时不够专注。这里做一个快速的复习,最简单的形式是, FIR 滤波器的输出 y(n)是求采样数据x(n) 的N个输入的平均值。 存储的每个采样称为抽头。 当然大多数设计都比这个复杂, 要提供优化的滤波器 特性,要用系数乘 每个抽头, 或者对 h(i) 进行加权。

 如何用用FPGA实现FIR滤波器,第2张

  图1 典型的FIR滤波器结构(完全并行)

  用于FIR滤波器的主要参数是通带、阻带、阻带衰减和通带波纹。对于某些应用,阻带波纹也许是重要的和规定的。然而对大多数应用,阻带衰减是适当的。还有输入采样率,以及与输入数据分辨率一起的所要求的输出采样率。

如何用用FPGA实现FIR滤波器,第3张

  图2 低通滤波器规范

  你也许只是接受任务,而由你自己选择设计规范。当然应用项目定义了许多规范。这里有一些指导意见,帮助你缩小各种可能性,评估权衡设计。

  通常通带越接近阻带,设计就越具挑战性。同样,指定通带很低的波纹,或者很高的阻带衰减增加了设计的复杂性。必须牢记,指定波纹和衰减为数据的分辨率,你必须满足设计要求。指定衰减的要点是小于输入数据的最低位。同样在满标度中指定小于1位的通带波纹是不必要的。如同其它的滤波器,FIR滤波器可构成低通、高通和带通滤波器。

 如何用用FPGA实现FIR滤波器,第4张

  表1 数据宽度相对于阻带衰减和通带波纹

输入至输出的采样率也会影响你的设计。在简单的设计中,输入速率和输出速率是相等的。然而,在许多低通滤波器设计中,输出以输入的速率运行是不经济的,因为传输信息不要求高的输出率。取十分之一速率的FIR是合适的。其它要求较高输出率的设计,则采样内插FIR。

  进行设计

  选择FIR滤波器的系数有两种方法。Parks-McClellan方法(执行Remez算法)和进行冲击响应的窗口 *** 作。窗口方法依赖于一个事实,要求频率响应的离散Fourier反变换代表FIR滤波器的系数。理想的频率响应用作起始点,于是应用窗功能减少系数的数目,成形频率响应。通用的窗功能包括矩形、三角、Hanning、Hamming、Kaiser 和Blackman。

  没有必要对数学进行深究,有许多免费的低成本工具帮助你进行设计。如果使用MATLABMathWorks有各种工具可用于FIR设计。如果你不用这些包,用Internet搜索“FIR滤波器设计工具”将展现一些免费的低成本工具。

  首先应做出采用哪种设计方法的决策。大多数设计者采用Park-McClellan 方法,因为设计输入是滤波器的要求,这个方法通常满足具有最少抽头的滤波器要求。假设采用这个方法,你可以简便地把要求输入至所选的工具中。大多数设计工具会给出频率响应、冲击响应和滤波器系数。如果选择窗口方法,只要做些实验。要输入截止频率、窗口方法和抽头数目至设计工具。于是设计工具会给出频率响应。如果频率响应不是你所要的,你可以改变输入参数和迭代过程。

  因此,你已经用设计工具产生了系数,检验了频率响应。那么现在是否可以移开这个工具,而在FPGA中实现这个设计呢?并非如此,还要考虑一些事情。首先要确定频率响应,数据不是无限精确的。大多数设计工具让你定义一个量化级别并观察结果。倘若级别的精度是合理的,那就不需要做改动。然而,最好是现在发现这些问题而不是在实验室。下一步是研究其它的滤波器设计,诸如Lth带(或者Nyquist)滤波器,这些滤波器大约有一半的系数设置为0,因此减少了数学上的复杂性。

  在FPGA中实现设计

  你设置了系数之后,现在打算在FPGA中实现这个设计。再次要做出若干决定。首先是选择实现乘法器单元的方法,决定它们能运行多快。通常有两个选择:用在FPGA内实现逻辑的查找表(LUT)来实现乘法器,或者用FPGA内的专用的DSP单元。为了说明这些选择,考虑LatTIceECP2 FPGA系列,在这个FPGA内用sysDSP块实现一个18x18乘法器不占用LUT,运行速度高于400MHz。用LUT完成相同的功能其性能大约是100MHz,并要占用许多LUT。专门的DSP块拥有高速并使用少的LUT,通常选择这个方法,除非你保留DSP块准备留作它用。

 如何用用FPGA实现FIR滤波器,第5张

  图4 LatTIceECP2 sysDSP块

接下来要做的事是决定使用多少个乘法器。对于最快的速度,乘法器的数目等于FIR滤波器中抽头的数目。这种类型的滤波器完全用并行形式来实现。然而在许多情况下,并不需要性能的级别,允许乘法器时间共享。一种快速计算揭示了使用的乘法器的数目。首先做一个简化,以采样率除速度,你认为适中的复杂设计可以运行于所选的FPGA,然后对这个数进行四舍五入至最接近的整数。通过这个计算因子,可以减少乘法器的数目。作为一个例子,假设要在LatTIceECP2 FPGA中实现12个抽头,75MSPS,12位的滤波器。用这个器件,300MHz的滤波器比较容易实现,减少因子为4,需要3个乘法器。

  在做出最后决定之前,要考虑最终的实现。例如,使用LatTIce提供的FIR产生器,这个工具用sysDSP块内的加法树实现FIR滤波器。因为这个加法树的范围是4个乘法器,没有有效的资源与指定的3个乘法器联系在一起。此外,如果指定了4个乘法器,设计要求的工作速度会略有降低。

 如何用用FPGA实现FIR滤波器,第6张

  表2 最大采样率对比用于12个抽头滤波器的乘法器

  现在有了系数,乘法器实现的方法,以及知道需要多少个乘法器。许多供应商,包括Lattice提供自动产生FIR的工具。最后一步是把系数输入工具,指定乘法器的数目。产生滤波器之后要进行时序分析,确定是否假设的速度是正确的。在使用的例子中,工具报告了350MHz的最大速度,高于假设的300MHz。如果速度非常接近,你应该进行调整并再试。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2420398.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-01
下一篇 2022-08-01

发表评论

登录后才能评论

评论列表(0条)

保存