ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Buffer

入力シーケンスの小さいフレーム サイズまたは大きいフレーム サイズへのバッファリング

ライブラリ

Signal Management / Buffers

dspbuff3

説明

Buffer ブロックは常にフレームベースの処理を実行します。ブロックは入力の各列にデータを再分散して異なるフレーム サイズで出力を生成します。信号をより大きいフレーム サイズにバッファリングすると、入力よりも "遅い" フレーム レートの出力が得られます。たとえば、次の図を使用してスカラー入力について考えます。

信号をより小さいフレーム サイズにバッファリングすると、入力よりも "速い" フレーム レートの出力が得られます。たとえば、次の図を使用してスカラー出力について考えます。

ブロックによってオーバーラップのないバッファーの出力 "フレーム サイズ" と "フレーム レート" が調整されるため、信号のサンプル周期は次のように入力と出力の両方で同じになっています。Tso = Tsi

このブロックは、ブロックの入力レートと出力レートが同じ場合は、Triggered Subsystem をサポートします。

単一チャネル信号のバッファリング

次の表に、入力が単一チャネル信号の場合の Buffer ブロックの出力次元を示します。Mo[Output buffer size (per channel)] パラメーターの値です。

入力の次元出力の次元
1 行 1 列 (スカラー)Mo 行 1 列
Mi 行 1 列 (列ベクトル)Mo 行 1 列

入力フレーム周期は Mi · Tsi です。ここで Mi は入力フレーム サイズ、Tsi は入力サンプル周期です。出力フレーム周期は (MoL)Tsi です。ここで L は [Buffer overlap] パラメーターの値、Tsi は入力サンプル周期です。[Buffer overlap] パラメーターを Mo – 1 に設定すると、出力フレーム周期が入力サンプル周期と等しくなります。

マルチチャネル信号のバッファリング

次の表に、入力がマルチチャネル信号の場合の Buffer ブロックの出力次元を示します。Mo[Output buffer size] パラメーターの値で、入力フレーム サイズ Mi より大きいまたは小さい場合があります。ブロックは N 個の入力チャネルをそれぞれ個別にバッファリングします。

入力の次元出力の次元
1 行 N 列 (行ベクトル)Mo 行 N 列
Mi 行 N 列 (行列)Mo 行 N 列

入力フレーム周期は Mi · Tsi です。ここで Mi は入力フレーム サイズ、Tsi は入力サンプル周期です。出力フレーム周期は (MoL)Tsi で、[Buffer overlap]Mo1 の場合にシーケンス サンプル周期と等しくなります。したがって、出力サンプル周期は次のように、入力サンプル周期と関連付けられます。

Tso=(MoL)TsiMi

オーバーラップまたはアンダーラップでのバッファリング

[Buffer overlap] パラメーター L を使用して、連続する出力フレームのそれぞれでオーバーラップまたはアンダーラップする量を指定します。バッファーでデータをオーバーラップするには、L の値を 0L<Mo の範囲で指定します。ここで、Mo[Output buffer size] パラメーターの値です。ブロックは現在の出力から L 個のサンプル (列) を取得し、次の出力でそれを繰り返します。オーバーラップする場合、ブロックは MoL の "新しい" 入力サンプルを取得してから、バッファリングされたデータを出力に伝播します。

L<0 の場合、信号をアンダーラップでバッファリングしています。ブロックはバッファーが満杯になると L 個の入力サンプルを破棄し、周期 (MoL)Tsi でバッファーを出力します。それにより、オーバーラップがゼロの場合よりも長くなります。

出力フレーム周期は (MoL)Tsi で、入力シーケンス サンプル周期 Tsi と等しくなります。ここで [Buffer overlap]Mo1 です。

レイテンシ

"ゼロタスク レイテンシ" とは、t = 0 で受信した最初の入力サンプルが最初の出力サンプルとして表示されることを意味します。Simulink® シングルタスク モードでは、Buffer ブロックは次のような特別な場合にゼロタスク レイテンシになります。

  • スカラー入力と出力 (Mo=Mi=1) にゼロまたは負の [Buffer overlap] (L0) がある

  • 入力フレーム サイズが出力フレーム サイズの整数倍である

    Mi=kMo

    ここで k は [Buffer overlap] (L=0) がゼロの整数です。このような主な例として以下があげられます。

    • スカラー出力 (Mo=1) をもち、[Buffer overlap] がゼロ (L=0) の入力フレーム サイズ Mi

    • [Buffer overlap] がゼロ (L=0) で、等しい入力フレーム サイズと出力フレーム サイズ (Mo=Mi)

上記のケースを除くすべてのシングルタスク演算では、Buffer ブロックのバッファーは [Initial conditions] パラメーターで指定される値に初期化されます。ブロックはこのバッファーから読み取って最初の D 個の出力サンプルを生成します。ここで、

D={Mo+L(L0)Mo(L<0)

[Initial conditions] パラメーターの次元は [Buffer overlap] L と入力が単一チャネルであるかマルチチャネルであるかによって異なります。

  • L0 の場合、[Initial conditions] パラメーターはスカラーでなければなりません。

  • L=0 の場合、[Initial conditions] パラメーターはスカラーまたは次の制約のあるベクトルにすることができます。

    • 単一チャネル入力の場合、[Initial conditions] パラメーターは長さが Mo のベクトル (Mi が 1 の場合) または長さが Mi のベクトル (Mo が 1 の場合) にすることができます。

    • マルチチャネル入力の場合、[Initial conditions] パラメーターは長さが Mo * N のベクトル (Mi が 1 の場合) または長さが Mi * N のベクトル (Mo が 1 の場合) にすることができます。

すべての "マルチタスク" 演算では、関数 rebuffer_delay を使用して、Buffer ブロックが指定の組み合わせのバッファー サイズとバッファー オーバーラップに対して生成する遅延の正確な値をサンプル内で計算します。

任意のフレーム サイズ間での全般的なバッファリングでは、[Initial conditions] パラメーターはスカラー値でなければなりません。その後、この値は初期出力のすべての要素で繰り返されます。ただし、入力が 1 行 N 列の行ベクトルで、ブロックの出力が Mo 行 N 列の行列である特別なケースの場合、[Initial conditions] は次のいずれかになります。

  • Mo 行 N 列の行列

  • 初期出力のすべての列で繰り返される、長さが Mo のベクトル

  • 初期出力のすべての要素で繰り返されるスカラー

出力が 1 行 N 列の行ベクトル、つまり Mi 行 N 列の行列をバッファー解除した結果として得られる、特別なケースの場合、[Initial conditions] は次のいずれかになります。

  • 最初の Mi サンプル時間中に各チャネルに対して順番に出力される Mi サンプルを含むベクトル

  • 初期出力のすべての要素で繰り返されるスカラー

Enabled Subsystem での動作

次の条件では、Enabled Subsystem で Buffer ブロックを使用できません。

  • マルチレートのマルチタスク環境内

  • [Buffer overlap] パラメーターが負の値に設定されている場合

Buffer ブロックは一時的にデータを格納する内部貯蔵庫をもっています。Buffer ブロックが Enabled Subsystem で使用されると、この貯蔵庫がオーバーランまたはアンダーラン状態になる可能性があります。ブロックはこの状況の発生に対するセーフガードを実装します。

オーバーランは、バッファーの容量以上のデータがバッファーに入力されると発生します。たとえば、サイズ 3 のフレームへのスカラー入力のバッファリングが、1 秒ごとに入力を受け入れて 3 秒ごとに出力を行うバッファーを使用する場合を考えます。このバッファーを、t = 3 秒、t = 6 秒のように 3 秒ごとにディセーブルになる Enabled Subsystem 内に配置すると、バッファーは内部貯蔵庫を空にすることなくデータを蓄積します。その結果、オーバーランが発生します。

アンダーランは、バッファーに十分な出力データがない場合に発生します。たとえば、サイズ 3 のフレームへのスカラー入力のバッファリングが、1 秒ごとに入力を受け入れて 3 秒ごとに出力を行うバッファーを使用する場合を再度考えてみます。このバッファーを t = 10 秒、t = 11 秒、t = 13 秒、t = 14 秒、t = 16 秒および t = 17 秒でディセーブルになる Enabled Subsystem 内に配置すると、内部貯蔵庫は枯渇して t = 18 秒で出力するデータがなくなります。その結果、アンダーランが発生します。

オーバーランやアンダーランの発生を防ぐため、Buffer ブロックは内部貯蔵庫のデータ量を記録します。Buffer ブロックがデータを読み取ると、貯蔵庫のデータ量は増加します。データが Buffer ブロックから出力されると、貯蔵庫のデータ量は減少します。オーバーランを回避するため、貯蔵庫のデータ量が実際のバッファー サイズを上回るたびに貯蔵庫内の最も古いサンプルが破棄されます。アンダーランを回避するため、出力時に貯蔵庫にデータがない場合は直近のサンプルが繰り返されます。

オーバーラップのある 2 チャネル入力のバッファリング

ex_buffer_tut4 モデルは、[Output buffer size] に 3、[Buffer overlap] に 1 を使用して、2 チャネルの入力をバッファリングします。次の図では、Buffer ブロックの入力と出力を説明します。

出力は 8 個のサンプル分遅延している点に注意してください。このモデルでのパラメーター設定と、モデルが Simulink マルチタスク モードで実行されているために、このレイテンシが発生します。そのため、最初の 8 個の出力サンプルでは [Initial conditions] パラメーターで指定された値 (この場合はゼロ) を採用します。関数 rebuffer_delay を使用して、任意の組み合わせのフレーム サイズ値とオーバーラップ値の Buffer ブロックのレイテンシを決定することができます。

オーバーラップのある 4 チャネル入力のバッファリング

ex_buffer_tut3 は、[Output buffer size] に 3、[Buffer overlap] に 1 を使用して、4 チャネルの入力をバッファリングします。次の図では、Buffer ブロックの入力と出力を説明します。

入力ベクトルは 2 番目の行列の 2 行目までは出力で表示されないことに注意してください。これは Buffer ブロックでのレイテンシによるものです。最初の出力行列 (この例ではすべてゼロ) は [Initial conditions] パラメーターの値が反映されていますが、2 番目の出力の 1 行目がゼロであるのは、連続する出力フレーム間で 1 つのサンプルがオーバーラップした結果です。

関数 rebuffer_delay をフレーム サイズ 1 で使用して、サンプル内の遅延を正確に計算することができます。前述の例では次のようになります。

d = rebuffer_delay(1,3,1)
d =
     4

これは前の図で示される 4 つのサンプルのチャネルごとの遅延 (ゼロ) と一致します。

ダイアログ ボックス

Output buffer size

各チャネルから出力フレームにバッファリングする連続サンプル数 Mo を指定します。

Buffer overlap

連続出力フレームがオーバーラップするサンプル数 L を指定します。

Initial conditions

非ゼロ レイテンシの場合のブロックの初期出力値を指定します。スカラー、ベクトルまたは行列のいずれかになります。

Treat Mx1 and unoriented sample-based signals as

サンプルベースの M 行 1 列の列ベクトルと、方向性をもたないサンプルベースの長さが M のベクトルを、ブロックがどのように処理するか指定します。以下のオプションのいずれかを選択します。

  • One channel — このオプションを選択すると、ブロックは M 行 1 列のサンプルベースの入力と方向性をもたないサンプルベースの入力を列ベクトル (1 チャネル) として扱います。このモードでは、ブロックの出力は Mo 行 1 列の列ベクトルとなり、Mo[Output buffer size] です。

  • M channels (this choice will be removed – see release notes) — このオプションを選択すると、ブロックは M 行 1 列のサンプルベースの入力と方向性をもたないサンプルベースの入力を 1 行 M 列の行ベクトルとして扱います。ブロックは常にフレームベースの処理を行うので、ブロックは 1 行 M 列の行ベクトルを M 個の個別チャネルとして解釈します。このモードでは、ブロックの出力は Mo 行 M 列の行列となり、Mo[Output buffer size]、M はサンプルベースの入力ベクトルの長さとなります。

    メモ:   このパラメーターは将来のリリースで削除される予定です。その時点で、Buffer ブロックは常にフレームベースの処理を行うようになります。

サポートされているデータ型

端子

サポートされているデータ型

入力

  • 倍精度浮動小数点

  • 単精度浮動小数点

  • 固定小数点

  • boolean

  • 8、16、32 ビット符号付き整数

  • 8、16、32 ビット符号なし整数

Output

  • 倍精度浮動小数点

  • 単精度浮動小数点

  • 固定小数点

  • boolean

  • 8、16、32 ビット符号付き整数

  • 8、16、32 ビット符号なし整数

参考

Delay LineDSP System Toolbox
UnbufferDSP System Toolbox
rebuffer_delayDSP System Toolbox

詳細については、「Convert Sample and Frame Rates in Simulink」および「Buffering and Frame-Based Processing」を参照してください。

R2006a より前に導入

この情報は役に立ちましたか?