Piszę bardzo prosty lokalny DFT. Używam tutaj formuły: http://en.wikipedia.org/wiki/Discrete_Fourier_transform#Definition wraz z formułą Eulera, aby uniknąć konieczności stosowania złożonej klasy liczb właśnie w tym celu. Do tej pory mam to:Prosta lokalna dyskretna transformata Fouriera (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]);
}
}
Ale Math.cos i Math.sin terminy ostatecznie przejść zarówno pozytywne jak i negatywne, tak jak ja dodając te warunki mnożona danych [K], oni znoszą się i ja po prostu uzyskaj nieprzyzwoicie małą wartość. Rozumiem, jak to się dzieje, ale nie mogę zrozumieć, w jaki sposób mój kod może źle odzwierciedlać matematykę. Każda pomoc jest doceniana. FYI, muszę napisać własną, zdaję sobie sprawę, że mogę wyjść z półki FFT.
To jest dft, nie fft. Proszę, zamień fft na dft, nie mogę tego zrobić ze względu na min edycję znaków. –