RSS

基于FPGA的分布式算法FIR滤波器的设计实现

来源:网络 作者:匿名 时间:2007-01-09 Tag: 点击:

另外,也可以采用另一种方法提高计算速度,就是将输入字段分割成K个子字段,然后并行处理这些子字段,这种完全流水的并行结构如图4所示。计算速度将随着表的分割多少而翻多少番,但这一方法需要K倍的查找表,从而导致存储需求大和成本的直线上升。在实际中可以将这两种方法结合起来,兼顾系统的资源和性能,以达到最优。

总体结构

根据系统性能指标,设计该系统的总体结构如图5,其中:x(n)是输入序列,y(n)是输出序列,clk0是采样时钟,clk是算法时钟,reset是复位信号。

各模块的主要功能是:

移位寄存器:将输入序列x(n)通过移位寄存器改为并行输入;

优化模块:根据FIR滤波器h(n)的对称特性将滤波器降阶,完成输入求和x(k)+x(K-1-k),对于本例中的16抽头滤波器,即完成x(0)+x(15),x(1)+x(14),……,x(7)+x(8);

乘法模块:用查找表的方法实现乘法运算。将8输入查找表分割成两个并行的4输入查找表分别运算,减小查找表的规模;

加法器:最后将2个DA算法的结果相加,得到输出y(n)。

设计结果

本文设计的滤波器采用EPF10K30RC240-3器件,在QuartusII下进行仿真,设输入序列为无符号数x(n)=[0,2,0,0,4,1,0,3,2,1,1,4,0,1,1,2],仿真输出依次为y(n)=[-286,-106,706,2524,……,-286],波形如图6所示。图中,FFEE2为-286的二进制补码,其他数据相同。表1是输出序列y(n)仿真结果与Matlab计算值的对比(数据放大了65536倍),结果误差<4‰,主要是由于有限精度算法引起的。通过验证,系统运行速度53.76MHz,采样频率达3MHz,占用LC:617个,占全部资源的35%,达到了设计要求。

表1:系统仿真结果与同Matlab计算值对照

结束语

分布式算法是一种利用查找表将固定系数的乘累加转换为查表操作,本设计的FIR滤波器通过了电路验证,符合设计要求,现总结如下:

①采用4输入查找表进行分布式算法的设计,简化了传统的MAC设计;

②采用表分割法进行LUT分割,缩小了LUT规模,当实现更高阶的FIR时,可综合采用两种分割方法;

③LUT的参数独立于滤波器的结构,有较强的通用性,适于模块化设计;

④利用VHDL设计,可重复配置FPGA,降低成本,开发周期较短,系统易于维护和扩展。

长期以来,FPGA一直被用于逻辑或时序控制上,很少用于信号处理方面,主要原因是FPGA中没有直接的硬件乘法器。通过分布式算法,对于固定系数的乘法这个问题得到了很好的解决。而且由FPGA代替ASIC和DSP作为前端数字信号处理的运算,在规模、重量和功耗方面都有所降低,而且吞吐量更高,开发成本进一步缩短。可以预见,在未来,大量的FPGA将会统治更多的如FIR滤波、CORDIC算法或FFT等的前端应用。


1.部分资源来自网络,经ET电子归类整理,旨在服务电子爱好者并无商业目的,不保证正确性与完整性.
2.如果您觉得本站资源对您有用,请告知您的好友,用搜索引擎搜"ET电子"即可.


最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
教程下载