压缩音频文件时将信号分成子带的目的是什么?

信息处理 声音的 压缩
2022-02-13 20:30:19

我必须实现自己非常简单的 MUSICAM 算法(基本过滤 + 霍夫曼编码)来压缩音频文件。但我无法理解在过滤频率之前将信号分成 32 个频带的兴趣。我读过有关奈奎斯特规则的资料,但对我来说并不清楚,因为我在信号处理方面没有丰富的背景。

谁能解释为什么不只过滤原始数据而不划分子带?

这是我在理解 MUSICAM 概念时使用的主要参考资料。

4个回答

有两种无损压缩算法(如 Flac、Apple ALAC 等),它们是类似于 Huffman 编码的算法。如果将这些应用于原始音频波文件,您可能会减少 75%-50%。

除此之外,您还需要 MP3、AAC、Musicam 等有损编解码器。这些是感知编码器,即它们利用人类听觉系统的详细知识。被利用的主要影响称为“掩蔽”。参见例如https://en.wikipedia.org/wiki/Auditory_masking

掩蔽是在另一种声音存在的情况下听到(或不听到)一种声音的能力。感知编码器的主要思想是消除听不见的信息。更准确地说:信号以更少的比特被量化,以使量化噪声低于掩蔽阈值。掩蔽阈值高度依赖于频率和实际音频信号的特性。所以你需要不断地计算这类似于人类听觉系统的工作方式,这基本上是在子频带中。特别是在所谓的“临界带”中。https://en.wikipedia.org/wiki/Critical_band

更先进的编解码器包含一个相当详细的人类基底膜模型,这基本上是人类如何将听觉信息从时域转换到频域的方式。https://en.wikipedia.org/wiki/Basilar_membrane

开发这些编解码器已经花费了数百万甚至数百万小时。它需要大量的心理声学研究和测试。我认为您需要对在自己的环境中可以实现的目标保持现实,并且您可能正在考虑使用现有的编解码器。

我们不能很好地听到所有频率。因此,如果我们将频率分成子带,我们可以给我们听得好的波段提供更多的比特,而给我们听不太好的波段提供更少的比特(这取决于听力测试等事情)。在子带级别上控制压缩信号的误差通常比在整个信号级别上更容易控制。

对于给定的数据速率,这通常会给我们带来比尝试以相同位数编码所有频率的更少失真。

您可以对(自然)图像进行类似的实验:对图像进行 DFT 或 DCT,并丢弃较高的频率(即 x、y 方向的高频率)。如果您只保留几个低频,您仍然可以获得相当不错的近似值。所以,与其把它们扔掉,不如想象你对它们进行了量化——你希望给高频比低频更少的比特,因为你不会通过在高频中扔很多比特来获得太多的感知增益,但是你在较低的频率上得到了更多。(这是 JPEG 的基础;有关 JPEG 工作原理的详细信息,请参阅 Gonzalez 和 Woods 的数字图像处理等内容)。

奈奎斯特规则说,您的采样率必须大于信号中最高频率的两倍,以避免混叠。

(为了记录,这是在阅读您链接的论文之前编写的,但希望这可以提供更多关于压缩是什么的见解)。

就压缩而言,您可以移除一些非常高的频段,而不会过多地影响信号的整体质量。没有单一的方法可以压缩信号,但是将它分成多个频段可以让您灵活地选择所需的压缩程度。

您想稍微减少信息量吗?然后将少量高频段归零。想要大量减少信息量?将更多频段归零。

作为一个思想实验,考虑在一个信息仅在 20 到 200 Hz 之间的信号中可以包含多少信息。您也许能够辨认出一个人的声音,但是在去除了大部分频率内容后,信号包含的信息比以前少了。包含 20 到 200 Hz 频率的语音信号比包含 20 Hz 到 20 kHz 频率的语音信号具有更少的信息,这意味着该信号已被压缩。

当您过滤信号(使用标准低通或带通滤波器)时,您确实会产生两个“子带”:您保留的一个,您遗漏的一个。滤波后的信号可能具有较少的噪声或听不见的成分。它的幅度可能会小一些。但它保持相同数量的样本。所以它在比特率意义上并没有真正被压缩。

有损压缩是指尽可能多地保存比特:无论是幅度还是样本数量。首先,子带过滤(并行的多个过滤器)允许您将数据过滤成 32 个带,每个带可以被 32 次采样,几乎不会丢失信息。因此,您已将信号分成 32 个更简单的信号,比特率几乎相同。现在您可以获得好处:每个简单的子带信号在形状上更接近正弦,这很容易预测。此外,在每个子带中,您每次都可以利用精细的听觉特性:

  • 听不到紧随强烈声音的微弱声音(您可以通过不对其进行编码来节省位),
  • 听不到接近强频率的弱频率(您可以通过不编码来节省位),
  • 根据频率范围,您的耳朵无法轻易区分接近的频率,或者幅度可能会变化 15 % 而不会被注意到(并且您可以在对幅度进行不太精确的编码时节省一些位)。

所有这些技巧都可以使用,因为信号是及时的,并且您的子带过滤将其分成精细的频带(时频表示)。

相比之下,使用单个滤波器时,您倾向于平等地对待所有时间瞬间,而根据上下文(强振幅或附近的频率)不同地对待它们是有益的。