数字滤波器如何工作?

信息处理 过滤器 离散信号 过滤器设计 数字滤波器
2022-01-28 03:23:22

介绍一下我的情况:我正在开发一个 C++ 库形式的数字合成器,使用 WASAPI、ASIO、ALSA 等低级 API。这可能不是很实用,我主要是在“重新发明轮子”,但我的目的是深入了解数字合成。到目前为止,我已经成功地实现了振荡器及其属性调制等基本概念。下一个合乎逻辑的步骤是过滤器。

所以我的问题是: 数字滤波器如何在这个低电平上工作?它究竟是如何修改单个样本的?

我明白,这涉及到很多数学。这对我来说不是问题。我只需要一个好的起点(一些学习资源)和一个直观的解释,因为我所能找到的要么是类比解释,要么只是用我不熟悉的许多高级术语解释的公式。

3个回答

考虑 N 个样本的移动平均值——这是一个简单的 FIR 滤波器,其中每个新输出都是过去 N 个样本的平均值。很容易看出如何滤除高频噪声(低通滤波器也是如此),我们在平均窗口中包含的持续时间越长,截止频率就越低(只需比较股票市场的 30 天移动平均到 1 天移动平均线)。

移动平均是一个较差的低通滤波器,其频率响应接近 Sinc 函数,该函数在频率上相对缓慢地滚降。通过进行加权移​​动平均,在平均过程中为不同的样本赋予不同的权重,我们可以显着改善频率响应——提出正确的权重是数字滤波器设计的科学。

IIR 滤波器是相似的,只是我们用之前的输出而不是过去的输入来执行平均。

您可能想要的是所谓的有限脉冲响应滤波器或 FIR。我知道这个答案可能会因为不够具体而被拒绝,但老实说,你需要很好地掌握 DSP。但是,从好的方面来说,可能有准备好为您生成过滤器的软件。这玩意儿真不容易。真的,你需要知道它背后的数学。

我明白,这涉及到很多数学。

原则上没有那么多。线性(或非线性)滤波背后的基本思想是替换不准确或嘈杂的样本s[n]通过其他样本的组合,假设它们的值或位置在某种程度上接近s[n](参见本地与非本地过滤器)。

在低级别,当滤波器既是局部的(围绕当前信号)又是线性的,那么你替换当前样本s[n]由估计 s^[n]=+a3s^[n3]+a2s^[n2]+a1s^[n1]+a0s^[n]+a1s^[n+1]+a2s^[n+2]+a3s^[n+3]+

上述操作可以一概而论。