2012-06-14 38 views
4

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

+3

我已经看到这通过剪裁三角波完成。 – jedwards

+2

如果(0

回答

2

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

如果你想代表这种功能的“纯”数学的方式来使用它的方式。只需建立你的功能“一个接一个”,第一件乘以heaviside“激活”,当你=脉冲的开始。对于下一部分,首先减去最后一个函数,然后添加新的数学函数,将其乘以适当的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

2

取代它有一个您可以使用公式来代替限制。

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

加上这是一个直接的三角函数,即使它可能会更长,并且会更多一点折襞。