作者的话
ADAU1701 的下一个阶段,我会把 DSP 能够实现的全部功能,通过专题文档和例程来一一展现。(有很多例程都是我从 ADI 的文档中摘取后,做成实际的程序方便用户使用,但具体原理、算法等可能也一样搞不明白,这个需要大家一起去钻研了)
文档中的开发板和仿真器哪里找
产品链接: https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.621e2c1b6F3EMW&ft=t&id=811967886964
产品链接: https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-5192690539.11.ad392dbdrCme9n&id=38242936768
软件准备
SigmaStudio4.7
用到的例程
滤波器科普
首先说说 EQ,这个最常用的音效处理,各种滤波器。(本人是电子工程师,并不是声学工程师,水平有限,对音效的理解更偏重于 DSP 电子设计应用这部分,文字中有错误或不准确的地方,请原谅、指正,共同学习,谢谢)
Equealizer,EQ,中文翻译为均衡。我的理解,在音效系统里,我们需要对原始的音频信号进行许多方面的加工处理,才能使播放的声音变得优美、悦耳、动听,满足人们对声乐的高品质需要。EQ 就是其中的一种用来对频响曲线进行调整的工具。换句话说,EQ 能对不同频率的声音信号进行不同的提升或衰减。因为它能补偿由于各种原因造成的信号中欠缺的频率部分,也能抑制信号中过多的频率成分,从而达到高品质声音效果。
例如,EQ 可以抑制频率为 60~250Hz 的低频交流声,也能抑制频率为 6~12KHz 的高频噪声。由于乐器发出的声音大多是复合音,即他们是由基波和谐波复合而成的,所以改变了各频段能量分布的相对大小,
就相当于改变了基波与谐波之间的相对关系,从而导致人耳对声音频谱结果的听觉感受发声了改变,我们俗称音色的改变。
因此,利用 EQ 还可以进行音调调节和音色加工。EQ 的种类有很多,我们的 SigmaDSP 就提供了非常多的 EQ 算法模块供大家使用,这些 EQ的最基本工作原理应该都是相通的。它们都是将音频信号的全频带(20Hz~20KHz)或全频带的主要部分,按一定的规律分成几个甚至几十个频点(也称之为频段),再分别进行提升或者衰减,从而获得所希望的频响校正曲线。
我们常说的 31 段 EQ,多少段 EQ,SigmaDSP 最多能实现多少段 EQ 是什么意思?频段数越多,则频段分得越细致,补偿修正功能越高。打个比方,15 段 EQ,中心频率我设置个常用的,在 25Hz,40Hz,63Hz,100Hz,160Hz,250Hz,400Hz,630Hz,1.6KHz,2.5KHz,4KHz,6.3KHz,10KHz,16KHz。31 段 EQ,中心频率我设个常用的,在 20Hz,25Hz,31.5Hz,40Hz,50Hz,63Hz,80Hz,100Hz,125Hz,160Hz,200Hz,250Hz,316Hz,400Hz,500Hz,630Hz,
800Hz,1KHz,1.25KHz,1.6KHz,2KHz,2.5KHz,3.15KHz,4KHz,5KHz,6.3KHz,8KHz,10KHz,12.5KHz,16KHz,20KHz。根据需要,我们可以在 20Hz~20KHz 的整个音频范围内,调节更多的频点特性,根据需要,精准的提升与衰减增益,消除噪声,修饰音色,提高音质,校正房
间声学特性,还能模拟一些特殊的声音效果!
均衡的技术指标有很多,我在这里简单的说一说:
-
中心频率
中心频率就是指均衡中各谐振回路的谐振频率,即提升或者衰减频段的峰点或谷点所对应的频率。 -
频带宽度
各段频带宽度是指的以中心频率为中心,-3dB 点所对应的频带宽度,它与品质因子 Q 值有关,Q 值越大频带越窄,Q 值越小频带越宽。 -
最大提升/衰减量
均衡器在中心频率点所对应的音频信号,能够提升或者衰减的最大能力,用 dB 分贝来表示。 -
频率响应
频率响应也成频率特性,通常是表示不同频率对某一参考电平的相对信号电平特征曲线图。在给定的频率范围内,若所有频率信号均有平均的电平,则称之为平坦的频响曲线。频响也可表示为电平偏差不超过某一分贝数值的皮率范围。均衡器的频率响应指在音频频率范围内各个频率点不提升也不衰减时的频率响应,此时的频率响应曲线越平坦越好! -
频率中心点误差
频率中心点误差是指各频率点实际中心频率与设定的频率的相对偏移,通常用百分数表示。 -
总谐波失真
信号通过均衡器后,新增加的所有谐波成分的方均根值占基波信号的百分比 -
信噪比
音频信号电平与通过均衡器后产生的各种噪声电平的比值,用 dB 来表示,用于衡量均衡器的噪声性能,信噪比越大,说明均衡器噪声影响就越小。 -
最大输入电平
均衡器输入回路所能接受的信号最大电平。
还有其他的参数,如最大输出电平,输入阻抗,输出阻抗等等,这里就不再细说了,属于音频基础知识,可以百度或者找本教材读读看。
以上,OP老师作为一个外行人,班门弄斧的简单介绍了一下 EQ,在 SigmaDSP 里,实现 EQ 是件非常容易的事情,不过想要调好 EQ 就是一个细致的活,我们一起慢慢看,慢慢学。
硬件准备
ADAU1701EVB-A2B开发板
USBi仿真器
5V2A电源适配器
USB线缆(MINI USB接口)
模拟输入音源(电脑声卡、手机、播放器都可以)
模拟输出设备(音箱、耳机)
软件准备
SigmaStudio4.7
使用到的例程
1.EQ 举例:中型均衡器(EQ)(例程 1234)
我们以 SigmaDSP 中,最常用的 ADAU1701 为例来说一说,其他的 SigmaDSP 型号均可参照。
这个EQ在我的第四个文档里简单的讲了一下,那么在本章我就来细说。
通过该模块可使用两种通用二阶滤波器:峰化及支架型均衡器(EQ)。用于驱动该模块的算法与其他二阶滤波器相同,只有采用一种替代型布局和参数控制,可能更适用于您的应用。
这个模块可以控制频率、增益和滤波器类型。
模块怎么用在 SigmaDSP 的音频框架里,这个我们前面的例子都有详细的说明,那么如何来调他
呢。
1.单击蓝色图标,选择所需滤波器:峰化(Peak)或高/低架(Shelving)
- 输入所需参数。默认为 Peaking,那我们就先用 Peaking
Peaking 滤波器
增强或减弱指定中心频率。
1.增益(Gain):该字段设定滤波器的总增益(缩放增益)。在右上部的“增益”(Gain)字段中编辑所需值(+/-15),也可单击箭头。
2.增强/减弱电平(Boost / cut level):通过滑块控制响应滤波部分的电平。
3.频率(Frequency):在左下字段中输入所需峰值或谷值中心频率。
4.Q:设定所需 Q 值:在字段中直接输入;单击其箭头;或使用同心旋钮,其中外旋钮控制整数值,内旋钮控制小数值。 “Q”值控制着滤波器的窄度,为中心频率与任一侧半功率点(-3dB) 之比。“Q”值越高,通带与阻带之间的过渡越快。
- 下面我们来实际做几个例子,看一看这个 EQ 具体调起来的效果如何。
1)负增益和低“Q”值(例程 1)
2)正增益和窄“Q”值(同一缩放增益、同一频率)(例程 2)
Shelving 滤波器
Shelving EQ 对高于(=高架(High Shelf),)或低于(=低架(Low Shelf),)截止频率的全部频率进行均匀增强或减弱。
其他参数为:
截止频率(Cutoff frequency):在滑块下方的字段中输入截止频率,该频率是支架增强/减弱与未受影响(平坦)响应之间的截止点。
增益(Gain)(滤波器) :用滑块控制滤波器增强或减弱。负值将减弱高于(高架)或低于(低
架)截止频率的全部频率,而正值将增强高于(高架)或低于(低架)截止频率的全部频率。
斜率(Slope) (Q):用控制旋钮编辑滤波器的斜率,范围为 0 – 2。右击旋钮,输入更精确的值。斜率控制滤波器陡度,因此控制着增强/减弱与平坦响应之间的过渡。
缩放增益(Scale Gain) (dB):该值控制滤波器的总增益。在相应字段中直接输入,也可单击右侧箭头输入。
通过比较以下曲线及其参数,感受一下这个滤波器,练练听力吧。
例程 3 和例程 4
最后,OP 的惯例,技术水平只能教会怎么用,至于用它来调出神仙音效,就看大家各显神通啦。
通用一阶滤波器(General 1st-Order)(例程 5)
一阶低通和高通滤波器。若要在高通、低通和平坦之间切换,请单击蓝色频率响应图标。该操作可实时完成,无需重新编译项目。在文本字段中输入目标值,设定滤波器的截止频率和总增益(有时称为缩放增益)。也可单击箭头以逐一增大这些参数的值。若要快速增大参数值,请单击并按住不放,然后略微拖动。
通过点击蓝色的按钮,可以看到曲线的明显变化,音效各位自己去听听,练听力,有明显差别:
通用一阶滤波器,参数/查找/压摆率(General (1st-Order Lookup)(例程 6)
这个滤波器提供一组可选高通或低通一阶滤波器响应,选择响应时可平滑(压摆率)过渡。
该模块允许您定义一组滤波器响应(低通或高通),可通过终端系统中的外部控制输入进行选择。可选响应或曲线的数量是可变的,就如控制着滤波器响应变化速率的压摆率或步进一样。
滤波器响应显示在“滤波器控制”(Filter Control)窗口中(见下文)。请注意,响应曲线线性分布于低、高截止频率值之间。
该模块的算法将一组滤波器系数存储在 DSP 中的一个表中。若要选择某个曲线,请使用“索引查找表”(Index Lookup Table)、 “计数器”(Counter)模块或“直流输入”(DC Input)模块,并连接至红色引脚。通过 GPIO 模块,您可以用一个旋钮、旋转编码器或按钮控制所选响应。
若要打开“滤波器控制窗口”:
请单击图标按钮:
在“曲线数”(# Curves)字段中输入所需曲线的数目。
在“增益”(Gain)字段中输入所需滤波器增益(-/+ dB)。
在“频率”(Frequency)字段中输入这些曲线的所需频率范围(低频和高频目标频率)
通用二阶滤波器 General (2nd-Order)(例程 7)
很常用的一个滤波器模块,通过这个滤波器模块,你可以使用多种二阶(双二阶)滤波器算 法。
可用滤波器类型有:
参数型(Parametric)
支架型(Shelving)
通用高通型(General High-Pass)
通用低通型(General Low-Pass)
通用带通型(General Band-Pass)
通用带阻型(General Band-Stop)
巴特沃兹低通/高通型(Butterworth Low-Pass / High-Pass)
贝塞尔低通/高通型(Bessel Low-Pass / High-Pass)
信号音控制型(Tone Control)
IIR 系数型(直接系数输入) (IRR Coefficient) (direct coefficient entry)
一阶低通/高通型(1st-Order Low-Pass / High-Pass)
全通型(All-pass)
峰化型(Peaking)
陷波型(Notch)
切比雪夫低通/高通型(Chebyshev Low-Pass / High-Pass)
若要打开滤波器控制窗口,请单击图标按钮,从下拉组合列表中选择所需滤波器类型。参数控制
将发生变化,以反映当前所选滤波器类型,模块图标按钮中的图像也会相应变化。
至于每个滤波器的算法,在 SigmaStudio 的 Help 里全部都有,我就不再这里重复了,如下图:
通用二阶滤波器-带查找功能 General (2nd-Order/ Lookup)(例程 8)
通过“通用(二阶/查找) ”(General (2nd-Order/ Lookup))模块,可使用多种二阶 IIR(无限脉冲响应)滤波器算法。
可用滤波器包括:
信号音(Tone)
峰化(Peaking)
通用低通/高通(General LP/HP)
巴特沃兹低通/高通(Butterworth LP/HP)
贝塞尔低通/高通(Bessel LP/HP)
切比雪夫低通/高通(Chebyshev LP/HP)
该模块采用一个双二阶滤波器,该滤波器在 DSP 的表中有多组系数。若要选择曲线(查找), 请使用设计中的“索引查找表”(Index Lookup Table)、“计数器”(Counter)模块或“直流输入”(DC Input)模块,并连接至红色引脚。通过 GPIO 模块,您可以用一个旋钮、旋转编码器或按钮控制所选响应。
若要打开“滤波器控制窗口”:
请单击图标按钮:
该曲线通过“信号音控制”(Tone Control)窗口(如下所示)定义。
在“曲线数”(# Curves)字段中输入所需曲线的数目。
在相应字段中输入“增强”(Boosts)、(总) “增益”(Gain)和“Q”值。
在“频率”(Frequency)字段中输入所需截止或中心(峰化滤波器)频率。
需要输入的其他参数因滤波器类型而异。
滤波器的种类和范围数量可观,如以下各例所示:
各个参数都调一下,试试这些滤波器的效果吧。
图形通用滤波器(二阶/索引可选)(例程 9)
通用(二阶/索引可选)”(General (2nd-Order/Index Selectable))模块提供多种二阶滤波器算法。 通过一种增强型图形滤波器设计工具,该模块扩展了“通用(二阶/查找) ”(General (2nd-Order / Lookup))滤波器的功能。另外,该滤波器的每条响应曲线均可独立设计,这样,您就可以使用复杂的滤波器配置,以适应所需系统响应。
该滤波器提供以下功能:
通过外部控制输入引脚选择一组滤波器响应。
以图形界面设计滤波器响应曲线。
独立为各条响应曲线选择滤波器类型和设置。
该模块部署为一种双二阶滤波器,在 DSP 的表中存有多组系数。
索引选择(控制引脚):
“多索引可选滤波器”(Multiple Index Selectable Filter)模块有一个外部输入(橙色引脚),用于选择控制窗口中定义的任意滤波器。若要选择特定滤波器响应曲线,请使用设计中的“索引查找表”(Index Lookup Table)、 “计数器”(Counter)模块或“直流输入”(DC Input)模块,并将其连接至控制输入引脚。选择输入应为一个以 28.0 格式表示的整数值,范围为 0 至曲线数之间。例如,如果您的滤波器有 6 条曲线,则选择输入应为 0 至 5 之间的一个 28.0 格式的整数值。
滤波器控制窗口:
开始时,窗口将显示属于同一类型的四条不同滤波器曲线,如下图所示。如希望添加更多滤波器
曲线,则每添加一个新的滤波器, “增强”(Boost)值默认递减 5 dB。
只需单击“添加滤波器”(Add Filter)按钮,即可添加附加的滤波器曲线;该模块最多支持 15 条滤波器响应曲线。若要移除某个滤波器,请在图中选择该滤波器或在“滤波器”(Filter)栏中单击相应索引,并按“移除滤波器”(Remove Filter)按钮。
控件:
在该窗口中,我们可以看到以不同颜色表示的二阶滤波器,可通过图中底部所示独立控件进行调整。
若要更改滤波器的特性,如“频率”(Frequency)或“增强”(Boost),只需单击滤波器图中的彩色圆圈并拖至所需位置即可。如需要,可通过旋转控件直接更改任何参数。
若要通过图形界面更改“Q”因数,请单击彩色圆圈上方的水平线控件,并向左或向右拖动, 调整滤波器的宽度。
在“类型”(Type)栏中,请在“低通”(Low-Pass)、 “高通”(High-Pass)、 “峰化”(Peaking)、 “信号音”(Tone)、 “IIR“及“一阶”等滤波器之中作出选择。
只有“一阶”滤波器型号才有“子类型”(Sub Type)部分。在一阶模式下,您可以在两个级联一阶滤波器中作出选择,配置为低低(Low – Low)、低高(Low – High)、高低(High – Low) 或高高(High – High)组合。 “有效 1”(Active 1)和“有效 2”(Active 2)复选框也仅适用于一阶滤波器,使您可以单独启用或禁用这两个一阶滤波器中的任一个。
“查看”(View)部分仅适用于一阶滤波器类型,通过该工具,您可以管理各个一阶滤波器并以图形方式控制其设置。
选中“旁路”(Bypass)复选框时,可禁用滤波器。
坐标图视图可通过更改“频率”(Frequency)和“幅值”(Magnitude)两个设置进行更改。这些设置仅适用于界面,不会影响滤波器的响应。
“压摆点”(Slew Points)控件设定算法用来从一条所选滤波器曲线过渡到另一曲线的过渡点数;增加点数将获得更平滑的过渡。
“透明度”(Opacity)控件用于设定控制窗口中的透明值。
我们来看一个例程,看看 01 和 23 通道的声音差别。
点开这两个滤波器,自己去配置调整摸索吧。
Pinking 滤波器(例程 10)
这类滤波器的经典用途是将白噪声(为每赫兹的等效能量)转换为粉红噪声(为每比例或常数百分比(如对数)频带的等效能量)。
若捆绑(集成)得当,此类能量将在任何对数比例图中显示为平坦。 Pinking 单元接受任何输入信号,并输出线性下降为 3dB/倍频程的信号。
看个示例:
跟踪滤波器(Tracking Filter)(例程 11 和例程 12)
“跟踪滤波器”(Tracking Filter)可用于对滤波进行动态转移。这种特定的跟踪滤波器采用一种“峰化滤波器”(PeakingFilter)算法。在多种应用中,应为峰化滤波器设定可移动中心频率,而非固定中心频率。例如,可用低频振荡器(LFO)驱动跟踪滤波器,以产生定相音频效应。跟踪滤波器允许通过外部输入来确定中心频率。
输入引脚:
跟踪滤波器模块有两个输入和一个输出。第一输入是您希望进行过滤的实际音频输入。第二输入引脚为滤波器中心频率的值。可以看出,该引脚为橙色,表明这是一个控制引脚而非音频引脚。在此,您可以连接低频振荡器或直流输入模块,用以为跟踪滤波器指定所需固定或可移动中心频率。
算法说明:
“跟踪滤波器”是“SigmaStudio 滤波器”库中的一种特有滤波器。这是系数由 DSP 处理器动态计算的少数几种滤波器之一。计算方程嵌入模块的算法代码之中,然后生成系数,视具体输入中心频率而定。跟踪滤波器算法可接受的输入中心频率为一个 5.23 数据格式的值,计算公式为: Hz/(fs/2)。
例如,如果工作频率为 fs = 44100 Hz,且 fc = 500 Hz,则发送值为: 0.0226757 = 500 /(44100/2)。
“跟踪滤波器”以一种“IIR 峰化滤波器”(IIR Peaking Filter)的系数生成过程为基础。以下方程说明了 DSP 由控件求得 5 个双二阶系数的方法。跟踪滤波器的控件包括“总增益”(overall_gain)(即滤波器总增益的 dB 值)、 “增强”(boost)(即峰化滤波器的减弱或增强 dB 值)和“Q”(决定减弱或增强频率的宽度)。 “峰化滤波器”的中心频率 fc 由第二输入引脚提供。
gainLinear = 10ˆ(overall_gain/20)
w = 2pifc/Fs
alpha = sin(w)/(2Q)
A = 10ˆ(boost/40)
a0 = 1 + alpha/A
a1 = -2 * cos(w)
a2 = 1 - alpha/A
b0 = (1 + alphaA) * gainLinear
b1 = -(2 * cos(w)) * gainLinear
b2 = (1 - alpha*A) * gainLinear
用途:
跟踪滤波器可用于多种场合。当峰化滤波器需采用可变中心频率时,则应使用跟踪滤波器。固定中心频率应用应使用通用二阶滤波器。若要为这种算法所需可变中心频率提供支持,则需开销大量 MIPS/存储器。然而,此处使用跟踪滤波器的第一个例子采用了固定中心频率,这只是为了便于说明中心频率的格式。
例程 11:
此例中,一个直流输入模块与跟踪滤波器的第二引脚相连。该模块内的值对应为 500Hz。因此,从第一引脚输入的音频信号将在 500Hz 下被增强 5dB, 其“Q”值为 1.71; 同时将对整个频率范围应用-3dB 的总增益调整。
例程 12:
此例更为复杂,展示的是如何配合使用跟踪滤波器和 LFO,以产生一种定相效果。第一输入引脚接收的是合并输入信号 (实际为输入信号的单声道版本)。第二输入引脚之前的各个模块形成一个LFO,以 0.1Hz 的速率对中心频率进行扫描。扫描中心频率的范围为 441 – 11025 Hz。
以下方程展示了该范围的计算方法:
控制输入= (F2 – F1)*sin(0.1Hz) + F2 + F1
由于正常正弦信号音的范围为±1,因此该 LFO 的范围为:
+(F2-F1) + F2 + F1 = 2F2
-(F2-F1) + F2 + F1 = 2 F1
然后用以下公式,求出与原理图中的 0.01 和 0.25 对应的频率(单位: Hz):
(44100/2) * Fc = Value in Hz (44100/2) * Fc = Hz 值
请记住, F1 和 F2 表示直流模块中的数字,但范围为 2F1 至 2F2,因此先乘以 2,求出正确的范围值,再用上述公式求出 Hz 值:
(0.012)44100/2 = 441 Hz
(0.252)(44100/2) = 11025 Hz
通用二阶滤波器和中型滤波器的组合应用(例程 13)
程序中有一个“通用(二阶)” (General Purpose (2nd-Order))模块和一个“中型均衡器(EQ)” (Medium-Size EQ)模块,各模块均采用的“单通道双精度” (1-Channel - Double-Precision)算法,并已扩大 2 次。原理图中包括一个输入模块和相应的端子,用于结束信号流。
该配置产生如下所示频率响应,其中,红色线条表示“通用”滤波器,绿色线条表示“中型均衡器(EQ)”
General (2nd-Order / Lookup / Slew 模块的应用(例程 14)
该程序采用“通用(二阶/查找/压摆)” (General (2nd-Order / Lookup / Slew))模块、一个计数器模块、一个输入模块和两个输出模块。
选用的是一个 4-曲线型巴特沃兹低通滤波器。这些曲线的可能索引范围为 0 – 3,曲线 2 使用索引 1。
State-Variable 滤波器的应用 1(例程 15)
该原理图使用的是“状态变量”(State-Variable)模块,以及一个“激励”(Stimulus)模块、一个“仿真头”(Probe)模块、一个输入模块和三个输出模块。
包括低通、高通和带通三个滤波器的频率响应。
State-Variable 滤波器的应用 2(例程 16)
该原理图显示了通过两个“状态变量”(State-Variable)滤波器、一个“立体声开关 Nx2”(Stereo SwitchNx2)模块、 “输入” (Input)和“输出” (Output)模块对两个信号源进行多路复用处理的一种简单方式。滤波器选择输出,结果导引至输出模块。
下一章预告
本章是滤波器专题,涉及到了很多的声学专业知识,很枯燥,其实OP自己也有很多不懂,特别是算法,两眼发黑,关于滤波器的描述基本都是从ADI那里抄来的,大家一起研究吧。
下一章轻松点,我讲一些一些常用的算法,以及SimgaStudio的编程小技巧。