时变波形

信息处理 频率 声音 信号合成
2022-02-25 07:31:42

我的情况如下:我试图通过一个一个地构建样本,然后使用 Python 将结果保存到一个 .wav 文件来以艰难的方式生成一个波形。

当频率恒定时,一切都很好:我使用但是,如果我将频率更改为时间的函数,事情就会出错。如果函数是形式的线性函数,它仍然有效。但是,例如,如果我选择,则最大频率会随着时间的推移而增加,达到高于预期 50Hz 的最大值。y(t)=sin(2πft)f(t)=a+btf(t)=40+10sin(t)

我读过一些关于瞬时频率的东西,即:为什么频率不断降低的波开始增加其频率超过其长度的一半?. 但是进行积分评估会使声音更加怪异。我目前使用的方法适用于时间的线性函数,所以我认为肯定还有其他问题。

我还尝试每次都以我需要的频率生成声音块,然后将它们粘合在一起。我计算了振荡的周期,以便一个块具有尽可能多的样本以在该频率上形成一个完整的周期,因此不同频率之间没有“跳跃”。但会在样本中产生破裂的声音。

这是我需要的那种声音的 JavaScript 实现的例子:http: //jsfiddle.net/m7US6/4/

任何帮助,将不胜感激。谢谢。

1个回答

考虑函数变为时,您会得到正弦波的振荡,,另一个等等。因此,每次参数变化时,您都会得到一次振荡。sin(2πft)2πft02π2π4π2π

现在让我们绘制 其中(我对其进行了一些修改以显示更多效果):2πf(t)tf(t)=10+10sin(2πt)

在此处输入图像描述

随着的增加,这个值的变化越来越快,这意味着的频率会越来越高。tsin(2πf(t)t)

另一种思考方式 - 频率是的导例如,这是请注意那里的乘数 -增加因此频率增加。f(t)t20π(sin(2πt)+2πtcos(2πt)+1)tt

所以你真正想要的是 给出和你的例子尝试ddtf(t)t=40+10sin(t)f(t)t=40t10cos(t)+csin(2π(40t10cos(t)))