Main Content

fi オブジェクトの作成方法

コンストラクター関数 fi を使用して fi オブジェクトを作成するか、[fi コンストラクターの挿入] ダイアログを使用して fi オブジェクト コンストラクターを作成できます。また、コンストラクター関数 fi を使用して既存の fi オブジェクトをコピーすることもできます。

コンストラクター関数 fi では numerictype プロパティと fimath プロパティを直接指定できます。または、既存の numerictype オブジェクトまたは fimath オブジェクトを使用して fi オブジェクトを作成できます。プロパティの値は、前回の設定から取得されます。

アルゴリズムの変数のデータ型を別の型テーブルに維持することで、再利用可能な MATLAB® アルゴリズムを記述できます。

fi コンストラクターを使用した fi オブジェクトの作成

以下の例は、fi オブジェクトを作成するさまざまな方法を示しています。

既定のデータ型とプロパティ値を使用した fi オブジェクトの作成

既定のデータ型と値 0 をもつ fi オブジェクトを作成します。

a = fi(0)
a =
 
     0


          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 15

既定の fi コンストラクター構文によって、値が 0、語長が 16 ビット、小数部の長さが 15 ビットの符号付き fi オブジェクトが作成されます。

メモ

fi コンストラクターは NearestRoundingMethodSaturateOverflowAction を使用して fi オブジェクトを作成します。浮動小数点値から fi を作成する場合、RoundingMethod および OverflowAction プロパティの既定の設定は使用されません。

fi オブジェクトの表示形式の詳細は、固定小数点データの表示を参照してください。

fi オブジェクトのコピー

fi オブジェクトをコピーするには、代入を使用します。

a = fi(pi)
a =
 
    3.1416

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 13
b = a
b =
 
    3.1416

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 13

プロパティの名前と値のペアの引数を使用した fi オブジェクトの作成

プロパティの名前と値のペアの引数を使用して、fi コンストラクターで fi オブジェクトのプロパティを設定できます。fi オブジェクトには次の 3 種類のプロパティがあります。

たとえば、固定小数点演算の実行時に使用する丸め手法とオーバーフロー アクションの 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

fi コンストラクターで fimath オブジェクト プロパティを少なくとも 1 つ指定した場合は、fi オブジェクトにローカルの fimath オブジェクトがあります。fi オブジェクトは、残りの未指定の fimath オブジェクト プロパティに既定値を使用します。

fi オブジェクト コンストラクターで fimath オブジェクト プロパティを指定しなかった場合、fi オブジェクトは既定の fimath 値を使用するため、このオブジェクトにはローカル fimath がありません。

関数 isfimathlocal を使用して、fi オブジェクトに関連付けられたローカル fimath があるかどうかを判断できます。

numerictype オブジェクトを使用した fi オブジェクトの作成

numerictype オブジェクトを使用して fi オブジェクトを作成できます。numerictype のプロパティは、fi オブジェクトのデータ型とスケーリングの属性を定義します。

numerictype オブジェクトを既定のプロパティ値で作成します。

T = numerictype
T =
 

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 15

numerictype オブジェクト T から fi オブジェクトを作成します。

a = fi(pi,T)
 a =
 
    1.0000


          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 15

fi コンストラクターで fimath オブジェクトと numerictype オブジェクトを使用できます。

F = fimath('RoundingMethod','Nearest',...
    'OverflowAction','Saturate',...
    'ProductMode','FullPrecision',...
    'SumMode','FullPrecision') 
F =
 
        RoundingMethod: Nearest
        OverflowAction: Saturate
           ProductMode: FullPrecision
               SumMode: FullPrecision
a = fi(pi,T,F)
a =
 
    1.0000


          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 15

        RoundingMethod: Nearest
        OverflowAction: Saturate
           ProductMode: FullPrecision
               SumMode: FullPrecision

メモ

構文 a = fi(pi,T,F)a = fi(pi,F,T) と等価です。両方のステートメントで fimath オブジェクトと numerictype オブジェクトを使用して fi オブジェクトを定義できます。

fimath オブジェクトを使用した fi オブジェクトの作成

特定の fimath オブジェクトを使用して fi オブジェクトを作成できます。そのとき、作成した fi オブジェクトにローカルの fimath オブジェクトが割り当てられます。numerictype オブジェクトのどのプロパティも指定しないと、fi オブジェクトの語長は既定の 16 ビットになります。小数部の長さは、最大精度のスケーリングによって決まります。

たとえば、使用する丸め手法、オーバーフロー アクション、乗算モード、および加算モードを指定する fimath オブジェクトを作成します。

F = fimath('RoundingMethod','Nearest',...
    'OverflowAction','Saturate',...
    'ProductMode','FullPrecision',...
    'SumMode','FullPrecision')
F =
 

             RoundingMethod: Nearest
          OverflowAction: Saturate
           ProductMode: FullPrecision
               SumMode: FullPrecision

ドット表記を使用して、fimath オブジェクト F のオーバーフロー アクションを変更します。

F.OverflowAction = 'Wrap'
F =
 

             RoundingMethod: Nearest
          OverflowAction: Wrap
           ProductMode: FullPrecision
               SumMode: FullPrecision

fimath オブジェクト F を使用して fi オブジェクトを作成します。

 a = fi(pi,F)
a =
 
    3.1416

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 13

        RoundingMethod: Nearest
        OverflowAction: Wrap
           ProductMode: FullPrecision
               SumMode: FullPrecision

また、作成時にさまざまな numerictype プロパティを指定する一方で、fimath オブジェクトを使用して fi オブジェクトを作成することもできます。たとえば、fimath F を使用して値 pi、語長 8 ビット、小数部の長さ 6 ビットの符号なし fi オブジェクトを作成します。

b = fi(pi,0,8,6,F)
b = 

    3.1406

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Unsigned
            WordLength: 8
        FractionLength: 6

        RoundingMethod: Nearest
        OverflowAction: Wrap
           ProductMode: FullPrecision
               SumMode: FullPrecision

[fi コンストラクターの挿入] ダイアログを使用した fi オブジェクト コンストラクターの作成

MATLAB で [fi コンストラクターの挿入] ダイアログ ボックスを使用して fi オブジェクト コンストラクターを作成できます。このダイアログ ボックスで fi オブジェクトの値とプロパティを指定した後、事前入力されている fi オブジェクト コンストラクターをファイルの特定の場所に挿入できます。

たとえば、値が pi、語長が 16 ビット、小数部の長さが 13 ビットの符号付き fi オブジェクトを作成します。

  1. MATLAB の [ホーム] タブの [ファイル] セクションで、[新規スクリプト] をクリックします。

  2. [エディター] タブの [コード] セクションで、[固定小数点データを指定します] ボタンの矢印 をクリックします。[fi を挿入] をクリックして [fi コンストラクターの挿入] ダイアログ ボックスを開きます。

  3. エディット ボックスとドロップダウン メニューを使用して、fi オブジェクトの以下のプロパティを指定します。

    • = pi

    • Data type mode = Fixed-point:binary point scaling

    • Signedness = Signed

    • 語長 = 16

    • 小数部の長さ = 13

  4. ファイルに fi オブジェクト コンストラクターを挿入するには、ファイルの目的の場所にカーソルを置いて、[fi コンストラクターの挿入] ダイアログ ボックスで [OK] をクリックします。[OK] をクリックすると、[fi コンストラクターの挿入] ダイアログ ボックスが閉じて、ファイルに fi オブジェクト コンストラクターが自動的に入力されます。

    fi(pi, 1, 16, 13)

プロパティの優先順位の決定

fi オブジェクトのプロパティの値は、前回の設定から取得されます。たとえば、Signedtrue に設定された、小数部の長さが 14numerictype オブジェクトを作成します。

T = numerictype('Signed',true,...
    'FractionLength',14)
T =
 

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 14        

Signed プロパティの "後"numerictype プロパティ T を指定する fi オブジェクトを作成します。結果の fi オブジェクトは符号付きになります。

a = fi(pi,'Signed',false,...
    'numerictype',T)
a =
 
    1.9999

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 14

Signed プロパティの "前"numerictype T を指定する 2 番目の fi オブジェクトを作成します。結果の fi オブジェクトは符号なしになります。

b = fi(pi,'numerictype',T,...
    'Signed',false)
b =
 
    3.1416

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Unsigned
            WordLength: 16
        FractionLength: 14

型テーブルで使用する fi オブジェクトの作成

アルゴリズムの変数のデータ型を別の型テーブルに維持することで、再利用可能な MATLAB アルゴリズムを記述できます。以下に例を示します。

function T = mytypes(dt)
  switch dt
    case 'double'
      T.b = double([]);
      T.x = double([]);
      T.y = double([]);

     case 'fixed16'
      T.b = fi([],1,16,15);
      T.x = fi([],1,16,15);
      T.y = fi([],1,16,14);
  end
end

手動による固定小数点の変換のベスト プラクティスで説明されているように、アルゴリズム内の変数を型テーブル内のデータ型にキャストします。

function [y,z]=myfilter(b,x,z,T)
  y = zeros(size(x),'like',T.y);
  for n=1:length(x)
    z(:) = [x(n); z(1:end-1)];
    y(n) = b * z;
  end
end

別のテスト ファイル内で、アルゴリズムに供給する入力データを設定し、その入力のデータ型を指定します。

% Test inputs
b = fir1(11,0.25);
t = linspace(0,10*pi,256)';
x = sin((pi/16)*t.^2); 
% Linear chirp

% Cast inputs
T=mytypes('fixed16');
b=cast(b,'like',T.b);
x=cast(x,'like',T.x);
z=zeros(size(b'),'like',T.x);

% Run
[y,z] = myfilter(b,x,z,T);

参考

| | |

関連するトピック