目录

0 引言

1 将清晰的数据模糊化

2、模糊推理

2.1模糊命题

2.2T-S模糊推理

3、将模糊的数据清晰化

4、使用模糊算法逼近一阶线性定常系统在MATLAB中实现

5、在FPGA中实现模糊算法

5.1、电路系统结构设计

5.2、模糊算法运算单元概述

5.3、测试结果

6、结论


0 引言

模糊算法是一种智能算法,也可以说它是一种非模型算法。它是一种以人类的语言为外壳,将其转换为数学函数,再与物理系统结合再一起的一种算法。

模糊算法一般分为两种模型:mamdani模型和T-S模型。本文主要以T-S型模糊算法为主。

T-S型模糊算法比较适用于“分段线性系统”的模糊控制,同时也可以作用一般的系统模型,对于定量研究个数学分析非常方便。但是要确定T-S模型的结构识别和参数,语言大量的输入-输出数据进行训练,从而建立起一个符合要求的T-S模型。

关于训练一般采用前向反馈神经网络(BP)来进行训练,本文不给予赘述。且本文所涉及到的模糊数学和模糊控制的知识可参考,清华大学出版社出版的《模糊控制及其MATLAB仿真》。

1 将清晰的数据模糊化

清晰的数据可以通过已经确定好的模糊集合以及用于叙述模糊集合的隶属函数来进行转换。下面就以一个例子简单的叙述一下隶属函数的概念。

例:假设一个人年龄的为X,其属于论域U=[1,100] 即 x∈U。我们再用QZL三个函数表示  青年  中年  老年  的隶属函数。

然后经过我们大量的调查分析,将三个隶属函数的函数模型定义为高斯函数模型。其三个模糊概念的隶属函数表达式如下:

青年:

中年:

老年:

而这里的F集合(模糊集合)用扎德法表达如下:

老年:

注意,这里的积分号并不代表积分的意思。是代表模糊集合的意思。

上述的隶属函数分布如下图1所示。

图1 隶属函数

例如一个40岁,将该数据进行上述模型模糊化后可以表达为:

2、模糊推理

2.1模糊命题

建立系统的准确数学模型有时是非常困难甚至是不可能实现的。正如爱因斯坦所说:So far as the laws of mathematics refer to reality , they are not certain .And so far as they are certain , they do not refer to reality。(这个请允许笔者嘚瑟一下^_^)所以模糊算法也因此而生。

这里涉及到三个概念:语句、命题和判断。

语句:它是表达人类思维的工具例如“现在气温是28°”“把阀门打开”等,这些都属于语句。

命题:它是用于反映状况的思维形态,一般为陈述句。例如“月亮自己会发光”“一个偶数可以表示为两个素数之和(哥德巴赫猜想)”都属于命题。

判断:它是对事物状态有判断意义的思维形式。

所以上述三者具有如下关系:

其中有些陈述不清不能对其清晰判断的命题,统称模糊命题。例如:“老李有一千八百零一根胡子”就远没有“老李是个大胡子”表达的信息完整或准确。

2.2T-S模糊推理

对于双输入、单输出的系统可以用F条件语句:

来叙述。输出量u是一个数值函数f(x1,x2)。

对于1阶ts模型F推理,设第i条规则为Ri,则:

其中表示第i条规则中的两个模糊集合。其中pi,qi,ri都是第i条规则的中的常数,他们共同反映了系统的固有特性。当输入量xi激活m条模糊规则时,最终输出U将由这m条规则的输出ui决定。

3、将模糊的数据清晰化

将模糊值清晰化(反模糊化)一般是用到mamdani模型上的。因为mamdani模型F推理输出后还是一个模糊集合,所以需要清晰化处理(F/D)。但是T-S模型因为命题对应的是一个数值函数,故模糊推理输出之后就已经是清晰的数据了。但是本文为了更好的理解就将其分开了。

计算系统最终输出U的方法(清晰化)一般分为:加权求和与加权平均两种方式。表达式如下:

加权求和

加权平均

其中:wi表示第i条规则在总输出中所占的权重。

计算权重的方式一般也分为:取最小和乘积法两种。表达式如下:

取最小

乘积法

4、使用模糊算法逼近一阶线性定常系统在MATLAB中实现

在MATLAB中提供了模糊算法工具箱,我们可以直接通过MATLAB已经提供的GUI界面进行模糊算法的设计,比较直观。在这里我们设计一个双输入单输出的二维T-S模型的模糊控制器来逼近一个一阶系统。该一阶系统的传递函数为式1。

式1

模糊控制器的两个输入分别是:原始信号和原始信号的一阶微分。使用MATLAB采集G(s)的输入与输出。并使用ANFIS(基于自适应网络的模糊推理系统)对我们的T-S模型进行训练,训练后的表面图如图2。

图2 FUZZY表面图

训练完成后进行仿真验证。结果如图3所示:

图3 Fuzzy逼近一阶线性定常系统

5、在FPGA中实现模糊算法

5.1、电路系统结构设计

FPGA(现场可编程门阵列)FPGA 器件属于专用集成电路中的一种半定制电路,是可编程的逻辑列阵,能够有效的解决原有的器件门电路数较少的问题。FPGA 的基本结构包括可编程输入输出单元,可配置逻辑块,数字时钟管理模块,嵌入式块RAM,布线资源,内嵌专用硬核,底层内嵌功能单元。由于FPGA具有布线资源丰富,可重复编程和集成度高,投资较低的特点,在数字电路设计领域得到了广泛的应用。(来自百度百科)。

在设计之前首先我们要先搞清楚要想实现这个算法都需要哪些模块,如何合理的分配这些模块使得算法具有高效性和准确性。所以根据模糊算法的特点先画出电路结构图,如图4

图4 FPGA电路结构图

“照图施工”后可以通过编译环境查看代码的RTL视图,见图5:

图5a FPGA-RTC视图

图5b FUZZY-FUZZY模块-RTC视图

5.2、模糊算法运算单元概述

笔者采用的是Altera的cyclone IV系列的FPGA使用verilog语言。由 图 可得模糊运算单元由:数据模糊化(gauss、Rout)、推理机(if、Weighted)、清晰化(Weighted)构成。其整个运算过程都采用了以IEEE-754标准的双精度浮点数。计算方面采用了Altera自带的浮点运算IP核,采用流水线的方式调用IP核进行运算。Rout模块代码如下所示(完成代码本文最后附)

//===============I阶模糊推理=============//
module linear(clk_50M,Rst_n,a,b,c,x1,x2,out
);input clk_50M;input Rst_n;input [63:0]a;input [63:0]b;input [63:0]c;input [63:0]x1;input [63:0]x2;output reg [63:0]out;reg [63:0]add_ina;reg [63:0]add_inb;wire [63:0]add_out;reg [63:0]mult_ina;reg [63:0]mult_inb;wire [63:0]mult_out;reg [63:0]mult_out_last;reg [7:0]count;
always@(posedge clk_50M or negedge Rst_n)
if(!Rst_n)count <= 8'd0;
else if(count == 8'd0)beginmult_ina <= a;mult_inb <= x1;count <= count + 8'd1;end
else if(count == 8'd9)beginmult_out_last <= mult_out;//寄存数据mult_ina <= b;mult_inb <= x2;count <= count + 8'd1;end
else if(count == 8'd19)beginadd_ina <= mult_out;add_inb <= mult_out_last;count <= count + 8'd1;end
else if(count == 8'd30)beginadd_ina <= add_out;add_inb <= c;count <= count + 8'd1;end
else if(count == 8'd50)beginout <= add_out;count <= 8'd0;end
else count <= count + 8'd1;
//=============运算单元=================//
ADD add_linear_1 (.aclr ( 1'd0 ),.add_sub ( 1'd1 ),//加法.clock ( clk_50M ),.dataa ( add_ina ),.datab ( add_inb ),.result ( add_out ));MULT MULT_linear_1 (.aclr ( 1'd0 ),.clock ( clk_50M ),.dataa ( mult_ina ),.datab ( mult_inb ),.result ( mult_out ));
endmodule

5.3、测试结果

通过编写testbench来给已经编写好的模块加一个激励然后看输出完成门级仿真。仿真结果如下图6:(由于仿真不支持浮点数的波形显示,所以负半周期显示不出来,但是数据是没问题的)。

图6 门级仿真图

6、结论

模糊控制算法是一种利用模糊数学的基本思想和理论的控制方法,模糊算法并不模糊。

本文是笔者对模糊算法和该算法在硬件电路上实现的一些理解如有纰漏敬请提出,相互交流verilog代码如下(未优化)。

笔者水平有限请多担待。

代码下载:https://download.csdn.net/download/qq_24025329/12012539

PS:CSDN上传积分不能设置,如有需要留下邮箱我发。

T-S型模糊算法简述及FPGA的实现相关推荐

  1. 模糊神经网络应用实例,模糊算法和神经网络

    1.模糊神经网络的基本形式 模糊神经网络有如下三种形式: 1.逻辑模糊神经网络 2.算术模糊神经网络 3.混合模糊神经网络 模糊神经网络就是具有模糊权系数或者输入信号是模糊量的神经网络.上面三种形式的 ...

  2. 模糊算法的工作原理,模糊算法和神经网络

    神经网络算法原理? 神经网络预测学习样本中的驾驶行为特征. 如图显示了某个驾驶场景的行驶路径深度学习训练,通过神经网络可以学习驾驶人的行为,并根据当前获取的环境信息决策行驶轨迹,进而可以控制车辆的转向 ...

  3. 【万字总结】数据结构与算法简述和CS综合,保姆级一文打包

    数据结构与算法简述和CS综述整理.本文非基础的教程,本文会列出大量学习和参考网站.老惯例,一个文章是一个集大成(本文借助了语音输入(PC 版 讯飞输入法)由此加速码字,但仍保持简洁的文风). 数据结构 ...

  4. C/C++程序基础 (九)排序算法简述

    排序算法 算法复杂度 算法简述 插入排序 N2 前方有序,依次将后方无序数据插入前方合适位置. 冒泡排序 N2 前方有序,从后方两两比较,将最小泡冒到前方. 选择排序 N2 前方有序,从后方选择最小的 ...

  5. JavaScript数据结构和算法简述——数组

    为什么先讲数组 数据结构可以简单的被分为线性结构和非线性结构. 线性结构大致包括: 数组(连续存储): 链表(离散存储): 栈(线性结构常见应用,由链表或数组增删和改进功能实现): 队列(线性结构常见 ...

  6. JavaScript数据结构和算法简述——前言

    为什么要使用数据结构和算法(程序=数据结构+算法)         数据结构是对在计算机内存中(有时在磁盘中)的数据的一种安排.包括数组.链表.栈.二叉树.哈希表等.        算法是对这些结构中 ...

  7. 多段扰动共享型乌鸦算法-附代码

    多段扰动共享型乌鸦算法 文章目录 多段扰动共享型乌鸦算法 1.乌鸦搜索算法 2.基于多段扰动的共享型乌鸦算法 2.1 加入共享机制的位置更新方式 2.2 加入扰动策略更新最优藏食位置 4.实验结果 5 ...

  8. 思科新版ccnp中教你如何EIGRP协议DUAL弥散更新算法简述

    思科新版ccnp中教你如何EIGRP协议DUAL弥散更新算法简述弥散更新算法 (Diffusing Update Algorithm),或者称之为扩散更新算法,EIGRP组件之一,为EIGRP提供最佳 ...

  9. 路径规划五种算法简述及对比

    以下是本人在学习路径规划过程中的一些总结,借着机会写了一下,有不妥之处欢迎批评指正,谢谢. 路径规划部分在无人车架构体系当中分属控制或决策部分,如图1,是实现无人化驾驶的关键技术之一.路径规划模块性能 ...

最新文章

  1. PEP8 Python
  2. 如何用RNN生成莎士比亚风格的句子?(文末赠书)
  3. 资源 | 想用Python学机器学习?Google大神替你写好了所有的编程示范代码
  4. 通过CH340G驱动的Nano ATMEAG328P驱动板初步测试
  5. freemark简单事例
  6. 程序员面试题精选100题(07)-翻转句子中单词的顺序[算法]
  7. 使用V8和node轻松profile分析nodejs应用程序
  8. scala中map添加值_如何在Scala Map中反转键和值
  9. win7任务栏谷歌浏览器图标显示异常
  10. CSDN日报20170612 ——《程序员,感觉技术停滞了怎么办?》
  11. 【转摘】图像思维与意识观念的统一——读毕建勋《子非鱼》有感(初稿)[1]
  12. 1-2 用Python爬取猫眼票房网上的电影票房信息
  13. 【C++ 程序】 TVJ Complex Calculator (v 2.2) 复数计算器
  14. 用c语言求五位回文数,C语言求回文数(详解版)
  15. Android Studio 加载arr文件.arr文件
  16. 安卓中Canvas使用方法
  17. yum install pcre pcre-devel 报错
  18. nsq.reader错误connection closed
  19. 嵌入式开发学习之--串口通讯(上)
  20. 字节跳动算法一面2-120201106

热门文章

  1. Java中调用ImageJ,与直接使用ImageJ软件处理所得图片黑白颠倒的问题
  2. 20个公司绝对不会告诉你的潜规则[zz]
  3. Android Clock控件
  4. mysql集群方案PXC_【Mysql】MySQL集群方案之PXC(percona xtradb cluster)
  5. 2020年8月Android手机性能榜,安卓中端手机性能排行榜-2020年8月发布
  6. tkinter简明教程
  7. jdk 配置以及配置出错could not open `C:\Program Files\Java\jre7\lib\amd64\jvm.cfg' 解决方案
  8. 360安全卫士,还有这么多,小兄弟?
  9. 她是徐小平前助理,从雷军、刘强东们的日程表看到了商机
  10. 激活试用60天office2007的步骤