Buffer
入力シーケンスの小さいフレーム サイズまたは大きいフレーム サイズへのバッファリング
ライブラリ:
DSP System Toolbox /
Signal Management /
Buffers
説明
Buffer ブロックは常にフレームベースの処理を実行します。ブロックは入力の各列にデータを再分散して異なるフレーム サイズで出力を生成します。信号をより大きいフレーム サイズにバッファリングすると、入力よりも "遅い" フレーム レートの出力が得られます。たとえば、次の図のようなスカラー入力を検討します。

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

ブロックによってオーバーラップのないバッファーの出力 "フレーム サイズ" と "フレーム レート" が調整されるため、信号のサンプル周期は次のように入力と出力の両方で同じになっています。Tso = Tsi
このブロックは、ブロックの入力レートと出力レートが同じ場合は、Triggered Subsystem をサポートします。
例
Buffering Input with Overlap
Buffer a two-channel input using an Output buffer size of three and four and a Buffer overlap of one.
端子
入力
単一チャネル信号をバッファリングするには、スカラーまたは列ベクトルを入力します。マルチチャネル信号をバッファリングするには、行ベクトルまたは行列を入力します。単一チャネル信号をバッファリングするには、サイズが Mi 行 1 列のスカラーまたは列ベクトルを入力します。ここで、Mi は入力フレーム サイズです。
データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | Boolean | fixed point
複素数のサポート: あり
出力
バッファリングした入力信号。ベクトルまたは行列として返されます。
入力が単一チャネル信号の場合、次のようになります。
1 行 1 列 (スカラー) — 出力は、Mo 行 1 列のベクトル。
Mi 行 1 列 (列ベクトル) — 出力は、Mo 行 1 列のベクトル。
ここで、
Mi — 入力フレーム サイズ
Mo — [出力バッファー サイズ] パラメーターの値
入力フレーム周期は Mi · Tsi です。ここで Tsi は入力サンプル周期です。出力フレーム周期は です。ここで L は [バッファー オーバーラップ] パラメーターの値、Tsi は入力サンプル周期です。[バッファー オーバーラップ] パラメーターを Mo – 1 に設定すると、出力フレーム周期が入力サンプル周期と等しくなります。
入力がマルチチャネル信号の場合、次のようになります。
1 行 N 列 — 出力は、Mo 行 N 列の行列。
Mi 行 N 列 — 出力は、Mo 行 N 列の行列。
ここで、
N — 信号のチャネル数
Mi — 入力フレーム周期
Mo は [出力バッファー サイズ] パラメーターの値で、入力フレーム サイズ Mi より大きいまたは小さい場合があります。ブロックは N 個の入力チャネルをそれぞれ個別にバッファリングします。
入力フレーム周期は Mi · Tsi となります。出力フレーム周期は で、[バッファー オーバーラップ] が の場合にシーケンス サンプル周期と等しくなります。したがって、出力サンプル周期 Tso は次のように、入力サンプル周期 Tsi と関連付けられます。
出力は入力と同じデータ型および実数/複素数をもちます。
データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | Boolean | fixed point
複素数のサポート: あり
パラメーター
各チャネルから出力フレームにバッファリングする連続サンプル数 Mo を指定します。
データ型: double | int8 | int16 | int32 | uint8 | uint16 | uint32
サンプル数 L を指定します。連続する出力フレームのそれぞれでオーバーラップまたはアンダーラップする量を指定します。
バッファーでデータをオーバーラップするには、L の値を の範囲で指定します。ここで、Mo は [出力バッファー サイズ] パラメーターの値です。ブロックは現在の出力から L 個のサンプル (列) を取得し、次の出力でそれを繰り返します。オーバーラップする場合、ブロックは の "新しい" 入力サンプルを取得してから、バッファリングされたデータを出力に伝播します。
の場合、信号をアンダーラップでバッファリングしています。ブロックはバッファーが満杯になると L 個の入力サンプルを破棄し、周期 でバッファーを出力します。それにより、オーバーラップがゼロの場合よりも長くなります。
出力フレーム周期は で、入力シーケンス サンプル周期 Tsi と等しくなります。ここで [バッファー オーバーラップ] は です。
データ型: double | int8 | int16 | int32 | uint8 | uint16 | uint32
非ゼロ レイテンシの場合のブロックの初期出力値を指定します。スカラー、ベクトルまたは行列のいずれかとして指定します。
ゼロタスク レイテンシに記載されたケースを除くすべてのシングルタスク演算では、Buffer ブロックのバッファーは [初期条件] パラメーターで指定される値に初期化されます。ブロックはこのバッファーから読み取って最初の D 個の出力サンプルを生成します。ここで、
[初期条件] パラメーターの次元は [バッファー オーバーラップ] L と入力が単一チャネルであるかマルチチャネルであるかによって異なります。
の場合、[初期条件] パラメーターはスカラーでなければなりません。
の場合、[初期条件] パラメーターはスカラーまたは次のいずれかの制約のあるベクトルにすることができます。
単一チャネル入力の場合、[初期条件] パラメーターは長さが Mo のベクトル (Mi が 1 の場合) または長さが Mi のベクトル (Mo が 1 の場合) にすることができます。
マルチチャネル入力の場合、[初期条件] パラメーターは長さが Mo * N のベクトル (Mi が 1 の場合) または長さが Mi * N のベクトル (Mo が 1 の場合) にすることができます。
すべてのマルチタスク演算では、rebuffer_delay 関数を使用して、Buffer ブロックが指定の組み合わせのバッファー サイズとバッファー オーバーラップに対して生成する遅延の正確な値 (サンプル数) を計算します。
任意のフレーム サイズ間での全般的なバッファリングでは、[初期条件] パラメーターはスカラーでなければなりません。その後、この値は初期出力のすべての要素で繰り返されます。ただし、入力が 1 行 N 列の行ベクトルで、ブロックの出力が Mo 行 N 列の行列である特別なケースの場合、[初期条件] は次のいずれかになります。
Mo 行 N 列の行列
初期出力のすべての列で繰り返される、長さが Mo のベクトル
初期出力のすべての要素で繰り返されるスカラー
出力が 1 行 N 列の行ベクトル、つまり Mi 行 N 列の行列をバッファー解除した結果として得られる、特別なケースの場合、[初期条件] は次のいずれかになります。
最初の Mi サンプル時間中に各チャネルに対して順番に出力される Mi サンプルを含むベクトル
初期出力のすべての要素で繰り返されるスカラー
レイテンシと Simulink® タスク モードの詳細については、Excess Algorithmic Delay (Tasking Latency)と時間ベースのスケジューリングとコード生成 (Simulink Coder)を参照してください。
データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | Boolean | fixed point
複素数のサポート: あり
ブロックの特性
データ型 |
|
直達 |
|
多次元信号 |
|
可変サイズの信号 |
|
ゼロクロッシング検出 |
|
詳細
"ゼロタスク レイテンシ" とは、t = 0 で受信した最初の入力サンプルが最初の出力サンプルとして表示されることを意味します。Simulink シングルタスク モードでは、Buffer ブロックは次のような特別な場合にゼロタスク レイテンシになります。
スカラー入力と出力 () にゼロまたは負の [バッファー オーバーラップ] () がある
入力フレーム サイズが出力フレーム サイズの整数倍である
ここで k は [バッファー オーバーラップ] () がゼロの整数です。このような主な例として以下が挙げられます。
スカラー出力 () をもち、[バッファー オーバーラップ] がゼロ () の任意の入力フレーム サイズ Mi
[バッファー オーバーラップ] がゼロ () で、等しい入力フレーム サイズと出力フレーム サイズ ()
次の条件では、Enabled Subsystem で Buffer ブロックを使用できません。
マルチレートのマルチタスク環境内
[バッファー オーバーラップ] パラメーターが負の値に設定されている場合
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 ブロックがデータを出力すると、貯蔵庫のデータ量は減少します。オーバーランを回避するため、貯蔵庫のデータ量が実際のバッファー サイズを上回るたびに貯蔵庫内の最も古いサンプルが破棄されます。アンダーランを回避するため、出力時に貯蔵庫にデータがない場合は直近のサンプルが繰り返されます。
拡張機能
Buffer ブロックは Simulink Real-Time™ のコード生成をサポートします。このターゲット用に生成されるコードは同時実行されます。このコードを生成するには、モデルのシステム ターゲット ファイルを [speedgoat.tlc] または Simulink Real-Time でサポートされているその他のターゲット ファイルに設定します。また、Buffer ブロックは特定の条件を満たす必要があります。
システム ターゲット ファイルを設定するには、次のようにします。
Simulink モデル ウィンドウで、[モデル化] タブの [モデル設定] をクリックします。
[モデル設定]、[コード生成] ペインで、[システム ターゲット ファイル] を
[speedgoat.tlc]または Simulink Real-Time でサポートされているその他のターゲット ファイルに設定します。
さらに、Buffer ブロックは、以下の条件を満たさなければなりません。
出力と入力のバッファー サイズの比は純粋な整数、つまり 1/N または N/1 である必要があります。3/12、1/7、7/1、2/4 などの比は、すべて有効な比です。Buffer ブロックでは、[出力バッファー サイズ (チャネルあたり)] パラメーターを使用して、適切な出力バッファー サイズを指定できます。
フレーム間でオーバーラップがあってはなりません。Buffer ブロックでは、[バッファー オーバーラップ] パラメーターを
0に設定します。
バージョン履歴
R2006a より前に導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)


