2010-03-15 47 views
2

我想知道如果有人能指點我一個很好的教程或告訴我如何繪製字節數組的幅度。我使用的音頻格式是:U LAW 8000.0 Hz,8位,單聲道,1字節/幀。圖形幅度

+0

這取決於你的意思*振幅*。你想*瞬時*幅度,或平滑的RMS /峯值幅度?或者甚至頻域幅度對頻率(功率譜,頻譜圖等)? – 2010-03-15 16:30:39

+0

我不確定我需要什麼。基本上,我需要嘗試檢測某人何時開始和停止說話。 – 2010-03-15 16:36:16

+0

確定 - 這種類型的算法被稱爲語音活動檢測(VAD) - 它用於回聲消除和各種其他電信應用。我會在下面的答案中添加更多...... – 2010-03-15 17:10:25

回答

6

這聽起來像您對短期平滑的RMS振幅測量感興趣。通常要做到這一點,你需要對輸入信號進行整形,然後對其施加一個低通濾波器。

x1 = abs(x); // x2 = rectified input signal 
x2 = k * x2 + (1 - k) * x1; // simple single pole low pass recursive filter 

x2是信號x的幅度。 k是確定平滑濾波器的時間常數的因子< 1.0。

然後,您將獲得某種閾值,您可以使用該閾值來決定您處於靜默狀態(x2 < threshold)還是語音(x2 >= threshold)。

+0

是的,這是我正在尋找,謝謝。當你說:x2是信號x的幅度;什麼是'x'(對不起,我一直在爲此工作很長時間)。另外,有沒有一種很好的方法來計算k值應該具有的值還是存在常用值? – 2010-03-15 18:24:15

+0

x是當前採樣時間的輸入值(如果有幫助,可以將輸入數據流視爲數組x []]。通常k會介於0.9到0.99之間,但是你會想要試驗這個和閾值等等,以獲得你想要的行爲,從你在「沉默」和「語言」之間切換的速度有多快,你想要多少誤報/消極等等。 – 2010-03-15 18:45:33

+0

再一次感謝你的幫助。由於編碼的緣故,我是否需要做任何不同的事情? – 2010-03-15 19:01:12

0

閱讀關於Fourier transform。但它只是你需要做的所有事情的一部分,以達到你想要的。

+0

可憐的回答 - 它並沒有真正告訴任何關於圖形幅度的人。 – 2010-03-15 16:31:45

+0

@ Paul R:當我需要做類似的事情時,我必須閱讀約50頁的文章,才能理解原理。這不是一個簡單的問題。 – Roman 2010-03-15 16:33:58

+0

我知道你在說什麼,我已經完成了對dft和fft的研究。這是有趣的問題。 – 2010-03-15 16:41:15