1、程序清单(1)——主程序:
功能简介:提供简单的人机交互操作界面,在同一程序内,用户可以从三种分析方法中选择适合自己的分析方法对系统进行分析,并且,程序具有一定的容错性和相应提示。在command
windows中输入main即可。
function main()
psw=1;
while(psw==1)
disp('请输入系统分析方式 :1——时域分析;2——根轨迹法分析;3——频率响应法分析')
disp('input your choice: 1 2 or3 ')
R=input('your choice: ')
if
R==1
psw=0;
disp('您选择了1——时域分析')
disp('请输入传递函数分子多项式系数以及分母多项式系数,例如:')
disp('系统传递函数为: ')
disp(' 1');
disp('--------------');
disp('s^2 + 2 s + 2');
disp('应当输入num=[1];den=[1 2 2]')
num=input('num=')
den=input('den=')
sys1=myfile_TD(num,den) %调用时域分析法子程序
break
end
if
R==2
psw=0;
disp('您选择了2——根轨迹法分析')
disp('请输入传递函数分子多项式系数以及分母多项式系数,例如:')
disp('系统传递函数为: ')
disp(' 1');
disp('--------------');
disp('s^2 + 2 s + 2');
disp('应当输入num=[1];den=[1 2 2]')
num=input('num=')
den=input('den=')
sys2=myfile_rlocus(num,den) %调用根轨迹分析法子程序
break
end
if
R==3
psw=0;
disp('您选择了3——频率响应法分析')
disp('请输入传递函数分子多项式系数以及分母多项式系数,例如:')
disp('系统传递函数为: ')
disp(' 1');
disp('--------------');
disp('s^2 + 2 s + 2');
disp('应当输入num=[1];den=[1 2 2]')
num=input('num=')
den=input('den=')
sys3=myfile_bode(num,den) %调用频率响应分析法子程序
else
disp('请正确输入选择 1 2 或者3')
disp(' ')
disp(' ')
disp(' ')
psw=1; %输入有误,标志位置“1”
end
end
end
2、程序清单(2)——时域分析法子程序
功能简介:用时域分析的方法分析系统的稳定性,在系统稳定的前提下,分析系统的各项动态参数,包括上升时间Tr,调整时间Ts,峰值时间Tp,超调量σ%以及稳态误差dcg。
若系统发散,则无法分析系统的动态参数。
function [sys1]=myfile_TD(num,den)
sys1=tf(num,den);
sys1zpk=zpk(sys1);
disp('极点')
p=sys1zpk.p{1} %系统极点
disp('零点') %系统零点
z=sys1zpk.z{1}
gg1=feedback(sys1,1,-1);
[y,t]=step(gg1);
plot(t,y)
grid on
text(1,0.3,'sys阶跃响应曲线')
hold
on %系统阶跃响应曲线
%判断系统稳定性
g=zpk(sys1); %求取实部
n=real(g.p{1});
nmax=max(n);
if nmax>0
disp('系统不稳定')
stable=0;
else
disp('系统稳定')
stable=1;
end
if stable ==1
%稳态误差的计算
ggg=tf(sys1.den{1},sys1.den{1}+sys1.num{1});
num1=[1 0];den1=1;
g1=tf(num1,den1);
gggg=ggg*g1;
num2=1;den2=[1 0];
u=tf(num2,den2);
disp('稳态误差为:')
dcg1=dcgain(gggg*u)
%超调量的计算
n=length(y);
yss=y(n);%稳态值
ymax=max(y);
disp('超调量σ%为:')
sigma=(ymax-yss)*100/yss %σ
%峰值时间的计算
i=1;
while y(i)
i=i+1;
end
disp('峰值时间Tp为:')
Tp=t(i)
%上升时间的计算
yr1=0.1*yss;
yr2=0.9*yss;
i=1;
while y(i)
i=i+1;
end
t1=t(i);
while y(i)
i=i+1;
end
t2=t(i);
disp('上升时间Tr为:')
Tr=t2-t1
%调整时间Ts(2%)
n=length(y);
symbol=0; %symbol:超标标志
for i=1:1:n
for
j=1:1:n-i
if(abs(y(i+j)-yss)/yss>0.02)
symbol=1;
end
end
if
symbol==1
symbol=0;
else
break;
end
end
disp('调整时间Ts为:')
Ts=t(i)
disp('传递函数为:')
else
disp('因系统发散,无法分析动态参数')
end
3、程序清单(3)——根轨迹分析法
功能简介:作根轨迹图;作出阻尼比与自然振荡频率的网格线;求指定特殊点的闭环极点和对应的根轨迹增益。
function sys2=myfile_rlocus(num,den)
sys2=tf(num,den);
rlocus(sys2) %绘制系统的根轨迹图
grid %绘制ωn,ζ网格,
[k,r]=rlocfind(sys2) %指定特殊点的闭环极点和对应的根轨迹增益
4、程序清单(4)——频率响应分析法
功能简介:绘制伯德图;求相角稳定裕量及幅值交接频率与幅值稳定裕量及相角交接频率
function sys3=myfile_bode(num,den)
sys3=tf(num,den);
[gm,pm,wcp,wcg]=margin(sys3);
margin(sys3)
grid on
disp('增益裕度Gm=');disp(gm)
disp('相角交接频率Wcp=');disp(wcp)
disp('相位裕度Pm=');disp(pm)
disp('幅值交接频率Wcg=');disp(wcg)