Main Content

Add, Subtract, Sum of Elements, Sum

入力の加算または減算

  • Add block

ライブラリ:
Simulink / Math Operations
HDL Coder / HDL Floating Point Operations
HDL Coder / Math Operations

説明

Sum ブロックは、入力に対して加算または減算を行います。Add ブロック、Subtract ブロック、Sum of Elements ブロックおよび Sum ブロックは、同一のブロックです。このブロックは、スカラー入力、ベクトル入力、または行列入力を加算または減算できます。また、単一の要素を折りたたむことや、総和を実行することもできます。

ブロックの動作は、[符号リスト] パラメーターをプラス (+)、マイナス (-) およびスペーサー (|) とともに使用して指定します。

  • +- 文字の数は、入力の数と等しくなります。たとえば、+-+ は 3 つの入力を必要とします。ブロックは最初 (上) の入力から 2 番目 (中央) の入力を減算し、次に 3 番目 (下) の入力を加算します。

  • スペーサー記号は、ブロックのアイコン上の端子間に追加のスペースを作成します。

  • 加算のみを実行する場合、入力の数に等しい数値を使用できます。

  • 入力端子が 1 つだけの場合のみ、1 つの + または - がすべての次元または指定した次元の範囲の要素を加算または減算します。

Sum ブロックはまず入力のデータ型をアキュムレータのデータ型に変換し、指定された演算を行います。次に、指定された丸めモードとオーバーフロー モードで、計算結果を出力データ型に変換します。

ブロック出力の計算

Sum ブロックの出力計算は、ブロック入力の数と入力端子の符号に依存します。

Sum ブロックの入力端子の数入力端子の符号ブロック出力の計算式出力式の変数

1 つの入力端子

入力端子の符号が +

y = e[0] + e[1] + e[2] ... + e[m]


e[i] は入力 u の i 番目の要素

入力端子の符号が –

y = 0.0 – e[0] – e[1] – e[2] ... – e[m]


2 つ以上の入力端子

すべての入力端子の符号が –

y = 0.0 – u[0] – u[1] – u[2] ... – u[n]


u[i] は i 番目の入力端子の入力

k 番目の入力端子が符号 + の最初の端子

y = u[k] – u[0] – u[1] – u[2] – u[k–1] (+/–) u[k+1] ... (+/–) u[n]


すべて展開する

この例では、Sum ブロックでの入力の並べ替えの方法を示します。- 符号を最初の演算として使用すると、可能な場合は、ブロックで入力が並べ替えられて + 演算が使用されます。たとえば、式 output = -a-b+c では、output = c-a-b となるように、Sum ブロックにより入力が並べ替えられます。アキュムレータを初期化するには、Sum ブロックでは最初の + 入力端子を使用します。

ブロックでは最初のオペランド a で単項マイナス演算が実行されるのを避けます。単項マイナス演算が実行されると a の値が固定小数点データ型用に変更されてしまうためです。その場合、出力値は、abc の値の累計結果と異なります。

どちらの定数入力でも int8 データ型が使用されます。Sum ブロックはアキュムレータと出力データ型にも int8 を使用し、[整数オーバーフローで飽和] が有効になっています。Sum ブロックで入力が並べ替えられて、127 の理想的な結果が得られます。

  1. 入力を (-Input1 + Input2) から (Input2 - Input1) に並べ替えます。

  2. 最初の + 入力端子を使用して、アキュムレータを初期化します。Accumulator = int8(-1) = -1

  3. 値の累積を続けます。Accumulator = Accumulator - int8(-128) = 127

  4. ブロック出力を計算します。Output = int8(127) = 127

Sum ブロックで入力が並べ替えられない場合は、理想的ではない結果 126 が算出されます。

  1. 最初の入力端子を使用して、アキュムレータを初期化します。Accumulator = int8(-(-128)) = 127

  2. 飽和が on に設定されているため、アキュムレータの初期値は 127 で飽和し、ラップしません。

  3. 値の累積を続けます。Accumulator = Accumulator + int8(-1) = 126

  4. ブロック出力を計算します。Output = int8(126) = 126

output = -a-b+c の単項マイナス演算を明示的に指定するには、Math Operations ライブラリの Unary Minus ブロックを使用できます。

端子

入力

すべて展開する

[すべての入力が同じデータ型をもつ] パラメーターを選択しない限り、入力のデータ型は異なる可能性があります。

加算または減算演算への入力信号入力信号が 1 つだけの場合、加算または減算はすべての次元、または 1 つの指定した次元の範囲の要素に対して実行されます。

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

演算への n 番目の入力信号。入力数は、[符号リスト] パラメーターの符号の数に一致します。ブロックは、リストの順番に従って、入力に演算を適用します。また、[符号リスト] パラメーターとして、入力端子の数に等しい数値を使用することもできます。ブロックは入力端子を作成し、すべての入力に加算を適用します。たとえば、[符号リスト] パラメーターに 5 を割り当てた場合、ブロックは 5 つの入力端子を作成し、それらを足し合わせて出力を生成します。

すべての非スカラー入力は同じ次元をもつ必要があります。スカラー入力は、他の入力と同じ次元をもつように拡張されます。

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

出力

すべて展開する

加算演算および/または減算演算によって得られる出力信号出力信号は、入力信号と同じ次元を持ちます。

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

パラメーター

すべて展開する

メイン

ブロックのアイコンの形状を四角形または円形に指定します。

四角形のブロックでは、1 番目の入力端子が最上位の端子です。円形の Sum ブロックの場合、最初の入力端子はブロックを反時計回りに回って 12 時の位置に最も近い端子です。同様に、他の入力端子も、ブロックを反時計回りに順番に表示されます。

プログラムでの使用

ブロック パラメーター: IconShape
: 文字ベクトル
: 'rectangular' | 'round'
既定の設定: 'round'

入力に対して実行される加算演算および減算演算を入力します。各演算につき、1 つの入力端子が作成されます。スペーサー (|) ブロックのアイコン上の入力端子間に追加のスペースを作成します。加算が既定の演算です。入力の加算のみを行う場合、入力端子の数を入力します。リストの順番に従って、演算が実行されます。

要素を 1 つだけ入力した場合、ブロックで [加算範囲] パラメーターが有効になります。単一ベクトル入力の場合、+ または - は、すべての次元、または 1 つの指定した次元の範囲の要素を加算または減算します。

ヒント

[符号リスト] パラメーターの符号の間にスペーサー (|) を挿入することで、ブロックの入力端子の位置を指定できます。たとえば、++|-- は 2 番目の入力端子と 3 番目の入力端子の間に追加のスペースを生成します。

プログラムでの使用

ブロック パラメーター: Inputs
: 文字ベクトル
: '+' | '-' | | | 整数
既定の設定: '++'

指定した次元に沿って関数を適用する方法を指定します。

  • すべての次元 — すべての次元のすべての入力値について関数を適用します。

    たとえば、次のモデルでは、[符号リスト]+ に設定し、[適用範囲][すべての次元] に設定しています。ブロックは、すべての次元のすべての入力値の合計を返します。

    2D matrix with Constant block value [1 2 3 4 5 6] as input to Sum block configured for all dimensions

    [行優先の配列レイアウトに最適化されたアルゴリズムを使用] コンフィギュレーション パラメーターを選択すると、Simulink® のシミュレーションでは行優先のアルゴリズムが有効になります。行優先のコードを生成するには、コンフィギュレーション パラメーター [配列のレイアウト] (Simulink Coder)[行優先] に設定し、[行優先の配列レイアウトに最適化されたアルゴリズムを使用] を選択します。列優先のアルゴリズムと行優先のアルゴリズムで異なる点は加算の順序のみです。場合によっては、同じデータセットに対する演算順序が異なることから、列優先アルゴリズムと行優先アルゴリズムの出力の数値にわずかな差が生じることがあります。

  • 指定した次元 — 指定した次元のすべての入力値について関数を適用します。

依存関係

このパラメーターを有効にするには、[符号リスト] パラメーターで符号を 1 つだけ入力します。

プログラムでの使用

ブロック パラメーター: CollapseMode
: 文字ベクトル
: 'All dimensions' | 'Specified dimension'
既定の設定: 'All dimensions'

加算を適用する次元を正の整数として指定します。

このブロックは、MATLAB® の関数 sum と同じ加算規則に従います。詳細については、アルゴリズムを参照してください。

たとえば、次のモデルでは、[符号リスト]+ に設定し、[適用範囲][指定した次元] に設定し、[次元]2 に設定しています。ブロックは、各行の入力値の合計を返します。

2D matrix with Constant block value [1 2 3;4 5 6] as input to Sum block configured for dimension 2

指定した次元が入力の次元より大きい場合、エラー メッセージが表示されます。

依存関係

このパラメーターを有効にするには、[適用範囲][指定した次元] に設定します。

プログラムでの使用

ブロック パラメーター: CollapseDim
: 文字ベクトル
: integer
既定の設定: '1'

サンプルの時間間隔を指定します。サンプル時間を継承するには、このパラメーターを -1 に設定します。詳細については、サンプル時間の指定を参照してください。

依存関係

このパラメーターは、-1 以外の値に設定した場合にのみ表示されます。詳細は、サンプル時間が推奨されないブロックを参照してください。

プログラムでの使用

ブロック パラメーター: SampleTime
型: string スカラーまたは文字ベクトル
既定の設定: "-1"

信号属性

データ属性の設定には [データ型アシスタント] が役立ちます。[データ型アシスタント] を使用するには、the Show data type assistant button をクリックします。詳細については、データ型アシスタントを利用したデータ型の指定を参照してください。

Simulink がチェックする出力範囲の下限値。

Simulink は、最小値を使って以下を行います。

メモ

[出力の最小値] により、実際の出力信号が飽和する (またはクリップされる) ことはありません。代わりに、Saturation ブロックを使用してください。

プログラムでの使用

ブロック パラメーター: OutMin
: 文字ベクトル
: '[ ]'| スカラー
既定の設定: '[ ]'

Simulink がチェックする出力範囲の上限値。

Simulink は、最大値を使って以下を行います。

メモ

[出力の最大値] により、実際の出力信号が飽和する (またはクリップされる) ことはありません。代わりに、Saturation ブロックを使用してください。

プログラムでの使用

ブロック パラメーター: OutMax
: 文字ベクトル
: '[ ]'| スカラー
既定の設定: '[ ]'

出力のデータ型を選択します。型は継承されるか、直接指定されるか、Simulink.NumericType などのデータ型オブジェクトとして表現されます。

継承オプションを選択すると、ブロックは次のように動作します。

  • 継承: 内部ルールによる継承 — Simulink は、組み込みターゲット ハードウェアのプロパティを考慮しつつ、数値の精度、パフォーマンス、および生成コードのサイズのバランスが取れるように、データ型を選択します。

    メモ

    アキュムレータの内部ルールは、生成コードの効率が低下するとしても、数値精度がより高いほうを選びます。同じ精度の出力を得るためには、出力データ型を 継承: アキュムレータと同じ を選択します。

    メモ

    入力が単精度より小さい浮動小数点データ型の場合、[継承: 内部ルールによる継承] 出力データ型は単精度より小さい浮動小数点の出力型を継承するコンフィギュレーション パラメーターの設定によって変わります。データ型の符合化に必要なビット数が単精度データ型の符合化に必要な 32 ビットより少ない場合、データ型は単精度より小さくなります。たとえば、halfint16 は単精度より小さくなります。

  • 継承: MSB を保持– Simulink は、演算の全範囲を維持するデータ型を選択した後、組み込みターゲット ハードウェアに適したサイズに出力精度を低下させます。

    ヒント

    生成コードの効率を向上するには、[アキュムレータのデータ型][Inherit: Inherit via internal rule] に設定し、[整数オーバーフローで飽和] パラメーターをオフにします。

    このルールでは、オーバーフローは決して発生しません。

  • 継承: LSB を保持– Simulink は、演算の精度を維持するデータ型を選択しますが、全範囲の型が組み込みターゲット ハードウェアに適合しない場合、その範囲を削減します。

    ヒント

    生成コードの効率を向上するには、[アキュムレータのデータ型][Inherit: Inherit via internal rule] に設定し、[整数オーバーフローで飽和] パラメーターをオフにします。

    このルールでは、オーバーフローが発生することがあります。

    組み込みターゲット ハードウェアの設定を変更すると、これらの内部ルールにより選択されるデータ型が変更される可能性があります。コードの効率と数値の精度が、ソフトウェアにより同時に最適化されるとは限りません。ルールが数値精度またはパフォーマンスに対する要求を満たさない場合は、以下のいずれかを行ってください。

    • 出力データ型を明示的に指定する。

    • 単に 継承: 1 番目の入力と同じ を選択します。

    • fixdt(1,32,16) のように既定のデータ型を明示的に指定し、固定小数点ツールを使用してモデルにデータ型を推奨する。詳細については、fxptdlg (Fixed-Point Designer) を参照してください。

    • 独自の継承ルールを指定するには、[継承: 逆伝播による継承] を使用し、Data Type Propagation ブロックを使用します。このブロックの使い方の例については、Signal Attributes ライブラリの Data Type Propagation Examples ブロックを参照してください。

  • 継承: 逆伝播による継承 — 駆動ブロックのデータ型を使用します。

  • 継承: 1 番目の入力と同じ — 1 番目の入力信号のデータ型を使用します。

  • 継承: アキュムレータと同じ — アキュムレータのデータ型を使用します。

プログラムでの使用

ブロック パラメーター: OutDataTypeStr
: 文字ベクトル
: 'Inherit: Inherit via internal rule|'Inherit: Keep MSB'|'Inherit: Keep LSB' | 'Inherit: Inherit via back propagation''Inherit: Same as first input' | 'Inherit: Same as accumulator' | 'double' | 'single' | 'half' | 'int8' | 'uint8' | 'int16' | 'uint16', 'int32' | 'uint32' | 'int64'| 'uint64'|'fixdt(1,16)' | 'fixdt(1,16,0)' | 'fixdt(1,16,2^0,0)' | '<data type expression>'
既定の設定: 'Inherit: Inherit via internal rule'

アキュムレータのデータ型を選択します。型は継承されるか、直接指定されるか、Simulink.NumericType などのデータ型オブジェクトとして表現されます。[継承: 内部ルールによる継承] を選択した場合、Simulink は、組み込みターゲット ハードウェアのプロパティを考慮しつつ、数値の精度、パフォーマンスおよび生成コードのサイズのバランスが取れるように、データ型を選択します。

プログラムでの使用

ブロック パラメーター: AccumDataTypeStr
: 文字ベクトル
: 'Inherit: Inherit via internal rule | 'Inherit: Same as first input' | 'double''single' | 'half' | 'int8' | 'uint8' | 'int16' | 'uint16', 'int32' | 'uint32' | 'int64' | 'uint64' | 'fixdt(1,16)' | 'fixdt(1,16,0)' | 'fixdt(1,16,2^0,0)' | '<data type expression>'
既定の設定: 'Inherit: Inherit via internal rule'

すべての入力信号が同じデータ型をもたなければならないかどうかを指定します。このパラメーターを有効にすると、入力信号のデータ型が異なる場合はシミュレーション中にエラーが発生します。

プログラムでの使用

ブロック パラメーター: InputSameDT
型: 文字ベクトル
値: 'off' | 'on'
既定の設定: 'off'

固定小数点ツールや固定小数点アドバイザーによる変更を避けるために、このブロックのデータ型の設定をロックします。詳細については、出力データ型設定のロック (Fixed-Point Designer)を参照してください。

プログラムでの使用

ブロック パラメーター: LockScale
値: 'off' | 'on'
既定の設定: 'off'

固定小数点演算の丸めモードを指定します。詳細については、丸め (Fixed-Point Designer)を参照してください。

ブロック パラメーターは常に最近傍の表現可能な値に丸められます。ブロックパラメーターの丸めを直接制御するには、MATLAB の丸め関数を使用する式をマスク フィールドに入力します。

プログラムでの使用

ブロック パラメーター: RndMeth
型: 文字ベクトル
値: 'Ceiling' | 'Convergent' | 'Floor' | 'Nearest' | 'Round' | 'Simplest' | 'Zero'
既定の設定: 'Floor'

オーバーフローで飽和するかラップするかを指定します。

動作根拠オーバーフローの影響

このチェック ボックスをオンにする (on)。

モデルでオーバーフローが発生する可能性があるので、生成コードに飽和保護を明示的に組み込むことをお勧めします。

オーバーフローは、データ型が表現できる最小値または最大値のいずれかに飽和します。

int8 (符号付き、8 ビット整数) データ型が表すことができる最大値は 127 です。この最大値を超えるブロックの演算結果により 8 ビット整数のオーバーフローが発生します。チェック ボックスがオンになっていると、ブロック出力は 127 で飽和します。同様に、ブロック出力は最小出力値である -128 で飽和します。

このチェック ボックスをオンにしない (off)。

生成コードの効率を最適化することをお勧めします。

ブロックが範囲外の信号を処理する方法を指定しすぎないようにすることをお勧めします。詳細については、信号範囲のエラーのトラブルシューティングを参照してください。

オーバーフローは、データ型によって表現される適切な値にラップされます。

int8 (符号付き、8 ビット整数) データ型が表すことができる最大値は 127 です。この最大値を超えるブロックの演算結果により 8 ビット整数のオーバーフローが発生します。チェック ボックスをオフにすると、オーバーフローを引き起こした値は int8 として解釈され、意図しない結果が引き起こされる可能性があります。たとえば、int8 として表されるブロック結果 130 (バイナリで 1000 0010) は -126 です。

このチェック ボックスをオンにすると、飽和は出力や結果だけでなく、このブロックの内部演算すべてに適用されます。通常、オーバーフローが可能ではない場合は、コード生成プロセスで検出されます。この場合、コード ジェネレーターでは飽和コードは生成されません。

プログラムでの使用

ブロック パラメーター: SaturateOnIntegerOverflow
型: 文字ベクトル
値: 'off' | 'on'
既定の設定: 'off'

ブロックの特性

データ型

Boolean | double | fixed point | half | integer | single

直達

はい

多次元信号

はい

可変サイズの信号

はい

ゼロクロッシング検出

いいえ

アルゴリズム

このブロックは、MATLAB の関数 sum と同じ加算規則に従います。

2 行 3 列の行列 U があるとします。

  • [次元]1 に設定すると、出力 Y は以下のように計算されます。

    Y=i=12U(i,j)

  • [次元]2 に設定すると、出力 Y は以下のように計算されます。

    Y=j=13U(i,j)

拡張機能

C/C++ コード生成
Simulink® Coder™ を使用して C および C++ コードを生成します。

PLC コード生成
Simulink® PLC Coder™ を使用して構造化テキスト コードを生成します。

固定小数点の変換
Fixed-Point Designer™ を使用して固定小数点システムの設計とシミュレーションを行います。

バージョン履歴

R2006a より前に導入

すべて展開する