Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

heldeintrlv

helintrlv を使用したシンボルの並べ替えられた順序の復元

構文

[deintrlved,state] = heldeintrlv(data,col,ngrp,stp)
[deintrlved,state] = heldeintrlv(data,col,ngrp,stp,init_state)
deintrlved = heldeintrlv(data,col,ngrp,stp,init_state)

説明

[deintrlved,state] = heldeintrlv(data,col,ngrp,stp) は、シンボルの順序を行ごとに配列に配置し、らせん状にグループを選択して出力 deintrlved 内に配置し、data 内のシンボルの順序を復元します。data には、col*ngrp 要素がなければなりません。data が複数行と列からなる行列の場合、col*ngrp 行がなければなりません。また、関数は列を個別に処理します。state は、配列の最終状態を示す構造体です。state.value には、配列の col 列内に維持され、出力に表示されない入力シンボルが格納されます。

この関数は内部計算に配列を使用します。配列には、1、2、3、... と順番にインデックス付けされる無限数の行と col 列があります。関数は配列の上位をゼロで初期化します。次に、col*ngrp シンボルを入力から配列の次の ngrp 行に配置します。この関数は出力 intrlved の配列からシンボルを配置し、同時に ngrp シンボルを配置します。ngrp シンボルの k 番目の集合は、行 1+(k-1)*stp から始まる、配列の k 番目の列からのものです。出力シンボルの一部は入力シンボルではなく既定値 0 です。同様に、入力シンボルの一部は配列に残り、出力に表示されません。

[deintrlved,state] = heldeintrlv(data,col,ngrp,stp,init_state) は、ゼロの代わりに init_state.value に含まれているシンボルを使用して配列を初期化します。構造体 init_state は通常、この同じ関数を以前に呼び出したときの state 出力で、対応するインターリーバーには無関係です。この構文では、出力シンボルの一部は既定値 0、一部は data からの入力シンボル、一部は init_state.value からの初期値です。

deintrlved = heldeintrlv(data,col,ngrp,stp,init_state) は、デインターリーバーの最終状態を記録しないこと以外は、上の構文と同じです。この構文はこの関数への一連の呼び出しの最後に適しています。しかし、デインターリーバー処理を続行するためにこの関数を再度呼び出す場合は、上記の構文がより適しています。

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

この関数を関数 helintrlv の逆関数として使用するには、両方の関数で同じ colngrp、および stp 入力を使用します。その場合は、両関数は、col*ngrp*ceil(stp*(col-1)/ngrp) の複合遅延を考慮した後 helintrlv に続いて heldeintrlv を適用するとデータが変更されないという意味で逆関数といえます。畳み込みインターリーバーの遅延の詳細は、畳み込みインターリーバーの遅延を参照してください。

メモ

遅延は data 内のシンボル数の整数倍であるため、関数が遅延とそれ以外を示す結果を出力するには heldeintrlv を最低でも "2 回" 使用しなければなりません (実際の遅延値によっては 2 回より多くなる可能性があります)。

インターリーバーとデインターリーバーの組み合わせの遅延を考慮して、インターリーブされたデータを復元します。

col = 4; ngrp = 3; stp = 2; % Helical interleaver parameters
% Compute the delay of interleaver-deinterleaver pair.
delayval = col * ngrp * ceil(stp * (col-1)/ngrp);

len = col*ngrp; % Process this many symbols at one time.
data = randi([0 9],len,1); % Random symbols
data_padded = [data; zeros(delayval,1)]; % Pad with zeros.

% Interleave zero-padded data.
[i1,istate] = helintrlv(data_padded(1:len),col,ngrp,stp);
[i2,istate] = helintrlv(data_padded(len+1:2*len),col,ngrp, ...
              stp,istate);
i3 = helintrlv(data_padded(2*len+1:end),col,ngrp,stp,istate);

% Deinterleave.
[d1,dstate] = heldeintrlv(i1,col,ngrp,stp);
[d2,dstate] = heldeintrlv(i2,col,ngrp,stp,dstate);
d3 = heldeintrlv(i3,col,ngrp,stp,dstate);

% Check the results.
d0 = [d1; d2; d3]; % All the deinterleaved data
d0_trunc = d0(delayval+1:end); % Remove the delay.
ser = symerr(data,d0_trunc)

下記の出力はシンボル誤りが発生していないことを示します。

ser =

     0
R2006a より前に導入