这个带通反馈过载问题是否有任何解决方案(除了增加采样率)?

信息处理 带通 回馈 减震
2022-02-02 13:52:24

我一直在研究接近完成的物理建模弦乐(例如吉他/钢琴)合成器。它基于谐振带通的模态阵列,其中每个带通由 Q 和频率设置为给定的谐振模式/部分。

基本架构可以用这个简化图来概括(实际上会有 50-100 多个带通):

在此处输入图像描述

总而言之,将激励信号(例如脉冲)馈入谐振带通阵列。它们的输出相加。为了模拟外部阻尼效应,例如来自乐器主体或手使琴弦静音(手掌静音),从每个带通的输入中减去先前样本总和输出的过滤或分级样本,以相应地对其进行阻尼。

从音乐的角度来看,这是可行的。然而,反馈阻尼环路在激进的阻尼设置下将更高频率的带通推向过载。这可以通过增加采样率来解决,但这在计算上是不可行的。

通常,如果从相对于采样率的某个频率以上的输入中减去其先前采样输出的很大一部分,则谐振带通具有我已确定的行为,它们将自振荡或过载。

这可以通过在具有脉冲激励器的类似阻尼反馈回路中设置单个谐振带通来证明。粗略地说,如果我没记错的话,在大约 48 kHz 采样时,如果您从高于 ~8 kHz 的输入中减去其 z_1 输出的 100%,则带通将过载。将采样率提高到 96 kHz 会将过载阈值提高到 ~17 kHz。

我认为这是因为在更高的频率下,一个样本和下一个样本之间的幅度差异变得更加显着,并且在某个点变得如此显着以至于差异本身可以开始驱动带通。

问题是除了将采样率提高到典型的 44.1 kHz 或 48 kHz 的 4 倍或 8 倍之外,我没有看到明显的解决方案,这对于如此复杂的合成器来说变得非常昂贵。

使用单个带通和分段阻尼环路实际上很容易做一个简单的方法来测试在什么频率截止处开始过载。然后您可以限制您允许在该频率减去的分数。例如。在 9 kHz 时,最多可以减去先前样本输入的 80%。在 11 kHz 时,最多可以减去先前样本输入的 30%。您可以像这样构建一个简单的表来保护带通。

问题是因为我在反馈回路中使用了许多带通的总输出,所以行为似乎不太可预测。这取决于阵列中的带通数量和正在播放的音符,因为它们都有听起来不同的参数。此外,当您处理过滤后的反馈回路时,实际上不可能量化在任何给定频率下减去多少(计算在每个频带通减去多少与只是过采样一样多的 CPU 成本) .

据我所知,我基本上坚持将过采样作为我唯一的解决方案。最后一种选择是将其切换到像这样的过滤延迟循环架构(Karplus Strong)(其中延迟为 1/noteFrequency):

在此处输入图像描述

这种类型的架构似乎不具备自振荡能力,因为它实际上取决于每个样本输入的先前样本的输出。如果你完全减去它(完全阻尼),它只会杀死循环。无论您多么积极地对其进行阻尼或将其设置为什么频率,它都不会过载。这种架构的问题在于它在你可以获得的合成质量方面存在巨大缺陷。因此,它只是将一组问题(CPU 限制)换成另一个不利的(坏声音)。

所以我认为我基本上坚持以增加采样率作为解决方案。我只是好奇是否有人知道或可以想到这个问题的另一种解决方案。或者,如果我认为这是唯一实用的解决方案是正确的,那么我就不会再浪费时间去想另一个不存在的解决方案了。

谢谢。

2个回答

通常,如果从相对于采样率的某个频率以上的输入中减去其先前采样输出的很大一部分,则谐振带通具有我已确定的行为,它们将自振荡或过载。

或者,换句话说,谐振带通滤波器具有一个特性,如果通过反馈将它们变成振荡器,它们就会振荡。

如果您希望更改谐振带通滤波器的属性(例如,更改 Q),那么您应该更改它们的系数值,而不是玩反馈游戏。

我无法以听起来不错的方式告诉你如何做到这一点的细节,因为我做通信和控制系统的东西,实际上没有音频 DSP。但我可以告诉你,这是其他人已经解决的问题。我还可以告诉您,您遇到的最大问题是突然增加或减少参数值可以“泵送”输出,因此如果您更改该参数值明显慢于滤波器的谐振频率,您可能会没事.

你在这里建立了一个经典的反馈回路系统,并且应用了常规的稳定性标准。

您可以尝试计算闭环传递函数的极点,并确保它们在单位圆内。但是,鉴于您的拓扑结构,这将是一项相当大的工作。

最简单的方法可能是确保在所有滤波器设置下,所有频率的环路增益都小于单位。