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

17 ビュー (過去 30 日間)
skela
skela 2021 年 8 月 2 日
回答済み: mmbaka douglas 2023 年 9 月 11 日
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.
>>

回答 (2 件)

Paul
Paul 2021 年 8 月 2 日
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.

mmbaka douglas
mmbaka douglas 2023 年 9 月 11 日
how to convert z dormain to s dormain F = 1/(Z -5)^2

カテゴリ

Help Center および File ExchangeFilter Analysis についてさらに検索

製品


リリース

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by