Main Content

muxdeintrlv

指定したシフト レジスタを使用してシンボルの順序を復元

構文

deintrlved = muxdeintrlv(data,delay)
[deintrlved,state] = muxdeintrlv(data,delay)
[deintrlved,state] = muxdeintrlv(data,delay,init_state)

説明

deintrlved = muxdeintrlv(data,delay) は一連の内部シフト レジスタを使用して各要素が遅延値をもつ data の要素の順序を復元します。delay はエントリが各シフト レジスタが保持できるシンボル数を示すベクトルです。delay の長さはシフト レジスタ数です。関数がデータを処理する前に、すべてのシフト レジスタをゼロで初期化します。data が複数の行と列をもつ行列である場合、この関数は列を個別に処理します。

[deintrlved,state] = muxdeintrlv(data,delay) はシフト レジスタの最終状態を保持する構造体を出力します。state.value は任意のシフトされないシンボルを保存します。state.index はシフトされる次のレジスタのインデックスです。

[deintrlved,state] = muxdeintrlv(data,delay,init_state) はシフト レジスタを init_state.value に含まれるシンボルで初期化し、最初の入力シンボルを init_state.index で参照されるシフト レジスタへ導きます。構造体 init_state は通常、この同じ関数を以前に呼び出したときの state 出力で、対応するインターリーバーには無関係です。

インターリーバーとデインターリーバーの組み合わせの使用

この関数を関数 muxintrlv の逆関数として使用するには、両方の関数で同じ delay 入力を使用します。その場合は、両関数は、length(delay)*max(delay) の複合遅延を考慮した後 muxintrlv に続いて muxdeintrlv を適用するとデータが変更されないという意味で逆関数といえます。畳み込みインターリーバーの遅延の詳細については、畳み込みインターリーバーの遅延を参照してください。

下記の例は、muxdeintrlv を繰り返して呼び出す際に、状態入力および出力を利用する方法を示します。[deintrlved1; deintrlved2] は、deintrlved と同じであることに注意してください。

delay = [0 4 8 12]; % Delays in shift registers
symbols = 100; % Number of symbols to process
% Interleave random data.
intrlved = muxintrlv(randi([0 1],symbols,1),delay);

% Deinterleave some of the data, recording state for later use.
[deintrlved1,state] = muxdeintrlv(intrlved(1:symbols/2),delay);
% Deinterleave the rest of the data, using state as an input argument.
deintrlved2 = muxdeintrlv(intrlved(symbols/2+1:symbols),delay,state);

% Deinterleave all data in one step.
deintrlved = muxdeintrlv(intrlved,delay);

isequal(deintrlved,[deintrlved1; deintrlved2])

出力は以下のようになります。

ans =

     1

この関数を利用する別の例がMATLAB で連続した整数のシーケンスを使用した畳み込みインターリーブとデインターリーブにあります。

参考文献

[1] Heegard, Chris, and Stephen B. Wicker, Turbo Coding, Boston, Kluwer Academic Publishers, 1999.

バージョン履歴

R2006a より前に導入