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是一些自定义函数,用来缩放系数,需要b 和 bits 的数量(在本例中为 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 关系不大。
我正在尝试缩放由 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是一些自定义函数,用来缩放系数,需要b 和 bits 的数量(在本例中为 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 关系不大。