Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

comm.SphereDecoder

球面復号化器を使用した入力の復号化

説明

Sphere Decoder System object™ は、NT 本のアンテナにわたって送信されたシンボルを、球面復号化アルゴリズムで復号化します。

球面復号化器を使用して入力を復号化するには、以下の手順に従います。

  1. 球面復号化器オブジェクトを定義および設定します。構築を参照してください。

  2. step を呼び出して、comm.SphereDecoder のプロパティに従い、入力シンボルを復号化します。step の動作は、ツールボックスの各オブジェクト固有のものです。

メモ

R2016b 以降では、step メソッドを使用して、System object によって定義された演算を実行する代わりに、引数を関数であるかのように使ってオブジェクトを呼び出すことができます。たとえば、y = step(obj,x)y = obj(x) は同等の演算を実行します。

構築

H = comm.SphereDecoder は、System object H を作成します。このオブジェクトは、NT 本の送信アンテナと NR 本の受信アンテナを使用して MIMO チャネル経由で受信された一連のシンボルの最尤解を球面復号化アルゴリズムによって求めます。

H = comm.SphereDecoder(Name,Value) は、指定されたプロパティ名を指定された値に設定して、球面復号化器オブジェクト H を作成します。Name は一重引用符 (' ') で囲まなければなりません。Name1,Value1,…,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順番で指定できます。

H = comm.SphereDecoder(CONSTELLATION,BITTABLE) は、Constellation プロパティを CONSTELLATION に設定し、BitTable プロパティを BITTABLE に設定して、球面復号化器オブジェクト H を作成します。

プロパティ

Constellation

送信アンテナ当たりの信号コンスタレーション

コンスタレーションを、送信ビットのマップ先のコンスタレーション点を含む複素数列ベクトルとして指定します。既定の設定は、平均電力が 1 の QPSK コンスタレーションです。ベクトルの長さは 2 のべき乗でなければなりません。オブジェクトは、各送信アンテナでは同じコンスタレーションが使用されるものとします。

BitTable

各コンスタレーション点に使用されるビット マッピング。

Constellation プロパティで数値行列として指定したシンボルのビット マッピングを指定します。既定の設定は [0 0; 0 1; 1 0; 1 1] で、既定の Constellation プロパティの値に一致します。

行列サイズは [ConstellationLength bitsPerSymbol] にしなければなりません。ConstellationLengthConstellation プロパティの長さを表し、bitsPerSymbol は各シンボルが符号化するビットの数を表します。

InitialRadius

復号化アルゴリズムの初期探索半径。

復号化アルゴリズムの初期探索半径を Infinity または ZF Solution のいずれかに指定します。既定の設定は Infinity です。

このプロパティを Infinity に設定すると、オブジェクトの初期探索半径が Inf に設定されます。

このプロパティを ZF Solution に設定すると、オブジェクトの初期探索半径がゼロフォーシング解に設定されます。この計算は復号化時に入力チャネルの疑似逆を使用します。コンスタレーションのサイズが大きい場合やアンテナの数が多い場合は、初期探索半径が小さくなるという利点が得られる可能性があります。しかしほとんどの場合、ZF Solution が行う追加演算にメリットはありません。

DecisionType

復号化判定方法を Soft または Hard として指定します。既定の設定は Soft です。

このプロパティを Soft に設定した場合、復号化器は対数尤度比 (LLR)、つまり軟ビットを出力します。

このプロパティを Hard に設定した場合、復号化器は軟 LLR をビットに変換します。硬判定出力の logical 配列は、負の LLR = 0、その他すべての値 = 1 のマッピングに従います。

メソッド

step球面復号化アルゴリズムを使用して受信シンボルを復号化する
すべての System object に共通
release

System object のプロパティ値の変更の許可

すべて折りたたむ

16-QAM コンスタレーションを使用して一連のビットを変調します。その信号を MIMO チャネル上の 2 つの並列ストリームとして送信します。球面復号化器を使用して完全なチャネル認識で復号化します。

変調次数、送信ビット数、Eb/No 比およびシンボル マップを指定します。

bps = 4; % Bits per symbol
M = 2^bps; % Modulation order
nBits = 1e3*bps;
ebno = 10;
symMap = [11 10 14 15 9 8 12 13 1 0 4 5 3 2 6 7];

関数 qammod とカスタム シンボル マップを使用して、16-QAM 変調器のシンボル マッピングを生成して表示します。

sym = qammod(symMap(1:M)',M,symMap, ...
    'UnitAveragePower',true,'PlotConstellation',true);

Figure contains an axes object. The axes object with title 16-QAM, Custom Mapping, UnitAveragePower=true, xlabel In-phase Amplitude, ylabel Quadrature Amplitude contains 19 objects of type line, text. One or more of the lines displays its values using only markers

左ビットを最上位ビット (msb) として、シンボル マップの 10 進数値をバイナリ ビットに変換します。Mbps 列の行列 bitTable は、球面復号化器によって使用されます。

bitTable = int2bit(symMap,bps)';

2x2 MIMO チャネル System object を作成し、PathGainsOutputPorttrue に設定してパス ゲインをチャネル推定として使用します。結果の反復性を保証するため、グローバル乱数ストリームを使用するようにオブジェクトを設定します。

mimo = comm.MIMOChannel( ...
    'PathGainsOutputPort',true, ...
    'RandomStream','Global stream');

AWGN チャネル System object を作成します。

awgnChan = comm.AWGNChannel('EbNo',ebno,'BitsPerSymbol',bps);

硬判定復号化を使用してビットを処理する球面復号化器 System object を作成します。カスタム ビット テーブルとシンボル マップを使用して構成します。

sphDec = comm.SphereDecoder('Constellation',sym, ...
    'BitTable',bitTable,'DecisionType','Hard');

エラー レート System object を作成します。

berRate = comm.ErrorRate;

グローバル乱数発生器のシードの設定

rng(37)

ランダム データ ストリームを生成します。

data = randi([0 1],nBits,1);

データを変調して、2x2 MIMO チャネルで使用するように、2 つのストリームに形状を変更します。

modData = qammod(data,M,symMap, ...
    'InputType','bit','UnitAveragePower',true);
modData = reshape(modData,[],2);

変調データを MIMO フェージング チャネルを経由して渡し、AWGN を追加します。

[fadedSig,pathGains] = mimo(modData);
rxSig = awgnChan(fadedSig);

pathGains を完全なチャネル推定として使用して、受信信号を復号化します。

decodedData = sphDec(rxSig,squeeze(pathGains));

誤りの計算を有効にするため、復号化された硬判定データ (logical 行列) を、倍精度列ベクトルに変換します。ビット エラー レートおよびエラー数を計算して表示します。

dataOut = double(decodedData(:));
errorStats = berRate(data,dataOut);
errorStats(1:2)
ans = 2×1

    0.0380
  152.0000

アルゴリズム

このオブジェクトは、単一ツリー探索 (STS) ツリー走査として実装された軟出力シュノール・オイヒナー球面復号化器 (SESD) によって軟出力最大対数の事後確率 (APP) MIMO 検出器を実装します。このアルゴリズムはコンスタレーションとビット テーブルがすべての送信アンテナで同じであることを前提とします。受信シンボル ベクトルと推定チャネル行列を入力として与えると、送信ビットの対数尤度比 (LLR) が出力されます。

このアルゴリズムが前提とするモデルは、NT 本の送信アンテナと NR 本の受信アンテナを備え、NT 個のシンボルが同時に送信される MIMO システム モデルです。これは次のように表されます。

y = Hs + n.

ここで、y は受信シンボルで、H は MIMO チャネル行列、s は送信シンボル ベクトル、および n は熱ノイズです。

MIMO 検出器は最尤 (ML) 解、s^ML を求めます。次のようになります。

s^ML=argminsoyHs2

ここで、O は、選択される s の NT 個の要素からの複素数値のコンスタレーションです。

軟検出はビットごとの推定の信頼性を測定するのに役立つビットごとの対数尤度比 (LLR) をも計算します。LLR は、最大対数近似を使用して次のように計算されます。

L(xj,b)=minsxj,b(0)yHs2λMLminsxj,b(1)yHs2λj,bML¯

ここで、

  • L(xj,b) は、各ビットの LLR 推定値です。

  • xj,b は、それぞれ送信されたビット、 j 番目のシンボルの b 番目のビットです。

  • xj,b(0)xj,b(1)は、j 番目のスカラー シンボルのラベル内の b 番目のビットがそれぞれ 0 および 1 であるベクトル シンボルの互いに素な集合です。2 つの記号 λ は二乗ノルムとして計算された距離を表します。具体的には、次のようになります。

    • λML は、距離 s^ML です。

    • λj,bML¯ は、対抗仮説までの距離です。これは s^ML の j 番目のエントリのバイナリ ラベル内の b 番目のビットのバイナリ補数、つまり最小限のシンボル セット xj,b(xj,bML¯) を表します。このシンボル セットには、j 番目のエントリの b 番目のビットが s^ML の同じエントリと比較して反転された、可能性のあるすべてのベクトルが含まれます。

xj,b(xj,bML)0 であるか 1 であるかに基づいて、ビット xj,b の LLR 推定は次のように計算されます。

L(xj,b)={λMLλj,bML¯,xj,bML=0λj,bML¯λML,xj,bML=1

復号化器の設計は s^MLλML、および λj,bML¯ を効率的に見つけることを目的とします。

この探索は球面復号化アルゴリズムによってツリー探索に変換できます。そのために、チャネル行列は QR 分解によって H=QR に分解されます。y を QH に左から乗算することで、問題は次のように再定式化できます。

λML=argminsoy¯Rs2λj,bML¯=sxj,b(xj,bML¯)argminy¯Rs2

この再定式化された問題の定義を使用して、ここから R の三角構造を利用し、可能性のある s ベクトルをリーフ ノードとするツリー構造を作成し、ツリーの各ノードまでの部分距離を計算して親ノードの部分距離に累積的に加算できます。

STS アルゴリズムでは、λMLλj,bML¯ の両方のメトリクスが同時に探索されます。目標は、メトリクス λML とそれに対応するビット シーケンス xML およびすべての対抗仮説のメトリクス xj,b(xj,bML) を含むリストを作成することです。続いて、λML または λj,bML¯ の更新につながる可能性がある場合にのみ、ある特定のノードからのサブツリーが探索されます。

STS アルゴリズムの流れを要約すると、次のようになります。

  1. リーフ ノードに達したときに新しい ML 仮説が見つかった場合 (d(x)<λML)xj,b=xj,bML¯ であるすべての λj,bML¯λML に設定され、次にそれが評価された対抗仮説になります。次に、λML が現在の距離 d(x) に設定されます。

  2. d(x)λML の場合は、必要となるのは対抗仮説のチェックだけです。(d(x)<λML) かつ xj,b=xj,bML¯ であるすべての j と b について、復号化器は λj,bML¯ を d(x) に更新します。

  3. ノードの部分距離が現在の λj,bML¯ よりも大きい場合は、サブツリーの走査時に影響を受ける可能性があるため、そのサブツリーを刈り込みます。

  4. 刈り込まれなかったすべてのツリー ノードに 1 回ずつ到達したら、STS が終了します。

制限

  • 出力された LLR 値はノイズ分散によってスケーリングされません。反復符号化 (LDPC またはターボ) を使用する符号化されたリンクまたはビタビ復号化を使用する MIMO OFDM の場合、出力される LLR 値をチャネル状態情報でスケーリングすると、パフォーマンスを改善できます。

参考文献

[1] Studer, C., A. Burg, and H. Bölcskei. “Soft-Output Sphere Decoding: Algorithms and VLSI Implementation”. IEEE Journal of Selected Areas in Communications. Vol. 26, No. 2, February 2008, pp. 290–300.

[2] Cho, Y. S., et.al. "MIMO-OFDM Wireless communications with MATLAB," IEEE Press, 2011.

[3] Hochwald, B.M., S. ten Brink. “Achieving near-capacity on a multiple-antenna channel”, IEEE Transactions on Communications, Vol. 51, No. 3, Mar 2003, pp. 389-399.

[4] Agrell, E., T. Eriksson, A. Vardy, K. Zeger. “Closest point search in lattices”, IEEE Transactions on Information Theory, Vol. 48, No. 8, Aug 2002, pp. 2201-2214.

拡張機能

バージョン履歴

R2013a で導入