基于混合灵敏度的H∞鲁棒控制器的设计仿真

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

clc

close all

K=31.31

b0=50.88

b1=57.81

Ag=[0 1;-b0 -b1]

Bg=[0;1]

Cg=[K 0]

Dg=[0];

[num,den]=ss2tf(Ag,Bg,Cg,Dg) Gs=tf(num,den)

[z,p,k]=tf2zp(num,den)

Gs1=zpk(z,p,k)

%W1S=tf([0.2 3],[1 0.001])

%W2S=tf([0.002],[1])

%W3S=tf([0.002 0.00001],[1]) %W1S=tf([0.2 4],[1 0.002])

%W2S=tf([0.003],[1])

%W3S=tf([0.001 0.00001],[1]) %加权函数

W1S=tf([0.2 10],[1 0.001])

W2S=tf([0.001],[1])

W3S=tf([0.001 0.00001],[1]) W3NUM=W3S.num{1,1};

W3DEN=W3S.den{1,1};

i=0;

j=0;

a=length(W3NUM);

b=length(W3DEN);

for c=1:1:a

if W3NUM(c-i)~=0

break;

else

W3NUM(c-i)=[];

i=i+1;

end

end

for d=1:1:b

if W3DEN(d-j)~=0

break;

else

W3DEN(d-j)=[];

j=j+1;

end

end

Gg=ss(Ag,Bg,Cg,Dg);

[Aw1,Bw1,Cw1,Dw1]=tf2ss(W1S.num{1,1},W1S.den{1,1});

[Aw2,Bw2,Cw2,Dw2]=tf2ss(W2S.num{1,1},W2S.den{1,1});

if Polyorder(W3NUM)>Polyorder(W3DEN)

[Q,R]=deconv(W3NUM,W3DEN)

W3poly=Q

[Aw3,Bw3,Cw3,Dw3]=tf2ss(R,W3DEN)

else

[Aw3,Bw3,Cw3,Dw3]=tf2ss(W3NUM,W3DEN)

W3poly=[]

end

W1=[Aw1,Bw1;Cw1,Dw1]

W2=[Aw2,Bw2;Cw2,Dw2]

W3=[Aw3,Bw3;Cw3,Dw3]

[A,B1,B2,C1,C2,D11,D12,D21,D22]=augss(Ag,Bg,Cg,Dg,Aw1,Bw1,Cw1,Dw1,Aw2,Bw2,Cw2,Dw2,A w3,Bw3,Cw3,Dw3,W3poly)

G=[A,B1,B2;C1,D11,D12;C2,D21,D22];

[Acp,Bcp,Ccp,Dcp,Ac1,Bc1,Cc1,Dc1]=hinf(A,B1,B2,C1,C2,D11,D12,D21,D22)

[knum,kden]=ss2tf(Acp,Bcp,Ccp,Dcp) %控制器的状态空间形式转换成传递函数形式

K=tf(knum,kden) %控制器的传递函数

[z,p,k]=tf2zp(knum,kden) %控制器的传递函数转换成零极点增益形式

Kzpk=zpk(z,p,k)

%{

[gnum,gden]=ss2tf(Ag,Bg,Cg,Dg)

Gs=tf(gnum,gden) %标称系统的传递函数

P=nd2sys(gnum,gden,1) %标称系统的系统矩阵形式

K1=nd2sys(knum,kden,1) %鲁棒控制器的系统矩阵形式

[type,out,in,n]=minfo(P)

I=eye(out)

S=minv(madd(I,mmult(P,K1))) %灵敏度函数(1+GK)^-1 ,其中P和K1都是系统矩阵的形式T=msub(I,S)

W1S1=nd2sys(W1S.num{1,1},W1S.den{1,1},1)

INVW1S1=minv(W1S1) %加权函数W1的逆W1^-1

INVW3S1=nd2sys(W3S.den{1,1},W3S.num{1,1},1) %加权函数W3的逆W3^-1

w=logspace(-5,5,500)

Sw=vsvd(frsp(S,w)) %灵敏度函数的频域响应的奇异值

Tw=vsvd(frsp(T,w)) %补灵敏度函数的频域响应的奇异值

INVW1S1w=vsvd(frsp(INVW1S1,w))

INVW3S1w=vsvd(frsp(INVW3S1,w))

figure(1)

vplot('liv,lm',Sw,'r-',INVW1S1w,'b--')

title('Singular values of sensivity function S and W1^{-1}')

set(gca,'color','w')

xlabel('Frequency(rad/sec)')

ylabel('Amplitude')

grid on

figure(2)

vplot('liv,lm',Tw,'r-',INVW3S1w,'b--')

title('Singular values of complementary sensivity function T and W3^{-1}')

set(gca,'color','w')

xlabel('Frequency(rad/sec)')

ylabel('Amplitude')

grid on

%}

w=logspace(-5,5,500);

figure(3)

bode(W1S,'-b',W3S,'-r',w)

legend('W1','W3')

title('Bode Diagram Of Weighed Function W1 and W3')

grid on

[Acg,Bcg,Ccg,Dcg]=series(Acp,Bcp,Ccp,Dcp,Ag,Bg,Cg,Dg)

[As,Bs,Cs,Ds]=feedbk(Acg,Bcg,Ccg,Dcg,1) %灵敏度函数的状态空间(1+GK)^-1 [At,Bt,Ct,Dt]=feedbk(Acg,Bcg,Ccg,Dcg,2) %补灵敏度函数的状态空间GK(1+GK)^-1

svs=sigma(As,Bs,Cs,Ds,w);

svs=20*log10(svs);

[Aw1i,Bw1i,Cw1i,Dw1i]=unpck(minv(pck(Aw1,Bw1,Cw1,Dw1)));

svw1i=sigma(Aw1i,Bw1i,Cw1i,Dw1i,w);

svw1i= 20*log10(svw1i);

figure(4)

semilogx(w,svw1i,'b--',w,svs,'r-')

title('Singular values of sensivity function S and W1^{-1}')

xlabel('Frequency(rad/sec)')

ylabel('Amplitude(db)')

legend('W1^{-1}','S');

grid on

[Aw3i,Bw3i,Cw3i,Dw3i]=tf2ss(W3S.den{1,1},W3S.num{1,1})

svw3i=sigma(Aw3i,Bw3i,Cw3i,Dw3i,w);

svw3i=20*log10(svw3i);

svt=sigma(At,Bt,Ct,Dt,w);

svt=20*log10(svt);

figure(5)

semilogx(w,svw3i,'b--',w,svt,'r-')

title('Singular values of complementary sensivity function T and W3^{-1}')

xlabel('Frequency(rad/sec)')

相关文档
最新文档