我正在用VHDL编写Radix-2 DIT FFT算法,这需要通过旋转因子(TF)对输入数据进行一些分数乘法。我使用定点算术来实现这一点,每个字都是16位长,其中1位是符号位,其余的是在整数和分数之间分配。因此我的困境是:
我不知道,我的输入数据将在什么范围内,所以如果我只是决定4位转到整数而其余11位转换为分数,以防我得到高于4位= 15位小数的整数,我搞砸了。如果我执行50/50,则相同,如7位到整数,其余为分数。如果我得到非常小的数字,我会因为截断或舍入而被搞砸,即:
假设我有一个整数" 3"(0000 0011)输入和TF" 0.7071" (0.10110101 - 8位),为简单起见,我假设我的数据是8位长,因此:
3x0.7071 = 2.1213
3x0.7071 = 0000 0010。 0001 1111 = 2.12109375(对于16位)。
这就是诀窍 - 我需要向上/向下舍入或截断16位到8位,因此,我得到0000 0010,即2 - 错误太高了。
我的问题是:
我将非常感谢有关任何已知方法的任何想法或信息。
答案 0 :(得分:0)
您不需要知道输入的定点格式。您可以安全地将其视为标准化的-1到1范围或完整的整数范围。
原因是您的输出格式与输入格式相同。或者,更有可能是FFT,3比特之类的已知关系会增加,这将使输出比输入多3个整数位。
知道小数点的最终位置是核心用户的负担,你必须记录当前动态范围的变化。