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