医疗器械之模糊算法(嵌入式部分)
模糊控制
所谓模糊控制,就是对难以用已有规律描述的复杂系统,采用自然语言(如大,中,小)加以描述,借助定性的,不精确的以及模糊的条件语句来表达,模糊控制是一种基于语言的智能控制。
传统的自动控制器的综合设计都要建立在被控对象准确的数学模型(即传递函数模型或状态空间模型)的基础上,但是实际上,很多系统的影响因素很多,通常找出精确的数学模型,这种情况下,模糊控制的诞生就显得意义重大,因为模糊控制不需要建立数学模型,不需要预先知道过程精确的数学模型。模糊控制与传统的PID控制,具有如下优点:
(1)无需知道被控对象的数学模型
(2)反映人类智慧思维的智能控制
(3)易被人们所接受,是一种语言变量控制器
(4)构造容易,从属于智能控制的范畴,尤其适用于非线性,时变,滞后系统的控制
(5)抗干扰能力强,响应速度快,并对系统参数的变化有较强的鲁棒性
1. 工作原理
把各种传感器测出的精确量转换为适用于模糊运算的模糊量,然后将这些量在模糊控制器中加以运算,最后再将运算结果中的模糊量转换为精确量,以便对各执行器进行具体的操作控制,这就说明在模糊控制中,存在着一个模糊量与精确量之间相互转化的问题,如下图所示:
模糊控制原理图如下图所示:
2. 模糊语言集
模糊语言集用表示,一般有={负大,负中,负小,零,正小,正中,正大},用模糊语言变量E来描述偏差,或者用符号表示:
负大:Negative Big,简称NB
负中:Negative Medium,简称NM
负小:Negative Small,简称NS
零:Zero,简称ZE
正小:Positive Small,简称PS
正中:Positive Medium,简称PM
正大:Positive Big,简称PB
3. 隶属函数
各参数相对应子集的隶属函数分别由不同的函数族决定,参数的相应子集指该参数被人为地划分成的等级所构成的一组模糊集合,相应子集的多少,由控制精度决定,例如,参数“温差”的相应子集可以是“正大,正中,负小,负大”,也可以是“正大,正中,正小,负小,负中,负大”,后者比前者模糊子集多,所以控制精度更高(在其他相同条件的情况下)。
常用的隶属函数如下所示。
(1)z型隶属度函数zmf
(2)S型隶属度函数smf
(3)三角形隶属度函数trimf
3.1 模糊控制数学基础
3.1.1 模糊控制集合的代数运算

3.1.2 模糊关系
(1)普通关系:两个集合中的元素之间是否有关联。
(2)模糊关系:两个模糊集合中的元素之间关联程度的多少。

3.1.3 模糊关系的合成

3.1.4 模糊推理

3.1.5 模糊决策
模糊决策(模糊判决,解模糊,清晰化):由模糊推理得到的结论或者操作是一个模糊向量,转化为确定值的过程。
(1)最大隶属度法
(2)加权平均判决法
(3)中位数法
3.1.6 模糊推理的运用

3.1.7 模糊控制系统的组成
与一般的计算机控制系统不同的是,模糊控制系统的控制器是模糊控制器,模糊控制器是基于模糊条件语句描述的语言控制规则,又称为模糊语言控制器。
输入输出变量
(1)模糊控制的输入变量通常取E或E,EC或E,EC,ER,分别构成所谓的一维,二维,三维模糊控制器,一般选择控制量的增量作为模糊控制器的输出变量。
(2)描述模糊控制器的输入,输出变量状态:负大(NB),负中(NM),负小(NS),零(O),正小(PS),正中(PM),正大(PB)。
(3)描述误差变量的词集一般取为:负大(NB),负中(NM),负小(NS),负零(NO),正零(PO),正小(PS),正中(PM),正大(PB)。
模糊变量E的赋值表
模糊控制规则
(1)条件语句的基本类型为:if A or B and C or D then E
例如水温控制规则之一为:若水温高或偏高,且温度上升快或较快,则加大冷水流量。
用条件语句表达为:if E=NB or NM and EC=NB or NM then U=PB
3.1.8 模糊控制算法的工程实现
在大型的模糊控制系统中常采用软件模糊推理法,模糊关系,模糊推理以及模糊判决的运算可以离线进行,最后得到模糊控制器输入量的量化等级E,EC与输出量即系统控制量的量化等级U之间的确定关系,这种关系通常称为控制表。
3.2 水位控制系统
3.2.1 控制目标
控制模型如下图所示,控制进水阀S1和出水阀S2,使水箱水位保持在目标水位O处。
3.2.2 控制规则
(1)若当前水位高于目标水位,则向外排水,差值越大,排水越快
(2)若当前水位低于目标水位,则向内注水,差值越大,注水越快
(3)若当前水位和目标水位相差很小,则保持排水速度和注水速度相等
注:建立模糊控制规则的基本思想:当误差大或较大时,选择控制量应该以尽快消除误差为主,而当误差较小时,选择控制量要防止超调,以系统的稳定性为主要出发点。
3.2.3 控制步骤
(1)我们选择目标水位和当前水位的差值e作为观察量,选取阀门开度u为控制量。
(2)将偏差e划分为5个模糊集,负大(NB)、负小(NS)、零(ZO)、正小(PS)、正大(PB),e为负表示当前水位低于目标水位,e为正表示当前水位高于目标水位。设定e的取值范围为[-3,3]。
此时偏差e对应的模糊表如下表所示。
-3 -2 -1 0 1 2 3
PB 0 0 0 0 0 0.5 1
PS 0 0 0 0.5 1 0.5 0
ZO 0 0 0.5 1 0.5 0 0
NS 0 0.5 1 0.5 0 0 0
NB 1 0.5 0 0 0 0 0
(3)将控制量u划分为5个模糊集,负大(NB)、负小(NS)、零(ZO)、正小(PS)、正大(PB),u为负表示增大进水阀门S1的开度(同时减小出水阀门S2的开度),u为正表示减小进水阀门S1的开度(同时增大出水阀门S2的开度)。设定u的取值范围为[-4,4],隶属度函数如下。
此时控制量u对应的模糊表如下表所示。
-4 -3 -2 -1 0 1 2 3 4
PB 0 0 0 0 0 0 0 0.5 1
PS 0 0 0 0 0 0.5 1 0.5 0
ZO 0 0 0 0.5 1 0.5 0 0 0
NS 0 0.5 1 0.5 0 0 0 0 0
NB 1 0.5 0 0 0 0 0 0 0
(4)制定模糊规则:模糊规则的制定是模糊控制的核心内容,控制性能的好坏很大程度上由模糊规则决定,目前主要是根据经验来制定相应的规则
若e负大,则u负大
若e负小,则u负小
若e为零,则u为零
若e正小,则u正小
若e正大,则u正大
(6)进行模糊决策:最终需要的控制量u即为模糊控制的输出,u可由偏差矩阵e和模糊关系矩阵R合成得到
(7)控制量的反模糊化
我们模糊决策得到的控制量u是一个矩阵,并不能直接应用在工程上,因此需要将u解释为实际中的特定行为,即反模糊化操作。目前常用的反模糊化方法有以下几种:
最大隶属度法:应用于计算简单控制要求不高场合
重心法:可以使得输出更平滑
加权平均法:工业上应用最广泛
3.3 模糊控制算法实现
3.3.1 MATLAB代码
clc
clear%创建模糊控制器
a = newfis(‘fuzzy tank’);%输入变量
a = addvar(a,‘input’,‘e’,[-3,3]); %设置变量e为输入且定义域[-3,3]
a = addmf(a,‘input’,1,‘NB’,‘zmf’,[-3,-1]); %Z型隶属度函数
a =addmf(a,‘input’,1,‘NS’,‘trimf’,[-3,-1,1]); %三角形隶属度函数
a =addmf(a,‘input’,1,‘ZO’,‘trimf’,[-2,0,2]); %三角形隶属度函数
a =addmf(a,‘input’,1,‘PS’,‘trimf’,[-1,1,3]); %三角形隶属度函数
a = addmf(a,‘input’,1,‘PB’,‘smf’,[1,3]); %S型隶属度函数%输出变量
a = addvar(a,‘output’,‘u’,[-4,4]); %设置变量u为输出且定义域[-4,4]
a = addmf(a,‘output’,1,‘NB’,‘zmf’,[-4,-2]); %Z型隶属度函数
a =addmf(a,‘output’,1,‘NS’,‘trimf’,[-4,-2,0]); %三角形隶属度函数
a =addmf(a,‘output’,1,‘ZO’,‘trimf’,[-2,0,2]); %三角形隶属度函数
a =addmf(a,‘output’,1,‘PS’,‘trimf’,[0,2,4]); %三角形隶属度函数
a = addmf(a,‘output’,1,‘PB’,‘smf’,[2,4]); %S型隶属度函数%建立模糊规则
rulelist=[1 1 1 1;
2 2 1 1;
3 3 1 1;
4 4 1 1;
5 5 1 1];
a = addrule(a,rulelist);%设置反模糊化算法
a1 = setfis(a,‘DefuzzMethod’,‘mom’); %采用最大隶属度平均法进行反模糊化
writefis(a1,‘tank’); %保存tank文件
a2 = readfis(‘tank’); %读取tank文件%绘制图像figure(1); plotfis(a2); %绘制模糊控制器结构figure(2); plotmf(a,‘input’,1); %绘制输入隶属度函数图像figure(3); plotmf(a,‘output’,1); %绘制输出隶属度函数图像%打开模糊调试器
showrule(a);
ruleview(‘tank’);
MATLAB仿真结果如下图所示。
3.3.2 C语言代码
#include #include #include #define N 7 //定义量化论域模糊子集的个数//模糊语言定义#define NB -3#define NM -2#define NS -1#define ZO 0#define PS 1#define PM 2#define PB 3struct
{
//规则表
int rule[ N ][ N ] ; //模糊规则表
//隶属度函数
char f_type_e ; //e的隶属度函数类型
char f_type_de ; //de的隶属度函数类型
char f_type_u ; //u的隶属度函数类型
float paras_e[ 3N ] ; //e的隶属度函数的参数
float paras_de[ 3N ] ; //de的隶属度函数的参数
float paras_u[ 3N ] ; //u的隶属度函数的参数
//模糊运算参数
float Ke ; //Ke=n/emax,量化论域为[-3,-2,-1,0,1,2,3]
float Kde ; //Ke=n/demax,量化论域为[-3,-2,-1,0,1,2,3]
float Ku ; //Ke=umax/n,量¢化论域为[-3,-2,-1,0,1,2,3]
float umax ; //输出的上限
float emax ; //误差基本论域上限
float demax ; //误差变化率基本论域的上限
//控制目标参数
float target ; //控制目标
float actual ; //实际值
float e ; //误差
float e_pre ; //上一次的误差
float de ; //误差的变化率
}fuzzy;/*******************************************************
Name :trimf
Function :三角隶属度函数
Parameter :
x:自变量
(a,b,c):定义域
Return :结果
/float trimf( float x, float a, float b, float c ){
float u ;
if( ( x>=a )&&( x<=b ) )
u = ( x-a )/( b-a ) ;
else if( ( x>b )&&( x<=c ) )
u = ( c-x )/( c-b ) ;
else
u = 0 ;
return u ;
}/
Name :gaussmf
Function :正态隶属度函数
Parameter :
x:自变量
ave:均值
sigma:方差
Return :结果
/float gaussmf( float x, float ave, float sigma ){
float u ;
if( sigma<0 )
printf(“方差不允许小于0\n”);
else
u = exp( -pow( ( ( x-ave )/sigma ), 2 ) ) ;
return u ;
}/
Name :trapmf
Function :梯形隶属度函数
Parameter :
x:自变量
(a,b,c,d):定义域
Return :结果
*******************************************************/float trapmf( float x, float a, float b, float c, float d ){
float u ;
if( ( x>=a )&&( xelse if( ( x>=b )&&( x
**
相关文章:
医疗器械之模糊算法(嵌入式部分)
模糊控制 所谓模糊控制,就是对难以用已有规律描述的复杂系统,采用自然语言(如大,中,小)加以描述,借助定性的,不精确的以及模糊的条件语句来表达,模糊控制是一种基于语言的…...
网上销售笔记本系统
技术:Java、JSP等摘要:本文讲述了基于B/S模式的笔记本电脑在线销售系统的设计与实现。所谓的笔记本电脑在线销售系统是通过网站推广互联企业的笔记本电脑和技术服务,并使客户随时可以了解企业和企业的产品,为客户提供在线服务和订…...
MySQL基础查询操作
文章目录🚏 Select语句🚀 一、SQL底层执行原理🚬 (一)、查询的结构🚬 (二)、SQL语句的执行过程🚭 1、WHERE 为什么不包含聚合函数的过滤条件?(面试…...
English Learning - L2 语音作业打卡 小元音 [ʌ] [ɒ] Day9 2023.3.1 周三
English Learning - L2 语音作业打卡 小元音 [ʌ] [ɒ] Day9 2023.3.1 周三💌发音小贴士:💌当日目标音发音规则/技巧:🍭 Part 1【热身练习】🍭 Part2【练习内容】🍭【练习感受】🍓元音 [ʌ]&…...
Condition 源码解读
一、Condition 在并发情况下进行线程间的协调,如果是使用的 synchronized 锁,我们可以使用 wait/notify 进行唤醒,如果是使用的 Lock 锁的方式,则可以使用 Condition 进行针对性的阻塞和唤醒,相较于 wait/notify 使用…...
看完这篇入门性能测试
大家好,我是洋子。最近组内在进行服务端高并发接口的性能压测工作,起因是2023年2月2日,针对胡某宇事件进行新闻发布会直播,几十万人同时进入某媒体直播间,造成流量激增 从监控上可以看出,QPS到达某峰值后&…...
推导部分和——带权并查集
题解: 带权并查集 引言: 带权并查集是一种进阶的并查集,通常,结点i的权值等于结点i到根节点的距离,对于带权并查集,有两种操作需要掌握——Merge与Find,涉及到路径压缩与维护权值等技巧。 带…...
费解的开关/翻硬币
🌱博客主页:大寄一场. 🌱系列专栏: 算法 😘博客制作不易欢迎各位👍点赞⭐收藏➕关注 题目:费解的开关 你玩过“拉灯”游戏吗? 25盏灯排成一个 55 的方形。 每一个灯都有一个开关&…...
OpenGL中的坐标系
1、2D笛卡尔坐标系2D笛卡尔坐标系跟我们高中的时候学习的坐标系一样,是由x、y决定的。2、3D笛卡尔坐标系3D笛卡尔坐标系坐标由x、y、z决定,满足右手定则。3、视口glViewport(GLint x,GLint y,GLsizei width,GLsizei height)窗口和视口大小可以相同&#…...
Spring——Spring介绍和IOC相关概念
Spring是以Spring Framework为核心,其余的例如Spring MVC, Spring Cloud,Spring Data,Spring Security SpringBoot的基础都是Spring Framework。 Spring Boot可以在简化开发的基础上加速开发。 Spring Cloud分布式开发 Spring有…...
A+B Problem
AB Problem 题目描述 输入两个整数 a,ba, ba,b,输出它们的和(∣a∣,∣b∣≤109|a|,|b| \le {10}^9∣a∣,∣b∣≤109)。 注意 Pascal 使用 integer 会爆掉哦!有负数哦!C/C 的 main 函数必须是 int 类型,…...
【ROS学习笔记11】ROS元功能包与launch文件的使用
【ROS学习笔记11】ROS元功能包与launch文件的使用 文章目录【ROS学习笔记11】ROS元功能包与launch文件的使用前言一、ROS元功能包二、ROS节点运行管理launch文件2.1 launch文件标签之launch2.2 launch文件标签之node2.3 launch文件标签之include2.4 launch文件标签之remap2.5 l…...
【python】
print函数 同时输出多行变量 print(a, b, sep\n) (23条消息) python3 中print函数参数详解,print(*values, sep , end\n, filesys.stdout, flushFalse)中参数介绍_sep,_phantom-dapeng的博客-CSDN博客 input() 输入浮点数,不能用int(input()) int()…...
充电协议: 快充协议,如何选充电宝?
快充协议(存在两种:电压; 电流) 目前市面上的快充技术大多遵循2个技术方向: 以高通QC、联发科PEP、华为FCP为首的高压低电流快充技术; 另一种就是以OPPO的VOOC以及华为SCP为首的低电压大电流快充技术。 目前常见的快充标准还有三星AFC、联发…...
视觉SLAM十四讲ch6 非线性优化笔记
视觉SLAM十四讲ch6 非线性优化笔记本讲目标上讲回顾状态估计问题非线性最小二乘Gauss-Newton:高斯牛顿Levenburg-Marquadt:列文伯格-马夸尔特小结实践:CERES实践:G2O本讲目标 理解最小二乘法的含义和处理方式。 理解Gauss-Newton…...
Nikto工具使用指南
NiktoNikto是一款开源网站服务器扫描器,使用Perl开发,可以对服务器进行全面扫描,包括6400多个潜在危险的文件/cgi(通用网关接口(Common Gateway Interface)),废话不多说,直接上命令:基本测试&am…...
Git(4)之基本工具
Git基础之基本工具 Author:onceday date:2023年3月5日 满满长路有人对你微笑过嘛… windows安装可参考文章:git简易配置_onceday_CSDN博客 參考文档: 《progit2.pdf》,Progit2 Github。《git-book.pdf》 文章目录…...
好书推荐。
个人喜欢看传记,散文,历史等 二战名人传记,苏联列宁,朱可夫,斯大林等 英国首相丘吉尔,美国富兰克林,中国毛泽东等 创业:比尔盖,扎克伯格,苹果公司创始人乔…...
[Pytorch]DataSet和DataLoader逐句详解
将自己的数据集引入Pytorch是搭建属于自己的神经网络的重要一步,这里我设计了一个简单的实验,结合这个实验代码,我将逐句教会大家如何将数据引入DataLoader。 这里以目标检测为例,一个batch中包含图片文件、先验框的框体坐标、目标…...
【Kettle-佛系总结】
Kettle-佛系总结Kettle-佛系总结1.kettle介绍2.kettle安装3.kettle目录介绍4.kettle核心概念1.转换2.步骤3.跳(Hop)4.元数据5.数据类型6.并行7.作业5.kettle转换1.输入控件1.csv文件输入2.文本文件输入3.Excel输入4.XML输入5.JSON输入6.表输入2.输出控件…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...
高效的后台管理系统——可进行二次开发
随着互联网技术的迅猛发展,企业的数字化管理变得愈加重要。后台管理系统作为数据存储与业务管理的核心,成为了现代企业不可或缺的一部分。今天我们要介绍的是一款名为 若依后台管理框架 的系统,它不仅支持跨平台应用,还能提供丰富…...
Yolo11改进策略:Block改进|FCM,特征互补映射模块|AAAI 2025|即插即用
1 论文信息 FBRT-YOLO(Faster and Better for Real-Time Aerial Image Detection)是由北京理工大学团队提出的专用于航拍图像实时目标检测的创新框架,发表于AAAI 2025。论文针对航拍场景中小目标检测的核心难题展开研究,重点解决…...
XXE漏洞知识
目录 1.XXE简介与危害 XML概念 XML与HTML的区别 1.pom.xml 主要作用 2.web.xml 3.mybatis 2.XXE概念与危害 案例:文件读取(需要Apache >5.4版本) 案例:内网探测(鸡肋) 案例:执行命…...
RocketMQ 客户端负载均衡机制详解及最佳实践
延伸阅读:🔍「RocketMQ 中文社区」 持续更新源码解析/最佳实践,提供 RocketMQ 专家 AI 答疑服务 前言 本文介绍 RocketMQ 负载均衡机制,主要涉及负载均衡发生的时机、客户端负载均衡对消费的影响(消息堆积/消费毛刺等…...
