曹華,李偉,譚豔梅 發表於 2012-04-24 11:38:04
線性預測分析是現代語音信號處理中最核心的技術之一,為現代語音信號處理的飛速發展立下了赫赫功勞,在語音分析、合成、編碼、識別等方面都有著廣泛的應用,至今仍是最有效的語音分析技術之一。如VoIP和H.323網上多媒體通信系統中所使用的G.729 CS-ACELP語音編碼算法就是一種以共軛代數碼本激勵線性預測為基礎的高質量的語音編碼標準。
1線性預測的基本原理
在語音信號處理中最常用的模型是全極點模型。線性預測所包含的基本概念是,通過使實際語音抽樣和線性預測抽樣之間差值的平方和達到最小值,即進行最小均方誤差的逼近,能夠決定惟一的一組預測器係數。如果一個隨機過程用一個p階全極點系統受白噪聲激勵產生的輸出來模擬,設這個系統的傳遞函數為:
其中:p是預測器階數;G是聲道濾波器增益。由此,語音抽樣s(n)和激勵信號e(n)之間的關係可用下列差分方程來表示:
即語音樣點間有相關性,可以用過去的樣點值預測未來樣點值。對於濁音,激勵e(n)是以基音周期重複的單位衝激;對於清音e(n)是平穩白噪聲。
在模型參數估計過程中,把如下系統稱為線性預測器:
式中:ai稱為線性預測係數。從而,p階線性預測器的系統函數具有如下形式:
在式(1)中的A(z)稱作逆濾波器,基傳輸函數為:
而線性預測方程可以按如下方法得到:把某一幀內的短時平均預測誤差定義為:
由此可計算出預測係數。
由於語音信號的短時平穩性,要分幀處理(10~30 ms),對於一幀從n時刻開窗選取的N個樣點的語音段s(n),記為Φn(j,i):
2 G.729中線性預測分析的基本原理
用10階線性預測(LP)作短時分析,LP合成濾波器定義為:
3在Matlab上實現線性預測
3.1加窗和自相關函數計算
G.729語音編碼算法大多是用C語言編程實現的,程序顯得格外冗長,有一定的局限性。由於Matlab在數據分析、自動控制、數位訊號處理、繪圖等方面具有強大的功能,為了直觀的表述,就運用Matlab來實現線性預測分析這一部分的算法。
圖1給出了混合窗的示意圖,它由兩部分構成,前半部分是1/2個哈明窗;後半部分是1/4餘弦函數:
式中:有5 ms(40個樣點)來自下一幀,15 ms(120個樣點)來自上一幀,當前幀10 ms(80個樣點)加窗過程如圖1所示。
得到加窗如圖2所示。
3.2LP係數的求取
求解線性預測濾波器係數ai,將使用到最經典的Levinson-Durbin算法。該算法的步驟為:
上面各式中括號內的上標表示預測器的除數。步驟(1)~(4)可對I=1,2,…,P進行遞推求解,其中:E為最小均方預測誤差;R為自相關係數;k表示反射係數,取值範圍為[-1,1];aij表示i階預測器的第j個係數。通過運算發現,其實在計算過程中,雖然目標是計算一個p階線性預測器的全部係數,但實際上在遞推過程中僅算出了所有除數低於p階線性預測器的全部係數,同時計算出了最小預測誤差能量(遞推式中反射係數的取值範圍是保證系統H(z)穩定性的充分必要條件,即多項式A(z)的全部根都落在單位圓內)。
從推導中得知,φn(j,i)的物理意義可以理解為sn的短時自相關函數。因此,它反映了語音波形的實際情況,即波形不同,值也不同。然而ai的取值由φn(j,i)決定,並隨φn(j,i)的改變而改變,因此也可以說ai反映了語音波形的實際情況。
其Matlab描述如下:
4結語
線性預測在語音處理方面的應用很廣泛,而用Matlab來實現可以很直觀地知道分析結果,為下一步將算法在DSP上的實現奠定基礎。
打開APP閱讀更多精彩內容
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴