基于线性预测的编码
基于线性预测的编码
编码是存储或者传输语音信号,同时保证其可理解性的一种方式。在电话通信,语音合成中都有应用。
基于线性预测的语音编码是以语音物理生成模型为基础的。这些是从模型中估计出的参数,它们被传输、存储,然后用于重建。这种重建并不是为了重新合成与输入信号非常接近的信号,而是为了生成一个具有与原始信号相似统计属性(尤其是功率谱密度)的信号。这种方法足以让编码在感知上保持真实。
PLAN
- 语音研究(信号,音系学 phonologique,语义学 sémantique)
- 构建参数化模型
- 参数估计
- 实现细节
- 限制与扩展
- 应用
语音生成模型

语音的生成可以建模为:
- 一个源,产生一个通常是周期性或随机的信号;有声的声音对应于周期性情况,无声的声音则对应于随机情况。
- 一个滤波器,作用于该信号。
常见的声源是气流通过声带的运动(频率周期性的开合产生的声音,或者如果声带接近但未闭合则会产生随机湍流),以及由于气流通过声道狭窄区域(例如舌头和上颚、牙齿之间、舌头等)而产生的湍流。
滤波器是通过声道(嘴、鼻等)的传播,这种传播形式是可变的。
模型及参数估计
我们优先关注无声的情况,可以很好地用随机过程建模。目标是估计和表示过程的功率谱密度。
通常基于自回归(Auto-Regressive, AR)模型,其中过程$X$ 由其阶数$p$、系数$a_p$ 和以下公式定义:
其中$W[n]$是方差为$\sigma^2$的白噪音,且独立于$X[k]$。
考虑如何从$W[n]$得到$X[n]$,变换公式得到:
等价于:
由此,可得传递函数:
为了得到这个结果,可以通过如下python代码实现。其中si.lfilter的前两个参数代表传递函数的分子和分母,后一个参数代表原始信号。
1 | A = np.concatenate(([1], -a)) |

使用此模型的理由是其能够创建共振峰(formants),这些共振峰对应于声道的谐振频率强度带。
上图显示了由以下 AR 过程定义的功率谱密度(DSP):
该模型的传递函数的极点为 $0.9 e^{i 2 \pi \times( \pm 0.1)}$ 和 $0.99 e^{i 2 \pi \times( \pm 0.23)}$ ,分别表示为峰值的中心频率(相位)及其宽度(模值)。
参数估计
我们选择矩估计法(méthode des moments)来进行参数估计:寻找参数与随机模型矩(此处为自相关)的关系,然后通过求解该关系,并使用这些矩的估计值进行参数反演。
计算$E(X[n]X[n-k])$,对于$k\ge1$:
同时对于$k = 0$:
因此,对于$1\le k \le P$,$a_p$的解可以通过Yule-Walker方程组获得:
通过构建该系统并使用自相关估计值 $\hat{\gamma}{X X}$ 求解,参数 $\hat{a}_p$ *被估计出来。
模型阶数可以通过检验信号估计 $\hat{W}[n]=X[n]-\sum{p=1}^P \hat{a}_p X[n-p]$* 来估计,其应当(近似)为白噪声,前提是阶数足够大。
$\gamma{XX}=\frac{1}{N} \sum{n=0}^{N-1} X[n] \cdot X[n-k], \quad k=-(N-1), \ldots, N-1$是信号$X$的自相关。全部的计算在python中可以如下实现。
1 | r = np.correlate(X, X, mode='full') / len(X) |






