语音信号的线性预测编码(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
来源:https://www.cnblogs.com/goncely/archive/2012/12/01/speech_lpc_overview.html