语音编解码总览
概述
语音编解码器(Voice Codec)是实时通信系统的核心组件,负责将模拟语音信号压缩为数字比特流进行传输,并在接收端还原。编解码器的选择直接影响通话质量、延迟和带宽消耗。
从 PCM 到压缩编码
语音信号的数字化遵循经典的 采样→量化→编码 流程:
flowchart LR
A[模拟语音] --> B[采样<br/>8/16/48 kHz]
B --> C[量化<br/>8/16/24 bit]
C --> D[PCM 原始数据]
D --> E[编码器<br/>Codec]
E --> F[压缩比特流]
F --> G[RTP 打包传输]
G --> H[解码器]
H --> I[PCM]
I --> J[D/A 播放]
以 16kHz/16bit 单声道为例:
PCM 码率 = 16000 × 16 = 256 kbps
Opus 编码后 ≈ 20-32 kbps,压缩比约 8-12 倍
编解码器分类
按编码原理
类型 |
原理 |
代表 |
特点 |
|---|---|---|---|
波形编码 |
直接对波形采样值编码 |
G.711 (PCM) |
质量高、码率高、延迟低 |
参数编码(声码器) |
提取语音参数(基频、共振峰) |
LPC-10, MELP |
码率极低(2-4 kbps)、质量差 |
混合编码 |
波形 + 参数结合 |
G.729 (CS-ACELP), AMR |
中等码率、质量好 |
变换编码 |
频域变换后编码 |
AAC, Opus (CELT 部分) |
适合音乐、宽带信号 |
按应用场景
场景 |
典型编码 |
码率 |
采样率 |
说明 |
|---|---|---|---|---|
PSTN 电话 |
G.711 |
64 kbps |
8 kHz |
兼容性最好 |
VoIP |
G.729, G.722 |
8-64 kbps |
8-16 kHz |
节省带宽 |
移动通信 |
AMR, AMR-WB, EVS |
4.75-128 kbps |
8-48 kHz |
自适应码率 |
WebRTC |
Opus |
6-510 kbps |
8-48 kHz |
全能型,强制支持 |
流媒体/音乐 |
AAC, AAC-ELD |
16-320 kbps |
8-96 kHz |
音乐质量优先 |
编码流程详解
典型的语音编码器内部流程:
flowchart TD
A[输入 PCM 帧<br/>20ms / 320 samples @ 16kHz] --> B[预处理]
B --> B1[高通滤波<br/>去除直流偏移]
B1 --> B2[预加重<br/>提升高频]
B2 --> C[分析]
C --> C1[LPC 分析<br/>线性预测系数]
C1 --> C2[基音检测<br/>开闭环搜索]
C2 --> C3[子帧分析]
C3 --> D[量化]
D --> D1[LSP/LSF 量化<br/>频谱包络]
D1 --> D2[自适应码本<br/>基音延迟+增益]
D2 --> D3[固定码本<br/>激励信号]
D3 --> E[比特打包]
E --> F[输出比特流]
关键参数
参数 |
含义 |
影响 |
|---|---|---|
采样率 |
每秒采样次数(Hz) |
决定频率上限(奈奎斯特定理:上限 = 采样率/2) |
帧长 |
每帧时长(ms) |
影响算法延迟;语音编码通常 10-60ms |
码率 |
编码后比特率(kbps) |
码率越高质量越好,带宽消耗越大 |
算法延迟 |
编码器引入的固有延迟 |
帧长 + 前瞻(lookahead) |
复杂度 |
计算量(MIPS/WMOPS) |
影响 CPU 占用和功耗 |
WebRTC 中的编解码器
WebRTC 规范(RFC 7874)对音频编解码器的要求:
必须支持:Opus(RFC 6716)
应该支持:G.711(PCMA/PCMU)
可选支持:G.722, iLBC 等
SDP 协商示例
m=audio 9 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126
a=rtpmap:111 opus/48000/2
a=rtpmap:63 red/48000/2
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=fmtp:111 minptime=10;useinbandfec=1
编解码器优先级由 SDP 中 payload type 的排列顺序决定,Opus 通常排在第一位。
质量评估
语音质量的客观评估指标:
指标 |
含义 |
范围 |
说明 |
|---|---|---|---|
MOS |
Mean Opinion Score,主观评分 |
1.0 - 5.0 |
5=优秀,4=好,3=尚可 |
PESQ |
ITU-T P.862,窄带/宽带 |
-0.5 - 4.5 |
需要参考信号 |
POLQA |
ITU-T P.863,超宽带 |
1.0 - 5.0 |
PESQ 的继任者 |
ViSQOL |
Google 开源,基于频谱相似度 |
1.0 - 5.0 |
支持语音和音频 |
各编解码器在理想条件下的 MOS 参考值:
编解码器 |
码率 (kbps) |
MOS |
带宽 |
|---|---|---|---|
G.711 |
64 |
4.1 |
窄带 |
G.729 |
8 |
3.9 |
窄带 |
G.722 |
64 |
4.1 |
宽带 |
AMR-WB |
23.85 |
4.1 |
宽带 |
Opus (NB) |
16 |
4.0 |
窄带 |
Opus (WB) |
32 |
4.5 |
宽带 |
Opus (FB) |
64 |
4.7 |
全带宽 |
EVS (SWB) |
24.4 |
4.5 |
超宽带 |
小结
选择编解码器时需要权衡以下因素:
质量 vs 码率:Opus 在各码率段都表现优异
延迟:实时通信要求算法延迟 < 40ms
兼容性:与 PSTN 互通需要 G.711;移动网络需要 AMR/EVS
专利:Opus 免专利费;H.264/AAC/AMR/EVS 有专利费用
复杂度:嵌入式设备需要考虑 CPU 和功耗
后续章节将逐一深入讲解各编解码器的原理和实现。