T-S型模糊算法简述及FPGA的实现

目录

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)
	begin
	mult_ina <= a;
	mult_inb <= x1;
	count <= count + 8'd1;
	end
else if(count == 8'd9)
	begin
	mult_out_last <= mult_out;//寄存数据
	mult_ina <= b;
	mult_inb <= x2;
	count <= count + 8'd1;
	end
else if(count == 8'd19)
	begin
	add_ina <= mult_out;
	add_inb <= mult_out_last;
	count <= count + 8'd1;
	end
else if(count == 8'd30)
	begin
	add_ina <= add_out;
	add_inb <= c;
	count <= count + 8'd1;
	end
else if(count == 8'd50)
	begin
	out <= 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上传积分不能设置,如有需要留下邮箱我发。

  • 10
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值