Matlab模拟仿真模糊PID(Fuzzy)

2023-11-17

研究项目

模糊PID(Fuzzy)的仿真测试

研究内容

本篇文章主要研究如何通过matlab软件实现模糊PID(Fuzzy)的仿真测试。

研究材料

  • matlab 2017a软件
  • 基本概念和定义
    • 模糊量:如E、EC;
    • 论域(上下限):-240~240;
    • 划分区间:-240 ~ -180;-180 ~ -120 ;-120 ~ -60;-60 ~ 0;0 ~ 60;60 ~ 120;120 ~ 180;180 ~ 240;
    • 隶属度:隶属于某个模糊子集的隶属度,程度;
    • 模糊子集:
      • 负大NB(Negative Big)
      • 负中NM(NegativeMedium)
      • 负小NS(NegativeSmall)
      • 零ZE或ZO(Zero)
      • 正小PS(PositiveSmall)
      • 正中PM(PositiveMedium)
      • 正大PB(Positive Big)
    • 隶属度函数:用于求解隶属度,有线性的、非线性的。

研究方法

利用matlab模糊控制工具箱为模糊控制的设计提供了一种非常便捷的途径,通过它我们不需要进行复杂的模糊化、模糊推理及反模糊化运算,只需要设定相应的参数,就可以很快得到我们所需要的控制器,而且修改也非常方便。下面将根据模糊控制器设计步骤,一步一步利用Matlab工具箱设计模糊控制器。

  • 模糊控制工具箱使用
    首先我们在Matlab的命令窗口(command window)中输入“fuzzy”,回车就会弹出fuzzy模糊控制器窗口(window)。
    fuzzy模糊控制器
    接下来我们都是在这个窗口中进行fuzzy模糊控制器的设计。

    1. 确定fuzzy模糊控制器结构:即根据具体的系统确定输入、输出量。

      我们选择标准的二维控制结构,即输入为误差e和误差变化ec,输出量为控制量u。注意这里的变量还都是精确量。相应的模糊量为E,EC和U,我们可以选择增加输入(Edit->Add Variable)来实现双输入单出结构。
      双输入单输出结构

    2. 输入输出变量的模糊化:即把输入/输出的精确量转化为对应语言的模糊集合。
      首先确定描述输入输出变量语言的模糊子集,如{NB,NM,NS,ZO,PS,PM,PB},并设置输入/输出变量的论域,例如我们可以设置误差E(此时为模糊量)、误差变化EC、控制量U的论域均为{-3,-2,-1,0,1,2,3};然后为模糊语言选取相应的隶属度函数。
      在模糊控制工具箱中,我们在Edit->MemberShip Function 中即可完成这些步骤。首先打开Edit->MemberShip Function窗口。
      隶属函数主图
      然后分别对输入/输出变量定义论域范围,添加隶属函数(Edit->MFs),以E为例,设置论域范围 为[-1 1],隶属函数的类型为:trimf(三角函数),添加隶属函数的个数为7。
      在这里插入图片描述
      接着根据设计要求分别对这些隶属函数进行修改,包括对应的语言变量,隶属函数类型。
      在这里插入图片描述

    3. 模糊推理决策算法设计:根据模糊控制规则进行模糊推理,并决策出模糊输出量。
      首先要确定模糊规则,即专家经验。对于我们这个二维控制结构以及相应的输入模糊集,我们可以制定49条模糊控制规则(双击“fuzzy pid”控制器)(一般来说,这些规则都是现成的,很多教科书上都有),如图。
      在这里插入图片描述
      制定完决策之后,会形成一个模糊控制规则矩阵,然后根据模糊输入量按照相对应的模糊推理算法完成计算,并决策模糊输出量。

    4. 对输出模糊量的解模糊:模糊控制器的输出量是一个模糊集合,通过反模糊化方法判决出一个确切的精确量,凡模糊化方法很多,我们这里选择重心法。
      在这里插入图片描述

    5. 然后File->Export->To File,即可得到一个.fis文件,这就是你所设计的模糊控制器。
      在这里插入图片描述

    6. simulink中使用fis文件,首先加入fuzzy模块,然后写入模糊文件,注意应用格式加单引号:“fuzzypid.fis”
      在这里插入图片描述

研究例子

模糊PID控制,即利用模糊逻辑并根据一定的模糊规则对PID的参数进行实时的优化,以克服传统PID参数无法实时调整PID参数的缺点。模糊PID控制包括模糊化,确定模糊规则,解模糊等组成部分。例如小车通过传感器采集赛道信息,确定当前距赛道中线的偏差E及当前偏差和上次偏差的变化EC,根据给定的模糊规则进行模糊推理,最后对模糊参数进行解模糊,输出PID控制参数。
在这里插入图片描述
KP的模糊规则控制表
在这里插入图片描述
KI的模糊规则控制表
在这里插入图片描述KD的模糊规则控制表
在这里插入图片描述
模糊规则PID推理系统结构图
在这里插入图片描述

模糊推理系统结构图讲解
  • 输入变量的隶属函数三角形函数,误差变量E的隶属函数:
    在这里插入图片描述
  • 误差变化变量EC的隶属函数
    在这里插入图片描述
输出变量隶属函数
  • 输出变量KP的隶属函数
    在这里插入图片描述
  • 输出变量KI的隶属函数
    在这里插入图片描述
  • 输出变量KD的隶属函数
    在这里插入图片描述
模糊规则编辑器

确定输入/输出隶属函数后,在模糊规则编辑器中,输入表格中的模糊推理规则,共49条,如下图:
在这里插入图片描述
经过模糊规则编辑器编入规则之后,此时得到的三个参数的变化如下图:

  • 模糊推理KP变化图
    在这里插入图片描述
  • 模糊推理KI变化图
    在这里插入图片描述
  • 模糊推理KD变化图
    在这里插入图片描述
    最后运行仿真得到结果
    在这里插入图片描述

研究结果

经过上述一步一步构建仿真结果,最终得到实现通过matlab对模糊PID(Fuzzy)的仿真。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matlab模拟仿真模糊PID(Fuzzy) 的相关文章

  • 如何在 MATLAB 中可视化球体的交集?

    似乎这个问题在一些地方被问过 包括SO https stackoverflow com questions 35130336 draws the intersecting volume of two spheres in matlab 我最
  • 如何让MCR启动时间快

    我将 matlab 程序转换为 net 程序集 即 dll 文件 我制作了一个控制台 C 应用程序 添加了 dll 文件并从 php 调用它 每次调用 exe 时都会调用 MCR 如何使 MCR 在服务器启动时初始化 并且即使在一段时间后调
  • 在 MATLAB 中使用 FFT 的频率响应

    这是场景 使用频谱分析仪 我有输入值和输出值 样本数是32000采样率为2000样本 秒 输入是正弦波50 hz 输入为电流 输出为压力 单位 psi 我如何使用 MATLAB 根据这些数据计算频率响应 使用 MATLAB 中的 FFT 函
  • 在 MATLAB 中检索 spfun、cellfun、arrayfun 等中的元素索引

    有什么办法可以找回index调用函数的元素的cellfun arrayfun or spfun行为 即检索函数范围内元素的索引 为了简单起见 假设我有以下玩具示例 S spdiags 1 4 0 4 4 f spfun x 2 x S 它构
  • MATLAB中如何画水平线和垂直线?

    我目前正在尝试在 MATLAB 中绘制简单的垂直线和水平线 例如 我想绘制线 y 245 我该怎么做呢 MATLAB 根据您提供的向量逐点进行绘图 因此 要创建一条水平线 您需要改变x同时保持y对于垂直线恒定 反之亦然 xh 0 10 yh
  • 在另一列中添加具有特定条件的一列,如 excel 的 sumif

    我有一个像这样的矩阵 A 1 2 2 3 3 4 4 5 5 6 6 8 7 9 8 5 9 4 现在我想添加第二列 条件是如果 limit 0 interval 3 且 limit limit interval 或者换句话说 当第 1 列
  • Python 函数句柄 ala Matlab

    在 MATLAB 中可以创建function handles http www mathworks co uk help techdoc ref function handle html与类似的东西 myfun arglist body 这
  • 如何找到在matlab中重复的矩阵的每一行的索引?

    我想找到矩阵中所有有重复项的行的索引 例如 A 1 2 3 4 1 2 3 4 2 3 4 5 1 2 3 4 6 5 4 3 要返回的向量将是 1 2 4 很多类似的问题建议使用unique函数 我已经尝试过 但我能得到的最接近我想要的功
  • MATLAB 特征函数

    我很好奇哪里可以找到完整的描述FEATURE功能 它接受哪些论点 没有找到文档 我只听说过memstats and getpid 还要别的吗 gt gt which feature built in undocumented 注意 更完整的
  • 在 Matlab 中高效获取像素坐标

    我想在 Matlab 中创建一个函数 给定一个图像 该函数将允许人们通过单击图像中的像素来选择该像素并返回该像素的坐标 理想情况下 人们能够连续单击图像中的多个像素 并且该函数会将所有相应的坐标存储在一个矩阵中 有没有办法在Matlab中做
  • matlab中的排列函数是如何工作的

    这是一个有点愚蠢的问题 但我似乎无法弄清楚排列在 matlab 中是如何工作的 以文档为例 A 1 2 3 4 permute A 2 1 ans 1 3 2 4 到底是怎么回事 这如何告诉 matlab 3 和 2 需要交换 哇 这是我迄
  • matlab中的正则逻辑回归代码

    我正在尝试正则化 LR 在 matlab 中使用以下公式很简单 成本函数 J theta 1 m sum y i log h x i 1 y i log 1 h x i lambda 2 m sum theta j 梯度 J theta t
  • 理解高斯混合模型的概念

    我试图通过阅读在线资源来理解 GMM 我已经使用 K 均值实现了聚类 并且正在了解 GMM 与 K 均值的比较 以下是我的理解 如有错误请指出 GMM 类似于 KNN 在这两种情况下都实现了聚类 但在 GMM 中 每个簇都有自己独立的均值和
  • 通过 Matlab 访问 Physionet 的 ptbdb 中的数据库

    我首先设置系统 old path which rdsamp if isempty old path rmpath old path 1 end 8 end wfdb url http physionet org physiotools ma
  • 如何在放置颜色条后保持子图大小不变

    假设我们有一个 1 2 子图 我们在其中绘制了一些图形 如下所示 subplot 1 2 1 surf peaks 20 subplot 1 2 2 surf peaks 20 然后我们要添加一个颜色条 colorbar 我不希望结果中的正
  • MATLAB - 冲浪图数据结构

    我用两种不同的方法进行了计算 对于这些计算 我改变了 2 个参数 x 和 y 最后 我计算了每种变体的两种方法之间的 误差 现在我想根据结果创建 3D 曲面图 x gt on x axis y gt on y axis Error gt o
  • 如何在 MATLAB 中绘制 3D 曲面图?

    我有一个像这样的数据集 0 1 0 2 0 3 0 4 1 10 11 12 13 2 11 12 13 14 3 12 13 14 15 4 13 14 15 16 我想在 matlab 中绘制 3D 曲面图 使列标题位于 y 轴 行标题
  • 有效地绘制大时间序列(matplotlib)

    我正在尝试使用 matplotlib 在同一轴上绘制三个时间序列 每个时间序列有 10 6 个数据点 虽然生成图形没有问题 但 PDF 输出很大 在查看器中打开速度非常慢 除了以栅格化格式工作或仅绘制时间序列的子集之外 还有其他方法可以获得
  • 图像处理 - 使用 opencv 进行服装分割

    我正在使用 opencv 进行服装特征识别 第一步 我需要通过从图像中移除脸部和手来分割 T 恤 任何建议表示赞赏 我建议采用以下方法 Use 阿德里安 罗斯布鲁克的用于检测皮肤的皮肤检测算法 谢谢罗莎 格隆奇以获得他的评论 在方差图上使用
  • ROC曲线和libsvm

    给定一条 ROC 曲线plotroc m see here http www csie ntu edu tw cjlin libsvmtools roc curve for binary svm 理论问题 如何选择要使用的最佳阈值 编程问题

随机推荐

  • SadTalker 让图片说话

    参考 https github com OpenTalker SadTalker 其他类似参考 https www d id com 输入图片加音频产生2d视频 安装使用 1 拉取github 下载对应安装库 2 下载对应模型baidu网盘
  • Windows如何开机自动全屏打开chrome浏览器

    创建一个bat文件 C Program Files Google Chrome Application chrome exe explicitly allowed ports 10080 18080 start fullscreen url
  • 【嵌入式】用STM32F103c8t6芯片完成对SD卡的数据读写

    目录 一 SD卡协议 1 SD卡的体系架构 2 SD卡寄存器列表 3 SD卡初始化 SPI模式 4 SD卡读写 SPI模式 二 STM32CubeMX 三 Keil代码修改 四 电路连接 五 烧录运行结果 六 心得体会 七 参考链接 一 S
  • Linux tcpdump抓包命令

    1 tcpdump抓包命令 c 指定抓取包的数量 即最后显示的数量 i 指定tcpdump监听的端口 未指定 选择系统中最小的以配置端口 i any 监听所有网络端口 i lo 监听lookback接口 nn 对监听地址以数字方式呈现 且对
  • 新版TCGA的突变数据SNP下载和整理

    关于TCGAbiolinks包的学习前面一共介绍了5篇推文 今天继续学习如何使用TCGAbiolinks下载和整理MAF格式的突变数据 之前的TCGA的MAF文件是可以下载的 每个癌症包含4种软件得到的突变文件 后来就改版了 不让你随便下载
  • 网络篇 OSPF的路由器类型-42

    OSPF路由器类型 在OSPF初篇的时候 就说到了OSPF是一种比EIGRP协议更加复杂的大型网络配置协议 它的路由器类型也分为了好几种 现在我们通过下图来了解一个OSPF路由器类型 1 内部路由器 所有的接口都接入到同一个区域中的路由器
  • 自定义类型——结构体、枚举、联合

    一 结构体 我们知道 数组是将相同类型的元素放在一起 类似于数组 结构体是将相同或不同的元素放在一起 eg struct example example是结构体名 可以省略 但不建议省略 内部的是结构体成员 int a char c flo
  • 冲量在线创始人刘尧:以信创软硬件结合场景为突破口“占山为王”

    数据大爆炸的时代 发展信创 保证数据的安全与流通便成为刻不容缓的议题 专注于数据智能互联解决方案的科技创新企业冲量在线 致力于促进数据生产要素在社会间的互联互通 构建可信 安全 隐私 公平 高效的 数据互链网 作为隐私计算结合信创的先行者
  • php简单密码验证txt,php用户名和密码的简单验证

    5 php页面提交form表单 username password 5 1 php页面接收form表单 并进行处理 设置用户名和密码 arr user array user pwd arr pwd array user gt 1111 pw
  • React 生命周期

    React 类组件的生命周期 就是组件从创建到消耗的过程 只有类组件才有生命周期 分为 挂载阶段 更新阶段 卸载阶段 挂载阶段 钩子函数 constructor 创建组件时 最先执行 作用 初始化 state 创建 Ref 使用 bind
  • 单机版kubernetes

    Kubernetes 集群的搭建是有一定难度的 官方安装推荐了MiniKube作为单机调试 学习 1 centos安装 1 1 先决条件 安装VirtualBox KVM Note Minikube 也支持 vm driver none 选
  • 【leecode】小练习(简单8题)

    def twoSum nums target 给定 nums 2 7 11 15 target 9 因为 nums 0 nums 1 2 7 9 所以返回 0 1 type nums List int type target int rty
  • nfs漏洞的处理:目标主机showmount -e信息泄露(CVE-1999-0554)

    文章目录 前言 一 漏洞内容 二 配置现状 1 nfs server节点 etc exports文件的配置 2 client节点执行showmount e 测试 三 nfs server节点增加访问控制的配置 1 etc hosts all
  • Node.js中Redirect拼接参数方法,带参数重定向

    一 在Node js里req redirect 里拼接URL是这样的 client1 req query client client1是你获取到的需要拼接的变量 res redirect allNode client client1 注意冒
  • openstack实战之使用sysprep工具封装windows7镜像

    openstack实战之使用sysprep工具封装windows7镜像 在openstack云平台环境下 使用sysprep封装windows7系统主要目的是清理虚拟机的SID 避免使用同一windows7镜像克隆出的虚拟机出现相同的SID
  • hive数据表去重方法

    1 hive 0 8 0数据表去重方法 问题描述 hive的外部表test中 在若干字段上存在重复现象 现在需要将若干字段上值相同的多条记录 只保其中留一条 舍弃其余的 解决思路 1 group by的方法 首先新建与test表完全相同的新
  • 单点登录的解析和代码实现

    单点登录 系统简介 Http协议 web应用采用browser server架构 http作为通信协议 http是无状态协议 浏览器的每一次请求 服务器会独立处理 不与之前或之后的请求产生关联 这个过程用下图说明 三次请求 响应对之间没有任
  • 生成图片验证码的两种实现方式

    最近工作中 需求让新加一个图片验证码功能 其实这个功能之前自己写过 想必跟大家现在心里想到的实现方式一样 要么是通过servlet实现请求操作 要么是通过get请求实现操作 然后在后台通过session存储图片上的字符串 和之后前台请求过来
  • 什么是测试开发工程师?

    什么是测试开发工程师 测试开发工程师 Software Development Engineer in Test 简称SDET 是指那些既可以称作是开发人员 同时也负责软件开发阶段和测试周期的测试工作的技术人员 一个专业的SDET更关注软件
  • Matlab模拟仿真模糊PID(Fuzzy)

    研究项目 模糊PID Fuzzy 的仿真测试 研究内容 本篇文章主要研究如何通过matlab软件实现模糊PID Fuzzy 的仿真测试 研究材料 matlab 2017a软件 基本概念和定义 模糊量 如E EC 论域 上下限 240 240