elewzgl 发表于 2010-3-5 08:46:24

麻烦高人谈谈FPGA实现FIR滤波器时,滤波器系数负数的处理方法

目前想做一下用FPGA实现FIR数字滤波器,有几个问题想请交一下大家
1、在使用verlilog HDL编写程序时,直接使用乘法符号构成的乘法是不是效率最低的,适配器又是如何实现的。例如assign c = a * b;
2、我们都知道负数可以使用二进制补码的形式表示,assign c = a * b; 其中,a,b是否可以为负数(二进制补码的形式表示)?
3、我们可以自行构造乘法器,在使用BOOTH算法的时序乘法器中,可以通过总结其编码规律,然后将乘法转换成加法,实现效率比较高的乘法器。但是
这对altera第一代的cyclone器件来说是不错的选择。但是cycloneII器件内部包含18×18bit的硬件乘法器。参考altera的手册,这个硬件乘法器一般要通过
宏调用的方式实现的,不知可否处理负数?

上面的问题都可以通过仿真的方式解决,只是目前对QuartusII还在入门阶段,过几天熟悉软件后再试试。希望和同道多交流

McDeggy 发表于 2010-3-5 15:48:42

貌似最正确的方法是通过matlab和QuartusII的接口DSPBuilder进行FIR滤波器的设计,通过编写matlab代码和调用工具箱来完成。参见田耘的《无线通信的matlab和FPGA实现》一书,不过里面的例子是xilinx的,可以作为参考借鉴。
我试着写过一个FIR滤波器,但是感觉不是很成功。同问用coding和RTL的方式(不使用工具箱和IP core)怎么实现一个FIR滤波器。

motion_ctrl 发表于 2010-3-5 17:05:05

我用Xilinx的IP Core和matlab的工具生成的系数做过FIR,下面是仿真的波形。
http://cache.amobbs.com/bbs_upload782111/files_27/ourdev_536652.jpg
(原文件名:wave_ecg_1024_FIR_vin.jpg)

elewzgl 发表于 2010-3-6 00:37:37

感谢楼上的回复,DSP builder没怎么用,不过FIR滤波器的实现过程倒是有所了解.以前用matlab计算滤波器系数(用最佳一致逼近法),量化后用stm32实现,使用了stm的DSP库.感觉FIR就是乘加器.

elewzgl 发表于 2010-3-24 00:48:23

没人回答,自己顶
1、coding的方式使用乘法,适当code的编码Q2也是会自己使用内部的硬件乘法器
2、负数是要自己处理的,一般通过符号位扩展来完成

manfield 发表于 2010-3-24 21:20:37

回复【楼主位】elewzgl
-----------------------------------------------------------------------

负数的话用补码解决,乘法器可以用Quartus ii中的megacore,我就是这么做的,但是自己注意位数,不要溢出。

linxiaolong 发表于 2010-4-15 19:47:40

楼上的几位高手,我也在做滤波器,请问如何下手?是否有相关的资料?

yezhutou 发表于 2010-4-23 10:57:58

感觉《无线通信的matlab和FPGA实现》里面的代码不是很好,不知道大家有没有这种感觉

myfriend6042 发表于 2010-12-4 11:38:19

mark

yemingxp 发表于 2010-12-12 11:54:37

2楼是做心电的吧?想问现在用FPGA做算法的多,还是DSP多?

NJ8888 发表于 2010-12-12 12:11:27

如果是心电,我看频率不高,ARM就来得及,为何上FPGA?

yemingxp 发表于 2010-12-12 12:57:21

回复【11楼】888888888888
如果是心电,我看频率不高,arm就来得及,为何上fpga?
-----------------------------------------------------------------------

频率是很低,但还有其它很多专业的诸如心率,诊断算法等,ARM是远远算不过来的。

wuyuehang 发表于 2012-12-23 12:18:04

FIR滤波器在matlab里面一般是浮点比如a=1.0;2.12;4.23;
而我的AD采样进来的中频信号一般是偏移二进制码,那么
第一:如何去量化FIR系数?
第二:需不需要将AD进来的数据转换成补码再和FIR运算,再转换成偏移码输出给DA;还是可以直接将AD采样进来的偏移码直接和FIR运算?

wuyuehang 发表于 2012-12-23 12:19:26

McDeggy 发表于 2010-3-5 15:48 static/image/common/back.gif
貌似最正确的方法是通过matlab和QuartusII的接口DSPBuilder进行FIR滤波器的设计,通过编写matlab代码和调用 ...

FIR滤波器在matlab里面一般是浮点比如a=1.0;2.12;4.23;
而我的AD采样进来的中频信号一般是偏移二进制码,那么
第一:如何去量化FIR系数?
第二:需不需要将AD进来的数据转换成补码再和FIR运算,再转换成偏移码输出给DA;还是可以直接将AD采样进来的偏移码直接和FIR运算?

liyusnoopy 发表于 2013-9-1 21:19:02


Mark下   我也想用这个IPcore可是暂时搞不来了
页: [1]
查看完整版本: 麻烦高人谈谈FPGA实现FIR滤波器时,滤波器系数负数的处理方法