quantizer
创建 quantizer 对象
说明
quantizer 对象描述用于量化的数据类型属性。创建 quantizer 对象后,使用 quantize 来量化双精度数据。您可以使用 quantizer 对象仿真具有任意字长和指数长度的自定义浮点数据类型。
创建对象
语法
描述
使用名称-值参量设置命名属性。您可以指定多个名称-值参量。用单引号将每个属性名称引起来。q = quantizer(Name,Value)
使用属性值设置属性。属性值是唯一的;您可以通过在命令中仅指定属性值来设置属性名称。当两个值冲突时,q = quantizer(Value1,Value2)quantizer 会设置列表中的最后一个属性值。
用结构体 q = quantizer(s)s 中包含的值设置在每个字段名称中命名的属性。
将字符向量元胞数组 q = quantizer(pn,pv)pn 中指定的命名属性设置为元胞数组 pv 中的对应值。
创建 quantizer 对象时,可以使用名称-值字符串参量、结构体和名称-值元胞数组参量的组合来设置属性值。
属性
量化中使用的数据类型模式,指定为以下值之一:
'fixed'- 有符号定点模式。'ufixed'- 无符号定点模式。'float'- 自定义精度浮点模式。'single'- 单精度模式。此模式会覆盖所有其他属性设置。'double'- 双精度模式。此模式会覆盖所有其他属性设置。
数据类型: char | struct | cell
要使用的舍入方法,指定为以下值之一:
'ceil'- 向上舍入到下一个允许的量化值。'convergent'- 舍入到最接近的允许的量化值。仅当舍入后的最低有效位将设置为 0 时,恰好在两个最接近的允许的量化值中间的数字才向上舍入。'fix'- 将负数向上舍入到下一个允许的量化值或将正数向下舍入到下一个允许的量化值。'floor'- 向下舍入到下一个允许的量化值。'nearest'- 舍入到最接近的允许的量化值。位于两个最接近的允许量化值中间的数字会向上舍入。'round'- 舍入到最接近的允许的量化值。位于两个最接近的允许量化值中间的数字在绝对值上向上舍入。
数据类型: char | struct | cell
对溢出采取的操作,指定为以下值之一:
'saturate'- 将溢出饱和处理。当要量化数据的值超出由数据格式属性指定的最大和最小可表示数的范围时,这些值将被量化为最接近的最大或最小可表示值。
'wrap'- 溢出绕回到可表示值的范围。当要量化的数据的值超出由数据格式属性指定的最大和最小可表示数的范围时,使用相对于最小可表示数的模块化算术将这些值绕回到该范围内。
此属性仅适用于定点数据类型模式。当您将 DataMode 属性设置为 float、double 或 single 时,此属性将变为只读属性。
注意
超出动态范围的浮点数溢出到 ±Inf。
数据类型: char | struct | cell
quantizer 对象的数据格式。此属性值的解释取决于 DataMode 属性的值。
DataMode 属性值 | 解释格式属性值 |
|---|---|
fixed 或 ufixed |
将 字长的范围可以是从 2 到您计算机的内存限值。小数长度的范围可以从 0 到比字长小 1。 |
float |
将 字长的范围可以是从 2 到您计算机的内存限值。小数长度的范围可以从 0 到 11。 |
double |
只读 |
single |
只读 |
数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
只读 quantizer 对象状态
当调用 quantize 时,只读 quantizer 对象状态会更新。要重置这些状态,请使用 reset。
使用 quantize(q,…) 对 quantizer 对象 q 进行量化前的最大值。此值是对 quantize 的连续调用中记录的最大值。
示例: max(q)
示例: q.max
使用 quantize(q,…) 对 quantizer 对象 q 进行量化前的最小值。此值是对 quantize 的连续调用中记录的最小值。
示例: min(q)
示例: q.min
对 quantizer 对象 q 调用 quantize(q,…) 期间的溢出次数。此值在对 quantize 的连续调用中累加。一个溢出定义为量化后超出 q 范围的一个值。
示例: noverflows(q)
示例: q.noverflows
对 quantizer 对象 q 调用 quantize(q,…) 期间的下溢次数。此值在对 quantize 的连续调用中累加。一个下溢定义为在量化前非零、量化后为零的数。
示例: nunderflows(q)
示例: q.nunderflows
对 quantizer 对象 q 调用 quantize(q,…) 期间的量化运算次数。此值在对 quantize 的连续调用中累加。
示例: noperations(q)
示例: q.noperations
对象函数
quantize | 使用 quantizer 对象量化数值数据 |
unitquantize | 使用 quantizer 对象量化数值数据,但不会对 eps 为接近 +1 的范围内的数值进行量化 |
wordlength | quantizer 对象的字长 |
示例
创建具有默认属性值的 quantizer 对象。
q = quantizer
q =
DataMode = fixed
RoundMode = floor
OverflowMode = saturate
Format = [16 15]
要复制 quantizer 对象,请使用赋值。
q = quantizer; r = q; isequal(q,r)
ans = logical
1
使用属性名称-值参量设置 quantizer 对象属性。
q = quantizer('Mode','fixed','RoundMode','ceil',... 'OverflowMode','saturate','Format',[5 4])
q =
DataMode = fixed
RoundMode = ceil
OverflowMode = saturate
Format = [5 4]
通过仅在命令中列出属性值来设置 quantizer 对象属性。
q = quantizer('fixed','ceil','saturate',[5 4])
q =
DataMode = fixed
RoundMode = ceil
OverflowMode = saturate
Format = [5 4]
使用结构体设置 quantizer 对象属性。
struct.DataMode = 'fixed'; struct.RoundMode = 'ceil'; struct.OverflowMode = 'saturate'; struct.Format = [5 4]; q = quantizer(struct)
q =
DataMode = fixed
RoundMode = ceil
OverflowMode = saturate
Format = [5 4]
使用属性名称和属性值元胞数组来设置 quantizer 对象属性。
pn = {'Mode','RoundMode','Overflowmode','Format'};
pv = {'fixed','ceil','saturate',[5 4]};
q = quantizer(pn,pv)q =
DataMode = fixed
RoundMode = ceil
OverflowMode = saturate
Format = [5 4]
使用 quantize 量化数据,查看量化如何影响 quantizer 对象状态,并使用 reset 将 quantizer 对象状态重置为其默认值。
构造一个示例数据集,并创建一个 quantizer 对象来指定在量化数据集时要使用的量化参数。
format long g rng(0,'twister'); x = rng(100); q = quantizer([16,14])
q =
DataMode = fixed
RoundMode = floor
OverflowMode = saturate
Format = [16 14]检索 max 和 noverflows 的值。
q.max q.noverflows
ans =
-1.79769313486232e+308
ans =
0请注意 max 等于 -realmax,这表示量化器 q 处于重置状态。
使用 quantize 函数根据 quantizer 对象的设定量化数据集。
y = quantize(q,x);
Warning: 625 overflow(s) occurred in the fi quantize operation.
检查 max 和 noverflows 的值。
q.max q.noverflows
ans =
1.99993896484375
ans =
625请注意,最大记录值是在量化后获得的,即 q.max == max(y)。
重置并检查 quantizer 状态。
reset(q) q.maxlog q.noverflows
ans =
-1.79769313486232e+308
ans =
0此示例说明如何使用由 quantizer 对象指定的属性来量化数据。
首先,创建一些要量化的数据。
x = linspace(-15,15,1000);
量化为自定义精度浮点数
创建一个 quantizer 对象,指定一个自定义精度浮点数据模式,其字长为 6 位、指数长度为 4 位。
q = quantizer('DataMode','float','Format',[6 4])
q =
DataMode = float
RoundMode = floor
Format = [6 4]
RoundMode 属性使用默认设置 'Floor'。
使用 quantize 函数通过 quantizer 对象指定的属性量化 x 中的数据。
y = quantize(q,x);
绘制 y 对 x 的图以可视化指定的量化属性对此数据的影响。
plot(x,x,x,y); title(tostring(q)); legend('Input Data','Quantized Data','Location','northwest');
![Figure contains an axes object. The axes object with title quantizer('float', 'floor', [6 4]) contains 2 objects of type line. These objects represent Input Data, Quantized Data.](../../examples/fixedpoint/win64/QuantizeDataUsingTheQuantizerObjectExample_01.png)
您可以使用 quantizer 对象的只读属性来访问更多信息。
q.noverflows
ans = 0
q.nunderflows
ans = 0
在此示例中,在量化运算中发生 0 次溢出和 0 次下溢。
量化为定点数
创建一个 quantizer 对象,指定一个有符号定点数据模式,其字长为 6 位、小数长度为 1 位,且在溢出时绕回。
q = quantizer([6 1],'wrap')q =
DataMode = fixed
RoundMode = floor
OverflowMode = wrap
Format = [6 1]
quantizer 使用默认 DataMode 属性 'fixed' 以及默认 RoundMode 属性 'Floor'。
使用 quantize 函数通过 quantizer 对象指定的属性量化 x 中的数据。
y = quantize(q,x);
绘制 y 对 x 的图以可视化指定的量化属性对此数据的影响。
plot(x,x,x,y); title(tostring(q)); legend('Input Data','Quantized Data','Location','northwest');
![Figure contains an axes object. The axes object with title quantizer('fixed', 'floor', 'wrap', [6 1]) contains 2 objects of type line. These objects represent Input Data, Quantized Data.](../../examples/fixedpoint/win64/QuantizeDataUsingTheQuantizerObjectExample_02.png)
您可以使用 quantizer 对象的只读属性来访问更多信息。
q.noverflows
ans = 0
q.nunderflows
ans = 17
在此示例中,在量化运算中发生 0 次溢出和 17 次下溢。
版本历史记录
在 R2006a 之前推出结合使用 quantize 函数和 quantizer 对象的数值数据量化现在支持 int64 和 uint64 类型。
例如:
q = quantizer('fixed','floor','saturate',[64 11]) x = int64(pi) y = quantize(q,x)
q =
DataMode = fixed
RoundMode = floor
OverflowMode = saturate
Format = [64 11]
x =
int64
3
y =
3另请参阅
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)