2012-11-02 79 views
0

我想分析一些音頻,並儘可能將其分解爲正弦波。我之前從未使用過FFT,只是做了一些初步的閱讀,以及FFTW和KissFFT等概念和可用庫。如何用離散傅立葉變換找到音頻中的所有頻率?

我對這一點感到困惑......聽起來DFT/FFT只會在某個頻率,基頻的倍數下給出正弦幅度。例如,如果我以通常的44100Hz採樣音頻,並且選取一大塊256個樣本,那麼該卡盤可以適合44100/256 = 172Hz的一個週期,並且DFT將給出172的正弦幅度, 172 * 2,172 * 3等等是否正確?你如何在其他頻率找到力量?我希望看到從20Hz到大約15KHz的頻譜,大約以1Hz爲增量。

回答

1

不幸的是,在識別信號的固定樣本中的頻率時存在一定程度的不確定性。如果使用短FFT,則無法在相當寬的範圍內分辨頻率之間的差異。如果使用較長的FFT在頻域中獲得較高的分辨率,則無法快速檢測到頻率變化。這是數學中固有的。

關閉我的頭頂:如果您希望以1Hz爲增量提供15kHz範圍,則需要15000點FFT,其在44.1kHz意味着您將獲得每秒三次的頻率曲線。 (我可能會錯過2倍,因爲我不記得奈奎斯特限制是否意味着您實際上需要30kHz帶寬。)

您可能也有興趣Short-time Fourier transform。它不能解決基本的權衡問題,但在實踐中可能會得到你想要的。

+0

這或多或少是正確的,但請注意,重疊FFT以便獲得更多頻率更加頻繁的時變頻譜「快照」是很常見的做法。 –

+0

@PaulR,這就是我連接的維基百科文章所要求的STFT,不是嗎? –

+1

STFT不一定重疊 - 「ST」部分僅意味着「短期」,因爲您將DFT/FFT應用於連續的數據塊(可能會或可能不會重疊),而不是單個大塊整個數據集的DFT/FFT。所以你已經在上面的前兩段中描述了STFT,或多或少。 –

2

傅里葉分解允許您採取任何時間函數,並將其描述爲每個具有不同幅度和頻率的正弦波之和。但是,如果您想使用DFT來解決這個問題,則需要確保在頻域中有足夠的分辨率來區分不同的頻率。一旦你有了,你可以確定哪些頻率在信號中占主導地位,並創建一個由與這些頻率相對應的多個正弦波組成的信號。您說的正確的是,採樣頻率爲44.1 kHz,只能看到256個採樣,在這256個採樣中能夠檢測到的最低頻率是172 Hz的頻率。

獲得足夠的解決方案在頻域中:「僅在某些頻率,基本頻率的倍數」爲頻率

振幅值,是真對傅立葉分解,而不是DFT,這將有一個頻率分辨率一定的增量。 DFT的頻率分辨率與用於計算DFT的時域信號的採樣率和採樣數有關。降低頻率間隔可以讓您更好地區分靠近在一起的兩個頻率,這可以通過兩種方式來完成;

  1. 降低採樣率,但這會使週期性重複頻率更接近。 (請記住NyQuist定理)
  2. 增加用於計算DFT的樣本數。如果只有256個樣本可用,那麼可以執行「零填充」,其中將0值樣本附加到數據的末尾,但對此有一些影響需要考慮。

如何得出這樣一個結論:

如果你描繪出不同的音頻信號的頻率內容爲單個圖,你會發現,幅度不同升技。這是因爲單個信號的聲音不完全相同,並且任何信號(來自周圍環境和硬件本身)總是存在固有的噪聲。因此,您想要做的是取兩個或更多個DFT信號的平均值以消除噪聲並獲得更準確的頻率成分表示。根據您的應用程序,如果您捕捉的聲音隨着時間的推移而快速變化(例如語音或音樂),則這可能無法實現。因此,平均值僅適用於所有要平均的信號在聲音上幾乎相等(單獨的單獨記錄「同一事物」)。爲了澄清,例如,從四個時域信號中,您需要創建四個頻域信號(使用DFT方法),然後計算四個頻域信號的平均值爲單個平均頻域信號。這將消除噪音,並更好地表示音頻中固有的頻率。

的替代解決方案:

如果你知道你的信號應該包含一定數量的主頻率(不要太多),這些是唯一你是有趣的,那麼我建議你使用Pisarenko的諧波分解(PHD)或多重信號分類(MUSIC,很好的縮寫!)來找到這些頻率(及其相應的幅度值)。這與DFT相比計算密度較低。例如。如果您知道信號包含3個主頻率,Pisarenko會返回這三個頻率值,但請記住DFT揭示了更多信息,讓您得出更多結論。

2

你最初的假設是不正確的。 FFT/DFT不會在某些離散頻率下給出幅度。這些離散頻率僅僅是分箱的中心,每個分箱構成一個帶寬爲非零帶寬的窄帶濾波器,根據窗口(矩形,von Hann等)大致爲FFT分箱的兩個或兩個寬度)在FFT之前應用。因此,箱中心之間的頻譜內容的振幅將顯示出來,但分佈在多個FFT結果箱中。

如果關鍵信號的分離足夠大,並且噪聲級足夠低,則可以插入FFT結果以檢查倉中心之間的頻率。您可能需要使用高質量的插值器,例如Sinc內核。

如果您的信號間隔較小或噪音水平較高,那麼您可能需要較長的數據窗口才能提供更長的FFT以收集足夠的分辨率信息。在44.1k採樣速率下,長度爲256的FFT窗口幾乎肯定是太短而無法收集關於低於幾百赫茲的頻譜內容的足夠信息,如果這些頻率在你想查看的頻率之中,因爲它們不能分離乾淨地從直流偏壓(倉0)。

+0

謝謝。我的目標是分析聲學樂器和其他自然聲音的音頻,並將這些信息用於創建虛擬/軟件樂器。我從弓弦開始。我應該能夠找到大於256的窗口。我只是以此爲例。 (當我希望更好地理解事情時,我會在後面標記答案。) –