用C ++中的正弦波创建三角波

问题描述 投票:0回答:3

我无法找到如何从正弦波形成三角形(而不是锯齿波)。

我理解如何为Square波创建它:

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

但我不知道如何改变它以适应三角波。

c++ geometry wave sine
3个回答
4
投票

三角波是方波的积分。因此,您需要随时间积分(求和)方波:

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

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

value += (sineValue >= 0) ? delta : -delta;

2
投票

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

asin(cos(x))/1.5708

与正弦相同:

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

分频器的精确值是那种,1.5708 ....


1
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.