Get difference equation from continuous transfer function

16 visualizaciones (últimos 30 días)
ANDREA
ANDREA el 22 de Dic. de 2024
Comentada: Star Strider el 22 de Dic. de 2024
Hello,
I have a continuous transfer function such as:
0.002174 s + 0.0001581
----------------------------------------------------------
6.267 s^4 + 3.378 s^3 + 0.6042 s^2 + 0.04081 s + 0.0007907
I'm trying to convert it to a difference equation with negative exponents(z^(-n)).
I've already tried to calculate it manually with syms but, i found it quite impossible to work with.
tustin =(2/Ts)*(1-z^(-1))/(1+z^(-1))
modello_disc = subs(modello, s, tustin)%this is just an example. i gotta split num and den before cause it gives me an error if i try it with the tf above.
i've also tried to use the common c2d command but it doesn't give me the result i hope for.
z = tf('z', 'Variable','z^-1')
modello = tf(c2d(modello, Ts, 'tustin'))

Respuesta aceptada

Star Strider
Star Strider el 22 de Dic. de 2024
One approach —
0.002174 s + 0.0001581
----------------------------------------------------------
6.267 s^4 + 3.378 s^3 + 0.6042 s^2 + 0.04081 s + 0.0007907
s = tf('s');
Hs = (0.002174*s + 0.0001581) / (6.267*s^4 + 3.378*s^3 + 0.6042*s^2 + 0.04081*s + 0.0007907)
Hs = 0.002174 s + 0.0001581 ---------------------------------------------------------- 6.267 s^4 + 3.378 s^3 + 0.6042 s^2 + 0.04081 s + 0.0007907 Continuous-time transfer function.
Ts = 1;
Hz = c2d(Hs, Ts, 'tustin')
Hz = 3.472e-05 z^4 + 7.187e-05 z^3 + 7.308e-06 z^2 - 6.213e-05 z - 3.228e-05 ----------------------------------------------------------------------- z^4 - 3.505 z^3 + 4.598 z^2 - 2.675 z + 0.5823 Sample time: 1 seconds Discrete-time transfer function.
Hz.Variable = 'z^-1'
Hz = 3.472e-05 + 7.187e-05 z^-1 + 7.308e-06 z^-2 - 6.213e-05 z^-3 - 3.228e-05 z^-4 ----------------------------------------------------------------------------- 1 - 3.505 z^-1 + 4.598 z^-2 - 2.675 z^-3 + 0.5823 z^-4 Sample time: 1 seconds Discrete-time transfer function.
Other options are available. See c2dOptions for details.
.
  2 comentarios
ANDREA
ANDREA el 22 de Dic. de 2024
Thank you really much! You just saved me hours of wasting time with the syms library.
Just a quick question, why wouldn't my script before with
z = tf('z', 'Variable','z^-1')
Am i not doing the same thing but in a general way?
Star Strider
Star Strider el 22 de Dic. de 2024
My pleasure!
That would work if you defined your transfer function in the ‘z’ domain. (See Discrete-Time Transfer Function Model Using Rational Expression for those details.) It will not automatically convert a continuous to a discrete transfer function. You need to do that similarly to the way I did here.
.

Iniciar sesión para comentar.

Más respuestas (0)

Productos


Versión

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by