主要内容

符合EBU R 128标准的响度归一化

此示例演示如何使用Audio Toolbox™中的工具来测量响度、响度范围和真实峰值。它还展示了如何规范化音频以满足EBU R 128标准的合规性。

简介

体积归一化传统上是通过观察峰值信号测量来进行的。然而,这种方法有一个缺点,即过度压缩的音频可能会超过一个信号级阈值,但仍然非常响亮。结果是响度战争在那里,唱片的声音往往比以前更大,不同类型的唱片也不一致。

现代解决响度战争的方法是测量响度感知结合true-peak水平测量。已经制定了ITU BS.1770-4、EBU R 128和ATSC A/85等国际标准,以标准化基于音频信号功率的响度测量。许多国家已经通过了符合广播音量标准的立法。

在这个例子中,您测量离线(基于文件的)和实时(流媒体的)音频信号的响度和补充参数。您还可以看到规范化音频以符合目标级别的方法。

EBU R 128标准

音频工具箱使您能够根据EBU R 128标准测量响度和相关参数。本标准定义了以下响度测量方法:

  • 短暂的响度:使用长度为400ms的滑动窗口。

  • 短期响度:使用长度为3s的滑动窗口。

  • 集成响度:从开始到结束的响度总和。

  • 响度范围:量化响度在宏观时间尺度上的变化。

  • True-peak价值:插值信号的峰值采样电平。

有关这些参数的更详细说明,请参阅EBU R 128标准的文档。

离线响度测量与归一化

对于已经有录制的音频样本的情况,可以使用integratedLoudness函数测量响度。它返回完整音频文件的综合响度(以LUFS为单位)和响度范围(以LU为单位)。

[x, fs] = audioread(“rockguitar - 16 - 44 - p1 -立体声- 72 secs.wav”);[loudness, LRA] = integratedLoudness(x,fs);流(归一化前的响度:%。1 f LUFS \ n '响度)
归一化前响度:-8.2 LUFS

EBU R 128将目标响度定义为-23 LUFS。音频文件的响度明显高于这个级别。一个简单的电平降低操作可以用来正常化响度。

目标= -23;gaindB =目标-响度;增益= 10^(gaindB/20);Xn = x.*增益;audiowrite (“RockGuitar_normalized.wav”、xn fs)

新建音频文件的响度为目标级别。

[x, fs] = audioread(“RockGuitar_normalized.wav”);响度=积分响度(x,fs);流(归一化后的响度:%。1 f LUFS \ n '响度)
归一化后的响度:-23.0 LUFS

现场响度测量与规范化

对于流音频,EBU R 128定义了瞬时和短期响度。您可以使用loudnessMeter系统用于测量实时音频信号的瞬时响度、短期响度、综合响度、响度范围和真实峰值。

首先,流音频信号到您的声卡和测量它的响度使用loudnessMeter.的可视化的方法loudnessMeter打开一个用户界面(UI),在模拟过程中显示所有与响度相关的测量结果。

Reader = dsp。AudioFileReader (“rockguitar - 16 - 44 - p1 -立体声- 72 secs.wav”...“SamplesPerFrame”, 1024);fs = reader.SampleRate;inputLoudness = loudnessMeter(“SampleRate”fs);播放器= audioDeviceWriter(“SampleRate”fs);runningMax = dsp。MovingMaximum (“SpecifyWindowLength”、假);可视化(inputLoudness)~isDone(reader) audioIn = reader();[loudness,~,~,~,tp] = inputLoudness(audioIn);maxTP = run (tp);球员(audioIn);结束

{

流('归一化前的最大真实峰值:%。1 f dBTP \ n 'maxTP(结束)
归一化前的最大真峰值:-0.3 dBTP
发布(读者)发布(球员)

正如您在UI上看到的,音频流的响度明显高于-23 LUFS阈值。它的最大真峰值为-0.3 dBTP,也高于EBU R 128规定的-1 dBTP阈值。规范化一个实时音频流的响度比规范化一个文件的响度更棘手。一种帮助使响度值接近目标阈值的方法是使用自动增益控制器(AGC)。在下面的代码中,使用audioexample。自动增益控制对象将音频信号的功率归一化到-23 dB。AGC通过查看之前的400毫秒来估计音频信号的功率,这是用于计算瞬间响度的窗口大小。本例中使用了两个响度计——一个用于AGC的输入,一个用于AGC的输出。两个响度计的ui可能在您屏幕上的同一位置启动,因此您必须将其中一个移到一边来比较AGC前后测量的响度。

outputLoudness = loudnessMeter(“SampleRate”fs);gainController = audioexample。自动增益控制(“DesiredOutputPower”, -23,...“AveragingLength”, 0.4 * fs,“MaxPowerGain”, 20);重置(inputLoudness)重复使用之前的相同响度计。reset(runningMax)可视化(输入音量)可视化(输出音量)~isDone(reader) audioIn = reader();loudnessBeforeNorm = inputLoudness(audioIn);[audioOut, gain] = gainController(audioIn);[loudnessAfterNorm,~,~,~,tp] = outputLoudness(audioOut);maxTP = run (tp);球员(audioOut);结束

{

{

流('归一化后的最大真实峰值:%。1 f dBTP \ n 'maxTP(结束)
归一化后的最大真峰值:8.3 dBTP
发布(读者)发布(球员)

使用AGC不仅使音频的响度接近-23 LUFS的目标,而且它也得到了最大真实峰值低于允许的-1 dBTP。在某些情况下,最大真实峰值保持在-1 dBTP以上,尽管响度在-23 LUFS或以下。对于这样的场景,您可以将音频通过限幅器