2015-01-13 42 views
2

我有一個實時跟蹤音頻信號的程序。每個處理過的樣品我都能讀取它的值,範圍在< -1,1>之間。創建音頻電平表 - 信號標準化

我想創建(以及後來的顯示器)音頻電平表。從我的理解 - 做到這一點,我需要不斷將我的音頻信號實時轉換爲每個通道的dB值,然後以某種圖形形式顯示每個通道的dB值。

我有點迷失如何做到這一點,它應該是簡單的事情。只需從< -1,1>到< 0,1>(如... [n-sample +1]/2)進行標準化,然後從每個即將到來的樣本計算20 * log10使其成爲?

回答

2

您不能直接繪製信號,因爲它總是變化正面和負面。

因此,你需要以平均強度信號的每個這麼多的樣本。

說你在44.1kHz的採樣,也許這樣你更新你的顯示器每秒10次,你可能會選擇4410米的樣品。

所以你計算你的4410個樣本的RMS - 見http://en.wikipedia.org/wiki/Root_mean_square

RMS值始終爲正。

然後,您可以將此轉換爲dB:

伏分貝= 20×LOG10(Vrms)的電壓

這是假設你的最大信號-1到+1對應於-1到+1伏。如果不是,你需要做進一步的調整。

+2

上述公式的結果並非嚴格的dBV,因爲這是對1V信號的相對測量。上面的等式計算相對於滿量程偏差的信號功率,在這種情況下爲夾點。 音頻電平表(特別是數字音頻)有時顯示的峯值,而不是RMS,在這種情況下,你計算'MAX(ABS(X0)... ABS(XN-1))'對於每個分析窗口。 – marko

+0

那會怎麼樣呢?從例如最後4410個採樣計算X = max(abs(X0)... abs(Xn-1)),並每隔100ms在lvl表上顯示20 x log10(X)? – F1sher