LPC 语音编码器(从旧的 LPC10 标准开始,这似乎是您在此处所指的那个)基于语音生成的源过滤器模型。语音可以通过以下属性来表征:
- 喉部发出的原始声音(通过声带的振动,或者只是空气流过它,声带被打开)。
- 由发音系统实现的滤波器的传递函数,进一步过滤这种原始声音。
早期的 LPC 编码器 (LPC10) 采用这两个步骤的以下模型:
- 喉部发出两种白噪声,其特征为幅度;或周期性的脉冲序列,其特征是振幅和频率σσf0
- 发音系统的传递函数形式为,因此完全由系数11−∑kakz−kak
因此,早期 LPC 编码器(例如 LPC10)的原理是从输入音频信号的块中估计这些参数;通过网络传输这些;并让声音发生器根据接收器上的这些参数再现声音。请注意,在这个过程中,实际上没有传输任何原始音频样本。打个音乐类比,就好像听钢琴演奏,抄录,发过来,在另一端找人弹……那一端的结果会接近原来的演奏,但是只发送了一份陈述。
这是否意味着我们在编码器和解码器上都保留了最后 p 个样本的运行平均值?
不,这不是它的工作原理。在编码器方面,我们运行称为 AR(自回归)估计的过程,以估计与输入信号的频谱包络最佳匹配的 AR 滤波器的系数集。这是恢复由发音系统执行的过滤系数的尝试。
这些系数通过网络发送(连同音高、语音/清音标志和响度)。解码器使用这些系数来过滤合成激励信号,该信号可以是白噪声(清音帧)或周期性脉冲的梳(浊音帧)。这些系数在解码器上以下列方式用于恢复输出信号:y(n)
y(n)=excitation(n)−∑kaky(n−k)
请注意,由于这是一个全极点 IIR 滤波器,线性组合的样本是滤波器产生的先前样本。
所以在编码器上我们只传输与这个平均信号和实际信号之间的差异相对应的数据?
没有“平均”,也没有差值信号的传输。解码器是一个带有一些参数的声音合成器;编码器为这个合成器搜索与输入信号最匹配的参数集。
为什么它是这些先前样本的线性组合?
其他选项在这里确实是可能的,但使用自回归模型的优势如下:
- 在这个模型中,我们使用全极点 IIR 滤波器来模拟关节系统。这是一个很好的模型,因为它可以用少量系数捕获强烈的光谱下降和峰值;并且发音系统确实能够强调/衰减窄频带(参见共振峰)。如果我们使用全零 FIR 滤波器,我们将需要更多的系数来准确捕捉发音系统可以实现的滤波器响应类型。
- 在编码器端,估计滤波器系数的问题在计算上是有效的——它可以通过对自相关的前几个样本使用 Levinson-Durbin 递归来完成。更复杂的线性模型 (ARMA) 或非线性模型的计算成本更高或更难处理。
- 在解码器端,合成确实非常简单——我们只需要足够的内存来跟踪解码器发出的 n 个先前样本。
这些先前样本的平均值肯定会更好地指示下一个样本吗?
这不是真的。例如,假设输入信号是正弦波。预测误差为零,而大多数时候是错误的(特别是,它没有捕捉到正弦波在一半时间严格增加,而在其余时间严格减少的事实时间,所以不应该“介于”之前的值之间)。参数(阶 p AR)的模型中挤出比零(平均)模型更多的建模能力。y^(n)=(2−ω2)y(n−1)−y(n−2)y^(n)=y(n−1)+y(n−2)2y(n)p
此外,值得记住的是,有一个“更好”的数学定义(最小化误差平方的期望值),它产生了一个寻找系数最佳值的过程。