Sto scrivendo un DFT sul posto molto semplice. Sto usando la formula mostrata qui: http://en.wikipedia.org/wiki/Discrete_Fourier_transform#Definition insieme alla formula di Eulero per evitare di dover usare una classe di numeri complessi solo per questo. Finora ho questo:Semplice trasformatore discreto di Fourier (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]);
}
}
Ma i termini Math.cos e Math.sin finalmente andare sia positivi che negativi, così come sto aggiungendo questi termini moltiplicati con i dati [k], si annullano e io solo ottenere un valore oscenamente piccolo. Vedo come sta accadendo, ma non riesco a dare un senso a come il mio codice stia forse rappresentando male la matematica. Qualsiasi aiuto è apprezzato. Cordiali saluti, devo scrivere il mio, mi rendo conto che posso ottenere dal FFT di scaffale.
È un dft, non fft. Per favore, sostituisci fft con dft, non posso farlo a causa di un minimo di caratteri di modifica. –