我正在尝试基于具有高 Q 的谐振器制作乐器,例如 Ableton 的 Corpus 和 Ableton 的谐振器(我认为前者基于简单的二阶谐振滤波器,而后者基于反馈梳)。
我可以毫无困难地在 Matlab 中制作滤波器,但我的问题在于它们的增益和输出范围。
事实上,为了避免声音信号的溢出/饱和,我需要一个输出总是限制在 [-1 ; 1]范围。此外,这些谐振器应该适用于处理任何类型的输入:打击声音的非常小的瞬变以及连续噪声或振荡器。
根据 JOS 的书和STK 示例,我已将我的双二阶和梳状谐振器归一化,使其在谐振处具有独立于 Q 因子或谐振频率的单位增益,以防止在所有情况下发生溢出。但显然,根据我的过滤器的输入长度,输出范围变化很大(即使输入的范围是 [-1 ; 1])。根据 Q 因子,也有很大的变化。
我想我理解其中的原因:如果我们以白噪声为例,功率分布在整个频谱上,所以如果你将谐振增益归一化,使其保持在 0dB 并用高 Q 过滤噪声,你'将大大降低信号的功率。
如果您修复了谐振但改变了输入信号,那么考虑到滤波器的递归性质,输入的长度将改变输出的范围也是有意义的。
所以我的问题是:无论过滤器的 Q 和输入的长度如何,是否有一些技巧可以将过滤器归一化,使其输出与输入的范围几乎相同(或至少是一个相当恒定的范围)?如果没有,Ableton 和其他插件设计者是如何做到的?
编辑:我想到的一种解决方案是最大化平均输入类型的 SNR,然后在滤波器的输入端提供增益控制和/或在输出端提供限制器。有没有更好的方法来实现我想要的?
EDIT2:仍然没有答案,我真的很想得到一些帮助......欢迎任何评论!我已经尝试在 Matlab 上找到一种方法来预测输出范围,具体取决于
- 过滤器参数
- 它的频率响应
- 输入的 RMS
- 输入幅度
但我还没有找到它......如果有人有提示或指针,我将非常感激!
EDIT3:通过计算2极点滤波器的过冲(即阶跃响应的最大值),我可以猜测输出的最大范围,这已经是一个开始但是滤波器过冲的解析解非常重,并且它无助于找到与输入的长度/功率的关系,不是吗?
EDIT4:在更深入地分析了 Ableton 的语料库之后,似乎并没有做太多事情......这里是 Corpus 对某些输入的响应的一些捕获(设置为:type=beam medium,,,其余的都在) : ^脉冲响应,-30dB
但是例如,如果我输入 0dB 的脉冲,我会清楚地听到声音,如果我输入 0dB 峰值的白噪声,我也会听到完美的共振而没有失真(这里是声音)使用我的谐振器 -无论是从 EQ 食谱还是从 JOS 的恒定增益谐振器,我都有一个非常安静的脉冲输出和正常的噪音......