构造定点数值对象 -凯发官方首页
构造定点数值对象
说明
要将定点数据类型赋给数字或变量,请使用 fi
构造函数创建一个 fi
对象。您可以在构造函数中或通过使用 和 对象来指定数值属性和数学规则。
创建对象
语法
描述
函数返回一个不带值的有符号 a
= fifi
对象,其字长为 16 位,小数长度为 15 位。
返回一个 a
= fi(v
,s
,w
,slopeadjustmentfactor
,fixedexponent
,bias
)fi
对象,其值为 v
,符号性为 s
,并具有 slopeadjustmentfactor
、fixedexponent
和 bias
参数。
返回一个 a
= fi(___,name,value
)fi
对象,其属性值由一个或多个名称-值对组参数指定。
输入参数
v
— 值
标量 | 向量 | 矩阵 | 多维数组
fi
对象的值,指定为标量、向量、矩阵或多维数组。
返回的 fi
对象的值是量化为 fi
构造函数中指定的数据类型的输入 v
的值。当输入 v
是非双精度并且您没有指定字长或小数长度时,返回的 fi
对象保留输入的数值类型。有关示例,请参阅基于非双精度值创建 fi 对象。
仅当您完全指定 fi
对象的数值类型时,才能将非有限值 -inf
、inf
和 nan
指定为值。当 fi
指定为定点数值类型时,
nan
映射到0
。当
fi
对象的'overflowaction'
属性设置为'wrap'
时,-inf
和inf
映射到0
。当
fi
对象的'overflowaction'
属性设置为'saturate'
时,inf
映射到最大的可表示值,而-inf
映射到最小的可表示值。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| fi
s
— 符号性
true
或 1
(默认) | false
或 0
fi
对象的符号性,指定为数值或逻辑值 1
(true
) 或 0
(false
)。值 1
(true
) 表示有符号数据类型。值 0
(false
) 表示无符号数据类型。
数据类型: logical
w
— 以位为单位的字长
16 (默认) | 正整数标量
fi
对象的字长,以位为单位,指定为正整数标量。
fi
对象的字长限制为 65535 位。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
f
— 以位为单位的小数长度
15 (默认) | 标量整数
fi
对象的存储整数值的小数长度,以位为单位,指定为整数标量。
如果不指定小数长度,则对于指定的值、字长和符号性,fi
对象会在避免出现溢出的情况下自动使用可提供最佳精度的小数长度。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
slope
— 斜率
正标量
fi
对象的定标的斜率,指定为正标量。
以下方程表示斜率偏置定标数的真实值。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
bias
— 偏置
标量
fi
对象的定标的偏置,指定为标量。
以下方程表示斜率偏置定标数的真实值。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
slopeadjustmentfactor
— 斜率调整因子
大于或等于 1
且小于 2
的标量
fi
对象的斜率调整因子,指定为大于或等于 1
且小于 2
的标量。
以下方程说明斜率、固定指数和斜率调整因子之间的关系。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
fixedexponent
— 固定指数
标量
fi
对象的固定指数,指定为标量。
以下方程说明斜率、固定指数和斜率调整因子之间的关系。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
t
— 数值类型属性
numerictype
对象
fi
对象的数值类型属性,指定为 对象。
f
— 定点数学属性
fimath
对象
fi
对象的定点数学属性,指定为 对象。
属性
fi
对象有三种类型的属性:
您可以在创建 fi
对象时设置这些属性。使用数据属性可访问 fi
对象中的数据。根据传递性,fimath
属性和 numerictype
属性也是 fi
对象的属性。fimath
属性可确定对 fi
对象执行定点算术运算的规则。numerictype
对象包含定点对象的所有数据类型和定标属性。
示例
创建 fi
对象
使用默认构造函数创建一个 fi
对象。该构造函数返回一个不带值的有符号 fi
对象,其字长为 16 位,小数长度为 15 位。
a = fi
a = [] datatypemode: fixed-point: binary point scaling signedness: signed wordlength: 16 fractionlength: 15
创建一个有符号 fi
对象,其值为 pi
,字长为 16 位,具有最佳精度小数长度。小数长度会自动设置为在不溢出的情况下尽可能获得最佳精度。
a = fi(pi)
a = 3.1416 datatypemode: fixed-point: binary point scaling signedness: signed wordlength: 16 fractionlength: 13
创建一个值为 pi
的无符号 fi
对象。当您仅指定 fi
对象的值和符号性时,该对象具有最佳精度小数长度,其字长默认为 16 位。
a = fi(pi,0)
a = 3.1416 datatypemode: fixed-point: binary point scaling signedness: unsigned wordlength: 16 fractionlength: 14
创建一个有符号 fi
对象,其字长为 8 位,具有最佳精度小数长度。在此示例中,a
的小数长度为 5
,因为当数据类型有符号时,值的整数部分需要三位来表示。
a = fi(pi,1,8)
a = 3.1562 datatypemode: fixed-point: binary point scaling signedness: signed wordlength: 8 fractionlength: 5
如果 fi
对象无符号,则只需两位来表示整数部分,剩下六位小数位。
b = fi(pi,0,8)
b = 3.1406 datatypemode: fixed-point: binary point scaling signedness: unsigned wordlength: 8 fractionlength: 6
创建一个有符号 fi
对象,其值为 pi
,字长为 8 位,小数长度为 3 位。
a = fi(pi,1,8,3)
a = 3.1250 datatypemode: fixed-point: binary point scaling signedness: signed wordlength: 8 fractionlength: 3
创建一个 fi
对象数组,其字长为 16 位,小数长度为 12 位。
a = fi((magic(3)/10),1,16,12)
a = 0.8000 0.1001 0.6001 0.3000 0.5000 0.7000 0.3999 0.8999 0.2000 datatypemode: fixed-point: binary point scaling signedness: signed wordlength: 16 fractionlength: 12
创建具有斜率和偏置定标的 fi
对象
斜率和偏置定标数的真实值由下式表示:
.
要创建具有斜率和偏置定标的 fi
对象,请在构造函数中的字长后包含 slope
和 bias
参数。例如,创建一个斜率为 3
、偏置为 2
的 fi
对象。
a = fi(pi,1,16,3,2)
a = 2 datatypemode: fixed-point: slope and bias scaling signedness: signed wordlength: 16 slope: 3 bias: 2
fi
对象 a
的 datatypemode
属性是 fixed-point: slope and bias scaling
。
您也可以指定斜率调整因子和固定指数,其中
.
例如,创建一个 fi
对象,其斜率调整因子为 1.5
,固定指数为 1
,偏置为 2
。
a = fi(pi,1,16,1.5,1,2)
a = 2 datatypemode: fixed-point: slope and bias scaling signedness: signed wordlength: 16 slope: 3 bias: 2
基于 numerictype
对象创建 fi
对象
numerictype
对象包含 fi
对象的所有数据类型信息。numerictype
属性也是 fi
对象的属性。
通过在 fi
构造函数中指定 numerictype
对象,可以创建使用现有 numerictype
对象的所有属性的 fi
对象。
t = numerictype(0,24,16)
t = datatypemode: fixed-point: binary point scaling signedness: unsigned wordlength: 24 fractionlength: 16
a = fi(pi,t)
a = 3.1416 datatypemode: fixed-point: binary point scaling signedness: unsigned wordlength: 24 fractionlength: 16
使用相关联的 fimath
创建 fi
对象
fi
对象的算术属性由关联到该 fi
对象的 fimath
对象定义。
创建一个 fimath
对象,并指定 overflowaction
、roundingmethod
和 productmode
属性。
f = fimath('overflowaction','wrap',... 'roundingmethod','floor',... 'productmode','keepmsb')
f = roundingmethod: floor overflowaction: wrap productmode: keepmsb productwordlength: 32 summode: fullprecision
创建一个 fi
对象,并在构造函数中指定 fimath
对象 f
。
a = fi(pi,f)
a = 3.1415 datatypemode: fixed-point: binary point scaling signedness: signed wordlength: 16 fractionlength: 13 roundingmethod: floor overflowaction: wrap productmode: keepmsb productwordlength: 32 summode: fullprecision
使用 removefimath
函数删除关联的 fimath
对象,并将数学设置还原为其默认值。
a = removefimath(a)
a = 3.1415 datatypemode: fixed-point: binary point scaling signedness: signed wordlength: 16 fractionlength: 13
基于非双精度值创建 fi
对象
当 fi
对象的输入参数 v
不是双精度值并且您没有指定字长或小数长度属性时,返回的 fi
对象保留输入的数值类型。
基于内置整数创建 fi
对象
当输入是内置整数时,定点属性与整数类型的属性匹配。
v1 = uint32(5); a1 = fi(v1)
a1 = 5 datatypemode: fixed-point: binary point scaling signedness: unsigned wordlength: 32 fractionlength: 0
v2 = int8(5); a2 = fi(v2)
a2 = 5 datatypemode: fixed-point: binary point scaling signedness: signed wordlength: 8 fractionlength: 0
基于 fi
对象创建 fi
对象
当输入值是 fi
对象时,输出使用与输入 fi
对象相同的字长、小数长度和符号性。
v = fi(pi,1,24,12); a = fi(v)
a = 3.1416 datatypemode: fixed-point: binary point scaling signedness: signed wordlength: 24 fractionlength: 12
基于逻辑值创建 fi
对象
当输入值为逻辑值时,输出 fi
对象的 datatypemode
属性为 boolean
。
v = true; a = fi(v)
a = 1 datatypemode: boolean
基于单精度值创建 fi
对象
当输入值为单精度值时,输出的 datatypemode
属性为 single
。
v = single(pi); a = fi(v)
a = 3.1416 datatypemode: single
在 fi
对象构造函数中指定舍入和溢出模式
您可以在创建 fi
对象的过程中设置 fimath
属性,如舍入和溢出模式。
a = fi(pi,'roundingmethod','floor',... 'overflowaction','wrap')
a = 3.1415 datatypemode: fixed-point: binary point scaling signedness: signed wordlength: 16 fractionlength: 13 roundingmethod: floor overflowaction: wrap productmode: fullprecision summode: fullprecision
roundingmethod
和 overflowaction
属性是 fimath
对象的属性。在 fi
构造函数中指定这些属性会将局部 fimath
对象与 fi
对象相关联。
使用 removefimath
函数删除局部 fimath
,并将数学属性设置回其默认值。
a = removefimath(a)
a = 3.1415 datatypemode: fixed-point: binary point scaling signedness: signed wordlength: 16 fractionlength: 13
对 fi
对象设置数据类型覆盖
此示例说明如何使用 fipref
对象的 datatypeoverride
设置用双精度、单精度或定标双精度来覆盖 fi
对象。fipref
对象定义所有 fi
对象的显示和记录属性。
保存当前 fipref
设置,以便以后还原。
fp = fipref; initialdto = fp.datatypeoverride;
使用默认设置和原始 fipref
设置创建一个 fi
对象。
a = fi(pi)
a = 3.1416 datatypemode: fixed-point: binary point scaling signedness: signed wordlength: 16 fractionlength: 13
使用 fipref
对象将数据类型覆盖设置为双精度。
fipref('datatypeoverride','truedoubles')
ans = numberdisplay: 'realworldvalue' numerictypedisplay: 'full' fimathdisplay: 'full' loggingmode: 'off' datatypeoverride: 'truedoubles' datatypeoverrideappliesto: 'allnumerictypes'
创建一个新的 fi
对象,而不指定其 datatypeoverride
属性,以便它使用通过 fipref
指定的数据类型覆盖设置。
a = fi(pi)
a = 3.1416 datatypemode: double
创建另一个 fi
对象,并将其 datatypeoverride
设置设为 off
,以便它忽略 fipref
对象的数据类型覆盖设置。
b = fi(pi,'datatypeoverride','off')
b = 3.1416 datatypemode: fixed-point: binary point scaling signedness: signed wordlength: 16 fractionlength: 13
还原示例开始时保存的 fipref
设置。
fp.datatypeoverride = initialdto;
fi
针对 -inf
、inf
和 nan
的行为
要将非数值 -inf
、inf
和 nan
用作 fi
表示的定点值,必须完全指定定点对象的数值类型。这些值不支持自动最佳精度定标。
溢出时饱和
当 fi
对象的数值类型指定为溢出时饱和时,则 inf
映射到指定数值类型的最大可表示值,而 -inf
映射到最小可表示值。nan
映射到零。
x = [-inf nan inf]; a = fi(x,1,8,0,'overflowaction','saturate') b = fi(x,0,8,0,'overflowaction','saturate')
a = -128 0 127 datatypemode: fixed-point: binary point scaling signedness: signed wordlength: 8 fractionlength: 0 roundingmethod: nearest overflowaction: saturate productmode: fullprecision summode: fullprecision b = 0 0 255 datatypemode: fixed-point: binary point scaling signedness: unsigned wordlength: 8 fractionlength: 0 roundingmethod: nearest overflowaction: saturate productmode: fullprecision summode: fullprecision
溢出时绕回
当 fi
对象的数值类型指定为溢出时绕回时,则 -inf
、inf
和 nan
映射到零。
x = [-inf nan inf]; a = fi(x,1,8,0,'overflowaction','wrap') b = fi(x,0,8,0,'overflowaction','wrap')
a = 0 0 0 datatypemode: fixed-point: binary point scaling signedness: signed wordlength: 8 fractionlength: 0 roundingmethod: nearest overflowaction: wrap productmode: fullprecision summode: fullprecision b = 0 0 0 datatypemode: fixed-point: binary point scaling signedness: unsigned wordlength: 8 fractionlength: 0 roundingmethod: nearest overflowaction: wrap productmode: fullprecision summode: fullprecision
提示
使用 对象控制
fi
对象的显示、记录和数据类型覆盖预设项。
扩展功能
c/c 代码生成
使用 matlab® coder™ 生成 c 代码和 c 代码。
使用说明和限制:
不支持没有任何输入参数的默认构造函数语法。
如果没有完全指定
numerictype
,则fi
的输入必须为常量、fi
、单精度值或内置整数值。如果输入是内置双精度值,它必须为常量。这种限制允许fi
根据输入的已知数据类型自动定标其小数长度。对于代码生成,所有与数据类型相关的属性都必须为常量。
非定点 simulink® 必须有输入
numerictype
对象信息。
hdl 代码生成
使用 hdl coder™ 为 fpga 和 asic 设计生成 verilog 代码和 vhdl 代码。
版本历史记录
在 r2006a 之前推出r2021a: 不支持 fi
、fimath
和 numerictype
对象的不精确的属性名称
在以前的版本中,对象 fi
、fimath
和 numerictype
的不精确的属性名称会导致警告。在 r2021a 中,不再支持不精确的属性名称。请改用精确的属性名称。
r2020b: fi
针对 -inf
、inf
和 nan
的默认行为变化
在以前的版本中,当传递非有限输入值 -inf
、inf
或 nan
时,fi
会返回错误。fi
现在处理这些输入的方式与 matlab® 和 simulink 处理整数数据类型的 -inf
、inf
和 nan
的方法相同。
当 fi
指定为定点数值类型时,
nan
映射到0
。当
fi
对象的'overflowaction'
属性设置为'wrap'
时,-inf
和inf
映射到0
。当
fi
对象的'overflowaction'
属性设置为'saturate'
时,inf
映射到最大的可表示值,而-inf
映射到最小的可表示值。
有关此行为的示例,请参阅fi 针对 -inf、inf 和 nan 的行为。
注意
-inf
、inf
或 nan
的输入值不支持最佳精度定标。
另请参阅
| |
主题
打开示例
您曾对此示例进行过修改。是否要打开带有您的编辑的示例?
matlab 命令
您点击的链接对应于以下 matlab 命令:
请在 matlab 命令行窗口中直接输入以执行命令。web 浏览器不支持 matlab 命令。
you can also select a web site from the following list:
how to get best site performance
select the china site (in chinese or english) for best site performance. other mathworks country sites are not optimized for visits from your location.