Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

  • 实验内容

运用matlab制作一个两个输入一个输出的模糊控制器。分别控制一阶二阶三阶系统查看其输出。

  • 实验分析
  1. 模糊逻辑控制器的基本结构

Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

2. 根据系统实际情况,选择e,de和u的论域

     e   range : [-6 6]

    ec  range:  [-6 6]

     u  range:   [-2 2]

  1. .  e,de和u语言变量的选取

     e    7个:NB,NM,NS,ZERO,PS,PM,PB

     ec  7个:NB,NM,NS,ZERO,PS,PM,PB

     U   7个:NB,NM,NS,ZERO,PS,PM,PB

4. 模糊规则确定

e

ec

NB

NM

NS

ZERO

PS

PM

PB

NB

NB

NB

NB

NB

NM

NS

ZERO

NM

NB

NB

NM

NM

NS

ZERO

PS

NS

NB

NM

NM

NS

ZERO

PS

PM

ZERO

NB

NM

NS

ZERO

PS

PM

PB

PS

NM

NS

ZERO

PS

PM

PM

PB

PM

NS

ZERO

PS

PM

PM

PB

PB

PB

ZERO

PS

PM

PB

PB

PB

PB

规则解释:

  1. 以 e=NB,并且ec=NB,输出DU=NB为例。偏差e为负大(NB),偏差变化率ec也为负大(NB),说明反馈超调量很大,而且反馈超调增大的变化趋势也很大,因此应该是最大幅度的减小控制量,即控制量为负大(NB)。
  2. 以e=PB并且ec=PB,则u=PB,为例。偏差e为正大(PB),偏差变化率ec也为正大(PB),说明被控量远远没有达到稳态值,同时原理稳态值的趋势很大,因此应该以最快的速度增加被控量,即输出u=PB。
  3. 以e=NS并且ec=PS,则u=ZERO为例。偏差为负小(NS)时,偏差的变化率为正小(PS),说明被控量反馈值略小,即,略有超调,并且以较小的速度减小,因此可保持控制量不变,即控制增量为零(ZERO)。

5. 隐含和推理方法的制定

  • 隐含采用 ‘mamdani’方法: ‘max-min‘
  • 推理方法, 即 ‘min‘ 方法 
  • 去模糊方法:重心法。
  • 选择隶属函数的形式:三角型 
  • 实验步骤
  1. 建立fuzzy(fis)文件。
  1. 在主窗口输入fuzzy,显示如下图所示

                            Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

(2)选择Edit   Add Variable     Input,增加一个输入,使之成为两输入一输出。

并将输入输出的名字分别改为e,ec,u。

                              Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

                             Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

   (3)双击输入e,修改e的范围(range)改为(-6 6),并且将其中的mfs全部删除,并且点击Edit,ADD MFS…添加七个mfs,并依次将名字改为NB,NM…PM,PB。同理编辑ec和u

                                                        Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

                                                     Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

                                                  Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

                                                  Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

(4)建立规则,双击规则的图框,根据上图所示的规则表,建立规则。

                                                 Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

                                                Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

                                                Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

                                               Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

                                              Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

(5)查看规则及控制器的输出

                                              Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

                                             Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

                                             Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

(6)保存文件并输出到工作空间

 

2、建立一阶二阶三阶系统,进行仿真。注意在模糊控制模块,要将刚建立的fis文件添加到模糊控制器中。

(1)一阶系统

传递函数为:Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

其系统建模为:

                  Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

 

(2)二阶系统

传递函数为:Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

其系统建模为:

Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

  1. 三节系统

传递函数为:Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

                 其系统建模为:

                         Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

 

四、实验结果及分析

1、一阶系统

 

图一:系统经过模糊控制器后的输出:

                                   Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

图二:系统未经过模糊控制后的输出:

                                   Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

图三:模糊控制器的输入:

                                    Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

图四:模糊控制器的输出:

                                    Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

 

 

         

2、二阶系统

图一:经过模糊控制器的系统输出:

                                   Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

图二:未经过模糊控制的系统的输出:

                                   Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

图三:模糊控制器的输入: 

                                   Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

 

图四:模糊控制器的输出:

                                  Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

 

3、三节系统

图一:经过模糊控制器的系统输出:

                     Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

图二:未经过模糊控制器的系统输出:

                                 Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

图三:模糊控制器的输入:

                                 Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习

 

图四:模糊控制器的输出:

                                Matlab/Simulink 自动代码生成 基于模型设计学习教程(13)---- 模糊逻辑算法仿真练习