音频标准化

信息处理 声音的 离散信号
2022-01-18 20:26:14

我有一个 pcm 格式的录音,我想做一些简单的分析。

我对什么是标准化有一些疑问。据我了解,这是获取范围之间的所有幅度,即 [-1, 1]

显而易见的方法是:

max_amplitude = max(array_of_amplitudes)
for amplitude in array_of_amplitudes:
   amplitude = amplitude / max_amplitude

我阅读了有关 RMS 归一化的信息。有人可以解释它是如何完成的吗?

此外,您能否解释一下标准化的好处是什么?

1个回答

您的规范化代码不正确。如果输入信号有很大的下降(比如 -5.0 处的负值),您的代码将不会检测到它,并且您仍然会有 [-1, 1] 之外的值。使用 max(abs(array_of_amplitudes)) 代替。在归一化之前,还建议消除信号可能具有的任何 DC 偏移。

RMS 归一化包括计算短期窗口上的 RMS(均方根)水平,取这些值中的最大值,然后将信号除以最大值。这并不能保证结果会在 [-1, 1] 范围内——您必须剪裁除此之外的值。好处是它对信号中的异常值更加稳健。假设您有一个相对安静的录音,由于声卡驱动程序故障或麦克风上的临时“爆音”,在某个地方只有一个短暂的峰值 1.0。归一化不会影响信号的电平(它已经归一化,因为最大值为 1.0);而 RMS 归一化仍会提高其电平(并且“pop”会导致削波)。

关于申请:

  • 在音频录制/再现中,归一化很重要,因为它确保使用输出转换器的整个动态范围。如果您通过 16 位 DAC 播放峰值为 0.25 的信号,则您没有使用转换器的高 2 位(始终为 0),从而将量化噪声增加 12dB。
  • 在一些音频分类任务(例如情感识别;音乐流派分类;甚至语音识别)中,振幅/响度可能被用作特征。因此,您真的希望所有输入文件在级别方面都进行类似的“校准”。