基于FDAtool及FPGA的FIR滤波器设计.docx

上传人:b****8 文档编号:11037151 上传时间:2023-02-24 格式:DOCX 页数:16 大小:951.47KB
下载 相关 举报
基于FDAtool及FPGA的FIR滤波器设计.docx_第1页
第1页 / 共16页
基于FDAtool及FPGA的FIR滤波器设计.docx_第2页
第2页 / 共16页
基于FDAtool及FPGA的FIR滤波器设计.docx_第3页
第3页 / 共16页
基于FDAtool及FPGA的FIR滤波器设计.docx_第4页
第4页 / 共16页
基于FDAtool及FPGA的FIR滤波器设计.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

基于FDAtool及FPGA的FIR滤波器设计.docx

《基于FDAtool及FPGA的FIR滤波器设计.docx》由会员分享,可在线阅读,更多相关《基于FDAtool及FPGA的FIR滤波器设计.docx(16页珍藏版)》请在冰豆网上搜索。

基于FDAtool及FPGA的FIR滤波器设计.docx

基于FDAtool及FPGA的FIR滤波器设计

基于FPGA实现FIR滤波器的研究

摘要:

针对在FPGA中实现FIR滤波器的关键--乘法运算的高效实现进行了研究,给了了将乘法化为查表的DA算法,并采用这一算法设计了FIR滤波器。

通过FPGA仿零点验证,证明了这一方法是可行和高效的,其实现的滤波器的性能优于用DSP和传统方法实现FIR滤波器。

最后介绍整数的CSD表示和还处于研究阶段的根据FPGA实现的要求改进的最优表示。

关键词:

FPGADAFIR滤波器CSD

数字滤波器是语音与图像处理、模式识别、雷达信号处理、频谱分析等应用中的一种基本的处理部件,它能满足波器对幅度和相位特性的严格要求,避免模拟乙波器所无法克服的电压漂移、温度漂移和噪声等问题。

有限冲激响应(FIR)滤波器能在设计任意幅频特性的同时保证严格的线性相位特性。

目前FIR滤波器的实现方法有三种:

利用单片通用数字滤波器集成电路、DSP器件和可编程逻辑器件实现。

单片通用数字滤波器使用方便,但由于字长和阶数的规格较少,不能完全满足实际需要。

使用DSP器件实现虽然简单,但由于程序顺序执行,执行速度必然不快。

FPGA有着规整的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理任务,相对于串行运算为主导的通用DSP芯片来说,其并行性和可扩展性更好。

但长期以来,FPGA一直被用于系统逻辑或时序控制上,很少有信号处理方面的应用,其原因主要是因为在FPGA中缺乏实现乘法运算的有效结构。

现在这个问题得到了解决,使FPGA在数字信号处理方面有了长足的发展。

1分布式运算原理

分布式算法(DA)早在1973年就已经被Croisier提出来了,但是直到FPGA出现以后,才被广泛地应用在FPGA中计算乘积和。

一个线性时不变网络的输出可以用下式表示:

=c[0]x[0]+c[1]x[1]+…+c[N-1]x[N-1]

假设系数c[n]是已知常数,x[n]是变量,在有符号DA系统中假设变量x[n]的表达式如下:

式中,xb[n]表示z[叫的第b位,而x[n]也就是x的第n次采样。

于是,内积y可以表示为:

重新分别求和(也就是分布式算法的由来),其结果如下:

(1)式可以发现,分布式算法是一种以实现乘加运算为目的的运算方法。

它与传统算法实现乘加运算的不同在于执行部分积运算的先后顺序不同。

分布式算法在实现乘加功能时,是通过将各输入数据的每一对应位产生的部分积预先进行相加形成相应的部分积,然后再对各个部分积累加形成最终结果的,而传统算法是等到所有乘积已经产生之后再来相加完成乘加运算的。

与传统串行算法相比,分布式算法可极大地减少硬件电路的规模,提高电路的执行速度。

它的实现框图如图1(虚线为流水线寄存器)所示。

2用分布式原理实现FIR滤波器

2.1串行方式

当系统对速度的要求不高时,可以采用串行的设计方法,即采用一个DA表、一个并行累加器和少量的寄存器就可以了。

在用LUT实现串行分布式算法的时候,假设系数为8位,则DA表的规模为2N×8位。

可以看到如果抽头系数N过多,则DA表的规模将十分庞大。

这是因为LUT的规模随着地址空间的变化(也就是N的增加)而呈指数增加。

例如EPFl0K20包含1152个LC,而一个27×7位的表就需要394个LC。

当N过大时,一个FPGA器件就不够用了。

为了减小规模,可以利用部分表计算,然后将结果相加。

假定长度为LN的内积为:

将和分配到L个独立的N阶并行DA的LUT之中结果如下:

如图2所示,实现一个4N的DA设计需要3个次辅助加法器。

表格的规模从一个2N×B位的LUT降到4个2N×B的位表。

如果再加上流水线寄存器,由于EPFl0K20每个LC后面都跟有一个寄存器,所以并没有增加电路规模,而速度却得到了提高。

2.2并行方式

采用并行方式的好处是处理速度得到了提高。

由于数据是并行输入,所以计算速度要比串行方式快,但它的代价是硬件规模更大了。

下面举出全并行的例子。

设sum[0]=c[0]x0+[0]+c[1]x0[1]+…+c[N-1]x0[N-1]

sum[B-1]=c[B-1]xB-1[0]+c[1]xB-1[1]+…c[N-1]+xB-1[N-1]

可将

(1)式改写成如下形式

y=sum[0]+sum[1]21+sum[2]2+…+sum[B-1]2B-1

(2)

利用式

(2)可得一种直观的加法器树,如图3所示。

虽然硬件规模加大了,但是如果把系数的个数限制在4个或8个,再加上流水线寄存器,这个代价还是值得的。

而且每张表都是相同的,不用为每个采样都设计一张表,减小了设计量。

DA算法的主要特点,是巧妙地利用ROM查找表将固定系数的MAC运算转化为查表操作,其运算速度不随系数和输入数据位数的增加而降低,而且相对直接实现乘法器而言在硬件规模上得到了极大的改善。

利用ALTERA的FLEXl0K实现的16阶8位系数的并行FIR滤波器,其时钟频率可以达到101MHz,而实现的16阶8位系数的串行FIR滤波器,其时钟频率可以达到63MHz,每9个时钟周期可完成一次计算。

但是其系数是传统二进制的,造成了很大的冗余(对于用逐位相加法实现的乘法器,当系数有一位为零时不用相加,零位越多,冗余越大),而且查找表的大小随着滤波器阶数的增加成指数增加,虽然可以采用将大查找表分解为小查找表,但是无法从根本上解决这一问题,这些都是DA方法的缺点。

后面将对FIR滤波器实现给出新的设计方法,进一步降低逻辑资源的消耗。

3CSD码及最优化方法

一个整数X与另一整数Y的乘积的二进制表示可以写成:

对于标准二进制,由于sn=0时的对应项Y2n并不参与累加运算,所以可以用另一种表示方法使非零元素的数量降低,从而使加法器的数目减少,降低硬件规模。

有符号数字量(SD)有三重值{0,-1,+1},如果任意两个非零位均不相邻,即为标准有符号数字量(CSD)。

可以证明CSD表示对给定数是唯一的并且是最少非零位的。

CSD表示相对于标准二进制表示的改进在于引入了负的符号位,从而降低了非零位个数,大大降低了逻辑资源的占用(大约平均降低33%的逻辑资源)。

当用硬件实现时,常常限制系数位数,即每个系数与N个正(负)2的幂次之和近似。

标准二进制数在整数轴上是紧密和均匀分布的,而CSD码是非均匀分布的,其对实系数的量化误差比标准二进制大,虽然增加N可以减小量化误差,但是会增大逻辑资源的消耗;而且CSD表示无法应用流水线结构,从而降低处理速度。

还可采用优化的方法将系数先拆分成几个因子,再实现具体因子。

这就是最优化的代码。

例如对系数93,93=10111012=1100101CSD。

用最优化法,系数93可以表示成93=3·31,每个因子需要一个加法器,如图4所示。

从图中可以看出,CSD码需要三个加法器,而最优法只需要两个加法器;CSD码的重要缺陷在于每一级加法都需要初节点参与,而最优表示仅依赖上一级加法的结果,因此也就更适合流水线处理。

Dempster等人提出了需要1到4个加法器的所有可能配置表。

利用这张表,就可以合成成本在0与4个加法器之间的所有8位二进制整数。

本文首先给出了一种巧妙利用FPGA的查找表,将乘法转化为查找表运算的DA算法,并用ALTERA的FLEXlOK器件分别实现了一个8位16阶的串行与并行FIR滤波器,系统频率分别达到63MHz与101MHz,采样速度分别达到7MSPS与101MSPS。

而DSP实现的FIR滤波器只能达到5MSPS,明显低于FPGA。

用传统的位串行方法实现的一个8阶8位FIR滤波器,也只能达到5MSPS,明显低于串行式DA方法;接着,针对系数的二进制表示非零位不是最少(即实现系数乘法的加法器不是最少)的问题,介绍了整数的CSD表示以及最优表示,它们可以用较小的代价和与加法器级数无关的处理速度实现整数乘法运算,能比DA方法用更少的逻辑资源实现FIR滤波器。

这些算法都不同于传统的设计观念,为基于FPGA的DSP设计提出了新的思路,必将在高速FIR滤波器设计、高速FFT设计中得到广泛的应用。

随着FPCA集成规模的不断提高,许多复杂的数学运算已经可以用FPCA来实现,利用单片FPGA实现系统的设想即将变为现实

基于FDAtool及FPGA的FIR滤波器设计

首先fdatool是Matlab自带的一个数字滤波器的设计分析软件,里面提供了丰富的参数供调整(具体的参阅Matlab的教材),大大降低了数字滤波器的设计难度,同时又可以设计出高质量的滤波器。

fdatool虽然不是最好的滤波器设计软件,但是在Matlab响亮的名号下,得到了广泛的使用。

FIRMegacore是Altera针对其主流FPGA推出的一款商业化的数字滤波器设计软件,可以直接生成HDL代码(可综合的,但是加密了),同时其结构针对Altera自己的FPGA做了各种各样的优化。

尽管fdatool也可以生成可综合的HDL代码,但是没有针对FPGA的M4K、DSPBlock做出相应的优化,所以性能和FIRMegacore生成的FIR滤波器有相当的差距。

然而,FIRMegacore的滤波器设计工具相当的简单,只提供了窗函数法,用户只能定义有限的几个参数。

而其他的设计方法,比如矩形系数更好的等纹波法则只能在fdatool里面找到。

所幸的是,FIRMegacore提供了滤波器的Coefficients导入的选项,可以使用第三方工具生成的Coefficients。

这使得我们能够用FIRMegacore来实现fdatool生成的滤波器。

简要流程如下:

Step-1:

在Matlab的命令行上输入:

fdatool,启动FilterDesign&AnalyzeTool;

Step-2:

FilterDesign&AnalyzeTool(fdatool)的主界面;

Step-3:

基于等纹波法设计一个FIR滤波器;

 

Step-4:

这个滤波器的幅频特性;

Step-5:

在fdatool主界面的File菜单中选取Export...

 

可以对系数先进行参数化,点击右下方的setquantizationparameter按钮,设置参数化位数(可以通过Analysis->Filtercoefficient查看系数,此时系数仍为小数),小数需要归一化为整数,可以再输入Xilinx和Altera的IP中,归一化即将生成的小数系数乘以2^8(归一化为8位系数,第九位可以是符号位)。

Step-6:

在Export的对话框中,ExportTo选择CoefficientFile(ASCII),Format选择Decimal;

Step-7:

修改导出的fcf文件,把那些废话删掉(非常重要);

 

Step-8:

调用AlteraFIRMegacore的,点击Parameters按钮;

 Step-9:

在主界面中,我们可以看到一个默认的低通滤波器,不要管它,直接点击坐标图上面的那个EditCoefficientSet按钮;

 

Step-10:

在CoefficientsGeneratorDialog窗口中,直接选取ImportedCoeffSet,并输入刚才在Matlab中生成的fcf文件(再次强调把文件头尾的那些%打头的废话删掉)。

搞定了,之后再按照需求做其他的设定和仿真就可以了。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1