如何操纵三角波,尤其是频率?

How can I manipulate a triangle wave, frequency in particular?

我得到了在 -1 和 1 之间绘制三角波 t 的动态值。起始值为 0。我想将这些值操作如下:

  1. 在 0 和 1 之间摆动
  2. 从 .5 开始(改变相位)
  3. 将其频率增加 3 倍或更多(2 倍仍然太慢)

使用三角波上的 Wikipedia and Wolfram 条目,我可以使用类似于此的公式部分完成此操作:

但是特别是控制频率让我陷入困境。

例如,(t+1)/2 解决了上面的 1 和 2,但是 #3(频率)仅加倍了...我如何将频率加倍或加倍?

让我使用 JS 语法,因为我们在 SO 上没有 MathJAX。
我假设你熟悉这个等式

y = abs( 2*x % 2 - 1)

值不是因果关系:

  • 模数是创建周期性模式所必需的。值 2 是必需的,以便函数在开始新循环之前达到的最大值为 2(实际上 2 是最小上限,但这没关系)。
  • 最大振幅为 2 是必要的,以便在减去 1 之后,函数图像的范围在 [-1, 1) 中。
  • 减 1 是必要的,这样函数的绝对值就会翻转为负值,假设三角形形状并且范围在 [0, 1]
  • 乘以 2 是必要的,以便 x 运行s 快两倍,使函数在 0.5 时完成 emi-cycle(因此一个循环完成在 1 个单元中)。

这个函数的振幅为一,频率为一,假设 x-axis 是时间(如果它是 space 那么它有 wave-length 的 1 个单位 space) .

缩放和偏移函数很容易(由于单位值的幅度):

y = abs( 2*x % 2 - 1) * scale - offset

例如y = abs( 2*x % 2 - 1) * 3 - 1.5

请注意,此函数的频率仍然为 1。
要更改频率,只需将 x 运行 乘以

即可使其更快
y = abs( 2*freq*x % 2 - 1) * scale - offset

要添加一个阶段,我们只需要向 x

添加一个偏移量
y = abs( (2*freq*x + phase) % 2 - 1) * scale - offset

相位在 [0, 2] 范围内,其中 0 为 0%,2 为 100%。

这里是振幅为 1、偏移为 1.5、频率为 1/3 且相位为 1 (50%) 的波示例:


为了视觉参考,最终公式的更好输入版本是