
利用Matlab工具箱设计模糊控制器.docx
10页利用Matlab工具箱设计模糊控制器文章来源:不详 作者:佚名该文章讲述了利用 Matlab 工 §§§§§§§§§§具箱设计模糊控制器.下面将根据模糊控制器设计步骤,一步步利用Matlab工具箱设计模糊控制器Matlab 模糊控制工具箱为模糊控制器的设计提供了一种非常便捷的途径,通 过它我们不需要进行复杂的模糊化、模糊推理及反模糊化运算,只需要设定相应参 数,就可以很快得到我们所需要的控制器,而且修改也非常方便首先我们在Matlab的命令窗口( comma nd wi ndow)中输入fuzzy,回车就会出来这样一个窗口FIS ManftpOr me:hodirnphcabjnRange101)SjkIem "LEh!ir*edIJ-1 input. ■ out pur, arxi 0 rdesJ FIS Edllur: Until LedOUtputlUnttledFIS Tjjpe:Aftd mfelhodCurcnt Variable忖朗汨AggsegationD BfjjzzifeafionUntitled(msmdani))man;min:mat*1centrcrid下面我们都是在这样一个窗口中进行模糊控制器的设计。
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 Fun ction Edit中即可完成这些 步骤首先我们打开Member Fu nction Edit窗口.181FIS VariablesCurieritVaiiabl^i"i:rr=nt Memhers?np Punch 的.^k on 'o wlect]EkimfRai][01]Mernbership function plats 。
1朮 pokit$:| *J flobership Funct ion Editor: Ont it ledNameN □rfieParanaDuplay Range[3130^1;0 o.f 0? 0.5- 04 05 Q.& Q-7 D.0 吒Input variable "P1然后分别对输入输出变量定义论域范围,添加隶属函数,以E为例,设置论域范围为[-3 3],添加隶属函数的个数为7.Add rriemhersb p function?MF tj^pe用卿血qF MFsto select)Cuf^nt VanrlahgftDisplaj Fiance然后根据设计要求分别对这些隶属函数进行修改,包括对应的语言变量,隶属函数类型3.模糊推理决策算法设计:即根据模糊控制规则进行模糊推理,并决策出模 糊输出量首先要确定模糊规则,即专家经验对于我们这个二维控制结构以及相应的输 入模糊集,我们可以制定49 条模糊控制规则(一般来说,这些规则都是现成的,很 多教科书上都有),如图h ll^i汕的 andiEIZisNBHhBniU 目用订1|File £dk t Vi ew OptionsOOWland (EC rt NMjthen (U isPBJjl]3 H IE is NBland (ECh NSl Jhen |Uis PM]⑴4 II(EiEND)snd (EC isZ) then [U is FM]训5 !HEisNBjand(ECisPSiIhfnjU uPSflU E II IE iiNB)and(E匚 isFM]l囲〔U 詠卫(1] 7. If (E K NBJnnd (EC is Ffi] Ihtn |U isZ}(1) 扛 I乍 i? NM) and (EC is NB] then (U k PE] fl] $ if胆 iff NM| and 逊MM] then 皿 b 旳⑴ 10. IfftiiNMjandlEC it NSHhen (U is FM]门]WeiQht:Ddeleiide AddRje j Cktanaen4e ||制定完之后,会形成一个模糊控制规则矩阵,然后根据模糊输入量按照相应的模糊推理算法完成计算,并决策出模糊输出量。
4.对输出模糊量的解模糊:模糊控制器的输出量是一个模糊集合,通过反模糊化方法判决出一个确切的精确量,凡模糊化方法很多,我们这里选取重心法5.然后Export to disk,即可得到一个.fis文件,这就是你所设计的模糊控制器下面我们检验一下,看看我们的控制器到底怎么样以一个简单的电机控制为例,我们在 Simulink 中建立了它的模糊控制系统如下:> du/dtFuzzy LogicControllerSignal GeneratorGainlGain2[derivative□ □□□OC-在用这个控制器之前,需要用readfis指令将fuzzyl.fis加载到matlab的工作空间,比如我们用这样的指令:myFLC=readfis ( ‘fuzzyl.fis’就创建了一个叫 myFLC的结构体到工作空间,并在fuzzy logic controller中参数设为:myFLC可以看到,在模糊控制器的输入和输出均有一个比例系数,我们叫它量化因子, 它反映的是模糊论域范围与实际范围之间的比例关系,例如,模糊控制器输入输出 的论域范围均为 [-3, 3] ,而实际误差的范围是[-10, 10],误差变化率范围是[-100 , 100],控制量的范围是[-24, 24],那么我们就可以算出量化因子分别为0.3, 0.03, 8。
量化因子的选取对于模糊控制器的控制效果有很大的影响,因此要根据实际情况 认真选取哦馬好,现在我们可以设定仿真步长,比如定步长的10ms,就可以运行了运行后,产生这样一个错误"話MinMax blocks do not accept 'boolean' signals. The input signal(s) of block 'test_fuzzy/Fuzzy Logic Controller/FIS Wizard/Defuzzification1/Max (COA)' must be one of the MATLAB 'uint8', 'uint16', 'uint32', 'int8', 'int16', 'int32', 'single', or 'double' data types我想很多朋友做模糊控制的时候都会遇到这个情况没关系,这里提供两个解 决办法:1.直接在 Defuzzification1 这个模块中的那个比较环节后加入数据类型转换模 块,将 boolean 转化为 double 型,或者双击那个比较模块,选中 show additional parameters,将输出数据类型改为specify via dialog,然后选uint(8)即可;但是在 仿真之后,又会发现很多地方都存在这个问题,因此你不得不一个一个去修改,如 果你不怕累的话。
2.第二个方法是最简单的,直接在simulation parameters->adva need将 boolean logic signals选为off,强烈推荐你用这个’好了,这些都解决了,我们就可以仿真了,例如给个方波信号,可以得到仿真 曲线如下3211-522.53commartd reponse。
