FIR 系数缩放

FIR Coefficient scaling

我正在尝试缩放由 matlab 生成的 FIR 系数。我找到了以下示例,但我无法从示例中找出比例因子

b = 0.0080 0.2176 0.5488 0.2176 0.0080 
>> [bsc, scfac]=fscale(b, bits) 
bsc = 479 12989 32767 12989 479 
scfac = 5.9702e+04

b表示系数,fscale是一些自定义函数,用来缩放系数,需要bbits 的数量(在本例中为 16)并输出缩放系数 bsc 和比例因子 scfac ,FIR滤波器需要在FPGA上实现。我想弄清楚比例因子是如何计算的。

您要求整数系数的 16 位表示。显然它是 16 位签名的。所以,他们的范围是:

[-2^15..2^15-1] = [-32768..32767]

由于您的最大初始系数的绝对值是 c ~= 0.5488 且为正,因此比例因子为:

c * scfac = 2^15-1 = 32767
scfac = 32767 / c ~= 32767 / 0.5488 ~= 5.9702e+04

Qed.

请注意,因为您的实际值是由 Matlab 打印的,只有小数点后有 4 位数字,所以 Matlab 计算的 scfac 与您可以使用 32767 / 0.5488 计算的值略有不同(~ 59707).如果您要求 Matlab 打印更多数字,您很快就会发现实际值为 59702.xxxxxx...

另请注意,您的问题与 FPGA 关系不大。