functionbdjz()globalh1_edit h2_edit num den h4_edit h5_edit h6_editnum=str2num(get(findobj(gcf,'Tag','h1_edit'),'string'));den=str2num(get(findobj(gcf,'Tag','h2_edit'),'string'));ess=str2num(get(findobj(gcf,'Tag','h4_edit'),'string')); %给定的的稳态误差要求rw=str2num(get(findobj(gcf,'Tag','h5_edit'),'string')); %给定的相角裕度要求wc=str2num(get(findobj(gcf,'Tag','h6_edit'),'string')); %给定的截止频率要求 if(~isempty(den)) s=(1/ess) %放大倍数取稳态误差的倒数 if(~isempty(num)) [m1,n1]=size(num); %因为要想使用K和稳态误差之间的倒数关系,必须对应尾一型,因此这里统一以时间常数形式进行输入 for k=1:n1 cx111(k,1)=-(1/num(1,k));end [m2,n2]=size(den); for k=1:n2 cx222(k,1)=-(1/den(1,k));endfile:///C:/Users/ASUS/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif for i=1:1:n1 s=s*num(1,i); end for i=1:1:n2 s=s/den(1,i);end [z,p]=zp2tf(cx111,cx222,s); Else %对应如果分子不含时间常数项 [m2,n2]=size(den); for k=1:n2 cx222(k,1)=-(1/den(1,k));endfile:///C:/Users/ASUS/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif cx111=[]'; for i=1:1:n2 s=s/den(1,i);end [z,p]=zp2tf(cx111,cx222,s); end sys=tf(z ,[p 0]) [Gm,Pm,Wcg,Wcp]=margin(sys) if Wcp>=wc %判断是超前还是滞后的关键,此时用滞后校正 phy1=-180+rw+6; %根据性能指标原系统应该具有的相角度数,注意要考虑裕量 [m,p,w]=bode(sys); wc1=spline(p,w,phy1); %这个相角度数所对应的频率 M1=spline(p,m,phy1) %这一相角所对应的幅值 b=1/M1; T=10/(b*wc1); Gc=tf([b*T 1],[T 1]) %这些是由公式推导而来的 G1=Gc*sys; %校正后的总的开环传函[Gm,Pm,Wcg,Wcp]=margin(G1) %这样在Cmmond窗口会显示出校正之后的性能指标 bode(sys,'g',G1,'r') %同时绘制出校正前和校正后的伯德图像 else %对应要采用超前校正 wc1=wc+4; %考虑到相角裕量的要求,而4是根据经验自己取定的 [m,p,w]=bode(sys); M1=spline(w,m,wc1); %期望的截止频率处对应的幅值 a=M1^(-2); %根据公式求出超前校正对应的参数a T=1/(wc1*sqrt(a)); %求出超前校正对应的参数T Gc=tf([a*T 1],[T 1]) %求出校正装置的传递函数 G1=Gc*sys; %超前校正之后系统总的传递函数 [Gm,Pm,Wcg,Wcp]=margin(G1) %得到校正之后系统的性能指标 bode(sys,'g',G1,'r') %同时绘制出校正前后系统的伯德图,绿色是未校正的,红色是校正之后的 end else plot(0,0) endendError using str2num (line 33)Requires string or character array input.Error in bdjz (line 3)num1=str2num(get(findobj(gcf,'Tag','h1_edit'),'string'));错误在哪啊 求大神给解释解释 没办法了 改不过来啊 |
共 0 个关于本帖的回复 最后回复于 2013-5-24 16:31