Cooley-Tukey FFT的精度 - 浮点数与双精度

时间:2013-02-25 16:15:00

标签: floating-point double fft

我听说浮点FFT的非准确性,特别是cos和sin函数 - 与double相比,数字完全不同。

我问,因为我重写了一些代码 - Cooley-Tukey FFT算法;结果不同。原始项目使用double,new是float。这是我的错误吗?我从matlab和c ++编写这段代码......并且很少问matlab的两倍是和java和c + double一样?

float  PI=3.141592;
// Make sure n is a power of 2
// if (n != (1 << m))
//    throw new RuntimeException("FFT length must be power of 2");

// precompute tables

 for (int i = 0; i < n / 2; i++) {
     cosa[i] = cos (-2 * PI * i / n);
     sina[i] =sin (-2 * PI * i / n);
 }

1 个答案:

答案 0 :(得分:3)

对于大多数FFT算法,“非精度”大致在O(NlogN)处随输入元素的大小增加;和KCS / IEEE754浮点数具有大约24位的精度。因此,对于不是超长的FFT,数据中的噪声,不完美的抗混叠和输入的量化通常都大于算术误差。

只有当你真正关心超过大约6位小数点的有效和准确数据时,float和double之间的结果才会“完全不同”。