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

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

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

LPC指Linear Predictive Coding,重要的是LP,线性预测。主要思想是由于语音样点之间存在相关性,所以可以用过去的样点值来预测现在的样点值,用数学公式表示就是:
$$
\hat{x}(n)=\sum^p_{k=1}w_kx(n-k)
$$
用过去p个点的加权和表示预测点$\hat{x}(n)$。

现在问题是求这个权重$w_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
}
$$
嗯,就这么简单…………吗?下面公式推导看个乐子,不严谨。

展开公式如下:

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

$$
\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算法可求解):
$$
\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}
$$