階躍響應指標的matlab計算
了凡春秋
最近師兄讓幫忙計算階躍響應的指標,就是改定實驗資料或**資料,求響應指標(概念見程式中)。程式設計**和效果如下
%% 求階躍響應的典型指標
function main_getperformanceofstepresponse
clcclear all
close all
global gtolerance
gtolerance = 0.05; % 調整時間的偏差容許範圍
%% test
wn = 1;
xi = 0.3;
g = tf(wn^2, [1, 2*xi*wn, wn^2]);
t = 0:0.01:15;
y = step(g,t);
%% 計算階躍響應的指標
stepvalue = 1;
[overshoot, risetime, peaktime, adjusttime, steadystateerror] = getperformanceofstepresponse(t, y, stepvalue);
% 繪圖
figure
plot(t,y)
grid on
line([peaktime, peaktime], [0, (1 + overshoot/100)*stepvalue], 'color', 'r')
text(peaktime, stepvalue*0.05, sprintf('峰值時間%.2f',peaktime))
text(peaktime, (1 + overshoot/100 + 0.05)*stepvalue, sprintf('超調量%.2f%%',overshoot))
line([risetime, risetime], [0, stepvalue], 'color', 'r')
text(risetime, -stepvalue*0.05, sprintf('上公升時間%.2f',risetime))
line([adjusttime, adjusttime], [0, stepvalue*(1 + gtolerance)], 'color', 'r')
text(adjusttime, stepvalue*0.05, sprintf('調整時間%.2f',adjusttime))
line([adjusttime t(end)], stepvalue*[(1 - gtolerance), (1 - gtolerance)], 'color', 'r', 'linestyle', '--')
text(adjusttime, stepvalue*(1 - gtolerance-0.05), sprintf('容許範圍%.2f', 1 - gtolerance))
line([adjusttime t(end)], stepvalue*[(1 + gtolerance), (1 + gtolerance)], 'color', 'r', 'linestyle', '--')
text(adjusttime, stepvalue*(1 + gtolerance+0.05), sprintf('容許範圍%.2f', 1 + gtolerance))
text(t(end)*0.9, stepvalue*1.05, sprintf('穩態誤差%f', steadystateerror))
end%% 求階躍響應的典型指標
function [overshoot, risetime, peaktime, adjusttime, steadystateerror] = getperformanceofstepresponse(t, y, stepvalue)
% 超調量mp:最大超調量規定為在暫態期間輸出超過對應於輸入的終值的最大偏離量
% 上公升時間tr:在暫態過程中,輸出第一次達到對應於輸入的終值的時間(從t=0開始計時)
% 峰值時間tp:對應於最大超調量發生的時間(從t=0開始計時)
% 調整時間ts:輸出與其對應於輸入的終值之間的偏差達到容許範圍(一般取5%或2%)所經歷的暫態過程時間(從t=0開始計時)
% 穩態誤差err:給定輸入與穩態輸出的差值
global gtolerance
% 超調量和峰值時間
[osvalue, osindex] = max(y);
overshoot = (osvalue - stepvalue)/stepvalue*100;
peaktime = t(osindex);
% 上公升時間
index = find(y >= stepvalue, 1, 'first');
risetime = t(index);
% 調整時間和穩態誤差
index1 = find(y <= stepvalue*(1 - gtolerance), 1, 'last'); % 容許範圍由全域性變數指定
index2 = find(y >= stepvalue*(1 + gtolerance), 1, 'last');
if isempty(index2) % 如果沒有超調量,此值為空
index = index1;
else
index = max(index1, index2);
endindex = max(index1, index2);
adjusttime = t(index);
steadystateerror = mean(y(index:end)) - stepvalue; % 這裡的穩態誤差計算為調整時間後的資料平均值與給定輸入的差,概念上是最後時刻的值與給定輸入的差
end
執行結果為:
改變容許範圍偏差為0.02的結果
matlab階躍響應 估算電力電子模型的頻率響應
電力電子系統依靠反饋控制將來自電源的電壓和電流轉換為負載所需的電壓和電流。例如,dc dc功率轉換器使用控制系統來實現期望的輸出電壓電平,並隨著源電壓和負載電阻的變化而保持該電平。電力電子工程師的控制設計基於經典控制理論。由於該理論基於線性時不變 lti 系統,例如傳遞函式和狀態空間模型,因此要將其...
MATLAB的符號計算
數學計算有數值計算與符號計算之分。這兩者的根本區別是 數值計算的表示式 矩陣變數中不允許有未定義的自由變數 而符號計算可以含有未定義的符號變數。對於一般的程式設計軟體如 c,c 等語言實現數值計算還可以 但是實現符號計算並不是一件容易的事。而 matlab 自帶有符號工具箱 symbolic mat...
Matlab中的符號計算
儘管本人認為matlab是乙個優秀的數值計算軟體,不應該拿它來做符號計算,然而客觀上matlab確實有符號工具箱且有很多人使用。因此這裡也整理了一點關於符號計算的認識。下面的說法或程式在matlab 2013b下是成立的。更早版本的符號工具箱有一些差別。1.定義符號變數 syms x y 用syms...