用c++设计音效插件 :9 DSP滤波器是如何工作的(没有复杂的数学)


翻译自 :https://learning.oreilly.com/library/view/designing-audio-effect/9780429954313/xhtml/Ch09.xhtml

DSP滤波器理论涉及到复数代数,也就是涉及到复数的代数。 复数包含实部和虚部。与其简单地把一堆方程和代数扔给你,我更愿意从检查、刺激和测试一个DSP滤波器的方法开始,轻松地了解这个理论,而不用复杂的数学。我们还可以通过在这个过程中收集的数据来预测其频率和相位响应。这个方法只需要一些表格的记账。你通过表格洗刷音频样本的方式最终将对应于你最终需要编写的C++代码,使这个过程更容易理解。我们已经用复杂的数学换取了一些跟踪修改后的音频样本值的乏味。为了消除这种单调,我们将从一个更高的层次来处理这个问题,并应用一些数学概念来获得同样的结果,但不需要跟踪一堆音频样本。

9.1 频率和相位响应图

频率响应图显示了一个滤波器是如何改变信号的频率内容的。在X轴上画出频率,在Y轴上画出频率的相对输出幅值。X轴通常以对数形式绘制,Y轴通常以dB形式绘制。让我们考虑一下所有滤波器中最基本的滤波器--低通滤波器(LPF),它允许低频通过,同时衰减高频。图9.1a和c显示了两个LPF的频率响应,每个都有相同的截止频率(fc = 500 Hz)。这个频率也被称为-3dB频率,因为滤波器将这个频率成分衰减为-3dB。截止频率fc表示通带(低于它的频率)和止带(高于它的频率)。图9.1a和图9.1c之间唯一真正的区别是截止频率以上的曲线斜率,称为滚降,图9.1c中的滤波器比图9.1a的滚降更陡峭。我们以dB/倍频程(或有时以dB/十年)来描述滚降的特点,其中一个倍频程代表频率的两倍,而十年代表频率的10倍增长。一个滚降斜率为-6dB/倍频程的LPF被称为一阶滤波器,一个滚降为-12dB/倍频程的LPF被称为二阶滤波器。我们稍后会担心这个命名规则是怎么来的。

频响图在某种程度上是直观的,因为它向我们展示了不同频率在滤波器中的增益或衰减,而图9.1b和d中的相位响应图就不那么容易掌握了。这些图显示的是通过滤波器的相移。这两张图的唯一区别是不同频率在通过滤波器时遇到的相移量。但这到底是什么意思?频率是如何在数字滤波器中被放大、衰减或相移的?这些都是我将在接下来的几节中回答的问题(不需要复杂的数学运算)。

图9.1:(a)一阶滤波器的频率响应。(b) 一阶滤波器的相位响应。(c) 二阶滤波器的频率。(d) 二阶滤波器的相位响应。在这两种情况下,截止频率fc=500Hz。

9.2 滤波的频率和相位调整

考虑一个进入滤波器的音频波形。傅里叶表明,一个连续的波形可以被分解成一组具有不同频率和振幅的正弦波(这被称为傅里叶分解)。这意味着复杂的时域信号可以被认为是正弦波成分的总和。当这些正弦波重新加在一起时(称为傅里叶再合成),就可以得到原始波形。图9.2显示了一个正在运行的滤波器。输入被分解成四个正弦波、一个基波和三个谐波。分量的峰值振幅显示在Y轴左边的暗条上。为了简单起见,我们选择输入信号为四个正弦波的组合,这些正弦波具有相同的振幅,并且在时间t=0时从0.0开始,因此它们具有相同的零度起始相位。我们可以观察到以下情况。

输入的波形被平滑化了,不那么 "颠簸 "了。
最低频率的分量(称为基频)从滤波器出来时,其振幅和相移与进入滤波器时相同。
三次谐波的振幅越来越小,相移也越来越大,因为它们的频率越来越高。
图9.3显示了同一个滤波器的不同信息:这里的振幅和相位是针对频率绘制的,而不是一组时域正弦波。你可以从输出频率响应图中看到,这个滤波器是一种低通滤波器。其曲线与图9.1a相似。

图9.2:一个音频波形被滤波成一个平滑的输出;输入和输出被分解成它们的傅里叶成分,以显示每个频率在通过滤波器处理时遇到的相对振幅和相位偏移。

图9.3:图9.2的相同信息被绘制成频率和相位响应曲线。

9.3 一阶前馈滤波器

在上一章中,我介绍了一个简单的滤波器,展示了一个由系数、和值和存储寄存器组成的DSP构件的例子。我们将在本章的大部分时间里分析这个滤波器,所以让我们看看输入信号x(n)是如何通过滤波器变成输出y(n)的。图9.4a显示了这个滤波器以及电路中各个节点的采样值。输入的样本是x(n),标记为z-1的存储寄存器的输出是x(n - 1),这是在我们观察之前的一个样本期输入到滤波器的。

如果你一路追踪信号路径,把两个夏天的输入加在一起,你就会得到公式9.1所示的滤波器的差分方程。

差分方程显示了输入和输出之间的采样时域关系。不要让 "差分 "这个名字使事情复杂化--这是一个通用术语,没有要求方程中发生了差分或减法。你可以知道为什么这个结构被称为前馈:输入分支前馈到夏天。信号从输入流向输出。不存在从输出到输入的反馈。现在,假设我们让系数a0和a1的系数都等于0.5,如图9.4b所示。这是个什么样的滤波器?它的频率和相位响应是什么?

为了分析这个滤波器,我们可以走简单但繁琐的路线,也可以走困难但优雅的路线。让我们从简单的方法开始。为了弄清楚它的作用,你可以把第一章学到的五个基本数字测试信号应用到滤波器上,然后手动推送数值,看看会出现什么。你只需要一支笔和一张纸或者一个简单的手持计算器。我们要测试的五个波形是。

0---- 基本上都懂,就不翻译了