一首128kbps的音乐,一秒钟要啃掉16KB流量;而你打一通VoLTE电话,语音流常常只有每秒1KB多——大约是音乐的一半流量,听感却字字清晰。更早的2G手机,甚至能在每秒不足6千比特的信道里把话说完。
很多人第一反应是“现在压缩算法先进”。但真正的原因更根本:语音编码器“学过”人是怎么发声的。它压缩的不是“一段声音”,而是“一个发声器官的运动”。音乐编码器面对的是不可预测的任意波形,只能靠人耳的掩蔽效应见招拆招;语音编码器面对的是一个有确定物理模型的声源,所以它能大胆得多——只传“模型参数”,不传波形本身。
这就是语音编码(Speech Codec)与音频编码(Audio Codec,如MP3/AAC)的分水岭,也是本文的主角。从2G的AMR,到4G高清语音的AMR-WB,再到5G VoNR用的EVS,二十五年间换了三代,底层思想却一脉相承。今天我们把这套“给嗓子建模型”的手艺拆开看。
讨论编码之前要分清两个容易混淆的维度:带宽和保真度。带宽由采样率决定,决定了你能听到多大范围的声音;保真度由比特率决定,决定了频带内的声音有多“细腻”。
| 等级 | 频带范围 | 采样率 | 代表编码 | 大众叫法 |
|---|---|---|---|---|
| 窄带 NB | 300–3400 Hz | 8 kHz | G.711、AMR-NB | 传统"电话音" |
| 宽带 WB | 50–7000 Hz | 16 kHz | AMR-WB | "高清语音" |
| 超宽带 SWB | 20–14000 Hz | 32 kHz | EVS | "超高清" |
| 全频带 FB | 20–20000 Hz | 48 kHz | EVS | 接近CD听感 |
有两个反直觉的点值得记住。第一,传统电话音的上限3400Hz是人声“最省比特”的区间——辅音的咬字信息大多在3kHz以下,所以窄带语音虽然闷,但可懂度并不差。第二,“高清语音”(运营商的HD Voice营销名)指的是宽带,即AMR-WB把低频的浑厚感(50Hz起)和中高频的临场感(到7kHz)补了进来,提升最大的其实不是“高音”,而是自然度。
AMR-NB每20毫秒处理一帧(160个样本),一帧只要95~244比特;折算下来就是4.75~12.2kbps。这244比特是怎么省出来的?答案在下面这个模型里。
人的发声系统可以粗暴地拆成两部分:激励源和声道滤波器。
flowchart TD
A["肺部气流"] --> B["激励源二选一"]
B -->|"声带振动:浊音"| C["准周期脉冲串"]
B -->|"气流擦音:清音"| D["随机白噪声"]
C --> E["声道共振腔滤波"]
D --> E
E --> F["共振峰染色后的话音"]
F --> G["麦克风输出"]
这个“激励—滤波”模型是语音编码的奠基性假设。它的威力在于:声道形状在20毫秒内几乎不变。你说话时舌头、嘴唇的物理运动以几十毫秒为单位,远慢于声音波形本身(几毫秒就振荡一个周期)。于是波形里就藏着大量冗余——相邻样本高度相关,相邻帧参数几乎相同。
压缩的全部艺术,就是把这两层冗余彻底挤干:帧内的冗余交给线性预测,激励的冗余交给码本。
既然声道形状短时不变,那么下一个声音样本和前几个样本就必然高度相关。线性预测(LPC, Linear Predictive Coding)把这层关系写成一句话:
$$\hat{s}(n) = \sum_{k=1}^{p} a_k \, s(n-k)$$
即用过去p个样本的加权和来预测当前样本。预测得准,说明声道惯性稳;预测不准的地方,恰恰是激励(声门脉冲、清音噪声)“出格”的时刻。预测残差为:
$$e(n) = s(n) - \hat{s}(n)$$
于是语音被解耦成两部分:
解码端反过来,用残差去激励声道滤波器:
$$H(z) = \frac{1}{A(z)} = \frac{1}{1-\sum_{k=1}^{p} a_k z^{-k}}$$
直觉上,A(z)就是那段“管子”的频率响应。窄带语音用10阶预测就能把共振峰描绘得八九不离十;宽带语音频带翻倍,需要16阶。LPC系数本身还要再“瘦身”一次——工程上不直接量化系数,而是转换成更稳健的LSP(线谱对)参数再量化,因为LSP的量化误差不会引起滤波器剧烈波动,这是教科书里“参数稳健性”的经典案例。
到这里,编码器已经能以几十比特描述“管子”了。剩下的麻烦是激励:残差信号虽然“新鲜”,但直接传波形还是太贵。怎么把激励也压到几十比特?答案是语音编码史上最优雅的设计——闭环搜索。
CELP(码激励线性预测)的核心动作叫合成-分析(Analysis-by-Synthesis):编码器里内嵌一个解码器,把候选激励逐个“试播”一遍,用与接收端完全相同的算法合成出语音,跟原始语音比误差,哪个候选误差最小就传哪个的编号。发一个编号,远比发一段波形便宜。
候选激励存在两本“字典”里:
但比较误差时不能直接比波形。人耳对不同频段的失真敏感度不同——在共振峰附近,耳朵的分辨力反而最钝(掩蔽效应),共振峰之间的能量空隙才是失真最刺耳的地方。于是搜索目标改成感知加权误差最小:
$$W(z) = \frac{A(z/\gamma_1)}{A(z/\gamma_2)}, \quad 0 < \gamma_2 < \gamma_1 < 1$$
它故意把失真往共振峰里赶——那里耳朵听不清。这就是语音编码“骗过耳朵”的关键一招:不是让误差最小,而是让耳朵感觉到的误差最小。
flowchart TD
A["输入话音帧"] --> B["LPC分析:提取声道包络"]
B --> C["LSP量化:几十比特"]
A --> D["闭环搜索最佳激励"]
C --> D
D --> E["自适应码本:管音调周期"]
D --> F["固定码本:管残差形状"]
E --> G["本地试合成"]
F --> G
G --> H["误差过感知加权滤波"]
H -->|"选耳朵最满意的一组"| D
D --> I["只传索引和增益"]
12.2kbps的AMR帧,就是这样一个“包裹”:LPC参数 + 音调滞后 + 码本索引 + 增益,合计244比特。解码端按索引从同样的字典里取素材、过同样的滤波器,重建出听感几乎无差的语音。字典两端各存一份,信道上只传页码——这句话就是CELP家族全部的秘密。
单有压缩还不够。无线信道时好时坏:信号强时可以奢侈一点传高码率,小区边缘误码飙升时,再高的码率也是徒劳——比特错一个,整帧语音就毁一片。AMR(自适应多速率)的解法朴素而聪明:准备8档码率,随时换挡。
| 特性 | AMR-NB | AMR-WB | EVS |
|---|---|---|---|
| 标准年代 | 1999 | 2003(ITU编号G.722.2) | 2014 |
| 采样率 | 8 kHz | 16 kHz | 8–48 kHz |
| 频带 | 300–3400 Hz | 50–7000 Hz | 最高20 kHz |
| 码率档位 | 8档:4.75–12.2 kbps | 9档:6.6–23.85 kbps | 5.9–128 kbps |
| 编码模式 | ACELP | ACELP | CELP+MDCT+通道感知 |
| 典型场景 | 2G/3G/VoLTE | 3G/VoLTE高清 | VoNR/VoLTE |
换挡的依据是对信道质量的实时测量,形成一条闭环:
flowchart TD
A["接收端周期上报信道质量"] --> B["网络综合评估质量"]
B -->|"信道变差"| C["降一档码率"]
B -->|"信道变好"| D["升一档码率"]
C --> E["省下的比特给纠错冗余"]
D --> F["更多比特花在音质上"]
E --> G["下一帧20ms即生效"]
F --> G
G --> A
注意这个换挡的本质是信源与信道的联合分配:总比特数大致不变,音质和可靠性此消彼长。站在小区边缘,你的通话自动降档到6.7甚至4.75kbps——声音变“薄”了,但断线的风险换成了可懂度。这就是为什么你走进电梯时电话往往“音质变差但没断”:变速箱在悄悄降挡。
AMR还有一个省流量的隐藏开关:VAD/DTX。人说话天然有约一半时间是停顿(听对方讲、喘气、换行)。VAD(语音激活检测)判断当前帧是否含语音;静音期间,编码器只发极低速率的SID帧(每约160毫秒一次)描述背景噪声参数,其余时间不发言。接收端根据SID参数合成一段相似的背景噪声——所谓舒适噪声。不做这一步,对方会以为电话断了;做了这一步,上下行的静音流量省下近一半。你在深夜通话时听到的对方那头轻微的“沙沙”声,就是解码器合成出来的噪声,不是真实的电流声。
顺便说一段趣史:AMR设计8档时,其中12.2kbps档直接沿用GSM的增强全速率编解码(EFR),6.7kbps档对应日本的PDC制式——它从出生起就是一部“多制式兼容变速箱”,为的是让2G/3G网络过渡时无需重新设计。这解释了为什么AMR的档位数字看起来毫无规律:那些数字是从各代现网“继承”来的。
到了VoNR时代,AMR家族的两个短板暴露了:一是宽带封顶23.85kbps,撑不起全频带;二是只会说话,来一段彩铃、一段hold音乐就原形毕露——CELP的发声模型对音乐根本不成立。2014年定稿的EVS(Enhanced Voice Services)一次解决三件事:
第一,带宽与码率双扩展。EVS一套编解码覆盖窄带到全频带(48kHz采样),码率从5.9kbps到128kbps连续可档。低码率区间它与AMR-WB听感持平或更好,高码率区间可达透明音质——同一通电话,从“省流量模式”到“录音室模式”全覆盖。
第二,双模型切换。EVS内置两种编码核:语音走CELP(用发声模型),音乐和混合内容切到MDCT变换编码(与AAC同族的频域编码,用掩蔽效应)。编码器逐帧判断当前是说话还是唱歌,自动换核。这也是为什么用支持EVS的手机打VoNR电话时,运营商播放的彩铃终于不再“糊”了。
第三,也是最工程化的一笔:通道感知模式(channel-aware mode)。传统思路里,丢包靠接收端的错误隐藏(丢了帧就“脑补”一帧)硬扛。EVS干脆在编码时就掺入部分冗余——把上一帧的关键参数降低精度复制一份,藏进当前帧。网络正常时这些冗余是浪费的少量比特;一旦某帧丢了,解码端从下一帧里挖出它的“备份残影”重建,听感损失骤降。这相当于把纠错从“事后补救”前移到“事前埋伏”,代价是牺牲一小部分净码率。在丢包率5%量级的真实网络上,通道感知模式对MOS分的改善远比单纯升档码率划算——丢包多的现网,这是比“调高码率”正确得多的调优方向。
最后留一个常见误解:采样率升级不等于音质必然提升。窄带话音升宽带,提升来自补进来的频带;但若信道差到只能跑最低档,宽带低档的听感未必好过窄带高档——比特永远不够分,带宽只是“分法的候选”。音频编码的世界里没有免费的高清。
从AMR到EVS,二十五年三代技术,变的是档位、带宽和抗丢包的花样,不变的是同一个洞察:语音不是任意波形,而是一根管子在两种激励下的受迫响应。先把发声模型建出来,再把耳朵的弱点算进去,最后让编码器自己在无数候选里挑一个“耳朵最满意”的答案——比特数就再也压不下去了吗?不,是再也不需要那么多了。
下一次听到“高清语音”“通话保真”,你知道那背后不是玄学:是244比特一帧的包裹里,装着一副建模的嗓子。
Q: AMR和AMR-WB到底差在哪,为什么运营商叫它“高清语音”? A: 两处根本差别。采样率从8kHz提到16kHz,频带从300–3400Hz扩展到50–7000Hz,补上了人声的低频浑厚感和中高频自然度;码率上限从12.2提到23.85kbps,9档比8档分得更细。因为听感明显提升,运营商营销上称"HD Voice",本质就是AMR-WB。
Q: 为什么微信语音比打电话清晰,它们用的编码不一样吗? A: 是的。微信这类OTT应用走互联网,常用通用音频编码(如Opus/SILK)且没有无线信道的严苛比特预算,码率可以更宽裕;蜂窝通话走AMR/EVS,为适应无线信道专门设计,强调低码率下的话音可懂度和快速换挡。代价是微信语音对网络抖动更敏感——它没有无线专用的信源信道联合设计兜底。
Q: EVS的通道感知模式和普通抗丢包(如FEC)有什么区别? A: 通道感知模式把“上一帧的低精度冗余”直接织进当前帧的编码流程里,冗余与主信息联合优化,编码端知道网络会丢包并为之定价;传统FEC多是编码完成后的外层包裹,粒度粗、效率低。EVS的方案在同等冗余开销下恢复质量更好,且只在检测到丢包风险时才加大冗余比例。
Q: 语音为什么固定20毫秒一帧,不更短或更长? A: 这是三方折中。帧越短,时延越低(通话要求端到端单向时延约150ms内),但帧头开销占比越大、LPC参数估计越不稳;帧越长,压缩效率越高,时延却不可接受。20ms正好落在"参数稳定"与"时延可控"的交点上,人耳几乎察觉不到这一粒度的延迟。
Q: 舒适噪声的“沙沙声”是哪来的,能关掉吗? A: 它是接收端根据SID帧里的噪声参数合成的假背景声,为的是让静音期不至于“死寂”让你以为掉线。它是DTX机制的组成部分,关掉它等于关掉DTX——静音省流量的好处就没了。现网中它是特性不是故障。
本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
