2015-10-17 183 views
1

我一直在使用p5聲音進行簡單的FFT實驗,然後直觀地繪製光譜帶。(p5.js)FFT報告低頻「太大」,高頻「靜音」?

我注意到的一件事是,幾乎所有軌道中的低頻率都顯得非常高,而高頻率似乎是靜音的。

因此,例如,當僅使用16個波段進行FFT時,大多數聲音僅發生在前4個波段,而且似乎其他頻率(較高波段)被報告爲「靜音」或太安靜。

你可以在這個例子中看到這個例子:http://p5js.org/reference/#/p5.FFT即使在頻率相對較高的情況下,頻譜的右側仍然完全停止下來,但是低頻率被報告爲最高甚至更強烈, /更高的音調類型的聲音。

似乎某種轉換必須應用於FFT結果才能獲得與我們聽到的更好匹配的視覺表示?

我錯過了什麼?我的意思是,我肯定錯過了關於FFT如何工作以及如何報告頻率的一些基本信息,但我的意思是,這是一個共同的問題,有一個共同的解決方案?

回答

1

人類聽覺系統在本質上基本上是對數基-2,每個後續octave具有下一個的兩倍帶寬。因此,絕大多數人類可感知聲音的頻率含量低於1kHz,並且信號功率在更高頻率的FFT頻點之間傳播得更細 - 這正是您的圖形顯示的內容。

Spectrograms - 這是我懷疑您期望在這裏看到的 - 在x軸上繪製爲log(F),在Y軸上繪製的信號功率爲dB。您的代碼繪製兩軸線性的圖形。

另外,因爲您沒有特別將window function應用於用於計算FFT的樣本,所以您默認獲得的是rectangular window--這是遠遠不適合此應用的好選擇。

+0

Y軸上的日誌(F)和dB有趣的信息。原來p5可以選擇以dB爲單位獲得Y值,但我看不到任何窗口選項。 也許我應該尋找一個不同的js庫以獲得更好的窗口,然後還學習如何使用log(F)繪製X軸。 更多信息非常感謝(: – kroe