2012-06-14 40 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是垂直過渡

加上這是一個直接的三角函數,即使它可能會更長,並且會更多一點折襞。