一、关键词解释

1、基音周期 Pitch Lag

人在发音时,根据声带是否震动可以将语音信号分为清音跟浊音两种。浊音又称有声语言,携带者语言中大部分的能量,浊音在时域上呈现出明显的周期性;而清音类似于白噪声,没有明显的周期性。发浊音时,气流通过声门使声带产生张弛震荡式振动,产生准周期的激励脉冲串。这种声带振动的频率称为基音频率,相应的周期就成为基音周期。

比如 我们发出一个 元音:啊~~~~

波形:   ~~~~  ~~~~  ~~~~  ~~~~
          ↑     ↑     ↑     ↑
        一段重复  一段重复

两段重复波形之间的间隔=基音周期Pitch Lag。这个时间间隔单位是采样点数量,该值是个整数。

所以WebRTC的变速算法就利用了这个特征,当要进行加速的时候,如上图所示,本来有四个重复段,剪切其中的一个,就追回了一定的时间。相反,当要进行扩展的时候,复制出5个重复段,就延长了一定的时间。

2、线性预测编码 LPC (Linear Predictive Coding)

LPC的核心思想基于语音信号的“短时平稳”特性,即在一个很短的时间段内,语音信号的特性可以被认为是基本不变的。

  • 基本假设

       LPC假设当前语音采样点值,可通过过去若干个采样点值的线性组合逼近。数学表达式为:

       S(n) = \sum a_i * S(n-i) + e(n)

       其中:

      S(n)         :当前时刻的语音信号采样值。
      S(n-i)  :过去的采样值。
      a_i              :线性预测系数(LPC系数),它代表了声道的共振特性。
      e(n)          :预测误差,或残差信号,预测值与真实值之间差异,可看作是声门的激励信号

  • 声源-滤波器模型

       从物理意义上讲,LPC将人类的发声过程建模为一个“声源-滤波器”系统。
       激励源:对于浊音(如元音),激励源是声带振动产生的准周期脉冲序列;对于清音(如s),则是类似白噪声的随机信号。这个激励信号e(n)在频谱上是相对平坦的。
       声道滤波器:由喉咙、口腔、鼻腔等构成的声道,可以看作一个时变的数字滤波器。这个滤波器的作用是对激励信号进行“塑形”,放大某些频率成分(形成共振峰),衰减另一些频率成分,最终形成我们听到的复杂语音信号。

  • 分析与合成

       分析过程:LPC分析的目标是从一段语音信号中,找出一组最优的预测系数a_i,使得预测误差e(n)的能量(均方值)最小。这个过程在数学上等价于通过“逆滤波”来剔除声道的共振峰效应,从而分离出激励信号。这组系数a_i就构成了合成滤波器的参数,它精确地描述了声道的频谱包络。
       合成过程:在解码端,利用接收到的LPC系数重建合成滤波器H(z),再用激励信号e(n)(在编码时会进行清/浊音判决和基音周期估计)通过该滤波器,即可合成出原始的语音信号。

3、长时预测 LTP (Long-Term Prediction)

LTP的引入是为了解决LPC的一个局限性。LPC只能有效去除语音信号的短时相关性(即相邻采样点之间的相关性),但对于浊音信号中存在的长时相关性(即周期性)则无能为力。

  • 利用语音的周期性

       浊音是由声带周期性振动产生的,其波形在基音周期内具有高度的相似性。这意味着,不仅相邻的采样点相关,相隔一个或多个基音周期的采样点之间也存在很强的相关性。

  • 基本思想

       LTP的核心思想是利用这种长时相关性来进一步提高预测精度。它在进行短时预测(LPC)之前,增加一个“长时预测器”。这个预测器会使用过去一个周期左右的样本来预测当前的样本。

二、实现简介

SILK 编码器采用长期预测LTP+线性预测LPC技术,通过两级预测去除语音信号中的冗余信息:

长时预测 (LTP):利用浊音信号的周期性,通过过去一个基音周期左右的信号来预测当前信号,从而去除信号中的长时相关性(即周期性结构)。

线性预测 (LPC):对经过 LTP 处理后的残差信号进行分析,通过临近的采样点来预测当前采样点,从而去除信号的短时相关性(即声道的频谱包络)。

经过这两级预测,原始语音信号被分解为:

模型参数:描述声道特性的 LPC 系数和描述周期性的 LTP 系数(包括延时和增益)。

激励信号:即最终的残差,是原始信号减去两级预测值后剩下的部分,其能量和信息量都大大降低

在传输时,编码器并非直接传输这些参数和激励信号,而是先将它们进行量化和熵编码,以进一步压缩数据。最终,解码器利用接收到的模型参数重建合成滤波器,并用激励信号驱动它,从而还原出原始语音。

三、函数分解

silk_encode_frame_Fxx

->silk_encode_frame_FIX

->silk_encode_frame_FLP

待续.....

四、好文收藏

https://juejin.cn/post/7620963880407826483https://juejin.cn/post/7620963880407826483

https://chenliang.org/2020/03/15/opus-format/https://chenliang.org/2020/03/15/opus-format/https://zhuanlan.zhihu.com/p/454283094https://zhuanlan.zhihu.com/p/454283094https://www.fanyamin.com/webrtc/tutorial/build/html/3.audio/audio_codec_opus.htmlhttps://www.fanyamin.com/webrtc/tutorial/build/html/3.audio/audio_codec_opus.html

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐