[求助]使用过FIR滤波器IP_CORE的过来看一下,急呀!!
- UID
- 15892
- 性别
- 男
|
[求助]使用过FIR滤波器IP_CORE的过来看一下,急呀!!
我使用XILINX的MAC_FIR和DA_FIR过程中,设定
COE_WIDTH = 12; DATA_IN_WIDTH = 12;
MAC_FIR中统计输出是30位数据,
请问,我怎么截取数据,即,从哪儿开始是符号位?符号位有几位?哪儿开始是数据位?
谢谢帮帮忙呀,提示提示
|
|
|
|
|
|
- UID
- 81104
- 性别
- 男
|
你这个问题,原来就有人问过的,当时的一位大虾给解答的非常的好,你看一下
首先,我要告诉你的是Xilinx是如何给出的输出位宽。
OutputWidth=coefwidth+inputwidth+ceil(log2(Tap)) (*)
比如,这里coefwidth=12, inputwidth=12, Tap是滤波器的阶数,ceil是向上取整。如果阶数为48,最接近48的2^n为64,那么,(*)式最后一项即为6,那么输出位宽即为30。
如何截位?首先,应该求出输出的最大值,
Max(output)=Max(input)*sum(abs(coef)) (a)
这样保证不溢出,求得输出的最大值,化为二进制当然是补码了,即可确定输出最大位宽,系数和输入都是有符号二进制补码表示,那么高两位都是符号位,从次高位向下截取
(a)式所确定的位宽,但这时所得位宽仍较大,实际上由于ad量化噪声引起的部分还可以去除,使得最终位宽仍可进一步减小。但目标是大信号不溢出,小信号不损失。 |
|
|
|
|
|
- UID
- 15892
- 性别
- 男
|
太谢谢了!!我都弄了很久了,现在一下子明白了!!
非常的感谢!! |
|
|
|
|
|
- UID
- 104679
- 性别
- 男
|
首先应保证小信号不损失,然后实验得出截取位数,向后截取一位输出信号减小6dB 。
这个问题我也曾经遇到过,二楼的解答真的很精彩,谢谢了! |
|
|
|
|
|
- UID
- 142119
- 性别
- 男
|
|
|
|
|
|
- UID
- 149046
- 性别
- 男
|
|
|
|
|
|
- UID
- 142896
- 性别
- 男
|
|
|
|
|
|
- UID
- 814719
|
二楼回答的太好了,不过OutputWidth=coefwidth+inputwidth+ceil(log2(Tap)) 这个式子有问题,用不到那么多位。根据做2加法树计算的流水线设计方法,每一级流水线位数加一位,同时参与加法运算的数据减少一半,所以会得出log2(Tap)这个式子,实际上,因为系数不是取coefwidth所能取到的最大数,所以一定会有冗余位出现,具体取多少位,应该根据仿真或者自己编写一个测试程序来计算。Matlab里的fdatool就做好了这一点,考虑到了冗余位这个问题。 |
|
|
|
|
|
- UID
- 814719
|
在这里,我想请问一下:输出数据如何截取一定的位数?比如和一楼一样,输入数据12位,系数12位,48阶,假如输出是28位(在这里肯定不会是30位,那么做太失水准了),如何将28位数据截取为12位或16位?如何截取才是最佳方案? |
|
|
|
|
|
- UID
- 814332
|
加载符号表了吗?#3 0x0912c590in?()这种情况一般都是内存越界 |
|
|
|
|
|
- UID
- 814745
|
在IDC环境,很多人使用,不能gdb r,该怎么办呢?而且也不是时时core,一天core一两次差不多。 |
|
|
|
|
|