🎬 第四章 音频基础
📄 一句话概括

音频编码有四类基本手段,其中最特别的是感知编码——它不是数学上的最优,而是利用了人耳的缺陷。

📝 本节和前面几节的关系

4.2.2 讲了六步流程,这一节讲流程里用到的手段为什么有效。

一、子带编码:把频段拆开

把整个频段拆成若干子带,每个子带单独量化。 好处是不同频段可以用不同精度——重要的子带多给比特,不重要的少给。 这正好配合人耳的敏感曲线:低频敏感,高频不敏感。 所以子带编码几乎是所有现代音频编码的基础结构。

二、感知编码:利用掩蔽效应

掩蔽效应指的是:一个强音响起时,它附近的弱音你就听不见了。 比如在嘈杂的马路边,别人的说话声你根本分辨不出来——不是耳朵坏了,是被掩蔽了。 编码器正是利用了这一点:既然听不见,那就不存。 这是四类里最特别的一类——它不是数学上的最优,而是利用了人耳的缺陷。

三、预测编码:只存差值

相邻的采样点高度相关,后一个点的值大致能从前一个点猜出来。 那就只存【实际值减去预测值】的那点差——差通常很小,需要的位数也少。 这就是 4.2.1 里说的统计冗余的利用方式。 预测做得越准,差值越小,压得越狠。

四、熵编码:最后再压一次

经过前面几步,数据已经变成一串符号,但各符号出现的概率并不均匀。 出现得多的符号用短码,出现得少的用长码——这就是熵编码。 关键是:熵编码是无损的——它只是换一种表示,一个比特都不丢。 所以它是整条流程里最后那道【无损收尾】。

五、动手 Demo:音频编码的四类基本手段

四类手段,各自利用一种不同的规律。

rows = [
    ("子带编码", "频段可以分开处理",   "拆成多个子带各自量化"),
    ("感知编码", "人耳的掩蔽效应",     "强音附近的弱音直接丢掉"),
    ("预测编码", "相邻采样点高度相关", "只存与预测值的差"),
    ("熵编码",   "符号出现概率不均",   "高频符号用短码"),
]
for a, b, c in rows:
    print("%-9s %-20s %s" % (a, b, c))

实跑输出:

--------------------------------------------------------------------
音频编码的四类基本手段
--------------------------------------------------------------------

  手段         利用什么               典型做法
  -----------------------------------------------------------
  子带编码     频段可以分开处理       拆成多个子带各自量化
  感知编码     人耳的掩蔽效应         强音附近的弱音直接丢掉
  预测编码     相邻采样点高度相关     只存与预测值的差
  熵编码       符号出现概率不均       高频符号用短码

  四类里最特别的是**感知编码**——它不是数学上的最优,而是**利用了人耳的缺陷**。
  所谓【掩蔽效应】:**一个强音响起时,它附近的弱音你就听不见了。**
  听不见的东西,丢掉一分钱不花。

四类里最特别的是感知编码——它不是数学上的最优,而是利用了人耳的缺陷。 所谓【掩蔽效应】:一个强音响起时,它附近的弱音你就听不见了。

30 秒实验

  1. 在嘈杂处与安静处各听同一段音乐,体会【掩蔽效应】是否存在。
  2. 想一下:为什么【听不见】这件事可以被编码器利用。

常见误区

  1. 以为感知编码是【降音质】。它丢的是你本来就听不到的东西。
  2. 把熵编码当成有损。它是整条流程里有损之后的无损收尾。
自测三问(点开对答案) 1. 音频编码的四类基本手段是什么? —— 子带编码、感知编码、预测编码、熵编码。 2. 感知编码利用的是什么? —— 人耳的掩蔽效应——强音附近的弱音听不见。 3. 四类里哪一类是无损的? —— 熵编码。

相关笔记