梯形波动方程的方程

时间:2012-06-14 21:18:28

标签: c math graph waveform

我正在编写一个c函数来生成梯形波。有没有人知道产生梯形波的数学方程式?与y = A * sin(B * x)非常相似的想法为不同的x值生成正弦波。

2 个答案:

答案 0 :(得分:2)

发送单个梯形波脉冲的方法包括使用Heaviside阶跃函数http://en.wikipedia.org/wiki/Heaviside_step_function

如果您想要表示此类功能的“纯粹”数学方法,请使用它。只需逐个构建你的功能,将第一个部分乘以一个当x =脉冲开始时“激活”的重物。对于下一部分,首先减去最后一个函数,然后添加新的数学函数,将其乘以足够的重力函数,依此类推。它应该结束这样的事情(如果你没有得到它,请浏览维基百科文章):

H(n) := (x >= n)?1:0;
y := H(0)*(x) + H(1)*(-x + 1) + H(2)*(-(-x + 1) + (3-x));

但是,为了简化代码和提高效率,我们使用if语句。考虑一个45度的梯形波,具有恒定的酉速度。

float trapezoidalWave(float x, float t) {

    float y;

    if ( x <= t + 1 ) {
        // 45 degree ascending line
        y = x - t;
    } else if ( x <= t + 2) {
        // horizontal line
        y = 1;
    } else if (x <= t + 3) {
        // 45 degree descending line
        y = t + 3 - x;
    } else {
        y = 0;
    }

    return y;        

}

如果您想要“长波”而不只是一个脉冲,请使用模块(%),如果您不需要时间变量,只需将其替换为0.

答案 1 :(得分:2)

您可以使用等式而不是限制。

a/pi(arcsin(sin((pi/m)x+l))+arccos(cos((pi/m)x+l)))-a/2+c
  • a是振幅
  • m是句号
  • l是水平过渡
  • c是垂直过渡

另外,这是一个直接的三角函数,即使它可能更长,也更复杂。