用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心解决方案电子通信

基于FPGA流水线分布式算法的FIR滤波器的实现

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 22:44:20
2.2 系统具体实现步骤

2.2.1 查找表的建立

我们知道,如果滤波器抽头数N过多,用单个查找表就不能执行全字(因为查找表位宽=滤波器抽头数的数量)。在这种情况下,可以将表的地址输入位数(即滤波器抽头数N)进行降低,既利用部分表并将结果相加。如果加上流水线寄存器,这一改进并没有降低速度,但是却可以极大地减少设计规模,因为查找表的规模是随着地址空间,也就是滤波器抽头数N的增加而呈指数增加,

根据卷积和javascript:window.open(this.src);" style="cursor:pointer;"/>定义16阶内积。

滤波器抽头数是16个,考虑到线性FIR滤波器的偶对称特性,只考虑8个独立滤波器抽头数,则需要一个2 8×8的表(其中指数8指的是8个滤波器抽头数,javascript:window.open(this.src);" style="cursor:pointer;"/>后面的8指的是输入数据的位宽)。但是Virtex-e FPGA只能提供4输入的查找表,所以要对查找表的地址进行电路分割。将8位地址线分为高4位和低4位,分别作为两个2 4×8的查找表的地址输入,从而指数倍地节省了硬件资源。

2.2.2 查表计算部分积累加和的过程

假定输入数据x[n]的值x[0]=1 10=00000001 2c,x[1]=-1 10=11111111 2c,x[2]=3 10=00000011 2c,x[3]=2 10=00000010 2c。(注:2c代表用二进制补码表示,最高位为符号位。)

数据校验结果:h[0]x[0]+h[1]x[1]+h[2]x+h[3]x[3]=2812

说明利用分布式查表算法的计算结果与直接计算结果相同,算法正确无误。

查找表(2)的查表计算结果依此类推。只是需要注意:查找表(2)的数据输入x是8位数据x[4]、x[5]、x[6]、x[7],而不是x[3]、x[2]、x[1]、x[0]。根据系数偶对称性质。x[8]、x[9]、x[10]、x[11]查查找表(2),x[12]、x[13]、x[14]、x[15]查查找表(1)。

3 设计结果javascript:window.open(this.src);" style="cursor:pointer;"/>

本系统的FPGA采用Xilinx公司的Virtex-E系列中的XCV100E FPGA,使用的软件是Xilinx公司的ISE5.2i及Modelsim公司的Modelsim时序仿真工具,对FIR滤波器进行描述编程使用的是VHDL语言。

实现FIR滤波器的最上层的原理图如图4所示,输入16个8位数据data_in={1,-1,3,2,2-1,1,-1,1,-1,3,2,2,-1,1,1}。

系统仿真的时序图如图5所示。所设计FIR滤波器的幅频、相频、单位脉冲冲激响应如图6~8所示。

FIR滤波是DPS的基本运算形式这一。本文介绍的基于FPGA的分布式算法提高了系统运行的速度并且节省了大量的FPGA资源。通过阶段以及查找表中抽头系数的设定,还可以灵活地实现除低通外的高通、宽阻和带通滤波器。
javascript:window.open(this.src);" style="cursor:pointer;"/>
    设计的电路已通过FPGA验证,说明工作正常,符号设计指标。



上一页  [1] [2] 

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:14,437.50000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号