Convert transfer function to state-space models

15 ビュー (過去 30 日間)
Diego Garcia
Diego Garcia 2019 年 10 月 11 日
回答済み: Diego Garcia 2019 年 10 月 17 日
I'm trying to convert a transfer function to state space model. In order to avoid the control toolbox functions since I don't have it's license.
The transfer function that I'm using is quite simple. Is the model for a heatsink temperature.
For this transfer function I have the next values for A,B,C and D.
I've tried to compare the output from the lsim() function and the equations from above but the output differs
Here's the code that I've used
P = rand(1,10)*1000;
t = 0:1:length(P)-1;
A = -400;
B = 0.5;
C = 0.6658;
D = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%
%%% State space %%%
%%%%%%%%%%%%%%%%%%%%%%%%%
state_space_sys = ss(A,B,C,D);
state_space = lsim(state_space_sys,P,t);
figure
plot(t,state_space)
grid on,grid minor, title('State space')
%%%%%%%%%%%%%%%%%%%%%%%%%
%%% My function %%%
%%%%%%%%%%%%%%%%%%%%%%%%%
x(1:length(P)) = 0;
y(1:length(P)) = 0;
u = P;
for k = 1:length(u)
x(k+1) = A*x(k) + B*u(k);
y(k) = C*x(k) + D*u(k);
end
figure
plot(t,y)
grid on,grid minor, title('My function')
Is there any mistakes on the approach?
It should be quite simple, but I can't manage to find the solution.
  7 件のコメント
Walter Roberson
Walter Roberson 2019 年 10 月 16 日
編集済み: Walter Roberson 2019 年 10 月 16 日
Is there a reason not to use tf() and ss() ? That is, if you pass a tf into ss() then it will be converted.
Diego Garcia
Diego Garcia 2019 年 10 月 17 日
Hello @Akbar. Rth is the thermal resistance of the heatsink. th stands for thermal.
@Akbar & @Walter Roberson , I'm trying to aboid the system control toolbox, since I don't have the license and I can only use the trial for 30 days.

サインインしてコメントする。

採用された回答

Diego Garcia
Diego Garcia 2019 年 10 月 17 日
At the end, I found another solution. I'm posting this here, so if someone has the same problem, can use this approach.
If you take the transfer function, and develop it, we reach to the following expresion
Now, we know that 1/s is equal to integrate. So in the end, we have to integrate the right side of the equation. The code would be like this.
Cth = Tau/Rth;
deltaT = zeros(size(P));
for i = 2:length(P)
deltaT(i) = (1/Cth * (P(i)-deltaT(i-1)/Rth))*(time(i)-time(i-1)) + deltaT(i-1);
end
This integral has the same output as the function tf() and the function lsim() with the A,B,C and D values.

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeTime and Frequency Domain Analysis についてさらに検索

製品


リリース

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by