FFT를 이해하려고 노력 중입니다. 여기까지 내가 가진 내용은 다음과 같습니다.
파형에서 주파수의 크기를 찾으려면 두 개의 서로 다른 위상 (sin 및 cos)에서 파형에 검색중인 주파수를 곱하고 각각을 평균화하여 주파수를 조사해야합니다. 단계는 둘과의 관계에 의해 발견되며 그 코드는 다음과 같습니다.
//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보다 훨씬 빠르게 만드는 데 사용되는 트릭은 무엇입니까?
추신 : 웹에서 완성 된 FFT 알고리즘을 살펴 보았지만 모든 트릭은 많은 설명없이 하나의 아름다운 코드로 압축되는 경향이 있습니다. 전체 내용을 이해하기 전에 먼저 필요한 것은 이러한 효율적인 변경 사항을 개념으로 소개하는 것입니다.
감사합니다.
sudo
컴퓨터 세계에서 잘 알려진 명령이기 때문에 코드 예제에서 의 사용 이 혼란 스러울 수 있다고 지적하고 싶었 습니다. 아마도 psuedocode를 의미했을 것입니다.