「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をどのように実装しますか?
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;
}