私はFFTを理解しようとしていますが、ここに私が持っているものがあります:
波形内の周波数の大きさを見つけるには、2つの異なる位相(sinとcos)で、波形に検索対象の周波数を掛け、それぞれを平均化することにより、周波数を調べる必要があります。フェーズは2つとの関係によって検出され、そのためのコードは次のようなものです。
//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;
}
非常に多くの周波数でこれを非常に迅速に行うために、FFTは多くのトリックを使用します。
FFTをDFTよりもはるかに高速にするために使用されるトリックにはどのようなものがありますか?
PS完成したFFTアルゴリズムをWebで調べてみましたが、すべてのトリックは説明のない1つの美しいコードに凝縮される傾向があります。全体を理解する前にまず必要なのは、これらの効率的な変更のそれぞれを概念として紹介することです。
ありがとうございました。
sudo
コード例での使用は、コンピューターの世界ではよく知られているコマンドであるため、混乱を招く可能性があることを指摘したかっただけです。あなたはおそらく擬似コードを意味していました。