我有一个 64 抽头 FIR 滤波器,我无法理解其输出格式。该滤波器已使用(有符号)定点数学实现。在 {B,F} 格式中,其中 B 是字长,F 是小数长度,滤波器输入是 {16,0},系数是 {16,17}。过滤器的核心如下:
for (i = 0 ; i < 32 ; i++) {
accumulator += coefficients[i] *
(input[(inputIndex + 64 - i) % 64] +
input[(inputIndex + 1 + i) % 64]);
}
for 循环的每次迭代都会产生一个输出,其格式由下式给出:
{16,17} * ( {16,0} + {16,0} ) = {16,17} * {17,0}
= {33,17}
使用定点算法的规则。由于有 32 次迭代,因此需要在累加器的大小上增加 6 个额外的位以防止溢出。这六位来自使用(MATLAB)公式:
floor(log2(32)) + 1
根据本文件。根据我的推理,这应该导致格式为 {39,17} 的输出。那么为什么 MATLAB 将滤波器输出大小报告为 {34,17}?此外,如果我希望过滤器输出与输入的格式相同,我是否认为我需要右移(在 {39,17} 情况下)22 位?