我无法找到如何从正弦波形成三角形(而不是锯齿波)。
我了解如何为Square波创建它:
if( sineValue >= 0 )
value = amp;
else
value = -amp;
但我不知道如何改变它以适应三角波。
答案 0 :(得分:4)
三角波是方波的积分。因此,您需要随时间积分(求和)方波:
if (sineValue >= 0)
{
value += delta;
}
else
{
value -= delta;
}
请注意,这可以更简洁地写成:
value += (sineValue >= 0) ? delta : -delta;
答案 1 :(得分:2)
我错过了这个问题,这是一个非常酷的数学技巧:
asin(cos(x))/1.5708< - 点击此按钮查看图表
与正弦相同:
Acos(Sin(x))/1.5708 // is a square version of sin(x)
devider的精确值就是那个孩子,1.5708 ....
答案 2 :(得分:1)
您可以使用正弦波导数的符号生成如下三角波:
if (sineValue - oldSineValue >= 0)
{
value += delta;
}
else
{
value -= delta;
}
oldSineValue = sineValue;
您需要选择delta来为三角波提供所需的幅度,这当然取决于正弦波的频率和采样率。
这种方法的优点是三角波和正弦波具有相同的相位,即峰值和零交叉重合。