Ich schreibe eine sehr einfache In-Place-DFT. Ich benutze die Formel, die hier gezeigt wird: http://en.wikipedia.org/wiki/Discrete_Fourier_transform#Definition zusammen mit Eulers Formel, um zu vermeiden, eine komplexe Zahlklasse nur dafür zu verwenden. Bisher habe ich dies:Einfache diskrete Fourier-In-Place-Transformation (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]);
}
}
Aber die Math.cos und Math.Sin Begriffe gehen schließlich sowohl positive als auch negative, so wie ich diese Begriffe Hinzufügen multipliziert mit Daten [k], löschen sie sich aus und ich Bekommen Sie nur einen obszön kleinen Wert. Ich sehe, wie es passiert, aber ich kann nicht verstehen, wie mein Code die Mathematik vielleicht falsch repräsentiert. Jede Hilfe wird geschätzt. FYI, ich muss meine eigene schreiben, ich merke, dass ich FFT von der Stange bekommen kann.
Es ist ein dft, nicht fft. Bitte, ersetzen Sie fft mit dft, ich kann es nicht tun, weil min Zeichen bearbeiten. –