メインコンテンツ

comm.SphereDecoder

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

説明

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

球面復号化アルゴリズムを使用してシンボルを復号化するには、次のようにします。

  1. comm.SphereDecoder オブジェクトを作成し、そのプロパティを設定します。

  2. 関数と同様に、引数を指定してオブジェクトを呼び出します。

System object の機能の詳細については、System object とはを参照してください。

作成

説明

spheredecod = comm.SphereDecoder は、球面復号化器 System object spheredecod を作成します。このオブジェクトは、球面復号化アルゴリズムを使用してシンボルを復号化します。

spheredecod = comm.SphereDecoder(const,bitTab) は、Constellation プロパティを const に、BitTable プロパティを bitTab に設定します。

spheredecod = comm.SphereDecoder(___,Name=Value) は、前の構文の任意の入力引数の組み合わせに加えて、オプションの名前と値の引数を 1 つ以上使用してプロパティを設定します。たとえば、spheredecod(InitialRadius="ZF solution") は、復号化アルゴリズムの初期探索半径を "ZF solution" に設定します。

プロパティ

すべて展開する

特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release を使用します。

プロパティが "調整可能" の場合、その値をいつでも変更できます。

プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。

送信アンテナあたりの信号コンスタレーション。列ベクトルとして指定します。オブジェクトはビットをコンスタレーション点にマッピングします。ベクトルの長さは 2 のべき乗でなければなりません。オブジェクトは、各送信アンテナが同一のコンスタレーションを使用することを前提としています。

データ型: double
複素数のサポート: あり

各コンスタレーション点に使用されるビット マッピング。ConstellationLengthbitsPerSymbol 列の行列として指定します。ConstellationLengthConstellation プロパティの長さを表し、bitsPerSymbol は各シンボルが符号化するビット数を表します。

データ型: double

復号化アルゴリズムの初期探索半径。次のいずれかのオプションとして指定します。

  • "Infinity" — 初期半径を Inf に設定します。

  • "ZF solution" — 初期探索半径をゼロフォーシング (ZF) 解に設定します。この計算は復号化時に入力チャネルの疑似逆を使用します。初期探索半径の削減は、大規模なコンスタレーションや多数のアンテナを備えたシステムにとって特に有益です。ただし、ZF 解は追加の計算作業を必要とするため、多くのシナリオでは大きなメリットがありません。

復号化判定方法。"Soft" または "Hard" として指定します。

  • "Soft" — 復号化器は対数尤度比 (LLR)、つまり軟ビットを出力します。

  • "Hard" — 復号化器は軟 LLR をビットに変換します。硬判定出力では logical 配列が作成され、負の対数尤度比 (LLR) 値に 0 が、すべての非負の LLR 値に 1 が割り当てられます。

使用法

説明

Y = spheredecod(X,chan) は、入力信号 X に軟復号化アルゴリズムを適用し、復号化されたシンボル Y を返します。

入力引数

すべて展開する

受信シンボル。NSNR 列の行列として指定します。このアルゴリズムは、1 回の呼び出しで NS 個のチャネル実現の受信シンボルを復号化でき、各実現は NR 個の受信シンボルで構成されます。

データ型: single | double
複素数のサポート: あり

フラットフェージング多入力多出力 (MIMO) チャネル。次のいずれかのオプションとして指定します。

  • NS×NT×NR の配列 — このアルゴリズムは、NR 個の受信シンボルから成る対応するセットごとに一意のチャネル行列を適用します。

  • NT×NR の配列 — オブジェクトは、受信したすべてのシンボルに単一チャネル行列を適用します。

データ型: double
複素数のサポート: あり

出力引数

すべて展開する

出力。NS×bitsPerSymbol×NT の行列として返されます。オブジェクトが復号化されたビットの LLR を出力するか、ビット自体を出力するかを指定するには、DecisionType プロパティを使用します。

データ型: double | logical

オブジェクト関数

オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、次の構文を使用します。

release(obj)

すべて展開する

stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

すべて折りたたむ

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

変調次数、送信ビット数、およびシンボル マッピングを指定します。

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

関数 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 進数値をバイナリ ビットに変換します。球面復号化器は、この目的のために M 行 bps 列の行列 bitTable を利用します。

bitTable = int2bit(symMap,bps)';

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

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

硬判定復号化を使用してビットを処理する球面復号化器 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 フェージング チャネルを経由して渡し、ホワイト ガウス ノイズを付加します。

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

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

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

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

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

    0.1660
  664.0000

制限

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

アルゴリズム

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

このアルゴリズムは、NT 個の送信アンテナと NR 個の受信アンテナをもつ MIMO システムをモデル化します。システムは NT 個のシンボルを同時に送信するという前提で、y = Hs + n という式で表されます。ここで、y は受信シンボル、H は MIMO チャネル行列、s は送信シンボル ベクトル、n は熱ノイズです。

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

s^ML=argminsoyHs2

ここで、O は複素数値のコンスタレーションであり、検出器はそこから sNT 個の要素を選択します。

軟検出はビットごとの推定の信頼性を測定するのに役立つビットごとの対数尤度比 (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^MLj 番目のエントリのバイナリ ラベル内の b 番目のビットのバイナリ補数、つまり最小限のシンボル セット xj,b(xj,bML¯) を表します。このシンボル セットには、j 番目のエントリの b 番目のビットが s^ML の同じエントリと比較して反転された、可能性のあるすべてのベクトルが含まれます。

ビット xj,b の LLR 推定値を計算する式は、xj,b(xj,bML)01 かによって異なります。

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

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

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

λ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¯ であるすべての jb について、復号化器は λj,bML¯d(x) に更新します。

  3. ノードの部分距離が現在の λj,bML¯ 値 (サブツリーのトラバーサル中に変更される可能性のある値) を超えると、アルゴリズムはそのサブツリーを枝刈りすることを決定します。

  4. STS アルゴリズムは、各ツリー ノードに 1 回到達するか、またはそれらを枝刈りすると停止します。

参照

[1] Studer, C., A. Burg, and H. Bolcskei. “Soft-Output Sphere Decoding: Algorithms and VLSI Implementation.” IEEE Journal on Selected Areas in Communications 26, no. 2 (February 2008): 290–300. https://doi.org/10.1109/JSAC.2008.080206.

[2] Cho, Yong Soo, ed. MIMO-OFDM Wireless Communications with MATLAB. Singapore ; Hoboken, NJ: IEEE Press : J. Wiley & Sons (Asia), 2010.

[3] Hochwald, B.M., and S. Ten Brink. “Achieving Near-Capacity on a Multiple-Antenna Channel.” IEEE Transactions on Communications 51, no. 3 (March 2003): 389–99. https://doi.org/10.1109/TCOMM.2003.809789.

[4] Agrell, E., T. Eriksson, A. Vardy, and K. Zeger. “Closest Point Search in Lattices.” IEEE Transactions on Information Theory 48, no. 8 (August 2002): 2201–14. https://doi.org/10.1109/TIT.2002.800499.

拡張機能

すべて展開する

バージョン履歴

R2013a で導入

参考

オブジェクト

ブロック