主要内容

使用Matlab编码器生成模糊系统的代码

您可以生成使用MATLAB®Coder™评估模糊推理系统的代码。有关生成代码的更多信息,请参阅代码生成(MATLAB编码器)

要生成评估模糊系统的代码,必须首先创建模糊推理系统(FIS)。有关更多信息,请参阅在命令行构建模糊系统使用模糊逻辑设计师构建模糊系统

虽然此示例为Type-1 Mamdani模糊推理系统生成代码,但工作流也适用于Sugeno和Type-2模糊系统。

使用MATLAB编码器生成代码不支持模糊的FIS对象(金宝appMamfis.Sugfis.Mamfistype2.sugfistype2.)。要生成评估模糊系统的代码,必须使用模糊推理系统对象将模糊推理系统对象转换为均匀的结构getfiscodegenerationdata.功能。

将FIS数据嵌入生成的代码中

您可以在生成的代码中嵌入模糊推理系统的数据。如果您不想在编译后更改FIS数据,请使用此选项。

首先,创建模糊系统,或从a中加载模糊系统.fis.文件。对于此示例,请加载模糊系统Tipper.fis.

fisobject = readfis(“tipper.fis”);

要使用此FIS进行代码生成,将其转换为均匀的结构。

fis = getfiscodegenerationdata(fisobject);

默认,getfiscodegenerationdata.假设FIS对象是类型1系统。要为类型-2系统生成代码,您必须指示系统类型使用getFiscodegenerationData(Fisobject,“Type2”)

创建用于评估模糊系统的功能FIS.对于给定的输入矢量X。在此函数中,您可以指定选项evalfis.使用evalfisOptions.

功能Y = evaluateFIS1(FIS,X)%#codegen.opt = evalfisOptions('numsamplepoints',51);Y = EVALFIS(FIS,X,OPT);结尾

生成代码评估FIS1.,指明那个FIS.输入参数是常量。您可以为构建指定不同的目标,例如静态库,可执行文件或MEX文件。对于此示例,生成MEX文件。

Codegen('评估FIS1''-args',{coder.constant(fis),[0 0]},'-config:mex'
代码成功。

要验证MEX文件的执行:

  1. 评估一个或多个输入值的MEX文件。调用MEX文件时,请指定在编译时使用的相同的FIS结构。

  2. 评估使用相同输入值的原始FISevalfis.。在使用时进行评估时evalfis.,使用相同的均匀的FIS结构。

  3. 比较评估结果。

MexOutput1 = EvaluateFIS1_MEX(FIS,[7 9])
MexOutput1 = 21.0327.
opt = evalfisOptions('numsamplepoints',51);evalfisOutput = evalfis(FIS,[7 9],选择)
evalfisoutput = 21.0327.

MEX文件输出匹配evalfis.输出。

或者,您可以通过在代码生成时间从文件读取FIS数据来嵌入生成的代码中的FIS数据。指定用于评估给定输入向量X的模糊系统的功能。在此函数中,从文件中读取FIS数据Tipper.fis.

功能y = equatefis2(x)%#codegen.fis = getfiscodegenerationData('tipper.fis');opt = evalfisOptions('numsamplepoints',51);Y = EVALFIS(FIS,X,OPT);结尾

生成代码评估FIS2.

Codegen('评估FIS2''-args',{[0 0]},'-config:mex'
代码成功。

使用相同的输入值验证MEX文件的执行X。在这种情况下,您不必指定在编译时使用的原始FIS结构。

MexOutput2 = evaluateFIS2_MEX([7 9])
MexOutput2 = 21.0327.
evalfisoutput.
evalfisoutput = 21.0327.

生成用于在运行时加载FIS数据的代码

您可以生成用于评估从A读取的FIS的代码.fis.在运行时指定的文件。在这种情况下,FIS数据不会嵌入生成的代码中。指定用于评估指定文件中定义的模糊系统的函数文件名对于给定的输入矢量X

功能y = evaluatefis3(文件名,x)%#codegen.fis = getfiscodegenerationData(文件名);opt = evalfisOptions('numsamplepoints',51);Y = EVALFIS(FIS,X,OPT);结尾

定义此功能的输入数据类型。

filename = coder.newtype('char',[1 inf],[false true]);x = coder.newtype('双倍的',[1 inf],[false true]);

生成代码评估FIS3.

Codegen('equatefis3''-args',{filename,x},'-config:mex'
代码成功。

使用相同的输入值验证MEX文件的执行X。在这种情况下,您可以指定的名称.fis.文件。

mexoutput3 = evaluateFIS3_MEX('tipper.fis',[7 9])
MexOutput3 = 21.0327.
evalfisoutput.
evalfisoutput = 21.0327.

每次跑步评估FIS3.,它从文件中重新加载模糊系统。为了计算效率,您可以创建一个只在指定新文件名时加载FIS的函数。

功能y = evaluatefis4(文件名,x)%#codegen.%#内部的执着的Fisname FIS.如果isempty(fisname)[fisname,fis] = loadfis(文件名);eleesif.〜strcmp(fisname,filename)[fisname,fis] = loadfis(文件名);结尾opt = evalfisOptions('numsamplepoints',51);Y = EVALFIS(FIS,X,OPT);结尾功能[fisname,fis] = loadfis(filename)fisname = filename;fis = getfiscodegenerationdata(fisname);结尾

生成代码评估FIS4.。此函数的输入数据类型与其相同评估FIS3.

Codegen('评估FIS4''-args',{filename,x},'-config:mex'
代码成功。

使用相同的输入值文件名验证MEX文件的执行。

mexoutput4 = evaluateFIS4_MEX('tipper.fis',[7 9])
MexOutput4 = 21.0327.
evalfisoutput.
evalfisoutput = 21.0327.

为单精度数据生成代码

前面的示例生成了双重精度数据的代码。要生成单精度数据的代码,请指定输入值的数据类型单身的。例如,生成代码评估FIS2.使用单精度数据。

Codegen('评估FIS2''-args',{单([0 0])},'-config:mex'
代码成功。

验证MEX文件执行,通过单精度输入值。

MexOutputSingle = evaluateFIS2_MEX(单([7 9]))
mexoutputsingle =单身的21.0327
evalfisoutput.
evalfisoutput = 21.0327.

也可以看看

|

相关话题