2010-01-04 60 views
4

我有一個程序,繪製頻譜分析(Amp/Freq)的信號,這是很好的DFT轉換爲極地。但是,這並不是像winamp(右上角)或者其他任何音頻軟件地塊那樣的圖表。我不確定這種圖形稱爲什麼(如果它有一個獨特的名字),所以我不知道該找什麼。「Winamp風格」的頻譜分析儀

我對頻率軸是基礎的兩個指數,振幅軸困惑我雖然積極。

任何指針?

+0

這可能是有趣的:http://stackoverflow.com/questions/2466196/normalize-fft-magnitude-to-imitate-wmp。 – mtrw 2010-03-26 05:02:52

回答

0

嗯,我不是100%確定你是什麼意思,但肯定它只是從FFT中獲取數據?

如果你想要得到的數據,你有(對於44KHz的文件),在22kHz的頻率點,11KHZ 5.5Khz等,那麼你可以使用一個小波分解,我猜...

此線可能幫你的有點...

Converting an FFT to a spectogram

相同的排序爲頻譜我猜信息...

2

要生成你需要做以下步驟功率譜:

  • 將窗函數應用於時域數據(例如,漢寧窗)
  • 計算FFT FFT頻點幅度的用於FFT的N/2個點(通常10 * log10(re * re + im * im)
  • 計算日誌)

這給出了對數幅度(即dB爲單位)與線性頻率。

如果您還想要一個對數頻率刻度,那麼您將需要累積適當範圍的分檔的大小(並且您需要一個相當大的FFT開始)。

3

其實是一個有趣的問題。我知道你在說什麼;頻率軸當然是對數的。但是幅度呢?針對另一張海報,幅度不能簡單地以dB爲單位,因爲dB沒有零概念。這引入了量化誤差,SNR和動態範圍的思想。假設接收的數字化(即離散時間和離散振幅)時域信號x [n]等於s [n] + e [n],其中s [n]是發射的離散信號時間信號(即連續振幅)和e [n]是量化誤差。假設x [n]用b位表示,爲簡單起見,取[0,1]中的值。那麼e [n]的最大峯峯幅度是一個量化級別,即2^{ - b}。動態範圍定義爲以分貝爲單位,20 log10(max-to-peak | s [n] |)/(max-to-peak | e [n] |)= 20 log10 1 /(2^{ - b})= 20b log10 2 = 6.02b dB。對於16位音頻,動態範圍爲96 dB。對於8位音頻,動態範圍爲48 dB。

那麼Winamp如何繪製幅度呢?我的猜測:

  1. 最小振幅假設爲-6.02b dB,最大振幅爲0 dB。在視覺上,Winamp在考慮這些閾值時繪製窗口。

  2. 另一個非線性圖,如log(1 + X)被使用。這個函數總是非負的,當X很大時,它近似於log(X)。

有沒有其他專家知道?讓我知道你的想法。我也很感興趣,究竟是如何實現的。

0

你需要的是功率譜圖。你必須計算你信號當前窗口的DFT。然後將每個值平方。