黎国伟
(广东工业大学 信息工程学院,广东 广州 510006)
音频往往在制作的时候基于一个特定的响度水平,而此时低中高三频均衡,听感效果最佳[1],在实际的音频重放应用中,音频的播放音量往往会调低,此时重放音频的响度会低于原始音频制作响度水平。由于人耳对不同频率感知的非线性性,尤其对低频部分的敏感度要低于中频,这意味着随着音量的调低,用户对音频低频部分的感知程度会比中频下降得更快,从而降低用户对音频的整体听觉感受。有些用户为了获得最佳的音频听感,往往把音量调得很高,长期以往,会对用户的听力造成损害。实验表明[2]基于ISO 226∶2003等响度曲线[3]的自适应滤波器,在低音量重放音频时,可以有效地对音频的低频部分进行自适应补偿,该方法中所采用的是A计权[4]和K计权[5]的响度计算方法,无法直接计算和等响度曲线对应的响度级Phon值,需要烦琐的校准过程,而且A计权和K计权均属于单频带模型,并未考虑内耳机制的复杂感知特性。为了能够在重放音频的时候能较准确地计算出响度级Phon值并对音频进行自适应响度补偿,本文以Leonardo Fierro的自适应响度补偿算法[2]为基础,提出结合ISO 532-1∶2017中的Zwicker多频带响度计算模型,对原算法进行改进,并给出了Visual Studio仿真结果。
等响度曲线是指通过对听力功能正常的听力测试人员进行主观测试所得到的声音响度级相等的一簇曲线。本文所使用的等响度曲线标准为ISO 226∶2003, 该标准定义了在自由场中以频率为变量的声压级函数,且每个声压级在不同纯音频率下所对应的人耳感受响度级值的关系。
ISO226∶2003标准给出了通过响度级求得声压级的公式,频率为f的纯音的声压级Lp和其响度级Ln的关系如下:
其中Tf为听阈,单位为dB ,Ln为响度级,单位为Phon,af为依赖于频率的指数因子,Lu为1kHz处的归一化线性传输函数的幅度。
从等响度曲线(见图1)可以看出,曲线在低频部分更加陡峭和密集,这意味着频率越低,人耳的敏感度越低,而且在低频部分,声压值的变化对响度的变化影响很大。比如在1 000 Hz,要达到60 Phon的响度级需要60 dB的声压级,而在63 Hz要达到相同的响度级,则需要86 dB的声压级,同时在1 000 Hz处,如果声压级从60 dB下降10个dB,响度级会下降10个Phon响度级,而在63 Hz处声压级从86 dB处下降10 dB,则响度下降了18个左右的Phon响度级。以上观察均能充分体现了人耳对不同频率感知的非线性,由于这种非线性,在音量调低时,对不同的频率根据等响度曲线做出不同程度的补偿,才能较好地维持人耳对音频原有的频率均衡感受。
图1 ISO226∶2003等响度曲线[3]
Leonardo Fierro提出的响度补偿方法[2],主要原理是根据等响度曲线获得一个和音频重放音量相关的敏感函数S,然后根据敏感函数的值用于修正频谱的不均衡。敏感函数S的表达式如下:
其中,Lp(f,Ln)为响度级为Ln以及频率为f时在等响度曲线上对应的声压级。
假设音频制作时在1kHz处声压级为LM,而此时由于音频音量调低,音频在1kHz处以声压级LL播放,通常LL小于LM。我们把以LM水平播放所对应的音频频谱均衡作为目标频谱,对以LL水平播放所对应的音频进行频谱补偿至和目标频谱的频谱均衡一致,定义了补偿曲线:
其中,Nf=Lp(1000,LM)-Lp(1000,LL)=LM-LL。
本文主要研究1 kHz以下的响度补偿,图2画出了在不同音频播放水平LL下,为达到与以LM水平播放时的低中频均衡一致时的补偿曲线。
图2 补偿曲线H(f,LM,LL),LM=80dB
从上节中获得补偿曲线H(f,LM,LL),下一步就是设计一个数字滤波器。该滤波器的幅度响应应能根据当前音频播放水平LL和音频制作水平LM,尽可能地接近补偿曲线。这里选择Shelving 滤波器,用于逼近补偿曲线H(f,LM,LL)[2]。
Shelving 滤波器一般用于提高或衰减输入信号在低频或高频的幅度,其与低通或高通滤波器不同,Shelving 滤波器并没有滤除某些频率,而仅仅是提高或衰减低频或高频响应幅值,按其工作所在频率分为Low-Shelving或High-Shelving滤波器,前者工作在低频,后者工作在高频,本文中所用到的Shelving 滤波器为Low-Shelving滤波器。
上述分别为一阶和二阶low-shelving滤波器[7]。其中Ω=tan(wc/2),wc=2πfc/fs,wc=2πfc/fs。G为滤波器增益值,而fc为滤波器过渡频率,wc为滤波器归一化过渡角频率,fs为音频采样率。
分别使用一阶、二阶、两个一阶级联的Low-Shelving滤波器自适应跟踪补偿曲线H。
从图3可以看出,两个一阶Low-Shelving滤波器串联的频率响应对补偿曲线的跟踪效果最佳,而一阶Low-Shelving滤波器次之,二阶Low-Shelving滤波器对补偿曲线的跟踪效果较差。对于单独Low-Shelving滤波器补偿,G选取20 Hz处的增益值,过渡频率fc设置为122 Hz,对于两个一阶Low-Shelving滤波器补偿,其中参数G1和G2分别为两个一阶滤波器在20 Hz处的增益值的1/2,过渡频率fc1和fc2分别设置为61.1 Hz和242 Hz[2]。
图3 当LL=60dB/LM=80dB时各种滤波器对补偿曲线H的跟踪
人耳对声音响度的感知不是简单的线性关系,而是与人耳结构以及掩蔽效应相关的非线性关系。因此计算一个复音信号的响度,不能简单地由其各次谐波的响度线性加权得到,而是要采用响度计算模型对复音进行计算得出其响度。在响度计算模型中按所采用的频带进行划分,一般可以分为单频带计算模型和多频带计算模型。单频带计算模型中典型的代表为A计权[4]和K计权[5],由于其计算简单而被广泛使用,但是由于单频带计算模型并未考虑内耳机制的复杂感知特性,存在局限性,而多频带响度计算模型增加了对内耳机制的复杂感知特性的考虑,典型代表为Zwicker多频带计算模型和Moore-Glasberg多频带计算模型,本文算法将采用ISO 532-1∶2017 Zwicker多频带响度计算模型[6]。
在ISO 532-1∶2017 Zwicker平稳声音响度计算方法中,对ISO 532∶1975 Method B中基于图形的响度计算方法,依据DIN45631∶1991对低于300 Hz的低频部分进行了修正,改进了响度计算的精准度,并提供了具体计算公式,有利于在计算机上直接进行计算。
对非平稳声音信号,如果使用平稳声音信号的计算方法进行计算,所得到的响度结果会相对较低,ISO 532-1∶2017 Zwicker非平稳声音响度计算方法在平稳声音响度计算方法的基础上,根据人耳听力系统感知非平稳声音信号的特点,给出非平稳声音响度的具体计算方法。
ISO 532-1∶2017 Zwicker非平稳声音响度的计算如图4所示。
图4 ISO 532-1:2017 Zwicker非平稳声音响度计算[6]
图4中非虚框部分为平稳声音响度计算部分,而非平稳声音响度计算主要增加了图4中3个虚框部分,主要分为5个步骤。
步骤1: 将频带从25 Hz到12.5 kHz分解成1/3倍频程,输入声音经过IEC61260-1∶2014标准的计算1/3倍频程声压级的3个二阶IIR滤波器,求得1/3倍频程声压级后,需要通过3个级联一阶低通滤波器实现平方及平滑过程,从而获得声压级LT,为了降低计算量,LT之后要进行采样。考虑到人耳系统对低于300 Hz的信号敏感度相对其他频率要低,在计算响度前,对低于300 Hz的1/3倍频程的声压级水平做计权衰减的修正。
步骤2:在300 Hz以上可以使用1/3倍频程近似临界频带,但是在300 Hz以下,1/3倍频程比临界频带要窄,需要整合2个或者更多的1/3倍频程来近似一个临界频带,并计算出每个临界频带程的声压级水平LCB′。
步骤3:依据人耳传输特性以及自由场或扩散场场景,还有每个1/3倍频程带宽的不同,对每个临界频带的声压级水平进行水平校正,校正之后计算获得每个临界频带的特征响度N′C。
步骤4:依据听力系统的非线性时间衰减特性,即在短信号之后响度下降要比长信号要快,在临界频带的特征响度N′C之后添加NL模块进行模拟。
步骤5:在将24个临界频带的响度值进行积分求和获得总响度之后,引入两个1阶低通滤波器模拟信号长度对响度感知的影响,最终求得非平稳声音总响度值。
使用C语言实现本文提出的自适应响度补偿算法,开发环境为Visual Studio 2019,并使用Matlab对原始音频信号、调低音量后的音频信号和自适应响度补偿后的音频信号进行频谱分析。
(1)选取一段低频丰富的音频信号作为输入。
(2)程序读入整段音频文件,利用ISO 532-1∶2017 Zwicker非平稳声音响度计算模型计算整段音频的总响度值。
(3)模拟音频重放音量调节,调低音量值为kdB。
(4)根据调低音量值kdB,使用两个一阶Low-Shelving串联滤波器对调节音量后的音频进行自适应响度补偿,并输出保存补偿后的音频信号。
(5)使用Matlab对原始音频信号、调低音量后的音频信号和自适应响度补偿后的音频信号进行频谱分析,结果如图5所示。
图5 输入原始音频信号,调低音量-12dB的音频信号和自适应响度补偿后的音频信号频谱分析
从图5结果中可以看出,调低音量后的音频信号,其频谱幅度相对于原始音频信号幅度整体下降12 dB,根据等响度曲线和实际听感,此时低频部分比中频丢失更快更严重,对调低音量后的音频信号利用本文的自适应响度补偿算法进行补偿后,从图5中可以看出,补偿后的音频信号在1 kHz以下频率部分得到显著补偿,而实际听感上,自适应响度补偿后的音频信号中的低中频均衡相比补偿前更接近于原始音频信号。
本文提出的基于ISO 532-1∶2017 Zwicker响度计算模型的自适应响度补偿算法,能更加精确地计算音频信号的响度和响度级,并根据调低的音量值,对调低音量后的音频信号进行两个一阶Low-Shelving串联滤波器的自适应响度补偿,使得音频在1kHz以下的低中频均衡更接近原始音频,改善在音频重放中低频丢失严重现象。由于本文算法使用的是基于Visual Studio平台的C语言仿真,这为后续移植到DSP系统或嵌入式系统进行真实的在线音频重放自适应响度补偿打下良好的基础。