线性预测及其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上的实现奠定基础。
评论