
- 产生时间
- 1974年
- 创始人
- Lotfi A.Zadeh
- 外文名
- fuzzy control
- 类 别
- 控制方法
- 中文名
- 模糊控制
- 解模糊化
- 系统的输入值
- 定义变量
- E、EC、U
-
模糊控制
2020-04-27 02:27:01 -
matlab模糊控制工具箱使用和模糊控制pid实例参考
2019-02-28 13:26:17Matlab模糊控制工具箱为模糊控制器的设计提供了一种非常便捷的途径,通过它我们不需要进行复杂的模糊化、模糊推理及反模糊化运算,只需要设定相应参数,就可以很快得到我们所需要的控制器,而且修改也非常方便。...Matlab模糊控制工具箱为模糊控制器的设计提供了一种非常便捷的途径,通过它我们不需要进行复杂的模糊化、模糊推理及反模糊化运算,只需要设定相应参数,就可以很快得到我们所需要的控制器,而且修改也非常方便。下面将根据模糊控制器设计步骤,一步步利用Matlab工具箱设计模糊控制器。
1、模糊控制工具箱使用
首先我们在Matlab的命令窗口(command window)中输入fuzzy,回车就会出来这样一个窗口。
下面我们都是在这样一个窗口中进行模糊控制器的设计。
1)确定模糊控制器结构:即根据具体的系统确定输入、输出量。
这里我们可以选取标准的二维控制结构,即输入为误差e和误差变化ec,输出为控制量u。注意这里的变量还都是精确量。相应的模糊量为E,EC和U,我们可以选择增加输入(Add Variable)来实现双入单出控制结构。
2)输入输出变量的模糊化:即把输入输出的精确量转化为对应语言变量的模糊集合。
首先我们要确定描述输入输出变量语言值的模糊子集,如{NB,NM,NS,ZO,PS,PM,PB},并设置输入输出变量的论域,例如我们可以设置误差E(此时为模糊量)、误差变化EC、控制量U的论域均为{-3,-2,-1,0,1,2,3};然后我们为模糊语言变量选取相应的隶属度函数。
在模糊控制工具箱中,我们在Member Function Edit中即可完成这些步骤。首先我们打开Member Function Edit窗口.
然后分别对输入输出变量定义论域范围,添加隶属函数,以E为例,设置论域范围为[-3 3],添加隶属函数的个数为7.
然后根据设计要求分别对这些隶属函数进行修改,包括对应的语言变量,隶属函数类型。
3)模糊推理决策算法设计:即根据模糊控制规则进行模糊推理,并决策出模糊输出量。
首先要确定模糊规则,即专家经验。对于我们这个二维控制结构以及相应的输入模糊集,我们可以制定49条模糊控制规则(一般来说,这些规则都是现成的,很多教科书上都有),如图。
制定完之后,会形成一个模糊控制规则矩阵,然后根据模糊输入量按照相应的模糊推理算法完成计算,并决策出模糊输出量。
4)对输出模糊量的解模糊:模糊控制器的输出量是一个模糊集合,通过反模糊化方法判决出一个确切的精确量,凡模糊化方法很多,我们这里选取重心法。
5)然后Export to disk,即可得到一个.fis文件,这就是你所设计的模糊控制器。
6)simulink中使用fis文件,首先加入fuzzy模块,然后写入模糊文件,注意应用格式加单引号: 'fuzzpid.fis'
2、模糊控制pid实例
模糊PID控制,即利用模糊逻辑并根据一定的模糊规则对PID的参数进行实时的优化,以克服传统PID参数无法实时调整PID参数的缺点。模糊PID控制包括模糊化,确定模糊规则,解模糊等组成部分。小车通过传感器采集赛道信息,确定当前距赛道中线的偏差E以及当前偏差和上次偏差的变化ec,根据给定的模糊规则进行模糊推理,最后对模糊参数进行解模糊,输出PID控制参数。
KP的模糊规则控制表
∆kp
EC
NB
NM
MS
ZO
PS
PM
PB
E
NB
PB
PB
PM
PM
PS
ZO
ZO
NM
PB
PB
PM
PS
PS
ZO
NS
NS
PM
PM
PM
PS
ZO
NS
NS
ZO
PM
PM
PS
ZO
NS
NM
NM
PS
PS
PS
ZO
NS
NS
NM
NM
PM
PS
ZO
NS
NM
NM
NM
NB
PS
ZO
ZO
NM
NM
NM
NB
NB
KI的模糊规则控制表
∆ki
EC
NB
NM
NS
ZO
PS
PM
PB
E
NB
NB
NB
NM
NM
NS
ZO
ZO
NM
NB
NB
NM
NS
NS
ZO
ZO
NS
NB
NM
NS
NS
ZO
PS
PS
ZO
NM
NM
NS
ZO
PS
PM
PM
PS
NM
NS
ZO
PS
PS
PM
PB
PM
ZO
ZO
PS
PS
PM
PB
PB
PB
ZO
ZO
PS
PM
PM
PB
PB
KD的模糊规则控制表
∆kd
EC
NB
NM
NS
ZO
PS
PM
PB
E
NB
PS
NS
NB
NB
NB
NM
PS
NM
PS
NS
NB
NM
NM
NS
ZO
NS
ZO
NS
NM
NM
NS
NS
ZO
ZO
ZO
NS
NS
NS
NS
NS
ZO
PS
ZO
ZO
ZO
ZO
ZO
ZO
ZO
PM
PB
NS
PS
PS
PS
PS
PB
PB
PB
PM
PM
PM
PS
PS
PB
模糊推理系统结构图
输入变量的隶属取三角形函数,如下:
误差变量E的隶属函数
误差变化变量EC的隶属函数
输出变量的隶属同样取三角形函数,如下:
输出变量KP的隶属函数
输出变量KD的隶属函数
输出变量KI的隶属函数
确定了输入和输出隶属函数后,在模糊规则编辑器中,输入表格中的模糊推理规则,共49条,如下图
模糊推理编辑器
此时得到的三参数的变化如下图
模糊推理KP变化图
模糊推理KI变化图
模糊推理KD变化图
运行仿真得到结果
PS:有定制开发需求,可以QQ联系:1762016542
提供matlab simulink 培训 1v1教学 或者思路沟通 答疑等咨询服务,尤其擅长汽车控制、信号处理、数学建模、电机领域
欢迎关注公众号:算法工程师的学习日志
-
PID控制模糊控制神经网络控制-PID控制 模糊控制 神经网络控制.rar
2019-08-13 05:18:22PID控制模糊控制神经网络控制-PID控制 模糊控制 神经网络控制.rar PID控制\模糊控制\神经网络控制 模型 有偿代做,请联系QQ 1170906655 ,中介勿扰! PID控制 模糊控制 神经网络控制.rar -
模糊控制书籍,模糊控制书籍
2018-09-16 15:35:21这是一本关于模糊控制的学习的比较经典的书籍,是学习模糊控制必备书籍 -
模糊控制及自适应模糊控制实现
2018-06-15 21:17:02模糊控制器与自适应模糊控制设计题一:已知某被控对象的传递函数为:(1) 采用二维PD模糊控制器,输入变量 和 ,输出变量为 ,其模糊集论域均为[-5,5],语言变量取值[NL,NM,NS,ZO,PS,PM,PL],隶属函数为对称...模糊控制器与自适应模糊控制设计
题一:已知某被控对象的传递函数为:
(1) 采用二维PD模糊控制器,输入变量 和 ,输出变量为 ,其模糊集论域均为[-5,5],语言变量取值[NL,NM,NS,ZO,PS,PM,PL],隶属函数为对称三角形;规则前件及蕴涵均采用“取小”运算,采用COG反模糊化方法。用Simulink建立单位反馈仿真系统,适当调整模糊控制器的增益系数 , 及 ,求出系统的阶跃响应曲线;
(2) 已知条件同条件(1),求系统单位斜坡输入时的系统响应曲线,分析系统响应曲线,分析系统响应曲线是否有静态偏差存在,为什么?
(3) 已知条件同条件(1),针对单位斜坡输入,要求系统无静态偏差,该怎样设计模糊控制器?设计相应的模糊控制器并进行系统仿真。
解:
(1):建立系统Simulink模型及单位阶跃响应曲线:
图1 模糊规则表
图2 系统Simulink模型
图3 不同参数下的阶跃响应曲线
(2) 单位斜坡输入下的系统响应曲线
图4 斜坡输入下不同参数系统响应
结论:综合图3和图4可以看出,误差量化因子能够对系统的快速响应特性和超调量起到很好的控制作用,而误差变化率因子对系统的动态特性起到很好的调节作用,同时系统均存在稳态误差,所以整体上模糊控制器的作用类似与PD控制器。
(3):加入积分环节
图5 Simulink模型
图6 斜坡响应输出
结论:将积分因子加入模糊控制器后可以看出系统的稳态误差得到消除,整体上类似于PID控制器。
题二:设被控对象的传递函数为
式中
。参考模型为一阶系统
。系统参考输入为
。
(1) 针对 设计一个直接模糊控制器(非自适应),使得对象的输出尽可能接近参考模型的性能指标。模糊控制器为二维模糊控制器,其输入变量为偏差 , 为系统参考输入, 为被控对象输出;偏差变化 (用一阶后向差分近似)。
(2) 针对 设计模糊模型参考学习自适应控制系统,使得对象输出跟踪参考模型输出并尽可能地靠近它。将(1)中所设计的模糊控制器作为初始模糊控制器并为FMRLC(模糊模型参考学习控制)所调整,进行系统仿真。
解:
(1).模糊控制器设计:
(a) 设计步骤:输入变量e 和ec ,输出变量为 u,其模糊集论域分别为[-8,8],[-1.6,1.6],[-4,4],语言变量均为[NL,NM,NS,ZO,PS,PM,PL],隶属函数为对称三角形;规则前件及蕴涵均采用“取小”运算,采用COG反模糊化方法,模糊规则采用与图1相同。
(b) Simulink模型:
图7 Simulink模型
仿真结果:
图8 模糊控制跟踪曲线
结论:从结果可以看出单纯的模糊控制器输出存在很严重的相位滞后,控制系统的响应跟踪较差。
(2) 模糊模型参考学习自适应(FMRLC)控制系统:
设计方法1:根据模糊逆模型实际输出得到控制量校正kp,对原模糊控制器的输出隶属度函数位置进行平移,得到系统的实时响应曲线和误差变化。图9,10,11,分别为系统Simulink模型,系统实时跟踪响应和系统误差响应曲线。
主要设计步骤为(核心代码说明见附录A.1):
(a) 根据输入变量e和ec确定各自对应的模糊论域等级;
(b) 查询规则表中由e和ec激活的规则,并获取在规则激活下输出u的论域等级;
(c) 根据获取的逆模型输出校正量p,对激活输出下的u的隶属度函数进行平移,当p为正时向右平移,当p为负时向左平移,平移量均为p;
图9 模糊参考模型自适应控制Simulink图
图10 系统跟踪响应
图11 系统跟踪误差
可以看出,通过对模糊控制器规则的实时修改可以起到稳定跟踪的效果,系统的响应误差在0.004附近。
设计方法2:在方法1的基础进一步对激活规则的权重进行修改,修改的原则在于,当模糊逆模型控制输出量p较大时,其激活规则的权重应该相应的增大以保证增大系统输出,减小跟踪误差,反之亦然。
主要步骤(核心代码见附录A.2):
(a) 根据输入变量e和ec确定各自对应的模糊论域等级;
(b) 查询规则表中由e和ec激活的规则,并获取在规则激活下输出u的论域等级;
(c) 根据获取的逆模型输出校正量p,对激活输出下的u的隶属度函数进行平移,当p为正时向右平移,当p为负时向左平移,平移量均为p;
(d) 将激活的规则权重在原来的基础上增加p;
图12 增加规则权重修改的模糊控制器Simulink模型
图13 系统跟踪响应
图14 系统跟踪误差
图15 增加规则权重修改与规则修改误差跟踪曲线对比
可以看出,在进一步引入权重修改后,其系统响应更加平滑,系统在波峰波谷处的跟踪效果有所提高。
附录
A.1:
function u = adaptive_fuzzy(p, e, ec)
coder.extrinsic('readfis');
coder.extrinsic('writefis');
coder.extrinsic('evalfis');
coder.extrinsic('newfis');
coder.extrinsic('addvar');
coder.extrinsic('addmf');
coder.extrinsic('addrule');
coder.extrinsic('setfis');
a = newfis('adapfuzzy');
%确定e和ec的模糊论域等级
dist_e = fix((e+1)*3);%截尾取整
degleft_e = 1 + dist_e;
degright_e = degleft_e + 1;
dist_ec = fix((ec+1)*3);%截尾取整
degleft_ec = 1 + dist_ec;
degright_ec = degleft_ec +1;
%规则列表
rulelist = [1 1 1 1 1
1 2 1 1 1
1 3 1 1 1
1 4 1 1 1
1 5 2 1 1
1 6 3 1 1
1 7 4 1 1
2 1 1 1 1
2 2 1 1 1
2 3 2 1 1
2 4 2 1 1
2 5 3 1 1
2 6 4 1 1
2 7 4 1 1
3 1 1 1 1
3 2 2 1 1
3 3 2 1 1
3 4 3 1 1
3 5 4 1 1
3 6 4 1 1
3 7 3 1 1
4 1 2 1 1
4 2 3 1 1;
4 3 3 1 1
4 4 4 1 1
4 5 5 1 1
4 6 5 1 1
4 7 6 1 1
5 1 3 1 1
5 2 4 1 1
5 3 4 1 1
5 4 5 1 1
5 5 6 1 1
5 6 6 1 1
5 7 7 1 1
6 1 4 1 1
6 2 4 1 1
6 3 5 1 1
6 4 6 1 1
6 5 6 1 1
6 6 7 1 1
6 7 7 1 1
7 1 4 1 1
7 2 5 1 1
7 3 6 1 1
7 4 7 1 1
7 5 7 1 1
7 6 7 1 1
7 7 7 1 1];
u_index = zeros(1,4);
index = 1;
%根据激活的规则获取对应输出u的论域等级
for i=degleft_e:degright_e
for j=degleft_ec:degright_ec
ifrulelist(7*(i-1)+j,3)==u_index(1)||rulelist(7*(i-1)+j,3)==u_index(2)||rulelist(7*(i-1)+j,3)==u_index(3)||rulelist(7*(i-1)+j,3)==u_index(4)
continue;
else
u_index(index)=rulelist(7*(i-1)+j,3);
index=index+1;
end
end
end
%设置输入e的隶属度函数
a = addvar(a,'input','e',[-1,1]);
for i=1:7
a = addmf(a,'input',1,i,'trimf',[-4/3+(i-1)/3,-1+(i-1)/3,-2/3+(i-1)/3]);
end
%设置输入ec的隶属度函数
a = addvar(a,'input','ec',[-1,1]);
for i=1:7
a = addmf(a,'input',2,i,'trimf',[-4/3+(i-1)/3,-1+(i-1)/3,-2/3+(i-1)/3]);
end
%根据控制量p设置输出隶属度函数
a = addvar(a,'output','u',[-1,1]);
for i=1:7
%对相应的隶属度函数进行平移
ifi==u_index(1)||i==u_index(2)||i==u_index(3)||i==u_index(4)
a = addmf(a,'output',1,i,'trimf',[-4/3+(i-1)/3+p,-1+(i-1)/3+p,-2/3+(i-1)/3+p]);
else
a = addmf(a,'output',1,i,'trimf',[-4/3+(i-1)/3,-1+(i-1)/3,-2/3+(i-1)/3]);
end
end
a = addrule(a,rulelist);
adapfuzzy = setfis(a,'DefuzzMethod','centroid');%面积重心法去模糊化·¨
u = 0.0;
u =evalfis([e,ec],adapfuzzy);
A.2 在A.1的基础上增添以下代码
%根据修改激活规则权重
for i=degleft_e:degright_e
for j=degleft_ec:degright_ec
rulelist(7*(i-1)+j,4)=rulelist(7*(i-1)+j,4) + p;
end
end
-
模糊控制理论介绍,模糊控制入门
2018-07-23 22:21:05模糊控制导论,对模糊控制理论的介绍,导读,Fuzzy Logic
-
MSTP中以太网和ATM的功能及应用
-
rufus-3.13 安装 En_Win10_B_20h2_up_jan_x64
-
免费提供离线地图部署服务
-
Spring Boot2.X仿朋友圈PC版系统实战_架构1.0
-
状态机图习题.docx
-
智能制造 仪器仪表.pdf
-
2021-01-26
-
Parlay API计费能力分析与研究
-
【2021】UI自动化测试Selenium3
-
JsIntegration.js
-
PAT甲级1088 Rational Arithmetic//多加练习分数运算
-
Python运行Unittest作为包导入错误,AttributeError: module ‘unittest‘ has no attribute ‘main‘
-
pyechart数据可视化
-
iptables基础理解---巨详细!!!
-
0基础如何2年内掌握架构师所有技术栈?
-
effective c++ 48 了解模板元编程
-
Kotlin协程极简入门与解密
-
python项目打包遇到的问题
-
QT+opencv+SIFT算法(含资源)
-
2021-01-26