📄 一句话概括
音频编码有四类基本手段,其中最特别的是感知编码——它不是数学上的最优,而是利用了人耳的缺陷。
📝 本节和前面几节的关系
4.2.2 讲了六步流程,这一节讲流程里用到的手段为什么有效。
一、子带编码:把频段拆开
把整个频段拆成若干子带,每个子带单独量化。 好处是不同频段可以用不同精度——重要的子带多给比特,不重要的少给。 这正好配合人耳的敏感曲线:低频敏感,高频不敏感。 所以子带编码几乎是所有现代音频编码的基础结构。
二、感知编码:利用掩蔽效应
掩蔽效应指的是:一个强音响起时,它附近的弱音你就听不见了。 比如在嘈杂的马路边,别人的说话声你根本分辨不出来——不是耳朵坏了,是被掩蔽了。 编码器正是利用了这一点:既然听不见,那就不存。 这是四类里最特别的一类——它不是数学上的最优,而是利用了人耳的缺陷。
三、预测编码:只存差值
相邻的采样点高度相关,后一个点的值大致能从前一个点猜出来。 那就只存【实际值减去预测值】的那点差——差通常很小,需要的位数也少。 这就是 4.2.1 里说的统计冗余的利用方式。 预测做得越准,差值越小,压得越狠。
四、熵编码:最后再压一次
经过前面几步,数据已经变成一串符号,但各符号出现的概率并不均匀。 出现得多的符号用短码,出现得少的用长码——这就是熵编码。 关键是:熵编码是无损的——它只是换一种表示,一个比特都不丢。 所以它是整条流程里最后那道【无损收尾】。
五、动手 Demo:音频编码的四类基本手段
四类手段,各自利用一种不同的规律。
rows = [
("子带编码", "频段可以分开处理", "拆成多个子带各自量化"),
("感知编码", "人耳的掩蔽效应", "强音附近的弱音直接丢掉"),
("预测编码", "相邻采样点高度相关", "只存与预测值的差"),
("熵编码", "符号出现概率不均", "高频符号用短码"),
]
for a, b, c in rows:
print("%-9s %-20s %s" % (a, b, c))
实跑输出:
--------------------------------------------------------------------
音频编码的四类基本手段
--------------------------------------------------------------------
手段 利用什么 典型做法
-----------------------------------------------------------
子带编码 频段可以分开处理 拆成多个子带各自量化
感知编码 人耳的掩蔽效应 强音附近的弱音直接丢掉
预测编码 相邻采样点高度相关 只存与预测值的差
熵编码 符号出现概率不均 高频符号用短码
四类里最特别的是**感知编码**——它不是数学上的最优,而是**利用了人耳的缺陷**。
所谓【掩蔽效应】:**一个强音响起时,它附近的弱音你就听不见了。**
听不见的东西,丢掉一分钱不花。
四类里最特别的是感知编码——它不是数学上的最优,而是利用了人耳的缺陷。 所谓【掩蔽效应】:一个强音响起时,它附近的弱音你就听不见了。
30 秒实验
- 在嘈杂处与安静处各听同一段音乐,体会【掩蔽效应】是否存在。
- 想一下:为什么【听不见】这件事可以被编码器利用。
常见误区
- 以为感知编码是【降音质】。它丢的是你本来就听不到的东西。
- 把熵编码当成有损。它是整条流程里有损之后的无损收尾。
自测三问(点开对答案)
1. 音频编码的四类基本手段是什么? —— 子带编码、感知编码、预测编码、熵编码。 2. 感知编码利用的是什么? —— 人耳的掩蔽效应——强音附近的弱音听不见。 3. 四类里哪一类是无损的? —— 熵编码。- ☐ 下一节(4.2.4 音频编码算法)
相关笔记
- 音频编码 — 这些手段嵌在哪一步
- 音频编码算法 — 把它们组装成标准
- 音频处理 — 处理端也在用同一些原理
- 🎬 FFmpeg入门详解 · 索引