Main Content

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

apskdemod

振幅位相偏移変調 (APSK) 復調

説明

z = apskdemod(y,M,radii) は、PSK リングあたりの指定されたコンスタレーション点の数 M および各 PSK リングの半径 radii に基づいて入力信号 y の APSK 復調を実行します。APSK 復調の詳細については、APSK 硬復調およびAPSK 軟復調を参照してください。

メモ

apskdemod は、具体的には複数リング PSK コンスタレーションに適用されます。単一リング PSK コンスタレーションには、pskdemod を使用します。

z = apskdemod(y,M,radii,phaseoffset) では、APSK 変調された信号の各 PSK リングの初期位相オフセットを指定します。

z = apskdemod(___,Name,Value) では、1 つ以上の名前と値のペアの引数を使用して、前述の構文のいずれかで使用するオプションを指定します。たとえば、'OutputDataType','double' では目的の出力データ型を double として指定します。名前と値のペアの引数は、他のすべての入力引数の後で指定します。

すべて折りたたむ

各円のコンスタレーション点の数が等しくない 16-APSK 信号を復調します。受信コンスタレーションをプロットします。

変調次数と PSK リングの半径のベクトルを定義します。ランダムな 16 値データ シンボルを生成します。

M = [4 12];
radii = [1 2];
modOrder = sum(M);

x = randi([0 modOrder-1],1000,1);

データに APSK 変調を適用します。

txSig = apskmod(x,M,radii);

変調された信号をノイズの多いチャネルから渡します。

snr = 20; % dB
rxSig = awgn(txSig,snr,'measured');

送信された (基準) 信号点とノイズの多い受信信号点をプロットします。

plot(rxSig,'b*')
hold on
grid
plot(txSig,'r+')
xlim([-3 3])
ylim([-3 3])
xlabel('In-Phase')
ylabel('Quadrature')
legend('Received constellation','Reference constellation')

Figure contains an axes object. The axes object with xlabel In-Phase, ylabel Quadrature contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Received constellation, Reference constellation.

受信信号を復調し、入力データと比較します。

z = apskdemod(rxSig,M,radii);
isequal(x,z)
ans = logical
   0

カスタム シンボル マッピングされた 64-APSK 信号を復調します。硬判定ビット出力を計算し、入力が出力と一致することを確認します。

変調次数と PSK リングの半径のベクトルを定義します。ランダムなビット入力の 100 シンボルを生成します。

M = [8 12 16 28]; % 4-PSK circles
modOrder = sum(M);
radii = [0.5 1 1.3 2];
x = randi([0 1],100*log2(modOrder),1);

バイナリ マッピングのカスタム シンボル マッピング ベクトルを作成します。

cmap = 0:63; 

データを変調し、コンスタレーションをプロットします。

y = apskmod(x,M,radii,'SymbolMapping',cmap,'inputType','bit', ...
    'PlotConstellation',true);

Figure contains an axes object. The axes object with title 64-APSK with Custom Mapping, xlabel In-phase Amplitude, ylabel Quadrature Amplitude contains 67 objects of type line, text. One or more of the lines displays its values using only markers

受信信号を復調します。

z = apskdemod(y,M,radii,'SymbolMapping',cmap,'OutputType','bit');

復調された信号が元のデータと等しいことを検証します。

isequal(x,z)
ans = logical
   1

32-APSK 信号を復調して、軟ビットを計算します。

変調次数と PSK リングの半径のベクトルを定義します。ランダムなビット データのシンボルを 10000 個生成します。

M = [16 16];
modOrder = sum(M);
radii = [0.6 1.2];
numSym = 10000;
x = randi([0 1], numSym*log2(modOrder),1);

基準コンスタレーションを生成します。constellation diagram オブジェクトを作成します。

refAPSK = apskmod(0:modOrder-1,M,radii);
constDiagAPSK = comm.ConstellationDiagram( ...
    ReferenceConstellation=refAPSK, ...
    Title='Received Symbols', ...
    XLimits=[-2 2], ...
    YLimits=[-2 2]);

データを変調します。

txSig = apskmod(x,M,radii,InputType='bit');
sigPow = var(txSig);

ノイズの多いチャネルを通して信号を渡します。

snr = 15;
rxSig = awgn(txSig,snr,sigPow,'linear');

基準および受信コンスタレーション シンボルをプロットします。

constDiagAPSK(rxSig)

信号を復調して、軟ビットを計算します。

z = apskdemod(rxSig,M,radii, ...
    OutputType='approxllr', ...
    NoiseVariance=sigPow/snr);

入力引数

すべて折りたたむ

APSK 変調された信号。複素数のスカラー、ベクトルまたは行列として指定します。各列が独立したチャネルとして扱われます。

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

PSK リングあたりのコンスタレーション点。複数の要素をもつベクトルとして指定します。ベクトルの要素は、各 PSK リングのコンスタレーション点の数を示します。最初の要素は最も内部の円に対応し、最も外側の円に対応する最後の要素まで同様です。要素の値は 4 の倍数でなければならず、sum(M) は 2 のべき乗でなければなりません。変調次数は信号コンスタレーション点の合計数であり、ベクトル要素 sum(M) の合計と等しくなります。

例: [4 12 16] は、変調次数が sum(M) = 32 の 3 つの PSK リング コンスタレーションを指定します。

データ型: double

PSK リングの半径。M と同じ長さをもつベクトルとして指定します。最初の要素は最も内部の円に対応し、最も外側の円に対応する最後の要素まで同様です。要素は正で、昇順に並んでいなければなりません。

例: [0.5 1 2] では、コンスタレーション PSK リングの半径を定義します。内側のリングは半径 0.5、2 番目のリングは半径 1.0、外側のリングは半径 2.0 をもちます。

データ型: double

各 PSK リングの位相オフセット (ラジアン)。M と同じ長さをもつベクトルまたはスカラーとして指定します。最初の要素は最も内部の円に対応し、最も外側の円に対応する最後の要素まで同様です。phaseoffset をスカラーにできるのは、M のすべての要素が同じ値である場合だけです。

例: [pi/4 pi/12 pi/16] では、3 つのコンスタレーション PSK リングの位相オフセットを定義しています。内側のリングは位相オフセット pi/4、2 番目のリングは位相オフセット pi/12、外側のリングは位相オフセット pi/16 をもちます。

データ型: double

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: y = apskdemod(x,M,radii,'OutputType','bit','OutputDataType','single');

シンボル マッピング。SymbolMapping と次のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'contourwise-gray' — 位相次元における等高線を基準としたグレイ マッピングを使用します。

  • 'gray' — 振幅および位相の両方の次元における等高線を基準としたグレイ マッピングを使用します。グレイ シンボル マッピングでは、M のすべての値が等しくなければならず、phaseoffset のすべての値が等しくなければなりません。使用されるグレイ マッピングの説明については、[2]を参照してください。

  • 整数ベクトル — カスタム シンボル マッピングを使用します。ベクトルは、0 ~ (sum(M)-1) の値をもつ sum(M) 個の一意の要素で構成されなければなりません。最初の要素は最も内部の円の最初の四分円のコンスタレーション点に対応し、続く要素は PSK リングを中心に反時計回りに位置します。

既定のシンボル マッピングは、MphaseOffset によって異なります。MphaseOffset のすべての要素が等しい場合、既定の設定は 'gray' です。これ以外の場合は既定の設定は 'contourwise-gray' です。

データ型: double | char | string

出力タイプ。'OutputType' と、'integer''bit''llr' または 'approxllr' から成るコンマ区切りのペアとして指定します。返される出力の説明については、z を参照してください。

データ型: char | string

出力データ型。OutputDataType と指定されたデータ型のいずれかで構成されるコンマ区切りのペアとして指定します。OutputDataType で使用可能な値は、OutputType の値によって異なります。

OutputType の値使用可能な OutputDataType の値
'integer''double''single''int8''int16''int32''uint8''uint16' または 'uint32'
'bit''double''single''int8''int16''int32''uint8''uint16''uint32' または 'logical'

依存関係

この名前と値のペアの引数が適用されるのは、OutputType'integer' または 'bit' に設定されているときだけです。

データ型: char | string

ノイズ分散。NoiseVariance と正のスカラー値または正のベクトル値で構成されるコンマ区切りのペアとして指定します。

  • スカラーとして指定する場合、同じノイズ分散値がすべての入力要素で使用されます。

  • ベクトルとして指定する場合、ベクトルの長さは入力信号の列数に等しくなければなりません。

ノイズ分散または信号強度の計算結果に極端な正または負の振幅が含まれる場合は、アルゴリズム選択の考慮事項について、APSK 軟復調を参照してください。

依存関係

この名前と値のペアの引数が適用されるのは、OutputType'llr' または 'approxllr' に設定されているときだけです。

データ型: double

コンスタレーションをプロットするためのオプション。'PlotConstellation' と logical スカラーとで構成されるコンマ区切りペアで指定します。コンスタレーションをプロットするには、PlotConstellationtrue に設定します。

データ型: logical

出力引数

すべて折りたたむ

復調した信号。スカラー、ベクトルまたは行列として返されます。z の次元は、指定した OutputType 値によって異なります。

OutputType の値apskdemod の戻り値z の次元
'integer'復調された 0 ~ (sum(M) – 1) の整数値z の次元は入力 y と同じになります。
'bit'復調されたビットz の行数は、y の行数の log2(sum(M)) 倍になります。復調された各シンボルは列の log2(sum(M)) 要素のグループにマッピングされます。ここで、最初の要素は MSB を表し、最後の要素は LSB を表します。
'llr'各ビットの対数尤度比の値
'approxllr'各ビットの近似対数尤度比の値

詳細

すべて折りたたむ

APSK 硬復調

硬復調アルゴリズムは、[1]で説明されているように、振幅位相の復号化を適用します。

APSK 軟復調

軟復調では、2 つの軟判定対数尤度比 (LLR) アルゴリズム (厳密な LLR と近似 LLR) を使用できます。厳密な LLR アルゴリズムは近似 LLR アルゴリズムよりも正確ですが実行速度が遅くなります。各アルゴリズムの詳細については、硬判定復調と軟判定復調のトピックを参照してください。

メモ

厳密な LLR アルゴリズムは有限の精度演算で指数を計算します。計算に非常に大きな正または負の振幅が含まれる場合、厳密な LLR アルゴリズムの結果は次のようになります。

  • ノイズ分散が極度に大きい値の場合は、Inf または -Inf

  • ノイズ分散と信号強度の両方が非常に小さい値の場合は NaN

近似 LLR アルゴリズムでは指数が計算されません。近似 LLR アルゴリズムを使用することによって、Inf-Inf、および NaN の結果を回避できます。

参照

[1] Sebesta, J. “Efficient Method for APSK Demodulation.” Selected Topics on Applied Mathematics, Circuits, Systems, and Signals (P. Pardalos, N. Mastorakis, V. Mladenov, and Z. Bojkovic, eds.). Vouliagmeni, Athens, Greece: WSEAS Press, 2009.

[2] Liu, Z., Q. Xie, K. Peng, and Z. Yang. "APSK Constellation with Gray Mapping." IEEE Communications Letters. Vol. 15, Number 12, December 2011, pp. 1271–1273.

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2018a で導入