如何操纵三角波,尤其是频率?
How can I manipulate a triangle wave, frequency in particular?
我得到了在 -1 和 1 之间绘制三角波 t 的动态值。起始值为 0。我想将这些值操作如下:
- 在 0 和 1 之间摆动
- 从 .5 开始(改变相位)
- 将其频率增加 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%) 的波示例:
为了视觉参考,最终公式的更好输入版本是
我得到了在 -1 和 1 之间绘制三角波 t 的动态值。起始值为 0。我想将这些值操作如下:
- 在 0 和 1 之间摆动
- 从 .5 开始(改变相位)
- 将其频率增加 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%) 的波示例:
为了视觉参考,最终公式的更好输入版本是