我编写了一个代码来计算 C 中 FFT 的旋转因子。现在,我想将它从浮点转换为定点,以便我可以在 DSP 处理器上对其进行测试。我想分别计算旋转因子,例如:
1) Cos(2*pi*k/N)-jSin(2*pi*k/N) 其中 k 从 0..N/3-1 开始,N =1536。
我怎样才能得到定点的答案(比如说 Q15 格式)
我编写了一个代码来计算 C 中 FFT 的旋转因子。现在,我想将它从浮点转换为定点,以便我可以在 DSP 处理器上对其进行测试。我想分别计算旋转因子,例如:
1) Cos(2*pi*k/N)-jSin(2*pi*k/N) 其中 k 从 0..N/3-1 开始,N =1536。
我怎样才能得到定点的答案(比如说 Q15 格式)
Q15 数字有 15 个小数位。最有可能的是,它具有额外的位,即整数位或符号位。(从上下文或问题中未提供的其他文档中可以看出这一点。)让我们假设附加位是一个整数位,并且该值是无符号的。
如果 16 位在解释为无符号整数时具有值 x,则在解释为 Q15 时它们具有值 x/2 15 。显然,要将 Q15 值 x/2 15转换为整数值 x,您只需乘以 2 15即可。
因此,给定某个值 y,它可能是您的旋转因子之一的余弦或正弦,您可以通过乘以 2 15将其转换为将存储在 16 位中的整数,就像代码一样y*32768
,并从浮点数转整数。但是,从浮点到整数的转换会向零截断,因此 33.9 变为 33。如果改为四舍五入到最接近的整数,通常误差较小。您可以使用nearbyint(y*32768)
.
有一些问题: