主页 > 电脑硬件  > 

MATLAB实现二阶模糊逻辑控制系统仿真


1. 内容

假设某一工业过程可等效成以下二阶系统:

设计一个模糊控制器,使其能自动建立模糊规则库,保证控制规则如表1所示,这种规则可表示为:

式中,fix为取整函数;E为误差的模糊集;DE为误差导数的模糊集;α为常数。

表1 模糊控制规则

u     e

de

NB

NS

ZR

PS

PB

NB

PB

PB

PS

PS

ZR

NS

PB

PS

PS

ZR

ZR

ZR

PS

PS

ZR

ZR

NS

PS

PS

ZR

ZR

NS

NS

PB

ZR

ZR

NS

NS

NB

这样表示的模糊控制系统可以通过改变α值方便地修改如表1所示的模糊控制规则,从而自动建立系统的模糊规则库。要求:

设计模糊控制器,使其能自动建立模糊规则库,保证系统输出尽快跟随系统输入。

要求建立脚本实现上述模糊逻辑控制系统。采样时间T=0.01秒;系统输入r(t)=1.0。观察不同α

取值时,阶跃响应的变化情况,找到匹配较佳动态性能的α

值,并进行详细的实验分析。

2. 过程

脚本:

clear all; %被控系统建模 num=20;den=[8 6 1]; [A,b,c,d]=tf2ss(num,den); %系统参数 T=0.01;h=T; N=500;R=1.0*ones(1,N); uu=zeros(1,N); yy=zeros(3,N); ka=1; for alpha=[0.45 0.75 0.90]; %定义输入/输出变量及其隶属度函数 fisMat=newfis('n4'); fisMat=addvar(fisMat,'input','e',[-6,6]); fisMat=addvar(fisMat,'input','de',[-6,6]); fisMat=addvar(fisMat,'output','u',[-6,6]); fisMat=addmf(fisMat,'input',1, 'NB','trapmf',[-6 -6 -5 -3]); fisMat=addmf(fisMat,'input',1,'NS','trapmf',[-5 -3 -2 0]); fisMat=addmf(fisMat,'input',1,'ZR','trimf',[-2 0 2]); fisMat=addmf(fisMat,'input',1,'PS','trapmf',[0 2 3 5]); fisMat=addmf(fisMat,'input',1,'PB','trapmf',[3 5 6 6]); fisMat=addmf(fisMat,'input',2,'NB','trapmf',[-6 -6 -5 -3]); fisMat=addmf(fisMat,'input',2,'NS','trapmf',[-5 -3 -2 0]); fisMat=addmf(fisMat,'input',2,'ZR','trimf',[-2 0 2]); fisMat= addmf(fisMat,'input',2,'PS','trapmf',[0 2 3 5]); fisMat=addmf(fisMat,'input',2,'PB','trapmf',[3 5 6 6]); fisMat=addmf(fisMat,'output',1,'NB','trapmf',[-6 -6 -5 -3]); fisMat=addmf(fisMat,'output',1,'NS','trapmf',[-5 -3 -2 0]); fisMat=addmf(fisMat,'output',1,'ZR','trimf',[-2 0 2]); fisMat=addmf(fisMat,'output',1,'PS','trapmf',[0 2 3 5]); fisMat=addmf(fisMat,'output',1,'PB','trapmf',[3 5 6 6]); %模糊规则矩阵 for i=1:5 for j=1:5 rr(i,j)=round(alpha*i+(1-alpha)*j); end end rr=6-rr; r1=zeros(prod(size(rr)),3); k=1; for i=1:size(rr,1) for j=1:size(rr,2) r1(k,:)=[i,j,rr(i,j)]; k=k+1; end end [r,s]=size(r1); r2=ones(r,2); rulelist=[r1 r2]; fisMat=addrule(fisMat,rulelist); %模糊控制系统仿真 Ke=30;Kd=0.2; Ku=1.0;x=[0;0]; e=0;de=0; for k=1:N e1=Ke*e; de1=Kd*de; %将模糊控制器的输入变量变换到论域 if e1>=6 e1=6; elseif e1<=-6 e1=-6; end if de1>=6; de1=6; elseif de1<=-6 de1=-6; end %计算模糊控制器的输出 in=[e1 de1]; uu(1,k)=Ku*evalfis(in,fisMat); u=uu(1,k); %利用四阶龙格-库塔法计算系统输出 K1=A*x+b*u; K2=A*(x+h*K1/2)+b*u; K3=A*(x+h*K2/2)+b*u; K4=A*(x+h*K3)+b*u; x=x+(K1+2*K2+2*K3+K4)*h/6; y=c*x+d*u; yy(ka,k)=y; %计算误差和误差微分 e1=e;e=y-R(1,k); de=(e-e1)/T; end ka=ka+1; end %绘制结果曲线 kk=[1:N]*T; plot(kk,yy(1,:),'r:',kk,yy(2,:),'r-.',kk,yy(3,:),'k--',kk,R,'m'); xlabel('时间');ylabel('输出'); legend('alpha=0.45','alpha=0.75','alpha=0.90'); grid on;

初始num:20

模糊系统中参数初始值:Ke=30,Kd=0.2,Ku=1.0

运行结果:

图1 alpha为0.45,0.75,0.90时的系统阶跃响应曲线

接下来修改alpha的值来进行探究:

图2 alpha=1

图3 alpha=0.5

图4 alpha=0.3

图5 alpha=0.3 开环增益(num值)为50

图6 alpha=0.3,num=20,模糊系统中Ke=50

图7 alpha=0.3,num=20,模糊系统中Ke=50,Ku=10

图8 alpha=0.3,num=20,模糊系统中Ke=100,Ku=10

图9 alpha=0.3,num=20,模糊系统中Ke=100,Ku=10,Kd=0.8

图10 alpha=0.3,num=20,模糊系统中Ke=50,Ku=10,Kd=1

图11 alpha=0.25

图12 alpha=0.251

3. 分析

从图1中我们可以看出,alpha为0.9的时候超调量最大,但是调节时间也相对较大,而为0.45的时候调节时间较小。在alpha值增加至1如图2时,与图1中0.9的曲线基本一致,继续减小alpha的值,如图3,图4所示,随着值的减小,调节时间也在减小,振荡频率在降低,但是稳态误差始终没有降低,所以在alpha值减小值0.3后,我开始改变其它参数,首先改变了开环增益num的值,如图5所示,调节时间略有减小,但是稳态误差还是没有变化,然后我开始考虑模糊系统中的Ke,Kd,Ku这三个参数的调节,首先增大Ke值,如图6所示,稳态误差终于减小了,但是同时系统超调也有增加,再增大Ku的值为1,图7所示曲线上升时间加快,振荡频率加大,但是稳态误差没有改变,此时若继续增大Ke值为100,图8所示曲线稳态误差继续减小,超调也会增加,保持此时的状态,我开始逐渐再增加Kd的值,如图9和图10所示,系统超调减小,但是响应时间增加了。将参数恢复初始状态,当alpha值减小到0.25后,如图11所示曲线先上升然后一直下降趋向于0,但是我将alpha调整为0.251如图12时,曲线还接近alpha为0.3时的曲线,也就是说alpha在0.25的时候会有一次较大的改变。综上所述,我们可以推测,Ke变大缩短上升时间,但是增大系统超调。Kd变大减小系统超调,但是响应速率变慢。Ku过小,系统的动态响应过程变长,Ku过大会导致系统震荡。我们需要综合调整以上三个因子,获得所需要的控制性能。

标签:

MATLAB实现二阶模糊逻辑控制系统仿真由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“MATLAB实现二阶模糊逻辑控制系统仿真