任务是将傅里叶变换应用于一个小系列(12 个值)
据我了解,快速傅里叶变换不是很合适,因为 它需要2次的数据量,这意味着它将三分之一的数据减少到8个值,这很关键
我正在寻找现成的解决方案,或对公式的解释,以便自己实施
我在网上找到了这个公式
我试着指望它,然后将FFT 中的第一个值与 wiki进行比较。我得到的价值观很不一样。
我正在转换的系列的值(6.6、6.3、6、6.3、6.6、6.6、7.2、6.9、6.9、7.2、6.3、6)
我这样计算: 6.6 * exp(-2*3.141592*1*0 / 12) + 6.3*exp(-2.3.141592*1*1 / 12) + ... 所以我对所有的 x 和 n 进行排序值变化1直到12并将其全部加起来,所以我得到上面屏幕截图中的值78.9这是我认为是错误的,还是来自wiki的FFT实现错误,或者FFT和非快速傅里叶有不同的第一值?
我附上公式的实现
public static Complex[] FT(Complex[] X)
{
int N = X.Length;
Complex[] result = new Complex[N];
for (int k = 0; k < N; k++)
{
for (int n = 0; n < N; n++)
{
double arg = -2 * Math.PI * k * n/ N;
var complex = new Complex(Math.Cos(2 * Math.PI * k * n / N), Math.Sin(-2 * Math.PI * k * n / N));
result[k] += X[n] * complex;
}
}
return result;
}


开始
此外,在您的公式
j中,这是虚数单位。您将其放在计算中的位置尚不清楚。在同一个Wiki上,给出了您的公式和由此产生的公式