4

台形波を生成する交流関数を書いています。台形波を発生させる数式を知っている人はいますか?y=A*sin(B*x) と非常によく似た考え方は、x の異なる値に対して正弦波を生成します。

4

2 に答える 2

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;        

}

1 つのパルスだけでなく「長波」が必要な場合は、モジュール (%) を使用します。時間変数が必要ない場合は、0 に置き換えてください。

于 2012-06-16T12:24:42.280 に答える