Sto cercando di capire le FFT, ecco cosa ho finora:
Per trovare l'entità delle frequenze in una forma d'onda, si deve sondare per loro moltiplicando l'onda per la frequenza che stanno cercando, in due diverse fasi (sin e cos) e calcolando la media di ciascuna. La fase si trova dalla sua relazione con i due, e il codice per questo è qualcosa del genere:
//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;
}
Per fare ciò per moltissime frequenze molto rapidamente, gli FFT usano molti trucchi.
Quali sono alcuni dei trucchi utilizzati per rendere le FFT molto più veloci della DFT?
PS Ho provato a guardare gli algoritmi FFT completi sul web, ma tutti i trucchi tendono ad essere condensati in un bellissimo pezzo di codice senza molte spiegazioni. Ciò di cui ho bisogno prima, prima di poter capire tutto, è una breve introduzione a ciascuno di questi cambiamenti efficienti come concetti.
Grazie.
sudo
tuo esempio di codice potrebbe essere fonte di confusione, in quanto si tratta di un comando ben noto nel mondo dei computer. Probabilmente intendevi psuedocode.