fi オブジェクトの作成方法
fi コンストラクターのタイプ
Fixed-Point Designer™ ソフトウェアを使用して、以下のいずれかの方法で fi
オブジェクトを作成できます。
まず、既定のデータ型と値 0 をもつ fi
オブジェクトを作成します。
a = fi(0)
a = 0 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 15
このコンストラクター構文によって、値が 0、語長が 16 ビット、小数部の長さが 15 ビットの符号付き fi
オブジェクトが作成されます。fi
コンストラクターで fimath
オブジェクト プロパティを指定しなかったので、返される fi
オブジェクト a
にはローカル fimath
がありません。
fi
、sfi
、および ufi
コンストラクターのすべての構文を確認するには、それぞれのリファレンス ページを参照してください。
fi
オブジェクトの表示形式の詳細は、固定小数点データの表示を参照してください。
fi オブジェクトの作成例
以下の例は、fi
オブジェクトを作成するさまざまな方法を示しています。fi
オブジェクトを作成するその他の基本的な例は、以下のコンストラクター関数のリファレンス ページで「例」の節を参照してください。
メモ
fi
コンストラクターは Nearest
の RoundingMethod
と Saturate
の OverflowAction
を使用して fi
オブジェクトを作成します。浮動小数点値から fi
を作成する場合、RoundingMethod
および OverflowAction
プロパティの既定の設定は使用されません。
プロパティ名/プロパティ値のペアによる fi オブジェクトの作成
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
fimath
オブジェクトのすべてのプロパティを fi
コンストラクターで指定する必要はありません。fi
オブジェクトは、未指定の fimath
オブジェクト プロパティにはすべて既定値を使用します。
fi
コンストラクターでfimath
オブジェクト プロパティを少なくとも 1 つ指定した場合は、fi
オブジェクトにローカルのfimath
オブジェクトがあります。fi
オブジェクトは、残りの未指定のfimath
オブジェクト プロパティに既定値を使用します。fi
オブジェクト コンストラクターでfimath
オブジェクト プロパティを指定しなかった場合、fi
オブジェクトは既定のfimath
値を使用します。
numerictype オブジェクトを使用した fi オブジェクトの作成
numerictype
オブジェクトを使用して、fi
オブジェクトを次のように定義できます。
T = numerictype
T = DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 15
a = fi(pi, T)
a = 1.0000 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 15
また、fimath
オブジェクトを numerictype
オブジェクトと共に使用して、fi
オブジェクトを定義できます。
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 ビットになります。小数部の長さは、次のように最大精度のスケーリングによって決まります。
F = fimath('RoundingMethod', 'Nearest',... 'OverflowAction', 'Saturate',... 'ProductMode','FullPrecision',... 'SumMode','FullPrecision')
F = RoundingMethod: Nearest OverflowAction: Saturate ProductMode: FullPrecision SumMode: FullPrecision
F.OverflowAction = 'Wrap'
F = RoundingMethod: Nearest OverflowAction: Wrap ProductMode: FullPrecision SumMode: FullPrecision
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
オブジェクトを作成することもできます。
b = fi(pi, 0, F)
b = 3.1416 DataTypeMode: Fixed-point: binary point scaling Signedness: Unsigned WordLength: 16 FractionLength: 14 RoundingMethod: Nearest OverflowAction: Wrap ProductMode: FullPrecision SumMode: FullPrecision
c = fi(pi, 0, 8, F)
c = 3.1406 DataTypeMode: Fixed-point: binary point scaling Signedness: Unsigned WordLength: 8 FractionLength: 6 RoundingMethod: Nearest OverflowAction: Wrap ProductMode: FullPrecision SumMode: FullPrecision
d = fi(pi, 0, 8, 6, F)
d = 3.1406 DataTypeMode: Fixed-point: binary point scaling Signedness: Unsigned WordLength: 8 FractionLength: 6 RoundingMethod: Nearest OverflowAction: wrap ProductMode: FullPrecision SumMode: FullPrecision
GUI での fi オブジェクト コンストラクターの作成
MATLAB® でファイルを操作するとき、[fi コンストラクターの挿入] ダイアログ ボックスを使用して fi
オブジェクト コンストラクターを作成できます。このダイアログ ボックスで fi
オブジェクトの値とプロパティを指定した後、事前入力されている fi
オブジェクト コンストラクターをファイルの特定の場所に挿入できます。
たとえば、値が pi、語長が 16 ビット、小数部の長さが 13 ビットの符号付き fi
オブジェクトを作成するには、以下の手順を実行します。
[ホーム] タブの [ファイル] セクションで、[新規] 、 [スクリプト] をクリックして MATLAB エディターを開きます。
[エディター] タブの [編集] セクションで、[挿入] ボタン グループの
をクリックします。[fi を挿入...] をクリックして [fi コンストラクターの挿入] ダイアログ ボックスを開きます。
エディット ボックスとドロップダウン メニューを使用して、
fi
オブジェクトの以下のプロパティを指定します。Value =
pi
Data type mode =
Fixed-point:binary point scaling
Signedness =
Signed
Word length =
16
Fraction length =
13
ファイルに
fi
オブジェクト コンストラクターを挿入するには、ファイルの目的の場所にカーソルを置いて、[fi コンストラクターの挿入] ダイアログ ボックスで [OK] をクリックします。[OK] をクリックすると、[fi コンストラクターの挿入] ダイアログ ボックスが閉じて、次のようにファイルにfi
オブジェクト コンストラクターが自動的に入力されます。
プロパティの優先順位の決定
プロパティの値は、前回の設定から取得されます。たとえば、Signed
プロパティの値が true
、小数部の長さが 14
の numerictype
オブジェクトを作成します。
T = numerictype('Signed', true, 'FractionLength', 14)
T = DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 14
ここで、次の fi
オブジェクトを作成します。結果の fi
オブジェクトが符号付きになるように、Signed
プロパティの "後" で numerictype
プロパティを指定します。
a = fi(pi,'Signed',false,'numerictype',T)
a = 1.9999 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 14
このコード サンプルの fi
オブジェクトを次のコード サンプルの fi
オブジェクトと比較してください。次のコード サンプルでは、結果の fi
オブジェクトが符号なしになるように、numerictype
プロパティが Signed
プロパティの "前" に指定されます。
b = fi(pi,'numerictype',T,'Signed',false)
b = 3.1416 DataTypeMode: Fixed-point: binary point scaling Signedness: Unsigned WordLength: 16 FractionLength: 14
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 オブジェクトの作成
アルゴリズムの変数のデータ型を別の型テーブルに維持することで、再利用可能な 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);