我在寫一個非常簡單的就地DFT。我使用這裏顯示的公式: http://en.wikipedia.org/wiki/Discrete_Fourier_transform#Definition以及歐拉公式,以避免爲此僅使用複數類。到目前爲止,我有這樣的:簡單的就地離散傅里葉變換(DFT)
private void fft(double[] data)
{
double[] real = new double[256];
double[] imag = new double[256];
double pi_div_128 = -1 * Math.PI/128;
for (int k = 0; k < 256; k++)
{
for (int n = 0; n < 256; n++)
{
real[k] += data[k] * Math.Cos(pi_div_128 * k * n);
imag[k] += data[k] * Math.Sin(pi_div_128 * k * n);
}
data[k] = Math.Sqrt(real[k] * real[k] + imag[k] * imag[k]);
}
}
但Math.Cos和Math.Sin方面最終會積極和消極的,這樣我加入這些條款乘以數據[K],他們取消了,我只是得到一些猥瑣的小价值。我看到它是如何發生的,但我無法理解我的代碼可能是否代表數學。任何幫助表示讚賞。僅供參考,我不得不寫我自己的,我意識到我可以得到現成的FFT。
這是一個dft,而不是fft。請用dft替換fft,由於最少的編輯字符,我無法做到這一點。 – 2012-10-04 19:30:15