[matlab練習] 實作離散系統之單位步階響應 (差分方程與轉移函數)
來源:曾傳蘆老師<控制器設計與應用> |
1.matlab解法
1.1 解題步驟
Step1.設定取樣時間
上升時間/10 or 上升時間/6
Step2.設定所有值的初始值設為0
時間等於0時,系統是靜態的,所以所有值的初始值設為0。
Step3.設定參考輸入 (reference input)與迭代次數
本例設 1.0
Step4.使用差分方程求解
要留意的地方為,matlab是從1開始算,因此最後要繪製時間為0時,要記得減一。
Step5.畫出響應圖
使用差分方程求解出的響應圖
使用轉移函數求解出的響應圖
1.2 m檔案
clear
% Step1 設定取樣時間
% Sampling period
ts=0.05;
% Step2.設定所有值的初始值設為0
% Initial Values
u_1=0.0;u_2=0.0;y_1=0.0;y_2=0.0;
e_1=0.0;
% Step3.設定參考輸入 (reference input)與迭代次數
% Reference Input
rin=1.0;
% Epoch
P=150;
% Step4.使用差分方程求解
%使用差方方程求解
for k=1:1:P
time(k)=k*ts;
r(k)=rin;
% Calculate plant output。計算受控體輸出
y(k)=1.98*y_1-0.9802*y_2+0.001987*u_1+0.001974*u_2;
%此處為模擬信號。實務上可依據需求,使用 inport()指令將裝置蒐集的信號輸入
%y_1 for y(k-1), y_2 for y(k-2)
%u_1 for u(k-1), u_2 for u(k-2)
% Calculate Error
e=r(k)-y(k);
% Calculate the Control signal
u(k)=0.8187*u_1+10*e-9.819*e_1;
% u_1 for u(k-1), u_2 for u(k-2)
% e for e(k)
% Update errors, inputs, and
% outputs
e_1=e;
u_2=u_1;u_1=u(k);
y_2=y_1;y_1=y(k);
end
% Step5.畫出響應圖
time = time-ts;
t=time'; %time為行向量,轉至成列向量
figure(1);
subplot(2, 1, 1); stairs([t t],[r' y']);
xlabel('time(sec)'); ylabel('y');
% axis tight;
subplot(2, 1, 2); stairs(time, u);
xlabel('time(sec)'); ylabel('u');
% axis tight;
% Extra Step.使用matlab轉移函數求解
% Z-transform step response
num=[0 0.001987 0.001974];
den=[1 -1.98 0.9802];
G_d=tf(num,den,ts);
num_d=[10 -9.819];
den_d=[1 -0.8187];
D_d=tf(num_d,den_d,ts);
figure(2)
plot(t, y,'o');
hold on
step((D_d*G_d)/(1+D_d*G_d),ts*(P-1));
hold off
---
#差分方程 #轉移函數 #離散系統
0 留言