Main Content

quantizer

quantizer オブジェクトの作成

説明

quantizer オブジェクトは、量子化に使用するデータ型プロパティを記述します。quantizer オブジェクトを作成した後、quantize を使用して倍精度データを量子化します。quantizer オブジェクトを使用して、任意の語長と指数部の長さをもつカスタムの浮動小数点データ型をシミュレートできます。

作成

説明

q = quantizer は、プロパティが既定値に設定された quantizer オブジェクトを作成します。このオブジェクトを使用して値を量子化するには、quantize を使用します。

q = quantizer(Name,Value) は、名前と値の引数を使用して、指定された名前のプロパティを設定します。名前と値の引数は複数指定できます。各プロパティ名を一重引用符で囲みます。

q = quantizer(Value1,Value2) は、プロパティ値を使用してプロパティを設定します。プロパティ値は一意であり、コマンドでプロパティ値のみを指定してプロパティ名を設定できます。2 つの値が競合する場合、quantizer はリストの後のプロパティ値を設定します。

q = quantizer(s) は、各フィールド名で指定された名前のプロパティを構造体 s に格納された値で設定します。

q = quantizer(pn,pv) は、文字ベクトルの cell 配列 pn で指定された名前のプロパティを cell 配列 pv の対応する値に設定します。

quantizer オブジェクトを作成するときは、名前と値の string の引数、構造体、および名前と値の cell 配列の引数を組み合わせて使用してプロパティ値を設定できます。

プロパティ

すべて展開する

量子化で使用するデータ型モード。次の値のいずれかとして指定します。

  • 'fixed' — 符号付き固定小数点モード。

  • 'ufixed' — 符号なし固定小数点モード。

  • 'float' — カスタム精度の浮動小数点モード。

  • 'single' — 単精度モード。このモードは他のすべてのプロパティ設定をオーバーライドします。

  • 'double' — 倍精度モード。このモードは他のすべてのプロパティ設定をオーバーライドします。

データ型: char | struct | cell

使用する丸め手法。次の値のいずれかとして指定します。

  • 'ceil' — 許容される次の量子化値に切り上げます。

  • 'convergent' — 許容される最も近くの量子化値に丸めます。許容される最も近い 2 つの量子化値のちょうど中間にある数値は、丸め後の最下位ビットが 0 になる場合のみ上方に丸められます。

  • 'fix' — 許容される次の量子化値まで、負の数は切り上げ、正の数は切り下げます。

  • 'floor' — 許容される次の量子化値に切り下げます。

  • 'nearest' — 許容される最も近くの量子化値に丸めます。許容される最も近くの 2 つの量子化値の中間にある値は、切り上げられます。

  • 'round' — 許容される最も近くの量子化値に丸めます。許容される最も近くの 2 つの量子化値の中間にある値は、絶対値に切り上げられます。

データ型: char | struct | cell

オーバーフロー時のアクション。次の値のいずれかとして指定します。

  • 'saturate' — オーバーフローは飽和されます。

    量子化するデータの値がデータ形式プロパティで指定される表現可能な数字の最大値から最小値までの範囲の外にある場合、それらの値は、どちらに近いかに応じて、表現可能な最大値または最小値のどちらかの値に量子化されます。

  • 'wrap' — オーバーフローは表現可能な値の範囲にラップされます。

    量子化するデータの値がデータ形式プロパティで指定される表現可能な数字の最大値から最小値までの範囲の外にある場合、それらの値は、表現可能な最小値を基準とするモジュラー演算を使用して、その範囲内に戻るようにラップされます。

このプロパティは固定小数点データ型モードにのみ適用されます。DataMode プロパティを floatdouble、または single に設定すると、このプロパティは読み取り専用プロパティになります。

メモ

ダイナミック レンジを超える浮動小数点数は ±Inf にオーバーフローします。

データ型: char | struct | cell

quantizer オブジェクトのデータ形式。このプロパティの値の解釈は、DataMode プロパティの値によって異なります。

DataMode プロパティの値Format プロパティの値の解釈
fixed または ufixed

[wordlength fractionlength]

Format プロパティの値を 2 要素の行ベクトルとして指定します。最初の要素は quantizer オブジェクトの語長のビット数、2 番目の要素は quantizer オブジェクトの小数部の長さのビット数です。

語長の範囲は 2 から PC のメモリの制限までです。小数部の長さの範囲は 0 から語長よりも 1 小さい長さまでです。

float

[wordlength exponenetlength]

Format プロパティの値を 2 要素の行ベクトルとして指定します。最初の要素は quantizer オブジェクトの語長のビット数、2 番目の要素は quantizer オブジェクトの指数部の長さのビット数です。

語長の範囲は 2 から PC のメモリの制限までです。小数部の長さの範囲は 0 から 11 までです。

double

[64 11]

読み取り専用の Format プロパティの値により、語長と指数部の長さが自動的に設定されます。

single

[32 8]

読み取り専用の Format プロパティの値により、語長と指数部の長さが自動的に設定されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

読み取り専用の quantizer オブジェクトの状態

読み取り専用の quantizer オブジェクトの状態は、quantize が呼び出されると更新されます。それらの状態をリセットするには、reset を使用します。

quantizer オブジェクト q に対する quantize(q,…) の呼び出しでの量子化前の最大値。この値は、quantize の連続する呼び出しで記録された最大値です。

例: max(q)

例: q.max

quantizer オブジェクト q に対する quantize(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

オブジェクト関数

quantizequantizer オブジェクトを使用した数値データの量子化
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]

プロパティ名とプロパティ値の cell 配列を使用して 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]

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

カスタム精度の浮動小数点に量子化

語長が 6 ビットで指数部の長さが 4 ビットのカスタム精度の浮動小数点データ モードを指定する quantizer オブジェクトを作成します。

q = quantizer('DataMode','float','Format',[6 4])
q =


        DataMode = float
       RoundMode = floor
          Format = [6  4]

RoundMode プロパティには、既定の設定の 'Floor' が使用されます。

関数 quantize を使用して、quantizer オブジェクトで指定されるプロパティを使って x のデータを量子化します。

y = quantize(q,x);

x に対して y をプロットし、このデータに対する指定された量子化プロパティの影響を可視化します。

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 回でした。

固定小数点に量子化

語長が 6 ビットで小数部の長さが 1 ビット、オーバーフロー時にラップする符号付き固定小数点データ モードを指定する quantizer オブジェクトを作成します。

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

x に対して y をプロットし、このデータに対する指定された量子化プロパティの影響を可視化します。

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 より前に導入