J'essaie de comprendre les FFT, voici ce que j'ai jusqu'à présent:
Afin de trouver l'amplitude des fréquences dans une forme d'onde, il faut les rechercher en multipliant l'onde par la fréquence qu'ils recherchent, en deux phases différentes (sin et cos) et en faisant la moyenne de chacune. La phase se trouve par sa relation aux deux, et le code pour cela est quelque chose comme ceci:
//simple pseudocode
var wave = [...]; //an array of floats representing amplitude of wave
var numSamples = wave.length;
var spectrum = [1,2,3,4,5,6...] //all frequencies being tested for.
function getMagnitudesOfSpectrum() {
var magnitudesOut = [];
var phasesOut = [];
for(freq in spectrum) {
var magnitudeSin = 0;
var magnitudeCos = 0;
for(sample in numSamples) {
magnitudeSin += amplitudeSinAt(sample, freq) * wave[sample];
magnitudeCos += amplitudeCosAt(sample, freq) * wave[sample];
}
magnitudesOut[freq] = (magnitudeSin + magnitudeCos)/numSamples;
phasesOut[freq] = //based off magnitudeSin and magnitudeCos
}
return magnitudesOut and phasesOut;
}
Pour ce faire pour de très nombreuses fréquences très rapidement, les FFT utilisent de nombreuses astuces.
Quelles sont certaines des astuces utilisées pour rendre les FFT beaucoup plus rapides que les DFT?
PS J'ai essayé de regarder les algorithmes FFT terminés sur le Web, mais toutes les astuces ont tendance à être condensées en un seul beau morceau de code sans trop d'explications. Ce dont j'ai besoin en premier, avant de pouvoir comprendre le tout, c'est une introduction à chacun de ces changements efficaces en tant que concepts.
Je vous remercie.
sudo
dans votre exemple de code pourrait prêter à confusion, car il s'agit d'une commande bien connue dans le monde informatique. Vous vouliez probablement dire psuedocode.