基于FPGA的FIR数字滤波器的优化设计

2011-08-19 13:33:56来源: 互联网 关键字:FPGA  FIR
    在图像处理、语音识别等数字信号处理中,数字滤波器占有重要的地位,其性能对系统有直接的影响。随着系统在宽带、高速、实时信号处理上要求的提高,对滤波器的处理速度、性能等也提出更高的要求。目前数字滤波器的硬件实现方法通常采用专用DSP芯片或FPGA,DSP特有的一些硬件结构和特性使其非常适合作数字滤波电路,但由于其软件算法在执行时的串行性,限制了它在高速和实时系统中的应。FPGA最明显的优势在于其实现数字信号处理算法的并行性,可以显著提高滤波器的数据吞吐率,随着FPGA技术的不断发展,现在的FPGA不仅包含查找表、寄存器、多路复用器、分布式块存储器,而且还嵌入专用的快速加法器、乘法器和输入/输出设备,因而成为高性能数字信号处理的理想器件。而在FPGA中,数字滤波器不同的实现方法所消耗的FPGA资源是不同的,且对滤波器的性能影响也有较大差异。基于此,本文从FIR滤波器的系数考虑,采用CSD编码,对FIR数字滤波器进行优化设计

  1 FIR滤波器的基本原理

  一个L阶的FIR数字滤波器的基本系统函数见式(1):

a.jpg

  式中:h(n)表示滤波器的系数;x(i)表示带有时间延迟的输入序列,此表达式对应的直接型实现结构可用图1来表示。

b.jpg

  可以看出,FIR滤波器是由一个“抽头延迟线”加法器和乘法器的集合构成的。传给每个乘法器的操作数就是一个FIR系数。对每次采样x(n)要进行N次连续的乘法和(N-1)次加法操作,因实际中滤波器的阶数都很高,实现高数据吞吐率就需要很多的硬件乘法器,硬件实现时将占用大量的资源,同时也会因此影响滤波器的速度和性能。为了解决这个问题,人们从多个角度寻求优化方法。从数字滤波器表达式看,对它

  的优化操作,实际最终转换成两类改进。一类是针对输入xi的DA操作的改进;另一类是针对系数hi编码的操作。

  2 DA算法

  分布式算法(Distributed Arithmetic,DA)是为了解决乘法资源问题而提出的经典优化算法这种算法结构,可以有效地将乘法运算转换成基于查找表LUT(Look Up Table)的加法运算,利用查表方法快速得到部分积。

  对于低阶而言,由于LUT表地址空间较小,与传统算法相比,分布式算法可极大地减少硬件电路的规模,提高电路的执行速度。然而当FIR滤波器阶数很高时,作为查找表的ROM将很大。阶数每增加1位,ROM容量就增加1倍,这种以2的幂次递增的资源占用是硬件资源不可接受的。因而在滤波器系数较高时,为了减小查找表的规模,常采用一定的方法将大LUT分割为一些小的LUT的方法。如滤波器的多相分解结构、多路复用器和加法器替代查找表的算法等。

  3 CSD编码算法

  常数乘法可以通过“移位-加”来完成,而乘数中“1”的个数决定了“加”操作的次数,当然“1”的个数越少越好,正则有符号数字量CSD(Canonic Signed Digit)编码就可以实现“1”的个数的最小化。

  3.1 CSD编码

  与传统的二进制编码的二值表示法不同,CSD编码的数字值域为0,1和-1。-1常表示成1。这种编码是具有最少非零元素的一种表示法,用CSD编码表示数字的形式具有惟一性。在实际硬件电路中可以采用如下原则生成最佳CSD编码:

  ①从最低有效位开始,用10…0l.jpg取代所有大于2的1序列,此外还需要用110l.jpg取代1011;

  ②从最高有效位开始,用011代替10l.jpg

  最佳CSD编码的特点是:

  ①在一个CSD数据里,没有两个连续的非零位;

  ②对同一个数字的CSD编码是独一无二的;

  基于CSD编码,可以将式(1)做以下的变化:

c.jpgd.jpg

  从以上式子可看出,应用CSD表示法,由于可以降低系数中非零元素的数量,因而在运算中能减少加法的次数,有利于提高运算速度和减少资源的占用。

  3.2 最佳CSD编码设计与结果

  根据前面所列举的最佳CSD编码方法,用C语言生成最佳CSD编码,部分伪代码如下:

e.jpg

  ③是数字表示法里,所含非零位数最少,相比于二进制补码系统平均减少33%的非零项。

  测试实验数据及结果如图2所示。在本C语言程序中用X来指代码src=/upload/info/news/content/20110817/0862391001313549277.jpg,输入数据为16位。

f.jpg

  4 实例设计过程与仿真

  4.1 FIR系数提取

  利用Matlab中Fdatlool设计一个16阶低通FIR滤波器,各项性能指标为:采用频率fs=48 kHz,截止频率fstop=12 kHz,通带宽度fpass=9.6 kHz。系数数据宽度为16位;输出数据宽度是16位。为了便于FIR滤波器的FPGA实现,减小误差,将Fdatlool提取的滤波器的系数量化取整后为:

g.jpg

 

[1] [2]

关键字:FPGA  FIR

编辑:北极风 引用地址:http://www.eeworld.com.cn/FPGA/2011/0819/article_2420.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:多时钟域数据传递的Spartan-II FPGA实现
下一篇:助听器介绍及其设计要点

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利
推荐阅读
全部
FPGA
FIR

小广播

独家专题更多

TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
迎接创新的黄金时代 无创想,不奇迹
迎接创新的黄金时代 无创想,不奇迹
​TE工程师帮助将不可能变成可能,通过技术突破,使世界更加清洁、安全和美好。
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来

夏宇闻老师专栏

你问我答FPGA设计

北京航空航天大学教授,国内最早从事复杂数字逻辑和嵌入式系统设计的专家。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2017 EEWORLD.com.cn, Inc. All rights reserved