2011-04-20 61 views
4

我已經做了一個應用程序,實時繪製FFT屏幕(從麥克風)。 x軸上的時間,y軸上的頻率和像素的顏色代表幅度(幾乎是一個香草FFT頻譜圖)。聲譜圖

我的問題是,即使我可以看到音樂模式也有很多噪音。使用Google搜索我看到人們對幅度應用對數計算。我應該這樣做嗎?如果是這樣,公式會是什麼樣子? (我使用C#,但我可以因此任何樣品是確定數學轉換成代碼。)

我可以通過施加表示作爲較暗的顏色值越低顏色方案繞過這個問題。我只是不確定是否沒有對數計算就能正確表示音頻。

+0

你有輸出目前的樣子的截圖嗎? – RQDQ 2011-04-20 13:07:09

+0

更好的是,使用日誌頻率軸,更加貼近耳朵的靈敏度,要了解其差異,請參閱http://wikidelia.net/wiki/Spectrogram示例 – martinwguy 2015-09-04 22:16:17

回答

8

以對數刻度表示的振幅接近人類聽覺系統的靈敏度,因此與非對數刻度相比,您可以更好地表示聽到的內容。在數學上,所有你需要做的是:

Alog = 20*log10 (abs (A)) 

哪裏A是FFT數據的幅度,Alog是輸出。 20的因子只是一個約定,對圖像沒有影響,您可能會根據顏色方案進行縮放。

EDIT

關於20因子說明:分貝(分貝)單元是一個對數單元,測量比率:它代表一個尺度上100和10之間的距離,是相同的間1000和100(因爲它們具有相同的比率:1000/100 = 100/10)。如果以dB爲單位衡量它,你得到:

10*log10 (1000/100) = 10*log10 (100/10) = 10 

10的因素是因爲deci意味着tenth,這意味着1倍兒爲10個分貝,(如1公斤是千克)

由於人類聽覺系統也是(近似)測量比率,在對數標度上測量聲級是有意義的,即測量聲級與某個參考值的比值。由於聲音的級別與聲波的功率(單位爲瓦特)有關,所以實際上您可以測量功率比率P/Pref。另外,功率與幅度的平方成正比,所以總得到:

10*log10 (P/Pref) = 10*log10 (A^2/Aref^2) = 20*log10 (A/Aref) 

由日誌規則。這是20因素的起源 - 請記住,在計算機中,音頻由聲波的瞬時振幅表示。

+0

謝謝。你能否進一步解釋20? – 2011-04-20 13:14:47

+0

我編輯了我的答案 – 2011-04-20 14:11:01

3

以對數形式查看譜圖確實是查看音頻信號的更好方法。請記住,你需要在時間方向和頻率方向都有好的resolution。如果你的箱子太少,可能看起來很奇怪。

另一個重要的問題是,在對數刻度上查看您的STFT是而不是降噪技術。你所看到的「噪音」可能是實際的noise或者它可能是諸如harmonics,transients,spectral leakage和其他預期會存在的東西。根據您的應用,如果您需要對信號進行短時分析,則wavelet轉換可能更適合您的需求。它消除了STFT的某些缺點,例如恆定的窗口大小。