Schroeder混响的算法相对而言比较简单,而且也能达到一个非常不错的效果。但是随着后来的发展,Schroeder算法也存在一些可以改进的点,例如上图(图6)的预梳理和预延时模块,如果想获取更加逼真的效果,在早期反射其实不能够完全按照Schroeder模型进行设计,要增加APF以及Pre-delay模块,或者可以考虑是否可以增加更加多的Comb来获取更多的回声密度、后端的APF是否可以嵌套使用等等。在Schroeder的基础之上,Moorer的数字混响模型也就诞生了,下图(图8)为Moorer脉冲响应模型图:
Moorer算法模型大概将一个混响分成了三个阶段:直达声、早期混响、晚期混响。早期混响通过增加前级反馈和FIR来模拟,同时增加低通滤波器来模拟高通在空气中的衰减效果,后端增加到6个Comb组以及APF的嵌套使用。
随着目前大家对音频相关产品的需求增加,混响对于音频设备来说已经成为一种基本需求。那么在混响中又有哪些参数调整?在ADI的DSP中我们该如何选择DSP去设计一套合理的算法?接下来将对混响的具体参数调整以及选择ADI的DSP设计合理算法进行深入解析。
目前做一个专业级的混响需要设置许多的参数,有些参数是必备的,而有些是特定的需求下慢慢增加起的。专业的效果器一般包含如下图(图9)的一些参数:
图9 混响的相关参数
• 混响时间:能够逼真地模拟自然混响的数码混响器上都有一套复杂的程序,其中虽然有很多技术参数可调,然而对这些技术参数的调整都不会比原有的效果更为自然,尤其是混响时间(取决于预延迟时间,以及衰减速率和收敛的判定)。
• 预延迟时间:在混响效果器上的众多参数中,预延迟时间(Predelay)是一个比较重要的点。所谓的预延迟时间,指的是达到人耳的直达声和第一次反射声之间的时间间隔。在混音中,预延迟时间的选择是与我们的基准时间有着一定的关联性的。而基准时间的计算方式一般来说就是拿60秒除以音乐BPM的值(取决于直达声之后做的延迟时间以及FIR的时间)。
• 高频滚降:此项参数用于模拟自然混响当中,空气对高频的吸收效应,以产生较为自然的混响效果。一般高频混降的可调范围为0.1~1.0。此值较高时,混响效果也较接近自然混响;此值较低时,混响效果则较清澈(取决于低通滤波器的阶数以及截至频率的设计)。
• 扩散度:此项参数可调整混响声阵密度的增长速度,其可调范围为0~10,其值较高时,混响效果比较丰厚、温暖;其值较低时,混响效果则较空旷、冷僻(取决于Comb Filter的D值选取以及回声密度递增数值)。
• 声阵密度:此项参数可调整声阵的密度,其值较高时,混响效果较为温暖,但有明显的声染色;其值较低时,混响效果较深邃,切声染色也较弱(取决于Comb Filter的数量)。
• 频率调制:这是一项技术性的参数,因为电子混响的声阵密度比自然混响稀疏,为了使混响的声音比较平滑、连贯,需要对混响声阵列的延时时间进行调制。此项技术可以有效地消除延时声阵列的段裂声,可以增加混响声的柔和感(取决于Comb Filter的延时时间)。
• 混响类型:不同房间的自然混响声阵列差别也较大,而这种差别也不是一两项参数就能表现的。在数码混响器当中,不同的自然混响需要不同的程序。其可选项一般有小厅(S-Hall)、大厅(L-Hall)、房间(Room)、随机(Random)、反混响(Reverse)、钢板(Plate)、弹簧(Spring)等。其中小厅、大厅房间混响属自然混响效果;钢板、弹簧混响则可以模拟早期机械式混响的处理效果。
• 干湿比:干声信号和混响信号的比例,调节直达声以及混响信号的分量比重。
从这些后续发展出来的参数不难看出,涉及的调节选择变得越来越多,那么对于设计者来讲如何挑选合适的参数和类型去搭建自己想要的产品就变得非常重要。
DSP和混响类型的选择
在实际的生产应用中,选择混响的类型,并不是直接去选一个最完善的类型就好了。实际上很多时候应用达不到这个条件,越完善的混响类型意味着对DSP的内存空间的需求以及算力的大小都是有需求的,然而很多成本预算不是那么充足,或者工作环境对功耗等等方面都有需求的产品,我们是无法选择那么一个比较高复杂度的混响。
举个很简单的例子,比如A客户需要做一个轻量级的吉他拾音器,拾音器主要的目的就是拾音,当然为了丰富一些效果,可能我们需要调节高中低频的EQ,加一个混响,在这个时候,选择一个ECHO类的混响要比选择MOORER类的混响好太多。从控制成本和功耗的角度上来讲,虽然ECHO类并不如Moorer类的好,但是在演奏中已经够用,复杂的可以通过拾取后,送到效果器或者功放中去实现。
在选择时,建议都要根据自己的产品类型合理地从成本、封装体积大小,以及功耗上选择最为合适的产品。
ADI DSP在ECHO类算法的基本实现
众所周知,ADI在音频的DSP上相当有竞争力,从其Sigma到Sharc 类的DSP均用到了各类的音频电子产品中。如下图(图10)所示为ADI SigmaDSP产品选型对比表:
图10 SigmaDSP的产品选型对比表
下图(图11)为ADI Sharc DSP产品选型对比表:
图11 SharcDSP的产品选型对比表
ADI SigmaDSP的产品是定点的数字信号处理器,而SharcDSP即全浮点的数字信号处理器。全浮点的DSP可以处理复杂度比较高的混响,SigmaDSP一般用于处理一些简单一点的混响。以下将展示一些ECHO类混响在DSP上的应用实现,目前混响主要对内存的空间需求是比较多的,存在着很多Delay。
在ADAU1701和ADAU1761中的实现:
图12 ECHO类混响在ADAU1761中的实现
从上图(图12)可以看出,直达声直接作为干音传到输出端,将音源的左右通达合成一路用来减少内存空间和算力的消耗,用三个延时线创造混响空间,传到后端进行低通滤波,实现高频滚降。这样做能够得到一定量的混响的效果,但是回声密度不够,增益调节以及扩散度和频率调制是无法实现的,适合一些轻量化的产品应用。我们在SharcDSP中一般直接通过代码来实现,例如下方的ECHO类回声的实现:
创建一个DSP混响的效果器。以下图(13)是一个使用Python和NumPy库实现的简单DSP混响效果的示例代码: