图2-1 模糊控制原理框图
如图2-2所示是模糊控制器的组成部分,它包括输入量模糊化接口、知识库、模糊推理机和解模糊化接口四个部分
图2-2模糊控制器结构图
1) 模糊化接口
系统的输入量通常是一个精确值,必须由模糊化接口处理之后,才能适用于模糊控制器的求解。因此模糊化接口实际上是模糊控制器的输入接口,它的作用是把精确的输入量转化为一个模糊量。对于模糊变量 e,通常可以将它的模糊子集划分为
a) e={负,零,正}={N,Z,P}
b) e={负大,负小,零,正小,正大}={NB,NS,Z,PS,PB}
c) e={负大,负中,负小,零,正小,正中,正大}={NB,NM,NS,Z,PS,PM,PB}
2) 知识库
知识库是由数据库和规则库构成。输入变量和输出变量的模糊子集的隶属度值都存放在数据库中;规则库用来存储所有的模糊控制规则,为模糊推理机推理时提供控制律。,
3) 模糊推理机
模糊控制量是由模糊推理机得到的,它是根据输入模糊量,由模糊控制规则推理得到的。目前模糊推理方法很多,常用的有 Mamdani 推理法、Larsen 推理法、Zadel推理法等
4) 解模糊接口
模糊推理得到的结果通常是一个模糊量,不能直接作为控制量作用到被控系统上。因此,需要把它转换为一个可以被执行机构识别的精确值,该过程就叫做解模糊。通常采用的解模糊方法也有很多种,例如重心法、最大隶属度法、加权平均法、中位数法等.
3、倒立摆在仿真中的应用 3.1 连续的模糊控制 3.1.1 S函数
function [sys,x0,str,ts] = whatisit(~,x,u,flag )
switch flag case 0
[sys,x0,str,ts]=mdlInitializeSizes; case 1
sys=mdlDerivatives(x,u); case 3
sys=mdlOutputs(x); case {2,4,9} sys=[]; otherwise
error(['Unhandled flag=',num2str(flag)]); end
function [sys,x0,str,ts]=mdlInitializeSizes() sizes=simsizes; sizes.NumContStates=2; sizes.NumDiscStates=0; sizes.NumOutputs=1; sizes.NumInputs=1; sizes.DirFeedthrough=0; sizes.NumSampleTimes=1; sys=simsizes(sizes); x0=[10;10]; str=[]; ts=[0 0];
function sys=mdlDerivatives(x,u) sys(1,1)=x(2);
sys(2,1)=(10.78*sin((x(1)*pi)/180)-cos(x(1)*pi/180)*(u+0.05*(x(2)*pi/180)^2*sin(x(1)*pi/180)))/((4/3)*0.55-0.05*(cos(x(1)*pi/180))^2)*180/pi; function sys=mdlOutputs(x) sys=x(1);
3.1.2 simulink模块图
图3.1 仿真模块图
将设置好的模糊规则放进模块fuzzy logic controller,编写好的s函数放进模块s-function中。
3.1.3 模糊控制规则
图3.2 模糊控制
图3.3 输入x的隶属函数和论域
图3.4 输入y的隶属函数和论域
图3.5 输出z的隶属函数和论域
图3.6 模糊控制规则