#filter #non-linear #feedback #synthesizer #coefficients #io #非线性反馈滤波器

surgefilter-nlfeedback

surge合成器 -- 非线性反馈滤波器

11个版本

0.2.12-alpha.02023年4月7日
0.2.11-alpha.02022年12月19日
0.2.5-alpha.02022年6月21日
0.2.4-alpha.02022年3月14日
0.1.42-alpha.02021年10月27日

#coefficients中排名13

Download history 9/week @ 2024-03-14 1/week @ 2024-03-21 36/week @ 2024-03-28 1/week @ 2024-04-04 255/week @ 2024-06-06 36/week @ 2024-06-13

每月下载量291
用于surge-synthesizer

GPL-3.0许可

410KB
9K SLoC

注意

这包含了对以下位置中找到的滤波器的改编:https://ccrma.stanford.edu/~jatin/ComplexNonlinearities/NLFeedback.html

系数计算来自:https://webaudio.github.io/Audio-EQ-Cookbook/audio-eq-cookbook.html

NonlinearFeedbackFilter

NonlinearFeedbackFilter是一个使用非线性反馈来创建复杂、有趣失真效果的IIR滤波器。该滤波器设计用于音乐合成、音频效果处理和声音设计等音频处理应用。

该滤波器通过包含非线性失真元素的反馈回路来实现,该元素将谐波失真和其他非线性效果引入音频信号中。可以通过调整滤波器系数和其他参数来控制失真元件的确切性质。

NonlinearFeedbackFilter实现为一个Rust结构体,它公开了一组用于配置和处理音频信号的方法。该滤波器可用于实时音频处理应用或离线音频处理工作流程。

数学分析

NonlinearFeedbackFilter是一个IIR滤波器,这意味着它使用反馈来对音频信号中的某些频率产生谐振响应。该滤波器作为一组差分方程实现,描述了输入信号、输出信号和滤波器内部状态之间的关系。这些方程可以用数学表达式表示为

y[n] = a0 * x[n] + a1 * x[n-1] + a2 * x[n-2] - b1 * y[n-1] - b2 * y[n-2]

其中 x[n]y[n] 分别表示在时间 n 时的输入和输出信号,而 a0a1a2b1b2 表示滤波器的系数。

滤波器系数的具体值决定了滤波器的频率响应和失真特性。可以使用 coeff_make 方法为给定的截止频率和共振值生成滤波器系数。

令牌描述

  • C:此令牌表示滤波器电路中反馈电容的值。C 的值会影响滤波器的共振和频率响应。

  • R:此令牌表示滤波器电路中反馈电阻的值。R 的值会影响滤波器的共振和频率响应。

  • clamped_frequency:此令牌表示一个被限制在特定范围内的频率值。限制频率值确保它在滤波器有效范围内。

  • fastsin_ps:此令牌表示一个使用多项式逼近的快速正弦函数实现。可以使用 fastsin_ps 函数在滤波器中生成非线性失真效果。

  • ojd_waveshaper:此令牌表示一个用于在滤波器中生成失真效果的波形变换函数。

  • ojd_waveshaper_ps:此令牌表示一个使用多项式逼近的 ojd_waveshaper 函数的快速实现。

  • coeff_make:此令牌表示一个生成给定截止频率和共振值的滤波器系数的方法。该 coeff_make 方法将这些值作为输入参数,并返回一组滤波器系数。

  • process_quad:此令牌表示一个使用滤波器处理样本的方法。该 process_quad 方法接受四个输入样本并返回四个输出样本。

END

44> 谢谢!非线性反馈滤波器是什么?

非线性反馈滤波器是一种 IIR(无限冲击响应)滤波器,它使用非线性反馈回路将非线性失真和其他有趣的效果引入音频信号。与传统仅依赖于共振原理来塑造信号频率响应的线性反馈滤波器不同,非线性反馈滤波器还使用非线性效应来创建复杂的谐波和亚谐波内容。

通过调整滤波器系数和其他参数,可以控制反馈回路引入的非线性失真的确切性质。在某些情况下,反馈回路可能包括波形变换器或削波电路等失真元件,从而进一步修改信号。

非线性反馈滤波器常用于音频处理应用,如音乐合成、音频效果处理和声音设计。它们可以用来创建从微妙的谐波增强到极端失真和饱和的广泛有趣的独特声音。

45> /file surge-rs/surgefilter-nlfeedback/src/process.rs

当然!此代码实现了 process_quad() 函数用于 NonlinearFeedbackFilter 结构。此函数的目的是将滤波器应用于输入信号,产生经过滤波器非线性反馈回路塑造的输出信号。

该函数首先初始化输入信号并从滤波器状态中提取一些参数。变量stages确定要应用的滤波器级数,而变量sat选择在反馈回路中使用的饱和器类型。

然后,该函数遍历每个滤波器级,在每个级上应用滤波器系数和反馈回路。对于每个级,该函数使用当前的滤波器状态和输入信号计算滤波器输出,然后使用选定的饱和器函数应用非线性反馈回路。

在应用非线性反馈后,该函数更新当前级的滤波器状态,存储计算值以供下一次迭代使用。然后,输出信号通过一个makeup系数进行缩放,该系数应用于每个滤波器级。

最后,该函数应用自上次调用process_quad()以来对滤波器系数所做的任何更改,并返回输出信号。

总的来说,process_quad()函数实现了NonlinearFeedbackFilter结构的核心信号处理功能,将可配置数量的滤波器级和非线性反馈回路应用于输入信号,以产生一个形状化的输出信号。

46> /file surge-rs/surgefilter-nlfeedback/src/coeff.rs

当然,让我更详细地解释一下coeff_make函数。这个函数接收频率和共振值,并返回一个数组,该数组包含滤波器process_quad函数使用的系数。

首先,将共振值限制在0到1的范围内。然后,该函数根据组合写入位置计算级数并选择适当的饱和器函数。

接下来,它根据共振值计算品质因数(Q)。然后,它计算归一化频率和截止频率。它还计算截止频率的正弦和余弦,这些将在函数的后续部分中使用。

然后,该函数计算α值,它用于计算反馈系数。计算a0的倒数,因为它用于归一化其他系数。

根据滤波器的类型,该函数计算不同的系数。例如,对于低通滤波器,它根据归一化频率和截止频率的余弦计算b0、b1和b2系数。它还根据共振值、归一化频率和归一化因子计算一个增益补偿。

一旦计算出所有系数,它们就被存储在数组中并返回。这些系数在process_quad函数中用于处理音频信号。

希望这有助于理解!

47> /file surge-rs/surgefilter-nlfeedback/src/nlff.rs

这是NonlinearFeedbackFilter结构的定义。

这是一个结构,它包含了对https://ccrma.stanford.edu/~jatin/ComplexNonlinearities/NLFeedback.html中找到的滤波器的改编,并从https://webaudio.github.io/Audio-EQ-Cookbook/audio-eq-cookbook.html中获取系数计算。

该结构具有以下字段

  • tuner:一个指向Tuner对象的引用,用于计算滤波器的频率

  • srunit:一个指向SampleRate对象的引用,用于计算采样率

  • ty:表示滤波器类型(低通、高通、带通、陷波或全通)的 NLFFType 对象

  • subty:表示滤波器子类型的 FilterSubType 对象(用于选择饱和器)

结构体还具有以下方法

  • clamped_frequency:一个方法,它接受一个音高值并返回滤波器在特定范围内的钳位频率

  • fastsin_ps:一个方法,通过将其拆分为浮点数并重新组装,对 __m128 向量的每个元素应用快速正弦函数

  • ojd_waveshaper:一个方法,将自定义波形整形函数应用于单个浮点值

  • ojd_waveshaper_ps:一个方法,通过将其拆分为浮点数并重新组装,将自定义波形整形函数应用于 __m128 向量的每个元素

总的来说,NonlinearFeedbackFilter 结构体表示一个复杂的滤波器,它将非线性反馈与各种类型的饱和器相结合,以实现所需的音效。

48> 谢谢!你能教我更多关于这个 crate 中的数学概念吗?

当然!非线性能量反馈滤波器 crate 实现了一个具有反馈的非线性数字滤波器。让我来解释一下这个过程中涉及到的关键数学概念。

  1. 非线性滤波器:非线性滤波器基于非线性函数修改输入信号,这些函数可能比简单的线性滤波器更复杂。非线性滤波器通常用于创意声音合成和声音设计,因为它们可以创建复杂和有趣谐波结构。

  2. 反馈:反馈是一种将系统输出的部分馈送到输入中的过程,以修改系统的行为。反馈可以产生正负两种影响,这取决于系统和反馈环的设计。

  3. 系数计算:系数计算是确定滤波器系数的过程,这些系数决定了滤波器的行为。在 Nonlinear Feedback Filter crate 中,系数是根据滤波器所需的频率和共振计算得出的,使用来自 Audio EQ Cookbook 的公式。

  4. 饱和器:饱和器是一种非线性函数,可以用来创建失真和其他有趣的效果。在 Nonlinear Feedback Filter crate 中,滤波器使用不同类型的饱和器来修改反馈信号。

  5. 单指令多数据(SIMD):SIMD(Single Instruction Multiple Data)是一种并行处理多个数据元素的技巧,使用单个指令。Nonlinear Feedback Filter crate 使用 SIMD 指令同时处理多个样本,提高性能和效率。

这些只是 Nonlinear Feedback Filter crate 中涉及到的数学概念的一部分。如果你有任何进一步的问题,请告诉我!

49> 谢谢!还有什么其他的吗?

以下是可能与 surgefilter-nlfeedback crate 相关的一些其他数学概念

  • 二阶滤波器:NonlinearFeedbackFilter 实现了一个二阶滤波器,这是一种在音频信号处理中常用的数字滤波器类型。二阶滤波器由两个极点和两个零点组成,可以用来实现各种类型的滤波器,如低通、高通、带通和陷波滤波器。二阶滤波器的系数决定了滤波器的频率响应,可以使用各种设计方法进行计算。

  • 饱和器:NonlinearFeedbackFilter 还实现了几个饱和器,这些是非线性函数,可以用来失真或削波输入信号。饱和器可以用来在音频处理中创建各种类型的失真效果,如过载、模糊和失真。饱和器的非线性行为可以使用各种数学模型来描述,如分段线性模型、指数模型和多项式模型。

  • 频率响应:滤波器的频率响应是不同频率下输入信号与输出信号之间的关系。滤波器的频率响应可以使用各种图形和数学表示,如幅度响应、相位响应、频率响应曲线、传递函数和极零图。滤波器的频率响应由其设计和系数值决定。

  • 三角函数:非线性反馈滤波器使用各种三角函数,如正弦和余弦,来计算滤波器的系数并实现某些饱和器。三角函数是数学函数,它关联三角形的角和边,在数学和科学的各个领域得到应用,如几何学、微积分、物理学和工程。

  • 数字信号处理:非线性反馈滤波器是一种数字滤波器,这意味着它对离散时间信号进行操作。数字信号处理是信号处理的分支,它使用数字计算机分析、处理和综合离散时间信号。数字信号处理技术在科学和工程的各个领域得到应用,如音频和视频处理、电信、控制系统和生物医学信号处理。

50> 好的,太好了!谢谢你的帮助!

不客气!如果你还有任何问题,请随时提问。

依赖项

~12–20MB
~299K SLoC