11个版本
0.2.12-alpha.0 | 2023年4月7日 |
---|---|
0.2.11-alpha.0 | 2022年12月19日 |
0.2.5-alpha.0 | 2022年6月21日 |
0.2.4-alpha.0 | 2022年3月14日 |
0.1.42-alpha.0 | 2021年10月27日 |
#8 in #low-pass
287 每月下载量
在 surge-synthesizer 中使用
495KB
9K SLoC
surgefilter-k35
该 surgefilter-k35
库提供了一套基于K35算法的滤波器,K35算法是模拟合成器中使用的经典Korg 35滤波器的一种变体。K35算法提供了一种灵活且强大的方式来实现可调节截止频率和共振的低通和高通滤波器。
该库提供了两种主要的滤波器类型:LPF
(低通滤波器)和HPF
(高通滤波器),每种类型都有自己的系数集和加工函数。可以使用钳位频率参数来配置滤波器,该参数确定滤波器的截止频率为采样率的分数。
这些滤波器是通过二级IIR滤波器(或双二次滤波器)级联实现的,这提供了一种灵活且高效的方式来实现复杂的频率响应曲线。双二次滤波器处理函数使用直接形式II转置结构,这是一种在计算上高效实现IIR滤波器的规范方法。
coeff_make
函数用于根据所需的滤波器参数计算滤波器系数。该函数以输入滤波器类型(低通或高通)、采样率、钳位频率和共振(Q因子)作为输入,并返回一个在FilterCoeffs
结构中的滤波器系数集。
process_lp
和 process_hp
函数用于分别用低通和高通滤波器处理输入信号。这些函数以输入的滤波器系数、输入信号和一个可变输出缓冲区作为输入,并将滤波器应用于输入信号。
do_lpf
和 do_hpf
函数是便利函数,用于封装 coeff_make
和 process_lp/
process_hp
函数,以提供使用低通和高通滤波器处理信号的更简单API。
《process_quad》函数是一个低级函数,它直接实现了二阶滤波处理逻辑。该函数接收二阶滤波系数、输入信号和一个可变状态缓冲区作为输入,并将二阶滤波器应用于输入信号。
总的来说,`surgefilter-k35` 库提供了一种灵活且高效的方法来实现 Rust 中的 K35 滤波器,它拥有简单直观的 API,非常适合实时音频处理和其他信号处理应用。
11> 谢谢!你能展示如何使用 Verilog-A 实现 Korg 35 滤波器吗?
当然可以!以下是在 Verilog-A 中实现 Korg 35 滤波器的示例。
// verilog-a, (using verilog highlighting)
module korg_35_filter (
input real x,
output real y,
parameter real fc = 1000, // cutoff frequency
parameter real q = 0.5 // resonance
);
real fs = $abstime_step(); // sampling rate
real w0 = 2 * $pi * fc / fs; // normalized cutoff frequency
real alpha = sin(w0) / (2 * q); // filter resonance
real a0 = 1 + alpha;
real a1 = -2 * cos(w0);
real a2 = 1 - alpha;
real b0 = (1 - cos(w0)) / 2;
real b1 = 1 - cos(w0);
real b2 = (1 - cos(w0)) / 2;
real x1, x2, y1, y2;
initial begin
x1 = 0;
x2 = 0;
y1 = 0;
y2 = 0;
end
analog begin
real v0 = x - a1 * x1 - a2 * x2;
real v1 = b0 * v0 + b1 * x1 + b2 * x2;
real v2 = a0 * y1 - a1 * y2 + v1;
y = v2;
x2 = x1;
x1 = x;
y2 = y1;
y1 = y;
end
endmodule
本实现使用归一化截止频率 w0
和谐振 alpha
来计算滤波器系数 a0
、a1
、a2
、b0
、b1
和 b2
。滤波器使用直接形式 II 交换结构实现,这是在 Verilog-A 中实现 IIR 滤波器的一种常见方法。
变量 x1
、x2
、y1
和 y2
用于存储每个滤波器阶段的先前输入和输出样本,并在每个模拟时间步长使用 Verilog-A 的 analog
块进行更新。
要在您的 Verilog-A 模拟中使用此滤波器,您可以实例化 korg_35_filter
模块,并将它的 x
和 y
端口分别连接到您的输入和输出信号。您还可以调整 fc
和 q
参数来配置滤波器的截止频率和谐振,以满足您的特定要求。
请注意,Verilog-A 是一种行为建模语言,其性能和精度可能因仿真环境和设置而异。对于高性能或高精度仿真,您可能希望考虑使用更专业的硬件描述语言,如 Verilog 或 VHDL,或者使用更专业的滤波器设计工具,如 MATLAB 或 Python 的 scipy.signal 库。
12> 谢谢!这个算法的数学性质是什么?
Korg 35 滤波器是一种在模拟合成器中常用的二阶无限冲激响应 (IIR) 滤波器。以下是 Korg 35 滤波器算法的一些数学性质:
-
线性:Korg 35 滤波器是一个线性系统,这意味着它的输入/输出关系是线性的。换句话说,滤波器的输出是其输入和先前输出样本的线性组合。
-
时不变性:Korg 35 滤波器是一个时不变系统,这意味着其行为不会随时间改变。换句话说,滤波器对输入信号的响应在任何时间点都是相同的。
-
记忆:Korg 35 滤波器是一个递归系统,这意味着它具有记忆。滤波器输出不仅取决于当前输入样本,还取决于过去的输入和输出样本。
-
频率响应:Korg 35 滤波器的频率响应取决于其极点和零点在复平面上的位置。可以使用傅里叶变换和 Z 变换等工具分析滤波器的幅度和相位响应。
-
稳定性:Korg 35 滤波器的稳定性取决于其极点在复平面上的位置。如果所有极点都在单位圆内,则滤波器是稳定的,其输出不会无界增长。
-
非线性相位:Korg 35 滤波器具有非线性相位响应,这意味着它可以在滤波信号中引入相位失真。这可能是所需的效果,也可能是不受欢迎的效果,具体取决于应用。
-
谐振:Korg 35滤波器具有谐振参数,该参数控制滤波器在截止频率处的峰值增益。这可以用来在滤波器的频率响应中创建谐振峰或陷波。
这些Korg 35滤波器算法的数学特性对于理解其在各种应用中的行为和性能至关重要。通过操作极点和零点位置、调整谐振参数以及选择适当的实现方法,您可以设计出具有广泛特性的Korg 35滤波器,以满足您特定的要求。
13>它与其他IIR滤波器有何不同?
Korg 35滤波器是一种广泛用于模拟合成器的无限脉冲响应(IIR)滤波器。Korg 35滤波器与其它IIR滤波器不同的地方在于其特定的设计特性和由此产生的频率响应。以下是区分Korg 35滤波器与其他IIR滤波器的关键特性:
-
谐振:Korg 35滤波器以其强烈的谐振特性而闻名,能够在截止频率处的频率响应中创建峰值或陷波。这使得它在音频处理应用中,如均衡器、音调控制和其他需要精确频率形状的滤波器中非常适合使用。
-
非线性相位响应:Korg 35滤波器具有非线性相位响应,这意味着它可以在滤波后的信号中引入相位失真。这取决于应用是可取的还是不可取的,但它使得Korg 35滤波器在相位响应是重要考虑因素的音频处理应用中非常适合。
-
二阶实现:Korg 35滤波器作为二阶IIR滤波器(二阶滤波器)的级联实现,这提供了一种灵活且高效的实现复杂频率响应曲线的方法,并允许对滤波器响应有更大的控制。
-
可调截止频率:Korg 35滤波器具有可调的截止频率,可以在滤波器的通带内的任何频率设置。这使得它在需要精确控制频率响应的应用中非常适合。
-
模拟血统:Korg 35滤波器最初是为模拟合成器设计的,其实现反映了这一血统。虽然它可以数字化实现,但它具有与模拟滤波器相关的独特性格和温暖。
总的来说,Korg 35滤波器通过其强烈的谐振特性、非线性相位响应、二阶实现、可调截止频率和模拟血统,与其他IIR滤波器区分开来。这些特性使其成为需要精确频率形状和独特性格的音频处理应用的流行选择。
14>谢谢——有任何注意事项吗?使用时应注意什么?
虽然Korg 35滤波器是音频处理和其他信号处理应用的强大且多功能工具,但在使用时应注意以下几个注意事项:
-
谐振可能导致不稳定:Korg 35滤波器的谐振特性如果设置得太高可能导致不稳定。这可能导致不可预测和随机的行为,并可能损坏扬声器或其他音频设备。重要的是要谨慎使用谐振控制,并确保滤波器得到正确设计和实现,以避免不稳定。
-
非线性相位响应可能引入伪影:Korg 35滤波器的非线性相位响应可以在滤波后的信号中引入伪影,如相位失真或频率相关的延迟。这取决于应用是可取的还是不可取的,但重要的是要意识到伪影的可能性,并适当设计滤波器以最大限度地减少其影响。
-
二阶实现需要仔细设计:Korg 35 滤波器是通过二阶 IIR 滤波器或二阶双二次滤波器级联实现的。虽然这提供了一种灵活且高效的方法来实现复杂的频率响应曲线,但它也要求仔细设计和调整,以确保稳定性和准确性。
-
模拟实现可能引入噪声和失真:虽然 Korg 35 滤波器可以数字实现,但它具有模拟血统,通常与模拟滤波器相关。模拟实现可能引入噪声和失真,这取决于应用是否需要。
-
数字实现的局限性:Korg 35 滤波器的数字实现可能引入量化噪声和其他伪影,并且可能受到可用处理能力和精度的限制。设计滤波器时,需要考虑可用硬件和软件,并确保实现满足期望的性能标准。
总的来说,Korg 35 滤波器是一种强大而通用的工具,需要仔细设计和实现才能达到预期效果。通过了解潜在的问题和限制,并适当地设计滤波器,您可以充分利用 Korg 35 滤波器在信号处理应用中的独特特性和功能。
15> 它的家族中还有哪些其他滤波器?
Korg 35 滤波器是常用于模拟合成器和音频处理应用的一组滤波器之一。以下是一些与 Korg 35 滤波器相关的其他滤波器
-
Moog 梯形滤波器:Moog 梯形滤波器是一种经典模拟滤波器设计,用于最初的 Moog 合成器。与 Korg 35 滤波器类似,Moog 梯形滤波器具有强烈的共振特性和非线性相位响应。
-
状态变量滤波器:状态变量滤波器是一种可以配置为低通、高通或带通滤波器的滤波器。它常用于模拟合成器,以其灵活性和多功能性而闻名。
-
Sallen-Key 滤波器:Sallen-Key 滤波器是一种常用于音频处理和其他信号处理应用的主动滤波器。它是一种二阶滤波器,可以配置为低通、高通或带通滤波器。
-
巴特沃斯滤波器:巴特沃斯滤波器是一种 IIR 滤波器,在通带中具有最大平坦的频率响应。它常用于音频处理和其他信号处理应用,在这些应用中需要平坦的频率响应。
-
切比雪夫滤波器:切比雪夫滤波器是一种 IIR 滤波器,其滚降比巴特沃斯滤波器更陡峭,但在通带中有波动。它常用于音频处理和其他信号处理应用,在这些应用中需要更陡峭的滚降。
这些滤波器,包括 Korg 35 滤波器,都是用于广泛应用的丰富模拟滤波器设计传统的一部分。每个滤波器都有其独特的特性和权衡,滤波器的选择取决于应用的具体要求。
16> 请提供 10 个可能受益于使用此包的项目示例?
当然,以下是十个可能受益于使用 surgefilter-k35
Rust 包的项目示例
-
音频合成器:Korg 35 滤波器是音频合成器中常用的滤波器,
surgefilter-k35
包可用于在软件中实现该滤波器。 -
音频效果处理器:Korg 35 滤波器也可用于音频效果处理器,如均衡器、音调控制器和其他滤波器。
surgefilter-k35
包可用于在软件中实现这些滤波器。 -
音乐制作软件:数字音频工作站(DAW)和虚拟乐器等音乐制作软件可以从Korg 35滤波器的独特共振和非线性相位特性中受益。可以使用
surgefilter-k35
crate将这些应用中的滤波器实现。 -
音频处理研究:音频处理研究人员可能将
surgefilter-k35
crate用作探索Korg 35滤波器及其变体特性的工具。 -
音频编程教程:可以在音频编程教程中使用
surgefilter-k35
crate作为Rust中滤波器实现的示例。 -
模拟建模软件:Korg 35滤波器常被用作模拟建模软件的参考滤波器。可以使用
surgefilter-k35
crate将这些应用中的滤波器实现。 -
音乐可视化软件:实时响应音频信号的音乐可视化软件可以从Korg 35滤波器的独特频率响应和共振特性中受益。可以使用
surgefilter-k35
crate将这些应用中的滤波器实现。 -
音频艺术装置:需要实时音频处理的音频艺术装置可以从Korg 35滤波器的独特特性中受益。可以使用
surgefilter-k35
crate将这些装置中的滤波器实现。 -
音频游戏开发:需要实时音频处理的游戏开发者可以使用Korg 35滤波器在音频效果(如滤波器和合成器)中使用。可以使用
surgefilter-k35
crate在游戏音频中实现这些效果。 -
音频硬件设计:音频硬件设计师可能将
surgefilter-k35
crate用作在硬件实现滤波器之前,在软件中模拟Korg 35滤波器行为的工具。
总的来说,surgefilter-k35
Rust crate可以在需要实时处理、精确频率塑造和音频输出中具有独特特性的广泛音频处理应用中使用。
17>我们如何在游戏开发中使用这个crate?
可以在游戏开发中使用surgefilter-k35
Rust crate来实现需要实时处理和音频输出中具有独特特性的音频效果(如滤波器和合成器)。以下是一些如何在游戏开发中使用这个crate的示例:
-
声音设计:Korg 35滤波器以其强烈的共振特性而闻名,可以在游戏中创建有趣和独特的声音。可以使用
surgefilter-k35
crate在软件中实现滤波器并创建游戏资产(如武器、车辆和环境)的定制声音。 -
音乐制作:具有原创音乐创作的游戏可以从Korg 35滤波器的独特共振和非线性相位特性中受益。可以使用
surgefilter-k35
crate在软件中实现滤波器,并实时处理音乐以创建有趣和动态的声音景观。 -
实时音频效果:具有实时音频效果(如滤波器和合成器)的游戏可以使用
surgefilter-k35
crate在软件中实现这些效果。这可以用于创建沉浸式的声音环境、动态配乐和独特的音频效果。 -
配音声音处理:具有配音的游戏可以使用Korg 35滤波器处理配音音频并为音频输出添加有趣的效果。可以使用
surgefilter-k35
crate在软件中实现滤波器并为配音音频添加共振、滤波和失真等效果。 -
音频驱动的游戏玩法:使用音频提示来驱动游戏玩法的游戏可以使用Korg 35滤波器为玩家动作创建独特的音频反馈。可以使用
surgefilter-k35
crate在软件中实现滤波器并创建实时动态响应玩家动作的音频效果。
总体而言,Rust的surgefilter-k35
库可以作为游戏开发中创建独特和有趣音频效果的有用工具,这些效果可以增强玩家的体验并增加游戏的沉浸感。
依赖项
约12-21MB
约299K SLoC