1

我很难找出如何从正弦波形成三角波(不是锯齿波)。

我了解如何为方波创建它:

if( sineValue >= 0 )
        value = amp;
    else
        value = -amp;

但我不确定如何改变它以适应三角波。

4

3 回答 3

5

三角波是方波的积分。所以你需要随着时间的推移整合(求和)你的方波:

if (sineValue >= 0)
{
    value += delta;
}
else
{
    value -= delta;
}

请注意,这可以更简洁地写成:

value += (sineValue >= 0) ? delta : -delta;
于 2011-09-13T11:08:13.713 回答
4

我错过了这个问题,这是一个非常酷的数学技巧:

asin(cos(x))/1.5708 <-- 点击查看图表

与正弦相同:

   Acos(Sin(x))/1.5708 // is a square version of sin(x)

devider 的精确值是那个小子的东西,1.5708....

于 2016-04-17T20:04:13.297 回答
1

您可以使用正弦波导数的符号来生成三角波,如下所示:

if (sineValue - oldSineValue >= 0)
{
    value += delta;
}
else
{
    value -= delta;
}
oldSineValue = sineValue;

您需要选择 delta 来为三角波提供所需的幅度,这当然取决于正弦波的频率和采样率。

这种方法的优点是三角波和正弦波具有相同的相位,即峰值和零交叉点重合。

于 2011-09-13T11:28:35.653 回答