【问题标题】:FIR Coefficient scalingFIR 系数缩放
【发布时间】:2015-10-08 23:17:39
【问题描述】:

我正在尝试缩放 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位数(本例中为 16)并输出缩放系数 bsc 和缩放因子 scfac,FIR 滤波器需要在 FPGA 上实现。我想弄清楚比例因子是如何计算的。

【问题讨论】:

  • 您是否尝试打开fscale 并查看代码的作用?
  • 我无法访问 fscale,我只是在搜索缩放技术时发现了一些 powerpoint 幻灯片。到目前为止,我对缩放的理解是,在我的情况下,系数需要乘以 2^b(其中 b 是正在使用的位数) b = 16 位,这使得缩放因子为 65536,但这里是59702.

标签: matlab fpga


【解决方案1】:

您要求整数系数的 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 几乎没有关系。

【讨论】:

  • 感谢您的解释,我正在尝试在 FPGA 上实现滤波器,这就是我需要缩放系数的原因
猜你喜欢
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多