FPGA实现FIR滤波器

whyyxn 2012-09-07 11:32:03
请教大家个问题,FPGA实现FIR滤波器,系数都是先经过matlab计算,然后乘以2^N之后得到的,那么,最后计算结束后必须除以2^N(截位或者舍入),但是在哪里除比较好呢?
大家都知道FIR的结构,输入数据移位,然后和系数在乘法器相乘得到积,所有的积进入加法器相加的到结果。
是在乘法器输出那里(截位或者舍入),还是在最后加法器输出那里呢?
我下面瞎掰一个WCDMA的RRC滤波器
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fs = 15.36e6;
fd = 3.84e6;
r = 0.22;
delay = 16;
b = rcosine(fd,fs,'fir/sqrt',r,delay);
%得到129阶,取15位小数,还有1位符号位,COE必须用16bit才能表示
COE = round(b*2^15);
%可以把COE的前面几个值打印出来
COE(1:10)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
可以看到COE的前面的10个值:
-3 17 23 9 -14 -25 -14 11 29 22
以-3这个系数来说,他和12位的数据相乘,积最多14位,这样,如果
在相乘结果那里就截位(15位)的话,截位之后值为0了,所以这个系数
对滤波器的输出没有任何贡献,也就是说这样设计的这个滤波器根本不是
129阶的,误差大可想而知。
所以我也比较认可,在最终加法器的后面截位(或者舍入),但是
阶数大了,那么这个加法器很庞大,为了保证速度当然也可以用流水线,
但太耗资源
甚是纠结……不知道大家是怎么做的
...全文
256 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈皮歪詩 2012-09-07
  • 打赏
  • 举报
回复
(1) To keep high precision, you can do the rounding/truncation at the output (summation in this case), and keep full precision at the intermediate steps

(2) RRC is symmetric, that can help you save half the multipliers

(3) use transposed structure to avoid big tree adder.

3,846

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 无线
社区管理员
  • 无线
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧