Escribo un DFT en el lugar muy simple. Estoy usando la fórmula que se muestra aquí: http://en.wikipedia.org/wiki/Discrete_Fourier_transform#Definition junto con la fórmula de Euler para evitar tener que usar una clase de números complejos solo para esto. Hasta ahora tengo esto:Transformada de Fourier discreta simple en el lugar (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]);
}
}
Pero los términos Math.cos y finalmente van Math.sin tanto positivos como negativos, de modo que estoy añadiendo esos términos se multiplica con los datos [k], se cancelan y yo acaba de obtener un valor obscenamente pequeño. Veo cómo está sucediendo, pero no puedo entender cómo mi código quizás esté representando erróneamente las matemáticas. Cualquier ayuda es apreciada. Para tu información, tengo que escribir la mía, me doy cuenta de que puedo conseguir FFT de venta libre.
Es un dft, no fft. Por favor, reemplace fft con dft, no puedo hacerlo debido a un mínimo de edición de caracteres. –