定义输入属性的编程方式MATLAB文件
对于代码生成,您可以使用MATLAB®断言
函数定义的属性主要功能直接在MATLAB文件输入。
如何使用断言MATLAB编码器
使用断言
标准函数调用MATLAB函数指定类,大小和复杂性的主要功能输入。
当指定输入属性使用断言
功能,使用下列方法之一。使用精确的语法提供;不要修改它。
指定任何类
断言(isa (参数”,class_name'))
设置输入参数参数
MATLAB类class_name
。例如,设置类的输入U
一个32位带符号整数,电话:
…断言(isa (U, ' int32 '));…
指定fi类
断言(isfi (参数)维护(isa (参数嵌入式。fi '))
设置输入参数参数MATLAB类fi
(定点设计师)(定点数字对象)。例如,设置类的输入U
来fi
,电话:
…断言(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
。指定一个固定大小的尺寸,设置低,上界的尺寸相同的值。
范围必须是负的。
解决输入的第一维的大小U
3,设置第二维度变量大小的上限2,电话:
断言(所有(大小(U) > = 0 [3]));断言((大小(U) < = 2 [3]));
指定单个维度的规模
断言(大小(参数,k
)= =Nk
);断言(大小(参数,k
)< =Nk
);断言(大小(参数,k
)<Nk
);
同时您可以指定单个维度和维度。您还可以指定单个维度,而不是同时指定所有维度。以下规则适用于:
您必须指定至少一次的每个维度的大小。
最后一个维度规范优先于早些时候规范。
设置上限尺寸的大小k
的输入参数参数
。设置上限输入的第一维的大小U
3,电话:
断言(大小(U, 1) < = 3)
解决二维输入的大小U
2,电话:
断言(大小(U, 2) = = 2)
指定的输入
断言(伊斯雷尔(参数))
指定输入参数参数
是真实的。指定输入U
是真实的,叫:
…断言(伊斯雷尔(U));…
指定复杂的输入
以色列声称(~ (参数))
指定输入参数参数
是复杂的。指定输入U
是复杂的,电话:
…断言(~伊斯雷尔(U));…
指定numerictype定点输入
断言(isequal (numerictype (fiparam),T))
设置numerictype
的属性fi
输入参数fiparam
到numerictype
(定点设计师)对象T
。例如,指定numerictype
财产的定点输入U
作为一个签名numerictype
对象T
32位字长和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
输入参数fiparam
到fimath
(定点设计师)对象F
。例如,指定fimath
财产的定点输入U
所以它浸透在整数溢出,使用以下代码:
% # codegen…%定义fimath对象。F = fimath (“OverflowMode”、“饱和”);%设置fimath属性输入U到F .断言(isequal (fimath (U), F));…
fimath
属性的使用断言
,codegen
使用MATLAB默认fimath
价值。
指定多个属性的输入
维护(function1(参数个数)& &function2(参数个数)& &function3(参数个数)& &……)
指定了类、大小和复杂性的一个或多个输入使用单一断言
函数调用。例如,下面的代码指定输入U
3×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,“细胞”));…
您还可以指定单元阵列的大小和细胞数组元素的属性。您指定的元素的数量决定了单元阵列是否同构或异构。看到代码生成细胞阵列。
如果您指定第一个元素的属性,单元阵列均匀。例如,下面的代码指定C
1 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 '));