你如何编程一个完全透明的分频器?

信息处理 过滤器 无限脉冲响应
2022-02-20 18:14:03

或者,如果这太宽泛了,什么是最流行的算法?

背景:我没有接受过正式的 DSP 培训,但有很多非正式的修修补补。我正在尝试为音频效果编程分频器。我使用的另一种音频效果 (ReaXComp) 具有完全透明的分频器,或者在我耳中听起来是这样。我假设分频器只是两个匹配的滤波器,一个低通滤波器和某种高通滤波器,频率相同,Q 值为12(这似乎是“默认” Q 值)。然而,当我通过很多这样的分频器运行音频信号时,听起来……很奇怪。

后来我通过实验发现,你可以在一个声音上加一个两极低通滤波器,然后从它的输出中减去原来的声音,它听起来就像一个通滤波器,这正是我想要的:低和高通滤波器,当它们加在一起时,在数学上会产生完全相同的声音。不幸的是,如果您想要一个更陡峭的滤波器并再次应用相同的滤波器以获得 4 极滤波器(再次以 aq 值为12) 产生的高频段刚开始听起来很奇怪,根本不像高通滤波器。它基本上听起来像是带有某种奇怪梳状滤波的原始声音。所以我终于决定来这里问问怎么做才好。

编辑

罗伯特·布里斯托-约翰逊在评论中问道:

好吧,RealXComp 是一个多频段压缩器。所以你想将音频分成多个子带进行多频段压缩,如果没有一个单独的频段压缩器达到他们的膝盖,你希望它全部加起来到原始信号(可能有一点延迟)?是吗?那是你想要做的吗?

是的,罗伯特,这正是我想要做的,抱歉,如果不清楚,我有点 DSP 菜鸟

2个回答

我不是专家,但我会解释我将如何处理这个问题。通常,分频器设计涉及选择您各自的截止频率(或频率,在您的情况下)和所需的衰减或滤波器阶数,并决定滤波器类型。简单地说,巴特沃斯滤波器是一种流行的选择,因为它们易于设计和实现。根据维基百科,更好的选择可能是 Linkwitz-Riley 过滤器:

Linkwitz-Riley (LR) 滤波器是用于 Linkwitz-Riley 音频分频器的无限脉冲响应滤波器......它也被称为巴特沃斯平方滤波器。Linkwitz-Riley“LR”分频器由低通和高通 LR 滤波器的并行组合组成。滤波器通常通过级联两个巴特沃斯滤波器来设计,每个滤波器在截止频率处具有 -3 dB 增益。生成的 Linkwitz-Riley 滤波器在截止频率处具有 -6 dB 增益。这意味着将低通和高通输出相加,分频频率处的增益将为 0 dB,因此分频器的行为类似于全通滤波器,具有平坦的幅度响应和平滑变化的相位响应。这是LR分频器相比巴特沃斯分频器最大的优势,

LR 过滤器的维基百科

我会设计这些,以便通过某种串联配置或通过明确设计带通滤波器而不是低通/高通滤波器(当然,您感兴趣的最低和最高频段除外)很好地分离出感兴趣的频段。

这可以通过将滤波器设计为模拟然后使用双线性变换将它们带入 Z 域来完成,从而产生一种可以用您选择的语言实现的形式,或者可以从一开始就以数字方式完成在 Matlab 或 Python 中(使用 SciPy 的iirdesign()函数)。

SciPy 的 IIR 设计函数

然后,您需要以您使用的任何语言/平台来实现它们(尽管我会冒险猜测它在 Windows/Mac 上的 C++ 用于 VST?)。

此外,“透明”过滤器的概念有点矛盾。要么你会影响你的信号,要么你不会,一切都会涉及一些妥协。例如,更好的频域滤波可能会导致更差的时域性能。选择你可以“忽略”的东西是好的设计的关键。

我找到的最好的解释在这里: http ://www.modernmetalproduction.com/linkwitz-riley-crossovers-digital-multiband-processing/

其他有用的链接和见解在问题的评论中。

在我发布这个问题时,没有其他答案,所以我只是想为那些在这里用谷歌搜索的人提供一些东西。