开源音频编解码器 SOLO 源码解读(二):窄带编码
2023-12-07 14:46:32
上一期 Solo 源码解析分析了 Solo 的带宽扩展系统,本期 Solo 源码解析将会介绍一下 Solo 的窄带编码流程。由于 Solo 的编码框架是基于 Silk 修改而成,所以本文对于 Silk 原生代码的介绍会比较简略。
在该函数内,首先通过 SKP_Silk_VAD_FLP
进行信号的静音检测并得到静音概率,如果静音概率大于 0.5,则进入窄带编码流程。窄带编码流程主要分为以下几步:
- 信号分帧。 将音频信号分成 10ms 的帧,每一帧包含 160 个采样点。
- 预处理。 对每一帧信号进行预处理,包括高通滤波、加窗和归一化。
- 编码。 使用经过修改的 Silk 编码器对每一帧信号进行编码。
- 后处理。 对编码后的信号进行后处理,包括反归一化、去窗和低通滤波。
在编码阶段,Solo 使用经过修改的 Silk 编码器进行编码。与原始 Silk 编码器相比,经过修改的 Silk 编码器具有以下特点:
- 帧长更短。 原始 Silk 编码器的帧长为 20ms,而经过修改的 Silk 编码器的帧长为 10ms。这使得 Solo 能够更准确地捕捉语音信号的瞬态变化。
- 比特率更低。 原始 Silk 编码器的比特率范围为 6kbps-40kbps,而经过修改的 Silk 编码器的比特率范围为 3kbps-20kbps。这使得 Solo 能够在更低的比特率下提供高质量的语音编码。
- 复杂度更低。 经过修改的 Silk 编码器通过简化编码算法降低了复杂度。这使得 Solo 能够在低功耗设备上实现。
经过修改的 Silk 编码器使用线性和预测编码 (LPC) 对语音信号进行编码。LPC 是一种参数编码技术,它通过预测当前采样点与过去采样点之间的相关性来减少信号的冗余。经过修改的 Silk 编码器使用 10 阶 LPC 模型对语音信号进行预测。
LPC 模型的参数通过求解 Levinson-Durbin 递归方程组获得。解得 LPC 模型的参数后,就可以使用 LPC 滤波器对语音信号进行预测。预测误差信号就是语音信号中未被预测的部分,它包含了语音信号中的有用信息。
经过修改的 Silk 编码器对预测误差信号进行量化编码。量化编码器使用 8 位线性量化器对预测误差信号进行量化。量化后的信号就是编码后的语音信号。
经过修改的 Silk 编码器还支持可变码率编码。可变码率编码允许编码器根据输入信号的复杂度调整比特率。在复杂度较高的语音片段中,编码器会使用较高的比特率进行编码,而在复杂度较低的语音片段中,编码器会使用较低的比特率进行编码。可变码率编码可以进一步提高 Solo 的编码效率。
经过修改的 Silk 编码器是一种高效的窄带语音编码器。它能够在低比特率下提供高质量的语音编码。Solo 使用经过修改的 Silk 编码器作为其窄带编码器,这使得 Solo 能够在低功耗设备上实现高质量的语音通信。