主要内容

定义输入属性的编程方式MATLAB文件

对于代码生成,您可以使用MATLAB®断言函数定义的属性主要功能直接在MATLAB文件输入。

如何使用断言MATLAB编码器

使用断言标准函数调用MATLAB函数指定类,大小和复杂性的主要功能输入。

当指定输入属性使用断言功能,使用下列方法之一。使用精确的语法提供;不要修改它。

指定任何类

断言(isa (参数”,class_name'))

设置输入参数参数MATLAB类class_name。例如,设置类的输入U一个32位带符号整数,电话:

…断言(isa (U, ' int32 '));…

指定fi类

断言(isfi (参数)维护(isa (参数嵌入式。fi '))

设置输入参数参数MATLAB类fi(定点设计师)(定点数字对象)。例如,设置类的输入Ufi,电话:

…断言(isfi (U));…

…断言(isa (U, ' embedded.fi '));…

您必须指定fi类和numerictype(定点设计师)。看到指定numerictype定点输入。你也可以设置fimath(定点设计师)属性,看到指定fimath定点输入。如果你不设置fimath(定点设计师)属性,codegen使用MATLAB默认fimath价值。

指定结构类

断言(isstruct (参数)维护(isa (参数“结构”))

设置输入参数参数MATLAB类结构体(结构)。例如,设置类的输入U到一个结构体,电话:

…断言(isstruct (U));…

…断言(isa (U,“结构”));…

如果你设置类的一个输入参数结构体,您必须指定属性的所有字段的顺序出现在结构的定义。

指定单元格数组类

断言(iscell (参数)维护(isa (参数“细胞”))

设置输入参数参数MATLAB类细胞(单元阵列)。例如,设置类的输入C到一个细胞,电话:

…断言(iscell (C));…

…断言(isa (C,“细胞”));…

指定单元格数组元素的属性,看看指定属性的细胞阵列

指定固定大小

断言(所有(大小(参数)= =会变暗)))

设置输入参数参数的大小尺寸会变暗指定。例如,设置输入的大小U一个3×2矩阵,电话:

…断言(所有(大小(U) = = 2 [3]));…

指定标量大小

断言(isscalar (参数)维护(所有(大小(参数)= = [1]))

设置输入参数的大小参数标量。设置输入的大小U标量,电话:

…断言(isscalar (U));…
…断言(所有(大小(U) = = [1]));…

为适应输入指定上界

断言(所有(大小(参数)< = (N0 N1…)));断言(所有(大小(参数)< [N0 N1…]));

设置每个维度的上限大小的输入参数参数。设置上限大小的输入U小于或等于3×2矩阵,电话:

断言((大小(U) < = 2 [3]));

请注意

您还可以指定上界为适应输入使用coder.varsize

指定输入固定和适应维度

断言(所有(大小(参数)> = (M0 M1…)));断言(所有(大小(参数)< = (N0 N1…)));

当你使用断言(所有(大小(参数)> = (M0 M1…)))指定每个维度的下界大小的一个输入参数:

  • 您还必须指定一个上限大小为每个维度的输入参数。

  • 对于每一个尺寸,k,下界必须小于或等于上限吗Nk

  • 指定一个固定大小的尺寸,设置低,上界的尺寸相同的值。

  • 范围必须是负的。

解决输入的第一维的大小U3,设置第二维度变量大小的上限2,电话:

断言(所有(大小(U) > = 0 [3]));断言((大小(U) < = 2 [3]));

指定单个维度的规模

断言(大小(参数,k)= =Nk);断言(大小(参数,k)< =Nk);断言(大小(参数,k)<Nk);

同时您可以指定单个维度和维度。您还可以指定单个维度,而不是同时指定所有维度。以下规则适用于:

  • 您必须指定至少一次的每个维度的大小。

  • 最后一个维度规范优先于早些时候规范。

设置上限尺寸的大小k的输入参数参数。设置上限输入的第一维的大小U3,电话:

断言(大小(U, 1) < = 3)

解决二维输入的大小U2,电话:

断言(大小(U, 2) = = 2)

指定的输入

断言(伊斯雷尔(参数))

指定输入参数参数是真实的。指定输入U是真实的,叫:

…断言(伊斯雷尔(U));…

指定复杂的输入

以色列声称(~ (参数))

指定输入参数参数是复杂的。指定输入U是复杂的,电话:

…断言(~伊斯雷尔(U));…

指定numerictype定点输入

断言(isequal (numerictype (fiparam),T))

设置numerictype的属性fi输入参数fiparamnumerictype(定点设计师)对象T。例如,指定numerictype财产的定点输入U作为一个签名numerictype对象T32位字长和30-bit部分长度,使用以下代码:

% # codegen…%定义numerictype对象。30 T = numerictype(32岁);%设置numerictype属性输入U到T断言(isequal (numerictype (U), T));…

指定numerictype为一个变量并不会自动指定变量是固定的点。您必须指定fi类和numerictype

指定fimath定点输入

断言(isequal (fimath (fiparam),F))

设置fimath的属性fi输入参数fiparamfimath(定点设计师)对象F。例如,指定fimath财产的定点输入U所以它浸透在整数溢出,使用以下代码:

% # codegen…%定义fimath对象。F = fimath (“OverflowMode”、“饱和”);%设置fimath属性输入U到F .断言(isequal (fimath (U), F));…
如果你不指定fimath属性的使用断言,codegen使用MATLAB默认fimath价值。

指定多个属性的输入

维护(function1(参数个数)& &function2(参数个数)& &function3(参数个数)& &……)

指定了类、大小和复杂性的一个或多个输入使用单一断言函数调用。例如,下面的代码指定输入U3×3的矩阵,是一个双,复杂,和输入V是一个16位的无符号整数:

% # codegen…断言(isa (U,“双”)& & ~伊斯雷尔(U) & &(大小(U) = = 3 [3]) & & isa (V, ' uint16 '));…

使用规则维护功能

当使用断言函数来指定主函数输入的属性,遵循以下规则:

  • 调用断言函数的主要功能,在控制流等操作如果语句或子例程调用。

  • 不叫断言函数内部条件结构,如如果,,,开关语句。

  • 对于一个定点的输入,您必须指定的fi类和numerictype(定点设计师)。看到指定numerictype定点输入。你也可以设置fimath(定点设计师)属性。看到指定fimath定点输入。如果你不设置fimath(定点设计师)属性,codegen使用MATLAB默认fimath价值。

  • 如果你设置类的一个输入参数结构体,您必须指定类、大小和复杂性的所有字段的顺序出现在结构的定义。

  • 当你使用断言(所有(大小(参数)> = (M0 M1…)))指定每个维度的下界大小的一个输入参数:

    • 您还必须指定一个上限大小为每个维度的输入参数。

    • 对于每一个尺寸,k,下界必须小于或等于上限吗Nk

    • 指定一个固定大小的尺寸,设置低,上界的尺寸相同的值。

    • 范围必须是负的。

  • 如果您指定个人维度,应用以下规则:

    • 您必须指定至少一次的每个维度的大小。

    • 最后一个维度规范优先于早些时候规范。

指定一般性质的主要输入

下面的代码片段,主要的MATLAB函数mcspecgram有两个输入:pennywhistle赢得。这些输入的代码指定以下属性。

输入 财产 价值
pennywhistle int16
大小 220500 - 1的向量
复杂性 真正的(默认)
赢得
大小 1024 - 1的向量
复杂性 真正的(默认)

% # codegen函数y = mcspecgram (pennywhistle,赢得)nx = 220500;nfft = 1024;断言(isa (pennywhistle int16));断言(所有(大小(pennywhistle) = = [nx 1]));断言(isa(赢,“双”));断言(所有(大小(赢得)= = [nfft 1]));…

或者,你可以把属性规范内一个或多个输入断言命令:

% # codegen函数y = mcspecgram (pennywhistle,赢得)nx = 220500;nfft = 1024;断言(isa (pennywhistle int16) & &所有(大小(pennywhistle) = = [nx 1]));断言(isa(赢,“双”)& &(大小(赢得)= = [nfft 1]));…

指定的属性主要定点输入

指定定点输入,您必须安装定点设计师™软件。

在下面的例子中,主要的MATLAB函数mcsqrtfi需要一个定点输入x。这个输入的代码指定以下属性。

财产 价值
fi
numerictype numerictype对象T中指定的主要功能
fimath fimath对象F中指定的主要功能
大小 标量
复杂性 真正的(默认)

函数y = mcsqrtfi (x) % # codegen T = numerictype(32岁的“字”“FractionLength”, 23岁……“签署”,真正的);F = fimath (‘SumMode’,‘SpecifyPrecision’,……“SumWordLength”, 32岁的“SumFractionLength”, 23岁……“ProductMode”、“SpecifyPrecision’,……“ProductWordLength”, 32岁的“ProductFractionLength”, 23);断言(isfi (x));断言(isequal (numerictype (x), T));断言(isequal (fimath (x), F));y =√x);

您必须指定fi类和numerictype

指定属性的细胞阵列

指定类细胞(单元阵列),使用下面的语法:

断言(iscell (参数)维护(isa (参数“细胞”))

例如,设置类的输入C细胞使用:

…断言(iscell (C));…

…断言(isa (C,“细胞”));…

您还可以指定单元阵列的大小和细胞数组元素的属性。您指定的元素的数量决定了单元阵列是否同构或异构。看到代码生成细胞阵列

如果您指定第一个元素的属性,单元阵列均匀。例如,下面的代码指定C1 x3均匀单元阵列的元素是1 x1的两倍。

…断言(isa (C,“细胞”));断言(所有(大小(C) = = 1 [3]));断言(isa (C{1},“双”));…

如果您指定第一个元素的属性,而且还分配一个单元阵列结构类型名称,异构单元阵列。每个元素都有第一个元素的属性。例如,下面的代码指定C是1 x3异构单元阵列。每一个元素都是1 x1翻倍。

…断言(isa (C,“细胞”));断言(所有(大小(C) = = 1 [3]));断言(isa (C{1},“双”));编码器。cstructname (C,“名字”);…

如果你指定每个元素的属性,单元阵列是异构的。例如,下面的代码指定了一个1 x2异构单元格数组的第一个元素是1 x1 char和他的第二个元素是1 x3的两倍。

…断言(isa (C,“细胞”));断言(所有(大小(C) = = [1 - 2]));断言(isa (C {1}, char));断言(所有(大小(C {2}) = = 1 [3]));断言(isa (C{2},“双”));…

如果指定多个元素,你就不能指定细胞数组大小是可变的,即使所有元素具有相同的属性。例如,下面的代码指定了一个适应单元阵列。因为代码指定了第一和第二元素的属性,代码生成失败。

…断言(isa (C,“细胞”));断言((大小(C) < = [1 - 2]));断言(isa (C{1},“双”));断言(isa (C{2},“双”));…

在前面的例子中,如果指定第一个元素,您可以指定单元阵列是适应。例如:

…断言(isa (C,“细胞”));断言((大小(C) < = [1 - 2]));断言(isa (C{1},“双”));…

指定类和标量结构的大小

假设您定义年代如下标量MATLAB结构:

S =结构(“r”、双(1),“我”,int8 (4));
下面的代码指定函数输入的属性年代和它的字段:
函数y = fcn (S) % # codegen %指定输入的类结构。断言(isstruct (S));%指定字段的类和大小r和我在您定义的顺序。断言(isa (S.r '双层'));受到打击还得追溯到断言(isa (, ' int8 ');…

在大多数情况下,当你不显式地指定属性的值,MATLAB编码器™使用defaults-except结构字段。名称字段在一个结构的唯一方法是设置至少一个属性。至少,您必须指定类的结构。

指定类和结构数组的大小

对于结构数组,您必须选择一个数组的代表元素用于指定每个字段的属性。例如,假设您已经定义年代以下1×2批MATLAB的结构:

S =结构(‘r’,{双(1)双(2)},‘我’,{int8 (4), int8 (5)});

下面的代码指定每个字段的类和规模结构的输入年代通过使用数组的第一个元素:

% # codegen函数y = fcn (S) %指定输入年代的类结构。断言(isstruct (S));%指定字段的大小r和我基于数组的第一个元素。断言(所有(大小(S) = = [1 - 2]));断言(isa (S (1) r '双层'));断言(isa (S(1)我,' int8 '));
名称字段在一个结构的唯一方法是设置至少一个属性。至少,您必须指定类的所有字段。