我想開發音符探測器作爲我的學位項目,我想從頭開始。我已經編寫了用於「.wav」文件的代碼,該文件從該音頻音樂文件中提取所有信息,併爲此給出幅度。如何獲得以赫茲爲單位的DFT/FFT輸出頻率?
然後我寫了一個DFT的代碼 - 它給我輸出一個複數,其中一個軸(實數/虛數)是振幅/幅度,另一個是相位。
現在我想要的答案在頻率(赫茲不在向量)的問題,所以我可以檢查我的DFT是否給我正確的輸出。我如何將我的DFT輸出轉換爲頻率?
我有C語言編寫這一點,我不希望使用任何內置庫
我想開發音符探測器作爲我的學位項目,我想從頭開始。我已經編寫了用於「.wav」文件的代碼,該文件從該音頻音樂文件中提取所有信息,併爲此給出幅度。如何獲得以赫茲爲單位的DFT/FFT輸出頻率?
然後我寫了一個DFT的代碼 - 它給我輸出一個複數,其中一個軸(實數/虛數)是振幅/幅度,另一個是相位。
現在我想要的答案在頻率(赫茲不在向量)的問題,所以我可以檢查我的DFT是否給我正確的輸出。我如何將我的DFT輸出轉換爲頻率?
我有C語言編寫這一點,我不希望使用任何內置庫
你需要找到的峯值幅度然後制定出相應的頻率:
magnitude = sqrt(re*re+im*im)
i_max
。freq = i_max * Fs/N
,這裏Fs
=採樣率(Hz)和N
= FFT中沒有點。請參閱this answer瞭解bin索引和頻率如何相關的更詳細說明。
對不起保羅R,但我沒有得到它。我也計算了我的DFT結果的幅度。現在的問題是我必須找到每個窗口(1024個樣本)的i_max?而根據我所讀到的關於DFT,我只是在512個樣本上找到這個數值,這個數值是我得到最大值的N/2。 m我right.means我想asj dat ..並且也非常感謝你.. :) – mossad
當你說實軸是振幅而虛軸是相位時,你是在自己計算一下嗎?或者直接從DFT中拉出來?當你從DFT得到複雜的結果時,振幅就是結果的絕對值,相位就是結果的角度(又稱參數)。 –
是的,我自己計算DFT,意味着我得到的公式是「Sigma從k = 0 - > N-1,對於所有f(x)* W * N,這裏W * N = e ^( - i 2 PI/N)「就像這樣......我只是把這個公式轉換成我的C程序。 – mossad
峯值FFT大小處的頻率段頻率通常不是音樂音頻中的音符音高。 – hotpaw2