4

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

4

2 回答 2

4

您可以使用一个方程式来代替限制。

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

另外,这是一个直接的三角函数,尽管它可能更长,而且更复杂一些。

于 2014-06-14T22:29:22.310 回答
2

发送梯形波单脉冲的一种方法包括使用 Heaviside Step Function 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。

于 2012-06-16T12:24:42.280 回答