模拟模拟伪随机 LFO 信号(Javascript 中的低通滤波)

Posted

技术标签:

【中文标题】模拟模拟伪随机 LFO 信号(Javascript 中的低通滤波)【英文标题】:Modeling an analog psuedo random LFO signal (low pass filtering in Javascript) 【发布时间】:2017-11-13 23:13:38 【问题描述】:

我正在编写一个 javascript 程序,以编程方式为程序生成的音乐创建 MIDI 信号,该信号使用外部输入来修改/操纵声音以响应环境的变化。

我正在尝试做的一件事是弄清楚如何对模拟伪随机低频振荡器 (LFO) 信号进行编程,如下图中的虚线所示:

此信号将驱动 MIDI 效果,如弯音或调制。

该函数应采用单个值输入来控制信号波动的剧烈程度。当输入为 0 时,产生的信号应该为 0,或一条平线。并且随着输入值的增加,信号会按比例变得越来越不稳定。

我觉得我知道如何生成实现这些目标的 step 函数(如上图中的实线),但我不知道 如何“平滑”它(即低通滤波器)以获得像虚线一样的连续曲线。最终,平滑/连续/模拟函数将被采样,例如,每 100 毫秒,并作为新的 MIDI 弯音指令进行广播,等等。

【问题讨论】:

Discrete-time realization of low-pass filters. 【参考方案1】:

我只会使用现有的动画库,例如 TweenJS。 https://www.createjs.com/docs/tweenjs/modules/TweenJS.html 这些库通常用于视觉用途,但也可以通用。

未经测试,但请尝试以下方法:

const cc = 
  modwheel: 0
;
createjs.Tween.get(cc).to(modwheel: 127, 1000);

然后,只需每 100 毫秒观察一次 cc.modhweel 属性或任何您想要的“帧”。

另见:https://***.com/a/13501577/362536

【讨论】:

太棒了!我不敢相信我没有想到这一点,我什至自己用补间来制作动画。但是,是的,这是一个完全同构的问题。谢谢你帮我看到。我在想我最终将不得不使用一些非常复杂的电路模拟器或其他东西。

以上是关于模拟模拟伪随机 LFO 信号(Javascript 中的低通滤波)的主要内容,如果未能解决你的问题,请参考以下文章

伪随机数生成方法

平稳随机模拟信号在simulink库中是哪个

C++ 实现随机数生成(WindowsLinux)

使用javascript生成具有特定时间范围的随机模拟数据

c_cpp 用计算机产生的伪随机数来模拟抛硬币试验。假设抛10次硬币,每次抛硬币得到正面和反面是随机的。抛10次硬币构成一个事件。调用随机(2)返回一个二值结果。在主程序中反复调用函数TossCoin

[2018.3.26集训]yja-伪模拟退火