主要内容

响度归一化按照EBU R 128标准

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

介绍

体积归一化传统上是通过观察峰值信号的测量来实现的。然而,这种方法有一个缺点,即过度压缩的音频可能会超过信号级阈值,但仍然非常大的听到。结果是响度战争,录音往往比以前更响亮,流体中的不一致。

对响度战争的现代解决方案是测量感知响度与…结合真正的峰值水平测量。已经开发了ITU BS.1770-4,EBU R 128和ATSC A / 85等国际标准,以规范基于音频信号的功率的响度测量。许多国家已经通过了响应水平遵守广播标准的立法。

在本例中,您将测量离线(基于文件)和实时(流)音频信号的响度和补充参数。你还可以看到将音频标准化以符合目标关卡的方法。

EBU R 128标准

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

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

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

  • 达到响度:从开始到结束合计响度。

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

  • 真正峰值:内插信号的峰值样本水平。

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

离线响度测量和标准化

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

[x,fs] = audioread('Rockguitar-16-44p1-stereo-72secs.wav');[响度,LRA] = IntegratedLoudness(X,FS);fprintf('归一化前的响度:%.1f lufs \ n'响度)
正常化前的响度:-8.2 lufs

EBU R 128将目标响度级别定义为-23 lufs。音频文件的响度显然高于此级别。可以使用简单的级别减少操作来规范化响度。

目标= -23;gaindB = target -响度;获得= 10 ^ (gaindB / 20);xn = x。*所得;audiowrite ('rockguitar_normalized.wav',xn,fs)

新音频文件的响度处于目标级别。

[x,fs] = audioread('rockguitar_normalized.wav');响度= integratedLoudness (x, fs);fprintf('正常化后的响度:%。1 f LUFS \ n '响度)
正常化后的响度:-23.0 lufs

现场响度测量和标准化

对于流式音频,EBU R 128定义瞬间和短期的响度。你可以使用loudnessMeter系统对象测量瞬间响度,短期响度,集成响度,响度范围和实时音频信号的真正峰值。

首先,将音频信号流在声卡上并使用响度使用loudnessMeter。的可视化的方法loudnessMeter打开用户界面(UI),显示随着仿真进展的所有响度相关测量值。

reader = dsp.audiofilereader('Rockguitar-16-44p1-stereo-72secs.wav'......'samplesperframe',1024);fs = reader.samplerate;InputLoudness =响度率('采样率'fs);玩家= audiodevicewriter('采样率'fs);runningmax = dsp.movi​​ngmaximm('specifywindowlength',错误的);可视化(InputLoudness)〜ISDONE(READER)AUDION = READER();[响度,〜,〜,〜,tp] = inputLoudness(AudioIn);maxtp = runningmax(tp);球员(Audioin);结尾

图响度仪表包含UIControl,Uipanel类型的对象。

fprintf('归一化之前的最大真正峰值:%.1f dbtp \ n',maxtp(结束))
归一化之前的最大真正峰值:-0.3 DBTP
发布(读者)发布(球员)

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

outputLoudness = loudnessMeter ('采样率'fs);gainController = audioexample。自动增益控制(“DesiredOutputPower”,-23,......'平均值',0.4 * fs,“MaxPowerGain”, 20);重置(inputLoudness)%重复使用以前使用的相同的响度计重置(runningMax)可视化(inputLoudness)可视化(outputLoudness)〜ISDONE(READER)AUDION = READER();LoudnessBeforenorm = InputLoudness(AudioIn);[频道,增益] = GainController(AudioIn);[响度异常,〜,〜,〜,tp] =输出roudness(通风);maxtp = runningmax(tp);播放器(呼啸声);结尾

图响度仪表包含UIControl,Uipanel类型的对象。

图响度仪表包含UIControl,Uipanel类型的对象。

fprintf('归一化后的最大真峰值:%。1 f dBTP \ n ',maxtp(结束))
归一化后最大真正峰值:8.3 DBTP
发布(读者)发布(球员)

使用AGC不仅将音频的响度带到-23 luf的目标接近,而且它也得到了允许-1 dbtp下方的最大真正峰值。在某些情况下,最大的真峰值保持高于-1 DBTP,尽管响度在-23 lufs之下。对于这种情况,您可以通过AUDIO限幅器