ฉันพยายามเข้าใจ FFT นี่คือสิ่งที่ฉันมี:
เพื่อที่จะหาขนาดของความถี่ในรูปแบบของคลื่นเราจะต้องตรวจสอบพวกเขาโดยการคูณคลื่นด้วยความถี่ที่พวกเขากำลังค้นหาในสองขั้นตอนที่แตกต่างกัน (บาปและ 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;
}
เพื่อที่จะทำเช่นนี้สำหรับความถี่จำนวนมากอย่างรวดเร็ว FFTs ใช้เทคนิคมากมาย
เทคนิคใดบ้างที่ใช้ในการทำให้ FFT เร็วกว่า DFT มาก
PS ฉันลองดูขั้นตอนวิธี FFT ที่เสร็จสมบูรณ์แล้วบนเว็บ แต่เทคนิคทั้งหมดมีแนวโน้มที่จะรวมตัวเป็นโค้ดที่สวยงามเพียงชิ้นเดียวโดยไม่มีคำอธิบายมากมาย สิ่งที่ฉันต้องการก่อนที่ฉันจะเข้าใจได้ทั้งหมดคือการแนะนำการเปลี่ยนแปลงที่มีประสิทธิภาพเหล่านี้เป็นแนวคิด
ขอขอบคุณ.
sudo
ในตัวอย่างโค้ดของคุณอาจสร้างความสับสนเนื่องจากเป็นคำสั่งที่รู้จักกันดีในโลกคอมพิวเตอร์ คุณอาจหมายถึง psuedocode