Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

quantizer

创建 quantizer 对象

说明

quantizer 对象描述用于量化的数据类型属性。创建 quantizer 对象后,使用 quantize 来量化双精度数据。您可以使用 quantizer 对象仿真具有任意字长和指数长度的自定义浮点数据类型。

创建对象

描述

示例

q = quantizer 创建一个属性设置为其默认值的 quantizer 对象。要使用此对象量化值,请使用 quantize

示例

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 属性设置为 floatdoublesingle 时,此属性将变为只读属性。

注意

超出动态范围的浮点数溢出到 ±Inf

数据类型: char | struct | cell

quantizer 对象的数据格式。此属性值的解释取决于 DataMode 属性的值。

DataMode 属性值解释格式属性值
fixedufixed

[wordlength fractionlength]

Format 属性值指定为一个二元素行向量,其中第一个元素是 quantizer 对象字长的位数,第二个元素是 quantizer 对象小数长度的位数。

字长的范围可以是从 2 到您计算机的内存限值。小数长度的范围可以从 0 到比字长小 1。

float

[wordlength exponentlength]

Format 属性值指定为一个二元素行向量,其中第一个元素是 quantizer 对象字长的位数,第二个元素是 quantizer 对象指数长度的位数。

字长的范围可以是从 2 到您计算机的内存限值。小数长度的范围可以从 0 到 11。

double

[64 11]

只读 Format 属性值自动指定字长和指数长度。

single

[32 8]

只读 Format 属性值自动指定字长和指数长度。

数据类型: 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 对象量化数值数据
unitquantizeQuantize numeric data using quantizer object except numbers within eps of +1
wordlengthquantizer 对象的字长

示例

全部折叠

创建具有默认属性值的 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 对象状态,并使用 resetquantizer 对象状态重置为其默认值。

构造一个示例数据集,并创建一个 quantizer 对象来指定在量化数据集时要使用的量化参数。

format long g
rng(0,'twister');
x = rng(100);
q = quantizer([16,14])
q =


        DataMode = fixed
       RoundMode = floor
    OverflowMode = saturate
          Format = [16  14]

检索 maxnoverflows 的值。

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. 

检查 maxnoverflows 的值。

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);

绘制 yx 的图以可视化指定的量化属性对此数据的影响。

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.

您可以使用 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);

绘制 yx 的图以可视化指定的量化属性对此数据的影响。

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.

您可以使用 quantizer 对象的只读属性来访问更多信息。

q.noverflows
ans = 0
q.nunderflows
ans = 17

在此示例中,在量化运算中发生 0 次溢出和 17 次下溢。

版本历史记录

在 R2006a 之前推出