我正在尝试避免使用Matlab函数tf(),因为它需要运行特定的工具箱。
我正在使用的传递函数非常简单。是散热器温度的模型。H(s) = (Rth/Tau)/(s + 1/Tau)
为了避免使用tf()函数,我尝试将传递函数替换为Matlab中编码的状态空间模型。
我已经使用函数ss()来获取A,B,C和D的te值。并且我试图比较tf()和我的函数的结果。
这是我使用的代码:Rth = 8.3220e-04; % ºC/W
Tau = 0.0025; % s
P = rand(1,10)*1000; % Losses = input
t = 0:1:length(P)-1; % Time array
%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Transfer function %%%
%%%%%%%%%%%%%%%%%%%%%%%%%
H = tf([0 Rth/Tau],[1 1/Tau]);
Transfer_func = lsim(H,P,t);
figure, plot(Transfer_func),grid on,grid minor, title('Transfer func')
%%%%%%%%%%%%%%%%%%%%%%%%%
%%% My función ss %%%
%%%%%%%%%%%%%%%%%%%%%%%%%
% Preallocate for speed
x(1:length(P)) = 0;
y(1:length(P)) = 0;
u = P;
sys = ss(H);
A = sys.A;
B = sys.B;
C = sys.C;
D = sys.D;
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(y), grid on,grid minor, title('With my función')
我知道来自A,B,C和D的值都可以,因为我已经使用]检查了它们>H = tf([0 Rth/Tau],[1 1/Tau]);
sys = ss(H);
state_space_sys = ss(sys.A,sys.B,sys.C,sys.D);
state_space = lsim(state_space_sys,P,t);
figure, plot(state_space),grid on,grid minor, title('State space')
如您所见,从我的函数和函数tf()获得的结果非常不同。
该方法是否有任何错误?
如果无法以这种方式避免使用tf()函数,还有其他方法吗?
我正试图避免使用Matlab中的函数tf(),因为它需要运行特定的工具箱。我正在使用的传递函数非常简单。是散热器温度的模型。 ...