主要内容

根据EBU r128标准对响度进行标准化

此示例显示如何使用音频工具箱™使用工具来测量响度,响度范围和真正峰值。它还显示了如何将音频标准化以满足EBU R 128标准合规性。

介绍

传统上通过查看峰值信号测量来执行体积归一化。然而,该方法具有过度压缩音频可以通过信号级阈值但仍然非常响亮的缺点。结果是一个响度战争在美国,唱片往往比以前更响亮,而且在不同流派之间不一致。

解决响度之战的现代方法是测量响度感知与a结合true-peak水平测量。国际标准如ITU b .1770-4、EBU R 128和ATSC A/85已经开发出来,以标准化基于音频信号功率的响度测量。许多国家已经通过了在响度方面符合广播标准的立法。

在此示例中,您可以测量离线(基于文件)和实时(流)音频信号的响度和补充参数。您还可以了解符合目标级别的符合符合音频的方法。

EBU R 128标准

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

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

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

  • 集成响度:从开始到结束的响度聚合。

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

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

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

离线响度测量和标准化

对于您已经拥有录制的音频样本的情况,您可以使用IntegratedLoudness.致电响度的功能。它以完整的音频文件为单位的LUFS单位返回LUF的单位和响度范围的集成响度。

[x, fs] = audiread (“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] = audiread (“RockGuitar_normalized.wav”);响度= IntegratedLoudness(X,FS);流('正常化后的响度:%.1f lufs \ n',响度)
标准化后的响度:-23.0 LUFS

活响度测量和标准化

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

首先,将音频信号传输到你的声卡上,并使用响度仪。该可视化的方法响度仪打开一个用户界面(UI),在模拟过程中显示所有与音量相关的测量值。

读者= 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();[响度,~,~,~,tp) = inputLoudness (audioIn);maxTP = runningMax (tp);球员(audioIn);结束流('最大真峰值归一化前:%。1 f dBTP \ n 'maxTP(结束)
Max true-peak归一化前的值:-0.3 dBTP
释放(读者)释放(播放器)

正如您在UI上看到的,音频流的响度显然高于-23 lufs阈值。它的最大真正峰值级别-0.3 DBTP也高于EBU R 128指定的-1 DBTP的阈值。归一化实时音频流的响度比归一化文件的响度稳定。帮助将响度值接近目标阈值的一种方法是使用自动增益控制器(AGC)。在以下代码中,您使用audioexample.AGC系统对象将音频信号的功率标准化为-23 dB。AGC通过查看前400毫秒来估计音频信号的功率,这是用于计算瞬时响度的窗口大小。在该示例中使用了两个响度仪表 - 一个用于AGC的输入,一个用于AGC的输出。两个响度仪的UI可以在屏幕上的相同位置发射,因此您将必须将一个移动到AGC之前和之后的测量响度。

outputloudness =响度仪(“SampleRate”fs);gaincontroller = audioExample.Agc('lausendOutputpower', -23,“AveragingLength”, 0.4 * fs,'maxpowergain'20);重置(InputLoudness)%以前重复使用相同的响度表重置(RunningMax)可视化(InputLoudness)可视化(OutputLoudness)~isDone(reader) audioIn = reader();loudnessBeforeNorm = inputLoudness (audioIn);[audioOut,增益]= gainController(audioIn);[loudnessAfterNorm, ~, ~, ~, tp) = outputLoudness (audioOut);maxTP = runningMax (tp);球员(audioOut);结束

流(“标准化后的最大真正峰值:%.1f dbtp \ n'maxTP(结束)
最大true-peak归一化后的值:8.3 dBTP
释放(读者)释放(播放器)

使用AGC不仅使音频的响度接近目标-23 LUFS,而且使最大真峰值低于允许的-1 dBTP。在某些情况下,最大的真峰值值仍然高于-1 dBTP,尽管响度是在或低于-23 LUFS。在这种情况下,您可以将音频通过a限制器