P5 Matlab/Simulink 在时域分析中的应用-《Matlab/Simulink与控制系统仿真》程序指令总结
生活随笔
收集整理的這篇文章主要介紹了
P5 Matlab/Simulink 在时域分析中的应用-《Matlab/Simulink与控制系统仿真》程序指令总结
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
《Matlab/Simulink與控制系統(tǒng)仿真》程序指令總結(jié)
- Matlab_Simulink_BookExample
- 5. Matlab/Simulink 在時域分析中的應(yīng)用
- 5.1 Matlab 函數(shù)
- 例題 5_1
- 例題 5_2
- 例題 5_5
- 例題 5_6
- 例題 5_7
- 例題 5_8
- 例題 5_9
- 例題 5_10
- 例題 5_17
- 例題 5_18
書中詳細實例代碼可見:Github
Matlab_Simulink_BookExample
圖書:《Matlab/Simulink與控制系統(tǒng)仿真》
5. Matlab/Simulink 在時域分析中的應(yīng)用
5.1 Matlab 函數(shù)
step() 單位階躍響應(yīng)函數(shù)
impulse() 單位脈沖響應(yīng)函數(shù)
initial() 零輸入響應(yīng)函數(shù)
lsim() 任意輸入響應(yīng)函數(shù)
pzmap() 繪制系統(tǒng)的零極點圖
例題 5_1
% Page108:已知閉環(huán)傳遞函數(shù),求單位階躍響應(yīng)和單位斜坡響應(yīng) clear; clc;num = [1]; den = [1, 0.4, 1]; % 響應(yīng)時間 t = [0:0.1:10]; % u 為單位斜坡輸入 u = t; % 單位階躍響應(yīng) y = step(num, den, t); % 單位斜坡響應(yīng) y1 = lsim(num, den, u, t); % 將兩條響應(yīng)曲線繪制在同一個圖上 plot(t, y, 'b-', t, y1, 'r:') % 添加?xùn)鸥?grid % 添加橫縱坐標(biāo)軸 xlabel('Time [ses] t'); ylabel('y'); % 添加圖標(biāo)題 title('單位階躍和單位斜坡輸入響應(yīng)曲線'); % 添加文字標(biāo)注 legend('單位階躍響應(yīng)曲線', '單位斜坡響應(yīng)曲線');例題 5_2
% Page109:已知開環(huán)傳函,系統(tǒng)輸入信號為三角波,求響應(yīng) clear; clc;numg = [1, 2]; deng = [1, 10, 1]; % 建立單位負反饋傳遞函數(shù) [num, den] = cloop(numg, deng, -1); % 產(chǎn)生三角波 v1 = [0:0.1:1]; v2 = [0.9:-0.1:-1]; v3 = [-0.9:0.1:0]; u = [v1, v2, v3]; % 仿真時間 t = [0:0.1:4]; % 求取系統(tǒng)在三角波輸入下的響應(yīng) [y, x] = lsim(num, den, u, t); % 將輸入的三角波和輸出響應(yīng)曲線繪制在同一個圖上 plot(t, y, t, u); grid % 添加橫縱坐標(biāo)軸 xlabel('Time [ses] t'); ylabel('y'); % 添加圖標(biāo)題 title('三角波輸入和輸入下的響應(yīng)曲線'); % 添加文字標(biāo)注 legend('響應(yīng)曲線', '三角波輸入');例題 5_5
% Page112:使用游動鼠標(biāo)法和編程法求取系統(tǒng)的性能指標(biāo) clear; clc;% 建立零極點模型 G = zpk([ ], [-1+3i, -1-3i], 3); % 求取階躍響應(yīng) step(G);% 以上為游動鼠標(biāo)法 % 以下為編程法% 建立零極點模型 G = zpk([ ], [-1+3i, -1-3i], 3); % 計算最大峰值時間和它對應(yīng)的超調(diào)量 C = dcgain(G); % 求取階躍響應(yīng) [y, t] = step(G); plot(t,y) grid % 取得最大峰值時間 [Y, k] = max(y); timetopeak = t(k); % 計算超調(diào)量 percentovershoot = 100 * (Y-C)/C; % 計算上升時間 n = 1; while y(n) < Cn = n+1; end risetime = t(n); % 計算穩(wěn)態(tài)響應(yīng)時間 i = length(t); while (y(i)>0.98*C)&(y(i)<1.02*C)i = i-1; end settlingtime = t(i);例題 5_6
% Page114:已知開環(huán)傳函,計算阻尼比不同時單位負反饋系統(tǒng)的單位階躍響應(yīng)曲線 clear; clc;% 固有頻率 wn = 1; % 7 個不同的阻尼比取值 sigma = [0, 0.2, 0.4, 0.6, 0.9, 1.2, 1.5]; num = wn*wn; % 將 t 在 0 到 20 之間均等分成 200 份 t = linspace(0, 20, 200); for j = 1:7% 求開環(huán)傳函的分母den = conv([1,0], [1,2*wn*sigma(j)]);% 建立開環(huán)傳遞函數(shù)s1 = tf(num, den);% 建立單位負反饋系統(tǒng)的傳遞函數(shù)sys = feedback(s1, 1);% 求取單位階躍響應(yīng)y(:, j) = step(sys, t); end % 在同一圖上繪制單位階躍響應(yīng)曲線并添加?xùn)鸥?plot(t, y(:, 1:7));grid % 添加圖標(biāo)題 title('典型二階系統(tǒng)取不同阻尼比時的單位階躍響應(yīng)'); % 放置 sigma 取不同值的文字注釋 gtext('sigma=0'); gtext('sigma=0.2'); gtext('sigma=0.4'); gtext('sigma=0.6'); gtext('sigma=0.9'); gtext('sigma=1.2'); gtext('sigma=1.5');例題 5_7
% Page116:已知開環(huán)傳函,求k不同時單位負反饋系統(tǒng)的單位階躍響應(yīng)曲線 clear; clc;% 時間常數(shù) T = 1; % 6 個不同的開環(huán)增益取值 k = [0.1, 0.2, 0.5, 0.8, 1.0, 2.4]; % 將時間 t 在 0 到 20 之間分成 200 份 t = linspace(0, 20, 200); % 開環(huán)傳遞函數(shù)的分子、分母表達式 num = 1; den = conv([1, 0], [T 1]); for j = 1:6% 建立開環(huán)傳遞函數(shù)s1 = tf(num*k(j), den);% 建立閉環(huán)傳遞函數(shù)sys = feedback(s1, 1);% 求取單位階躍響應(yīng)y(:, j) = step(sys, t); end % 在同一圖上繪制單位階躍響應(yīng)曲線并添加?xùn)鸥?plot(t, y(:, 1:6)); grid % 添加圖標(biāo)題 title('典型二階系統(tǒng)取不同開環(huán)增益時的單位階躍響應(yīng)') % 放置 k 取不同值的文字注釋 gtext('k=0.1'); gtext('k=0.2'); gtext('k=0.5'); gtext('k=0.8'); gtext('k=1.0'); gtext('k=2.4');例題 5_8
% Page117:已知二階系統(tǒng),繪制tau不同值時,單位負反饋系統(tǒng)的單位階躍曲線 clear; clc;% 時間常數(shù) T = 1; % 開環(huán)增益 K 的值 K = 1; % 6 個不同的微分反饋系數(shù) tau = [0, 0.05, 0.2, 0.5, 1.0, 2.4]; % 將 t 在 0 到 20 之間均等分成 200 份 t = linspace(0,20,200); % 開環(huán)傳遞函數(shù)的分子多項式 num = 1; for j=1:6% 求取開環(huán)傳函的分母表達式den=conv([1,0], [T, 1+tau(j)]);% 建立開環(huán)傳函s1 = tf(num*K, den);% 建立單位負反饋系統(tǒng)的傳遞函數(shù)sys = feedback(s1, 1);% 求取單位階躍響應(yīng)y(:,j) = step(sys, t); end % 在同一圖上繪制單位階躍響應(yīng)曲線并添加?xùn)鸥?plot(t, y(:,1:6)); grid % 放置 K 取不同值的文字注釋 gtext('tau=0'); gtext('tau=0.05'); gtext('tau=0.2'); gtext('tau=0.5'); gtext('tau=1.0'); gtext('tau=2.4');例題 5_9
% Page119:已知閉環(huán)傳函,求未知量取不同值的單位階躍響應(yīng) clear; clc;% 3 個不同的微分時間常數(shù) tau = [0, 0.2, 0.4]; % 將 t 在 0 到 8 之間均等分為 80 份 t = linspace(0, 8, 80); % 開環(huán)傳遞函數(shù)的分子、分母多項式 num = 4; den = [1 2 4]; for j=1:3% 建立系統(tǒng)傳遞函數(shù)sys = tf(conv(num, [tau(j), 1]),den);% 求取單位階躍響應(yīng)y(:,j) = step(sys, t); end % 將 3 條響應(yīng)曲線繪制在同一個圖傻姑娘并添加?xùn)鸥?plot(t,y(:, 1:3)); grid; title('比例微分控制,不同微分時間下的系統(tǒng)階躍響應(yīng)'); gtext('tau=0'); gtext('tau=0.2'); gtext('tau=0.4');例題 5_10
% Page119:已知傳遞函數(shù),分析主導(dǎo)極點,并比較新系統(tǒng)與原系統(tǒng)的單位階躍響應(yīng) clear; clc;% 原系統(tǒng)的增益 K = 147.3; % 仿真時間 t = 0:0.1:6; num0 = K*[1, 1.5]; % 傳遞函數(shù)分母的系數(shù) den00 = [1, 2, 5]; den01 = [1, 10, 26]; den02 = [1, 1.7]; % 建立原系統(tǒng)傳遞函數(shù) sys0 = tf(num0, conv(den00, conv(den01, den02))); % 求原系統(tǒng)的階躍響應(yīng) y0 = step(sys0, t); num1 = 5; % 建立主導(dǎo)極點所構(gòu)成的系統(tǒng)傳遞函數(shù) sys1 = tf(num1, den00); % 求取主導(dǎo)極點所構(gòu)成的系統(tǒng)的階躍響應(yīng) y1 = step(sys1, t); % 繪制階躍響應(yīng)曲線并添加?xùn)鸥?plot(t, y0, t, y1); grid; % 添加圖標(biāo)題 title('階躍響應(yīng)對比'); % 放置區(qū)別兩條曲線的文字注釋 gtext('原系統(tǒng)的單位階躍響應(yīng)'); gtext('主導(dǎo)極點構(gòu)成的系統(tǒng)的單位階躍響應(yīng)');例題 5_17
% Page131:已知傳遞函數(shù),判斷穩(wěn)定性,繪制零極點圖 clear; clc;% 開環(huán)零點、極點、增益 z = -2.5; p = [0, -0.5, -0.7, -3]; k = 0.2; % 建立零極點形式的開環(huán)傳遞函數(shù) Go = zpk(z,p,k); % 單位負反饋連接 Gc = feedback(Go, 1); % 建立閉環(huán)傳遞函數(shù) Gctf = tf(Gc); % 獲取閉環(huán)傳遞函數(shù)的特征多項式 dc = Gctf.den; % 將特征多項式系數(shù)轉(zhuǎn)換為字符形式的函數(shù),便于查看 dens = poly2str(dc{1}, 's');% 獲取其多項式系數(shù) den = [1, 4.2, 3.95, 1.25, 0.5]; % 求取特征根 p = roots(den); % 繪制零極點圖 pzmap(Gctf); grid例題 5_18
% Page132:建立模型,分析穩(wěn)定性,繪制階躍響應(yīng)曲線,計算穩(wěn)態(tài)誤差,分析性能 clear; clc;% 傳遞函數(shù)的分子、分母多項式系數(shù) num1 = [20]; den1 = [1 2 0]; % 二階系統(tǒng)的傳遞函數(shù) sys1 = tf(num1, den1); % 微分環(huán)節(jié)傳遞函數(shù)的分子、分母多項式系數(shù) num2 = [0.1 0]; den2 = [0 1]; % 微分環(huán)節(jié)的傳遞函數(shù) sys2 = tf(num2, den2); % 內(nèi)環(huán)反饋的傳遞函數(shù) sys_inner = feedback(sys1, sys2); % 外環(huán)反饋的傳遞函數(shù) sys_outer = feedback(sys_inner, 1);% 根據(jù)求得的系統(tǒng)傳遞函數(shù),利用 roots 命令判斷系統(tǒng)的穩(wěn)定性 % 閉環(huán)系統(tǒng)傳遞函數(shù)分母多項式系數(shù) den = [1 4 20]; % 求閉環(huán)系統(tǒng)特征多項式的根 roots(den) % 利用 pzmap 命令繪制系統(tǒng)的零極點圖 pzmap(sys_outer); grid on;% 計算系統(tǒng)的階躍響應(yīng) % 閉環(huán)系統(tǒng)傳遞函數(shù)分子、分母多項式系數(shù) num = [20]; den = [1 4 20]; % 計算閉環(huán)系統(tǒng)的階躍響應(yīng) [y, t, x] = step(num, den); % 繪制階躍響應(yīng)曲線 plot(x, y); grid on;% 計算系統(tǒng)的超調(diào)量 % 階躍響應(yīng)的穩(wěn)態(tài)值 y_stable = 1; % 閉環(huán)系統(tǒng)階躍響應(yīng)的最大值 max_response = max(y); % 階躍響應(yīng)的超調(diào)量 sigma = (max_response - y_stable) / y_stable;% 計算系統(tǒng)的上升時間 % 遍歷響應(yīng)曲線 for i=1:length(y)% 如果某個時刻系統(tǒng)的輸出值大于穩(wěn)態(tài)值if y(i)>y_stable% 循環(huán)中斷break;end end % 計算此時對應(yīng)的時間,就是階躍響應(yīng)的上升時間 tr = x(i) % 計算系統(tǒng)的峰值時間 % 查找系統(tǒng)階躍響應(yīng)的最大值 [max_response, index] = max(y); % 計算此時對應(yīng)的時間,就是階躍響應(yīng)的峰值時間 tp = x(index) % 計算系統(tǒng)的調(diào)整時間 ---> 取物插帶為 2 % 遍歷響應(yīng)曲線 for i=1:length(y)% 如果當(dāng)前響應(yīng)值在誤差帶內(nèi)if max(y(i:length(y))) <= 1.02 * y_stableif min(y(i:length(y))) >= 0.98 * y_stable% 循環(huán)退出break;endend end % 計算此時對應(yīng)的時間,就是系統(tǒng)階躍響應(yīng)的調(diào)整時間 ts = x(i)總結(jié)
以上是生活随笔為你收集整理的P5 Matlab/Simulink 在时域分析中的应用-《Matlab/Simulink与控制系统仿真》程序指令总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P3 Simulink仿真-《Matla
- 下一篇: P6 根轨迹分析法-《Matlab/Si