語音信號的線性預測編碼(LPC)
by Goncely
1 線性預測技術概述
線性預測編碼是語音處理中的核心技術,它在語音識別、合成、編碼、說話人識別等方面都得到了成功的應用。其核心思想是利用輸入信號u和歷史輸出信號s的線性組合來估計輸出序列s(n):
式中的ai和bj被稱為預測系數,其傳遞函數可表示為:
該式為有理函數,在基於參數模型的譜估計法和系統辨識研究中,根據極點和零點數目的不同,它存在三種情況:一種是只有零點沒有極點的情況,分母U(z)為單位1,稱為滑動平均模型,即MA(Moving-Average)模型;另一種是只有極點沒有零點的,分子S(z)為常數,稱為自回歸模型,即AR(Auto-Regressive)模型;第三種是既有零點又有極點的,稱為自回歸滑動平均模型,即ARMA(Auto-Regressive Moving-Average)模型。這三種模型中對於復雜的頻譜特性的描述能力最強的應該是ARMA模型,但它的參數估計存在許多復雜問題。全極點模型的參數估計十分簡便,而且往往只需要很少幾個極點就可以相當好地逼近一種頻譜或一種系統的頻率響應,因為它的傳遞函數相當於一個遞歸數字濾波器,即IIR濾波器。眾所周知,用一個三四階的IIR數字濾波器來逼近希望的頻率響應幅度特性就可能相當於一個二十多階的FIR數字濾波器。所以在信號的線性預測中,應用最多的便是AR模型。
2 語音產生的源-過濾器模型
語音產生的過程如圖1所示。氣流從肺部出來,通過聲帶產生震動,形成聲源激勵。聲源路經由聲道構成的過濾器,輸出最終的語音信號。
圖1 語音產生過程
聲帶只有在輸出濁音時才震動,此時聲源激勵為准周期信號,也稱為聲門脈沖,其頻譜呈單調遞減的趨勢。聲道的頻譜特性可由共振峰表征,在頻譜上表現為各峰值。輸出語音的頻譜特性為前兩者頻譜的疊加。語音生成各階段的信號波形和頻譜如圖2所示。
圖2 語音產生各階段的波形和頻譜
上述的語音產生模型也稱為源-過濾器模型(Source-Filter Model),聲帶震動產生的准周期信號為源,聲道為過濾器。然而在真實的語音產生過程中,聲帶具有震動和不震動兩種模式。當聲帶震動時,產生濁音(voiced sound),此時聲源為准周期脈沖信號,模擬聲帶的周期震動,元音多為此類;當聲帶不震動時,產生清音(unvoiced sound),此時聲源為白噪聲隨機信號,模擬氣體紊流與摩擦,輔音多為此類。語音產生模型通過一個開關控制激勵源的選擇,當發濁音時,選擇周期激勵源;當發清音時,選擇白噪聲激勵源。聲道參數通過一個全極點的時變線性濾波器模擬,聲道參數退化為線性濾波器的系數。語音產生的數學模型如圖3所示。
圖3 語音產生的源-過濾器模型
該語音產生模型的傳遞函數為:
式中G為常數,S(z)和U(z)分別為輸出語音s(n)和激勵信號u(n)的Z變換,s(n)和u(n)的關系可以表示為差分方程:
3 語音信號的LPC原理
在語音分析時,一般將短時語音信號看成是穩態信號,當前語音樣本可以有效地由歷史語音樣本的線性組合來近似,所以可定義預測器:
由於預測系數{ɑk}在預測過程中看作常數,所以它是一種線性預測器,這種線性預測最早用於語音編碼,因此人們常稱為LPC(Linear Predictive Coding),它的系統函數為:
顯然,如果語音信號s(n)精確的符合圖3所描述的全極點產生模型,那么預測誤差為:
但是,實際信號未必精確的符合這個假定,因此實際的預測誤差應為:
e(n)也稱為殘差(residual)信號。上式表明預測誤差序列e(n)是信號s(n)通過一個具有如下系統函數的系統產生的輸出:
預測誤差濾波器A(z)是系統H(z)的逆濾波器,即:
輸出語音序列s(n)可由圖4所示的數學模型給出。
圖4 語音產生的數學模型
4 線性預測系數的估計
由於給定的只有信號s(n)和一個參數未知的模型式,想要使這個模型盡可能精確的描述信號s(n),應該使模型所得的預測誤差在某一短時的總能量盡可能小,並在此准則下求出最佳預測系數{ɑk}。為此,定義短時平均預測誤差能量:
其中sn(m)是在抽樣點n附近選擇的一個語音段,即
要使短時平均預測誤差能量En達到最小值,{ɑk}必須滿足(i=1,2,…,p),由此便得到以{ɑk}為變量的線性方程組:
, i = 1, 2, …, p
即
, i = 1, 2, …, p
定義,則有
, i = 1, 2, …, p
這個線性方程組通常有唯一解。當{ɑk}滿足上式時,短時平均預測誤差能量En有最小值,其表達式為
增益因子G的估算如下:
G在所考慮的短時內應該是一個常數。根據短時平均預測誤差能量的定義,有
假若被分析的信號s(n)精確符合假定的全極點模型,那么假想的輸入信號u(n)可以認為是一個單位方差的白噪聲序列。如果只考慮s(n)被某一短時窗截得的部分,那么輸入信號也可以是一個單位的δ脈沖δ(n)。在這兩種情況下,上式中的輸入信號總能量都為1,於是可得:
這樣直接把殘差能量當作增益的平方,雖然只是近似的,卻是很實用的,特別是當模型式的假定是充分考慮了語音產生過程的各種因素時。當預測殘差序列
接近於白噪聲序列(清音)或δ脈沖串(濁音)時,用上式估算出的
及最佳線性預測系數{ɑk}來重構原信號s(n)可以獲得很好的效果。
求解線性預測系數方程組,需要考慮兩個方面的問題:
(1)指定m的范圍,以計算;
(2)指定sn(m)。
根據以上兩個方面假定的不同,行成了LPC系數的各種解法。
5 LPC的自相關算法
LPC系數的自相關法假定sn(m)只在0≤m≤N-1時有效,其他為零,如下圖所示:
此時
, 1≤i≤p, 1≤k≤p
等價於
, 1≤i≤p, 1≤k≤p
對於每一個i和k來說,上式右邊存在N-|i-k|個非零項。進一步可以發現
其中為語音段sn(m)的短時自相關函數,即
由於自相關函數是偶函數,所以
, 1≤i≤p, 1≤k≤p
此時,求解線性預測系數的方程組變為
1≤i≤p
即
由上可見,求解線性預測系數的關鍵在於計算語音段的p階自相關函數,並求解p階自相關矩陣的逆矩陣。自相關矩陣為對角Toeplitz矩陣,有很多高效的求逆算法。
采用自相關法時,最小均方差條件下的預測誤差能量表示為:
自相關算法的偽C++代碼如下所示。LPCAuto函數輸入N個采樣點的短時語音數據x,輸出p階LPC系數a,並返回通過短時能量估計的增益G。
double LPCAuto(constdouble x[]/*in wave data*/, size_t N, double a[]/*out LPC*/, size_t p)
{
/// 先計算R(0), R(1), ..., R(p-1), R(p)
ASSERT(N > p);
std::vector<double> R(p+1, 0);
for(size_t i=0; i<=p; i++)
{
for(size_t n=0; n<N-i; n++)
R[i] += x[n]*x[n+i];
}
Matrix Rm(p, p);
for(size_t i=0; i<p; i++)
{
Rm[i][i] = R[0];
for(size_t j=0; j<i; j++)
Rm[i][j] = Rm[j][i] = R[i-j];
}
Rm.Reverse();
Matrix Rv(p, 1, R.data()+1);
Rm *= Rv;
for(size_t i=0; i<p; i++)
a[i] = Rm[i][0];
double E = R[0];
for(size_t i=1; i<=p; i++)
E -= a[i-1]*R[i];
returnsqrt(E);
}
6 影響LPC預測的因素
要使模型的假定較好地符合語音產生模型,主要有兩個因素要考慮:首先是模型的階數p要與共振峰個數相吻合,其次是聲門脈沖形狀和口唇輻射影響的補償。通常一對極點對應一個共振峰,10kHz采樣的語音信號通常有5個共振峰,取p=10,對於8kHz采用的語音信號可取p=8,此外為了彌補鼻音中存在的零點以及其他因素引起的偏差,通常在上述階數的基礎上再增加兩個極點,即分別取p=12和p=10。
聲門產生的聲源信號其頻譜每倍程下降12dB,而口唇輻射則使語音信號頻譜每倍程加強6dB。所以由於聲門脈沖形狀和口唇輻射的影響,其總的趨勢使語音信號的頻譜產生大約每倍程下降6dB的高頻衰落現象。要抵消這種影響,通常在進行LPC分析之前采用一個非常簡單的一階FIR濾波器1-ɑz-1進行預加重(Pre-Emphasis),也就是進行高頻提升,對於10kHz采樣的語音,預加重系數取ɑ=0.95。
對於考慮了上述兩個因素的LPC分析,其預測殘差序列近似為白噪聲,並且殘差能量也相當小,這表明由某一短時信號所得到的線性預測系數能較好地描述產生這一語音段的聲道特性。
7 參考文獻
【1】語音信號處理,易克初,國防工業出版社,2000.6
【2】http://www.core.org.cn/OcwWeb/Linguistics-and-Philosophy/24-963Fall-2005/CourseHome/index.htm
【3】http://www.hum.uu.nl/uilots/lab/courseware/phonetics/LPC/LPC_analysis.html
【4】Robert M. Gray, "A survey of LPC and a History of of Realtime Digital Speech on Packet Networks." Foundations and Trends R Vol. xx, No xx (2010) 1147.
【5】http://www.xavieranguera.com/tdp_2011/4-Source-Filter-Models.pdf