我在写一个c函数来产生梯形波。有人知道产生梯形波的数学方程吗?与y=a*sin(b*x)的想法非常相似,对于x的不同值产生一个sin波。

最佳答案

发送梯形波单脉冲的方法包括使用升沉阶跃函数http://en.wikipedia.org/wiki/Heaviside_step_function
如果你想用“纯”数学的方法来表示这种函数,就用它。只需建立你的功能“一块一块”,将第一块乘以一个当x=你的脉搏开始时“激活”的重影。对于下一个部分,首先减去最后一个函数,然后添加新的部分数学函数,再乘以适当的heaviside函数,依此类推。它应该像这样结束(如果你不明白,请浏览维基百科的文章):

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代替它。

09-25 21:04