作者的话
本篇文章,专门讲一下滤波器,音效算法,很多都是一个又一个的滤波器搭建起来的,SigmaDSP 提供了很多滤波器,也提供了一些讲解,我把能找到的都找出来,做成了例程。里面有很多专业算法我也没太弄明白,共同学习吧。
ADAU1467 的进阶例程 1:Stimulus 和 Probe的应用 1
这个 Sitmulus 和 Probe 很关键,是分析滤波器的关键器件,我们做一个简单的例程说明一下:
ADAU1467 的进阶例程 2:Stimulus 和 Probe的应用 2
再做一个,加深一下印象。
红色是上面的信号流监控波形,绿色是下面的信号流监控波形。
ADAU1467 的进阶例程 3:中型均衡器(EQ)-Peaking 滤波器-负增益和低“Q”值
通过该模块可使用两种通用二阶滤波器:峰化及支架型均衡器(EQ)。用于驱动该模块的算法与其他二阶滤波器相同,只有采用一种替代型布局和参数控制,可能更适用于您的应用。
这个模块可以控制频率、增益和滤波器类型。
模块怎么用在 SigmaDSP 的音频框架里,这个我们前面的例子都有详细的说明,那么如何来调他呢。
Peaking 滤波器
增强或减弱指定中心频率。
ADAU1467 的进阶例程 4:中型均衡器(EQ)-Peaking 滤波器-正增益和窄“Q”值
同一缩放增益、同一频率,注意我的各种参数。
ADAU1467 的进阶例程 5:中型均衡器(EQ)-Shelving 滤波器-1
Shelving EQ 对高于(=高架(High Shelf),)或低于(=低架(Low Shelf),)截止频率的全部频率进行均匀增强或减弱。
其他参数为:
ADAU1467 的进阶例程 6:中型均衡器(EQ)-Shelving 滤波器-2
最后,OP 的惯例,技术水平只能教会怎么用,至于用它来调出神仙音效,就看大家各显神通啦。
ADAU1467 的进阶例程 7:通用一阶滤波器(General 1st-Order)
一阶低通和高通滤波器。若要在高通、低通和平坦之间切换,请单击蓝色频率响应图标。该操作可实时完成,无需重新编译项目。在文本字段中输入目标值,设定滤波器的截止频率和总增益(有时称为缩放增益)。也可单击箭头以逐一增大这些参数的值。若要快速增大参数值,请单击并按住不放,然后略微拖动。
通过点击蓝色的按钮,可以看到曲线的明显变化,音效各位自己去听听,练听力,有明显差别:
ADAU1467 的进阶例程 8:通用一阶滤波器,参 数 / 查 找 / 压摆率 ( General (1st-Order Lookup)
这个滤波器提供一组可选高通或低通一阶滤波器响应,选择响应时可平滑(压摆率)过渡。
该模块允许您定义一组滤波器响应(低通或高通),可通过终端系统中的外部控制输入进行选择。可选响应或曲线的数量是可变的,就如控制着滤波器响应变化速率的压摆率或步进一样。
滤波器响应显示在“滤波器控制”(Filter Control)窗口中(见下文)。请注意,响应曲线线性分布于低、高截止频率值之间。
该模块的算法将一组滤波器系数存储在 DSP 中的一个表中。若要选择某个曲线,请使用“索引查找表”(Index Lookup Table)、 “计数器”(Counter)模块或“直流输入”(DC Input)模块,并连接至红色引脚。通过 GPIO 模块,您可以用一个旋钮、旋转编码器或按钮控制所选响应。
若要打开“滤波器控制窗口”:
请单击图标按钮:
在“曲线数”(# Curves)字段中输入所需曲线的数目。
在“增益”(Gain)字段中输入所需滤波器增益(-/+ dB)。
在“频率”(Frequency)字段中输入这些曲线的所需频率范围(低频和高频目标频率)
(特别注意,滤波器都在 Filters 下,实在找不到的话,可以直接复制我的例程里的模块)
ADAU1467 的进阶例程 9:通用二阶滤波器General (2nd-Order)
很常用的一个滤波器模块,通过这个滤波器模块,你可以使用多种二阶(双二阶)滤波器算法:
可用滤波器类型有:
参数型(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 里全部都有,我就不再这里重复了,如下图:
ADAU1467 的进阶例程 10:图形通用滤波器(二阶/索引可选)
通用(二阶/索引可选)”(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)控件用于设定控制窗口中的透明值。
我们来看一个例程,看看声音差别。
点开这两个滤波器,自己去配置调整摸索吧。
ADAU1467 的进阶例程 11:Pinking 滤波器
这类滤波器的经典用途是将白噪声(为每赫兹的等效能量)转换为粉红噪声(为每比例或常数百分比(如对数)频带的等效能量)。 若捆绑(集成)得当,此类能量将在任何对数比例图中显示为平坦。 Pinking 单元接受任何输入信号,并输出线性下降为 3dB/倍频程的信号。
ADAU1467 的进阶例程 12:跟踪滤波器(Tracking Filter)-1
“跟踪滤波器”(Tracking Filter)可用于对滤波进行动态转移。这种特定的跟踪滤波器采用一种“峰化滤波器”(PeakingFilter)算法。在多种应用中,应为峰化滤波器设定可移动中心频率,而非固定中心频率。例如,可用低频振荡器(LFO)驱动跟踪滤波器,以产生定相音频效应。跟踪滤波器允许通过外部输入来确定中心频率。
输入引脚:
跟踪滤波器模块有两个输入和一个输出。第一输入是您希望进行过滤的实际音频输入。第二输入引脚为滤波器中心频率的值。可以看出,该引脚为橙色,表明这是一个控制引脚而非音频引脚。
在此,您可以连接低频振荡器或直流输入模块,用以为跟踪滤波器指定所需固定或可移动中心频率。
算法说明:
“跟踪滤波器”是“SigmaStudio 滤波器”库中的一种特有滤波器。这是系数由 DSP 处理器动态计算的少数几种滤波器之一。计算方程嵌入模块的算法代码之中,然后生成系数,视具体输入中心频率而定。跟踪滤波器算法可接受的输入中心频率为一个 5.23 数据格式的值,计算公式为:Hz/(fs/2)。
例如,如果工作频率为 fs = 44100 Hz,且 fc = 500 Hz,则发送值为: 0.0 = 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/存储器。然而,此处使用跟踪滤波器的第一个例子采用了固定中心频率,这只是为了便于说明中心频率的格式。
此例中,一个直流输入模块与跟踪滤波器的第二引脚相连。该模块内的值对应为 500Hz。因此,从第一引脚输入的音频信号将在 500Hz 下被增强 5dB, 其“Q”值为 1.71; 同时将对整个频率范围应用-3dB 的总增益调整。
ADAU1467 的进阶例程 13:跟踪滤波器(Tracking Filter)-2
此例更为复杂,展示的是如何配合使用跟踪滤波器和 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
ADAU1467 的进阶例程 14:通用二阶滤波器和中型滤波器的组合应用
程序中有一个“通用(二阶)” (General Purpose (2nd-Order))模块和一个“中型均衡器(EQ)”
(Medium-Size EQ)模块,各模块均采用的“单通道双精度” (1-Channel - Double-Precision)算法,并已扩大 2 次。原理图中包括一个输入模块和相应的端子,用于结束信号流。
该配置产生如下所示频率响应,其中,红色线条表示“通用”滤波器,绿色线条表示“中型均衡器(EQ)”
ADAU1467 的进阶例程 15:General 2nd-Order / Lookup / Slew 模块的应用
该程序采用“通用(二阶/查找/压摆)” (General (2nd-Order / Lookup / Slew))模块、一个计数器模块、一个输入模块和两个输出模块。
选用的是一个 4-曲线型巴特沃兹低通滤波器。这些曲线的可能索引范围为 0 – 3,曲线 2 使用索引 1。
ADAU1467 的进阶例程 16:State-Variable 滤波器的应用 1
该原理图使用的是“状态变量”(State-Variable)模块,以及一个“激励”(Stimulus)模块、一个“仿真头”(Probe)模块、一个输入模块和三个输出模块。包括低通、高通和带通三个滤波器的频率响应。
ADAU1467 的进阶例程 17:State-Variable 滤波器的应用 2
该原理图显示了通过两个“状态变量”(State-Variable)滤波器、一个“立体声开关 Nx2”(Stereo SwitchNx2)模块、 “输入” (Input)和“输出” (Output)模块对两个信号源进行多路复用处理的一种简单方式。滤波器选择输出,结果导引至输出模块。