2012-01-26 10 views
2

我想確定一個音頻信號的音量。如何最好地確定信號的音量?

我已經發現了兩個選項:

  1. 計算根均振幅
  2. 平方發現的最大振幅

在那裏用1號或2號優勢?

下面是我正在做的事情: 我想讓我的Android分析麥克風的音頻。我希望設備能夠檢測到巨大的噪音。輸入是一個簡短的[]。

+1

什麼樣的音頻信號?你爲什麼需要音量? (不只是想讓你生氣,我真的相信這是很難回答你的問題不知道) – zrxq

+0

我調整的問題。 – gregm

回答

2

如果您使用最大振幅(2),那麼您的音量水平將由單個樣本確定(您甚至可能聽不到)。計算與聲音響度相關的值(例如聲壓級或聲功率級)時,需要使用RMS(1)。

因爲你的耳朵是不是所有的頻率同樣敏感,你的觀念更好的歸屬關係,可以通過對信號使用A-weighting了。將信號拆分(濾波)爲倍頻帶,計算每個頻帶的RMS並應用A加權。

1

如果你想檢查音量,只計算其dB值(我假設的信號是標準化,即1 ==最高水平):

level[n] = - 20 x log(1/signal[n]); 

然而,檢測音頻噪聲不是一個簡單的任務。最常見和最簡單的技術是使用稱爲NoiseGate的算法,它基本上將信號電平與某個dB閾值進行比較 - 如果信號電平高於閾值,則輸出爲零。但在實踐中是無法使用的;還必須有一些攻擊和釋放時間用於平滑閾值處理,否則它也會影響真實信號(音樂,語音)併產生某種剪輯。

檢查谷歌,它會給你很多關於NoiseGate及噪聲消除技術資源:

http://en.wikipedia.org/wiki/Noise_gate

http://www.developer.com/java/other/article.php/3599661/Adaptive-Noise-Cancellation-using-Java.htm

相關問題