J'écris une DFT en place très simple. J'utilise la formule montrée ici: http://en.wikipedia.org/wiki/Discrete_Fourier_transform#Definition avec la formule d'Euler pour éviter d'avoir à utiliser une classe de nombre complexe juste pour cela. Jusqu'à présent, j'ai ceci:Transformée de Fourier discrète simple en place (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]);
}
}
Mais les termes Math.cos et Math.sin vont finalement à la fois positifs et négatifs, de sorte que je suis d'ajouter ces termes multiplié par des données [k], ils annulent et je juste obtenir une valeur obscène. Je vois comment cela se passe, mais je ne comprends pas comment mon code est peut-être mal représenter les mathématiques. Toute aide est appréciée. Pour info, je dois écrire le mien, je me rends compte que je peux obtenir des FFT sur étagère.
C'est un dft, pas fft. S'il vous plaît, remplacez fft avec dft, je ne peux pas le faire en raison d'un min caractères d'édition. –