在使用altera提供的FIR IPcore时,输入设定为有符号数24位,滤波器系数设为12位有符号数,输出全精度的时候为37位有符号数,这是为什么?
现在我想截取16位输出,请问在截取时应该遵循什么原则,才能使输出精度相对来说比较高?
Altera的我不知道,我看到过Xilinx的。
一位大侠是这么说的
首先,我要告诉你的是Xilinx是如何给出的输出位宽。
OutputWidth=coefwidth+inputwidth+ceil(log2(Tap)) (*)
比如,这里coefwidth=12, inputwidth=12, Tap是滤波器的阶数,ceil是向上取整。如果阶数为48,Z接近48的2^n为64,
那么,(*)式Z后一项即为6,那么输出位宽即为30。
如何截位?首先,应该求出输出的Z大值,
Max(output)=Max(input)*sum(abs(coef)) (a)
这样保证不溢出,求得输出的Z大值,化为二进制当然是补码了,即可确定输出Z大位宽,系数和输入都是有符号二进制补码表示,
那么高两位都是符号位,从次高位向下截取(a)式所确定的位宽,但这时所得位宽仍较大,实际上由于ad量化噪声引起的部分还可
以去除,使得Z终位宽仍可进一步减小。但目标是大信号不溢出,小信号不损失。