Tengo una función de transferencia como esta:
\ $ H (s) = \ frac {1} {Ts + 1} \ $
Lo convertí en una ecuación de diferencias para resolverlo de manera iterativa:
\ $ H (s) = \ frac {Y (s)} {X (s)} = \ frac {1} {Ts + 1} \\ TsY (s) + Y (s) = X (s) \\ \ mbox {Suponiendo que las condiciones iniciales son cero,} \\ T \ frac {dy (t)} {dt} + y (t) = x (t) \\ y (t) = x (t) - Ty '(t) \ $
Escribí un código como este;
const double dt = 0.001;
double x; // Input
double y; // Output
double yp=0; // Previous output value
double yd; // Derivative of output
for(double t=0; t<TIMEMAX; t+=dt)
{
// ...
x = ReadNewInput();
yd = (y - yp) / dt;
yp = y;
y = x - T*yd; // y(t) = x(t) - Ty'(t)
StoreNewOutput(y);
//...
}
T simboliza el retraso del sensor (el sensor que lee x (t)) en mi código. Si T = 0 (sin retraso del sensor) mi código funciona muy bien. Pero si configuro un retardo de sensor muy pequeño (por ejemplo, T = 0.1s), la salida se vuelve inestable (y se acerca al infinito después de unas pocas iteraciones).
¿Estoy haciendo algo mal? Esta es la primera vez que implemento una función de transferencia en un algoritmo de computadora como este. ¿La realización de las funciones de transferencia continua de tiempo se realiza de esta manera o las personas utilizan un método diferente? Por favor, ¿puede confirmar la validez de mi método o hacer correcciones en él?