语音编码之压缩

我的书:

购买链接:

京东购买链接

淘宝购买链接

当当购买链接

这本书里叙述了SILK和Opus语音编解码器,这里简单的串接编解码的核心知识点。

LPC

LPC(Linear predictive coding)在音频和语音处理领域常用于表示压缩信号的谱包络,这是最强大的语音分析技术之一,也是低比特率高品质语音编码常用到的方法之一。LPC基于人的发声生物物理机理的发音过程建模模型。

由于语音信号是短时平稳信号,基频和共振峰在短时是不变的,通常将一秒钟的数据分割为30~50个块分析各块的LPC系数(也即压缩)。

LPC的核心思想是当前语音采样值可以用过去采样值的线性组合近似获得,公式表示如下:

x(m) = \sum_{k=1}^{p}a_kx(m-k) +e(m)

其中​x(m)是当前采样点的值,p是阶数,也就是使用多少个历史采样点值来估计当前采样点的值,​x(m-k)是历史真实采样点值,e(m)是误差信号,​系数​a_k通过最小化有限时间段内真实值和估计值的局方误差准则计算,这一准则用公式表示如下:

E[e^2(m)]= E[(x(m)-\sum \limits_{k=1}^pa_kx(m-k))^2]= \\E[x^2(m)]-2\sum \limits_{k=1}^pa_kE[x(m)x(m-k)]+\sum \limits_{k=1}^pa_k\sum \limits_{j=1}^pa_jE[x(m-k)x(m-j)]= \\ r_{xx}(0)-2\mathbf r_{xx}^T\mathbf a + \mathbf a^T\mathbf R_{xx}\mathbf a

其中\mathbf R_{xx}=E[\mathbf x \mathbf x^T]​是输入信号​\mathbf x^T=[x(m-1), x(m-2),\cdots,x(m-p)]的自相关矩阵,​\mathbf r_{xx}=E[x(m)x(m)]是自相关向量,​\mathbf a^T=[a_1,a_2,\cdots,a_p]是预测系数向量。

求解LPC系数的方法种类如下:协方差方法;自相关方法;Lattice方法;逆滤波公式;谱估计公式;最大似然方法;内积方法;

误差的均方和最小可以通过对式2对a_i系数​求偏导,令偏导数等于零求得,公式表示如下:

\frac{\partial E} {\partial a_i}=0, i=1,2,...,p

令​\frac{\partial}{\partial \mathbf a} = (\frac{\partial}{\partial \mathbf a}_1, \frac{\partial}{\partial \mathbf a_2},\cdots, \frac{\partial}{\partial \mathbf a_p})^T这样可以得到如下方程:

\frac{\partial}{\partial \mathbf a}E[e^2(m)]=-2\mathbf r^T_{xx}+2\mathbf a^T\mathbf R_{xx}

由于实数的自相关矩阵是托普利兹矩阵,这样可以得到:

\mathbf R_{xx} \mathbf a = \mathbf r_{xx}

矩阵的表示形式是:

语音编码之压缩_第1张图片

上式可以通过求逆的方式获得p个解,由于左侧是托普利兹矩阵,常用迭代算法替代矩阵求逆运算。

LSP

LSP(Line spectral pairs)或者LSF(Line spectral frequencies)是一种表示LPC系数的方法,使用LSP变换的原因是其差值属性更好且对量化鲁棒性好。LSP分解的核心思想是将p阶线性预测器​A(z)分解为对称多项式P(z)​和反对称多项式​Q(z),如下:

语音编码之压缩_第2张图片

p阶线性预测器的Z域表示是:

A(z) = 1+\sum \limits_{i=1}^pa_iz^{-i}

则​P(z)和​Q(z)可以由下述两式求得:

P(z) = A(z)+z^{-(p+1)A(z^{-1})}

Q(z) = A(z)-z^{-(p+1)A(z^{-1})}

则​P(z)和​Q(z)的零点值是LSP参数,零点唯一确定了​P(z)和​Q(z)​​,而这两者确定了A(z)​,进而确定了LPC系数。

转换为LSP参数如下:

 

语音编码之压缩_第3张图片

码本

code-book是一种编码技术,最简单的生成码本的方法是K-means方法,将LSF向量通过聚类的方法缩减码本规模,LSF向量的前10个系数是​窄带信号提取的,后10个系数是​信号提取的,当码本用于语音增强时,语音的前是10个LSF向量和码本前10个做匹配搜索,距离最短的码本条目作为输入信号的宽带LSF向量,过程如下:

语音编码之压缩_第4张图片

这一简单方法在信号没有经过滤波或者下采样等之类的信号处理会导致共振峰在频域和幅值上变化时,码本不一定是最优的。

矢量量化

对于PCM数据,一个数一个数的量化叫做标量量化。若对这些数据进行分组,每组K个数构成一个K维矢量,然后以矢量为单元,逐个矢量进行量化,称为矢量量化。矢量量化基于语义编码,其基本思想是采用非线性量化器,即对空间频率及能量分布较大的系数分配比较多的比特数;反之分配较少的比特数,从而达到压缩的目的。传统的向量编码分为7类:树形向量量化、直和向量量化、迪卡尔积向量量化、格子向量量化、基于分类的向量量化、反馈向量量化以及模糊向量量化。

语音编码之压缩_第5张图片

总结

从数据压缩流看,模拟信号先经过ADC采样,将时域连续信号变成离散信号(PCM),PCM信号通过LPC方法,求解自回归模型,这样可以利用已有点估计未来的点,这样是对数据进行了压缩,由于LSP比LPC的优势,会进行LSP变换,变换后的组成向量,使用矢量量化(可能是二级或更多),量化过程中就使用到了码本。

实际编码比这个要复杂,除了要考虑压缩,还要考虑输入信号参数,目标比特率,抗丢包,此外,还要区分语音/噪声,白话,pitch以及长时信息和短时信息(STP(Short-Term Predictors )和LTP(Long-Term Predictors))输入编码器。

你可能感兴趣的:(语音识别)