语音信号处理#3 线性预测分析(LPC)

本文最后更新于:2022年7月21日 下午

语音信号处理#3 线性预测分析(LPC)

LPC指Linear Predictive Coding,重要的是LP,线性预测。主要思想是由于语音样点之间存在相关性,所以可以用过去的样点值来预测现在的样点值,用数学公式表示就是:

x^(n)=k=1pwkx(nk)\hat{x}(n)=\sum^p_{k=1}w_kx(n-k)

用过去p个点的加权和表示预测点x^(n)\hat{x}(n)

现在问题是求这个权重wkw_k,因为比较熟悉机器学习,所以直接用那边的思想来解释:欲求参数的值,我们就定义一个损失函数,让损失函数达到最小时的参数值就是要求的值。所以我们定义MSE(mean square error),然后令导数等于0来求极值点。

\displaylines{ \epsilon(n)=x(n)-\hat{x}(n)\\\\ \boldsymbol{J}=MSE=\epsilon^2(n)\\\\ \frac{\partial \boldsymbol{J}}{\partial w_k}=0 }

嗯,就这么简单…………吗?下面公式推导看个乐子,不严谨。

展开公式如下:

定义Rn(j)=n=jN1x(n)x(nj)R_n(j)=\sum^{N-1}_{n=j}x(n)x(n-j),(5)中忽略了-2

J=x2(n)2x(n)x^(n)+x^2(n)=x2(n)2x(n)k=1pwkx(nk)+k=1pj=1pwkwjx(nk)x(nj)Jwk=2x(n)x(nk)+j=1pwjx(nj)x(nk)(k=1,2,,p)=2R(k)+j=1pwjR(jk)=0(k=1,2,,p)R(k)=j=1pwjR(jk)(k=1,2,,p)\begin{align*} \boldsymbol{J} &= x^2(n)-2x(n)\hat{x}(n)+\hat{x}^2(n) \tag{1} \\\\ &= x^2(n)-2x(n)\sum^p_{k=1}w_kx(n-k)+\sum^p_{k=1}\sum^p_{j=1}w_kw_jx(n-k)x(n-j) \tag{2} \\\\ \frac{\partial \boldsymbol{J}}{\partial w_k} &= -2x(n)x(n-k)+\sum^p_{j=1}w_jx(n-j)x(n-k) \quad (k=1,2,\dots,p) \tag{3} \\\\ &=-2R(k)+\sum^p_{j=1}w_jR(|j-k|) = 0 \quad (k=1,2,\dots,p) \tag{4} \\\\ R(k) &= \sum^p_{j=1}w_jR(|j-k|) \quad (k=1,2,\dots,p) \tag{5} \end{align*}

(5)写成矩阵(Yule-Walker方程,左边那个是Toeplitz矩阵,使用Levinson-Durbin算法可求解):

[R(0)R(1)R(p1)R(1)R(0)R(p2)R(p1)R(p2)R(0)][w1w2wp]=[R(1)R(2)R(p)]\begin{bmatrix} R(0) & R(1) & \cdots & R(p-1) \\\\ R(1) & R(0) & \cdots & R(p-2) \\\\ \vdots &\vdots &\vdots &\vdots \\\\ R(p-1) & R(p-2) & \cdots & R(0) \end{bmatrix} \begin{bmatrix} w_1 \\\\ w_2 \\\\ \vdots \\\\ w_p \end{bmatrix} = \begin{bmatrix} R(1) \\\\ R(2) \\\\ \vdots \\\\ R(p) \end{bmatrix}