0

「3/s + 3」や「tf(3、[1 3])」関数などの単純な一次転送があり、cコードで実装したいと思います。最後の反復以降のデルタ時間で呼び出されるC関数があります。

double output(double input, double t); //usually, t is around 0.01 second

Cで伝達関数3/s + 3をどのように実装しますか?

4

1 に答える 1

2

3 /(s + 3)を直接実装するだけではありません。適切な手法(フォワードオイラー、バックワードオイラー、タスティン、ゼロ次ホールド)を使用して、それをzドメインに離散化してから、フィルターの離散バージョンを実装する必要があります。

以下は、Tustin変換の単純なバージョンです。書かれているように、状態は初期化され、この関数の外部のどこかに保存される必要があります。

double firstOrderLag(double input, double coeff, double dT, double *state){
// Function to implement the discretization of a continuous time first
// order lag sys = coeff/(s+coeff) using the Tustin (Bilinear) transformation.

    double num = (1/(1+2/coeff/dT)); // numerator
    double den = (1-2/coeff/dT)*num; // denominator
    double temp;
    double output;

    temp = input - den*(*state);
    output = num*(temp + (*state));
    *state = temp;

    return output;
}
于 2013-03-12T01:09:45.867 に答える