MATLAB Answers

# Convert transfer function from s domain to z^-1 domain

13 views (last 30 days)
skela on 2 Aug 2021
Answered: Paul on 2 Aug 2021
I've tried to convert transfer function from s domain to z^-1 domain. I'm following one research paper and I can't get the same result. I've attached a screenshot of research paper and the code I've run to obtain transfer function.
The numerator should be 1.365 z^-1. It's a typo in the equation but in the simulink model it says 1.365 z^1.
>> Ts = 0.001
Ts =
1.0000e-03
>> num = [910]
num =
910
>> den = [0.0665e-2 1]
den =
0.0007 1.0000
>> sys = tf(num, den)
sys =
910
--------------
0.000665 s + 1
Continuous-time transfer function.
>> sys_z = c2d(sys, Ts)
sys_z =
707.7
----------
z - 0.2223
Sample time: 0.001 seconds
Discrete-time transfer function.
>> sys_DSP = filt(sys_z.Numerator, sys_z.Denominator, Ts)
sys_DSP =
707.7 z^-1
---------------
1 - 0.2223 z^-1
Sample time: 0.001 seconds
Discrete-time transfer function.
>>
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

### Answers (1)

Paul on 2 Aug 2021
c2d supports different methods. The "pole-zero mapping" is what c2d calls "matched." However the result using "matched" does not give the expected result:
Ts = 0.001;
hc = tf(910,[0.065e-2 1]);
hd = c2d(hc,Ts,'matched')
hd = 714.6 ---------- z - 0.2147 Sample time: 0.001 seconds Discrete-time transfer function.
But this result appears to be correct insofar as pole zero mapping uses the relationhip z = exp(s*T)
[z,p,k] = zpkdata(hc);
exp(p{1}*Ts)
ans = 0.2147
Maybe the authors were really using a much smaller sample time?
Ts = log(.9985)/p{1}
Ts = 9.7573e-07
hd = c2d(hc,Ts,'matched');
hd.Variable = 'z^-1'
hd = 1.365 z^-1 --------------- 1 - 0.9985 z^-1 Sample time: 9.7573e-07 seconds Discrete-time transfer function.
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

R2021a

### Community Treasure Hunt

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

Start Hunting!