Main Content

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

comm.gpu.PSKDemodulator

GPU を使用した M-ary PSK 手法による信号の復調

このオブジェクトを使用するには、Parallel Computing Toolbox™ がインストールされており、サポートされる GPU にアクセスできなければなりません。ホスト コンピューターに GPU が構成されている場合、処理には GPU が使用されます。そうでない場合、処理には CPU が使用されます。GPU の詳細については、GPU 計算 (Parallel Computing Toolbox)を参照してください。

説明

comm.gpu.PSKDemodulator オブジェクトは、グラフィックス処理装置 (GPU) に実装された M-ary 位相偏移変調 (M-PSK) 手法を使用して変調された信号を復調します。入力は、変調信号のベースバンド表現です。

M-PSK 法を使用して変調された信号を復調するには、次のようにします。

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

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

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

作成

説明

gpumpskdemod = comm.PSKDemodulator は、M-PSK 手法を使用して入力信号を復調する GPU ベースの復調器の System object™ を作成します。

gpumpskdemod = comm.PSKDemodulator(Name=Value) は、名前と値の引数を 1 つ以上使用してプロパティを設定します。たとえば、comm.gpu.PSKDemodulator(DecisionMethod="Hard decision") は硬判定メソッドを使用する復調を指定します。

gpumpskdemod = comm.PSKDemodulator(M,phase,Name=Value) は、ModulationOrder プロパティを M に設定し、PhaseOffset プロパティを phase に設定し、さらにオプションで名前と値の引数を設定します。phase をラジアン単位で指定します。

プロパティ

すべて展開する

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

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

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

信号コンスタレーション点の数。正の整数として指定します。

データ型: double

コンスタレーションの 0 番目の点の位相 (ラジアン単位)。スカラーとして指定します。

例: PhaseOffset=0 とすると、QPSK 信号コンスタレーション点が座標軸上で {(1,0), (0,j), (-1,0), (0,-j)} に配置されます。

データ型: double

ビットとしてデータを出力するオプション。logical 0 (false) または logical 1 (true) として指定します。

  • 入力データ ベクトルと同じ長さで範囲 [0, (ModulationOrder – 1)] の整数値としてデータを出力するには、このプロパティを false に設定する。

  • 復調シンボルの数の log2(ModulationOrder) 倍に長さが等しいビット値の列ベクトルとしてデータを出力するには、このプロパティを true に設定する。

データ型: logical

コンスタレーション ビットのシンボルの符号化マッピング。'Gray''Binary'、または 'Custom' として指定します。各整数または log2(ModulationOrder) ビットの各グループは、1 つのシンボルに対応します。

  • このプロパティを 'Gray' に設定すると、オブジェクトはシンボルをグレイ符号化された信号コンスタレーションにマッピングします。

  • このプロパティを 'Binary' に設定すると、オブジェクトはシンボルを通常のバイナリ符号化された信号コンスタレーションにマッピングします。具体的には、複素数値 ej(PhaseOffset + (2πm/ModulationOrder)) です。ここで、m は [0, (ModulationOrder1)] の範囲の整数です。

  • このプロパティを 'Custom' に設定すると、オブジェクトはシンボルを CustomSymbolMapping プロパティで定義された信号コンスタレーションにマッピングします。

カスタム シンボル符号化。ModulationOrder の値と長さが等しく、範囲 [0, (ModulationOrder1)] の一意の値をもつ整数ベクトルとして指定します。このベクトルの最初の要素は 0 + PhaseOffset の角度にあるコンスタレーション点に対応し、続く要素は反時計回りに順次対応します。最後の要素は、角度 –2π/ModulationOrder + PhaseOffset のコンスタレーション点に対応します。

依存関係

このプロパティを有効にするには、SymbolMapping プロパティを 'Custom' に設定します。

データ型: double

復調判定メソッド。'Hard decision''Log-likelihood ratio'、または 'Approximate log-likelihood ratio' として指定します。BitOutput プロパティを false に設定すると、オブジェクトは常に硬判定復調を実行します。

依存関係

このプロパティを有効にするには、BitOutput プロパティを true に設定します。

ノイズ分散のソース。'Property' または 'Input port' として指定します。

依存関係

このプロパティを有効にするには、BitOutput プロパティを true に、DecisionMethod プロパティを 'Log-likelihood ratio' または 'Approximate log-likelihood ratio' に設定します。

ノイズ分散。正のスカラーとして指定します。

ヒント

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

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

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

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

依存関係

このプロパティを有効にするには、BitOutput プロパティを true に、DecisionMethod プロパティを 'Log-likelihood ratio' または 'Approximate log-likelihood ratio' に、VarianceSource プロパティを 'Property' に設定します。

データ型: double

この プロパティ は読み取り専用です。

出力のデータ型。'Full precision' として指定します。出力データ型は入力データ型と一致します。

使用法

説明

y = gpumpskdemod(x) は、入力信号に M-PSK 復調を適用し、復調された信号を返します。

y = gpumpskdemod(x,var) は、軟判定復調とノイズ分散 var を使用します。この構文は BitOutput プロパティを true に設定し、DecisionMethod プロパティを 'Approximate log-likelihood ratio' または 'Log-likelihood ratio' に、さらに VarianceSource プロパティを 'Input port' に設定した場合に適用されます。

入力引数

すべて展開する

M-PSK 変調された信号。スカラーまたは列ベクトルとして指定します。

データ転送のレイテンシを短縮するには、入力信号を gpuArray (Parallel Computing Toolbox) オブジェクトとして書式設定します。詳細については、GPU ベースの System object を使用した配列処理を参照してください。

データ型: double | single

ノイズ分散。スカラーとして指定します。

依存関係

この引数を有効にするには、VarianceSource プロパティを 'Input port' に、BitOutput プロパティを true に、DecisionMethod プロパティを 'Approximate log-likelihood ratio' または 'Log-likelihood ratio' に設定します。

データ型: single | double

出力引数

すべて展開する

出力信号。スカラーまたは列ベクトルとして返されます。オブジェクトが値を整数として出力するかビットとして出力するかを指定するには、BitOutput プロパティを使用します。出力データ型は入力データ型と一致します。

オブジェクト関数

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

release(obj)

すべて展開する

constellation理想的な信号コンスタレーションの計算またはプロット
stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

すべて折りたたむ

GPU PSK の変調器と復調器のペアを作成します。

gpuMod = comm.gpu.PSKModulator;
gpuDemod = comm.gpu.PSKDemodulator;

ランダム データ シンボルを生成します。データを変調します。

txData = randi([0 7],1000,1);
txSig = gpuMod(txData);

AWGN チャネルを通して信号を渡します。

rxSig = awgn(txSig,20);

受信信号を復調します。

rxData = gpuDemod(rxSig);

シンボル誤り数を求めます。

numSymErrors = symerr(txData,rxData)
numSymErrors =

     0

この例では、畳み込み符号化率 1/2 の 16-PSK 変調データを AWGN チャネル経由で送信し、受信データを復調および復号化して受信データのエラー レートを評価します。この実装では、GPU ベースのビタビ復号化器 System object™ を使用して複数の信号フレームを 1 回の呼び出しで処理し、gpuArray (Parallel Computing Toolbox)オブジェクトを使用して GPU ベースの System object との間でデータをやり取りします。

PSK 変調と復調、畳み込み符号化、ビタビ復号化、および AWGN 用の、GPU ベースの System object を作成します。エラー レート計算用の System object を作成します。

M = 16; % Modulation order
numframes = 100;

gpuconvenc = comm.gpu.ConvolutionalEncoder;
gpupskmod = comm.gpu.PSKModulator(M,pi/16,BitInput=true);
gpupskdemod = comm.gpu.PSKDemodulator(M,pi/16,BitOutput=true);
gpuawgn = comm.gpu.AWGNChannel( ...
    NoiseMethod='Signal to noise ratio (SNR)',SNR=30);
gpuvitdec = comm.gpu.ViterbiDecoder( ...
    InputFormat='Hard', ...
    TerminationMethod='Truncated', ...
    NumFrames=numframes);
errorrate = comm.ErrorRate(ComputationDelay=0,ReceiveDelay=0);

ビタビ復号化アルゴリズムの計算量ゆえに、信号データの複数のフレームを GPU に読み込んで 1 回の呼び出しで処理すると、シミュレーション全体の時間を短縮できます。この実装を有効にするために、GPU ベースのビタビ復号化器 System object には NumFrames プロパティが含まれています。外部 for ループを使用してデータの個々のフレームを処理する代わりに、NumFrames プロパティを使用して GPU ベースのビタビ復号化器 System object を構成し、複数のデータ フレームを処理します。バイナリ データ フレームの numframes を生成します。GPU ベースの System object による処理のためにデータ フレームを効率的に管理するには、送信データ フレームを gpuArray オブジェクトとして表現します。

numsymbols = 50;
rate = 1/2; 
dataA = gpuArray.randi([0 1],rate*numsymbols*log2(M),numframes);

エラー レート オブジェクトは gpuArray オブジェクトやマルチチャネル データをサポートしていないため、関数gather (Parallel Computing Toolbox)を使用して GPU から配列を取得し、for ループ内でデータの各フレームのエラー レートを計算しなければなりません。for ループ内で GPU ベースの符号化、変調、AWGN、および復調を実行します。

for ii = 1:numframes
    encodedData = gpuconvenc(dataA(:,ii));
    modsig = gpupskmod(encodedData);
    noisysig = gpuawgn(modsig);
    demodsig(:,ii) = gpupskdemod(noisysig);
end

GPU ベースのビタビ復号化器は、for ループなしでマルチフレーム処理を実行します。

rxbits = gpuvitdec(demodsig(:));

errorStats = errorrate(gather(dataA(:)),gather(rxbits));
fprintf('BER = %f\nNumber of errors = %d\nTotal bits = %d', ...
    errorStats(1), errorStats(2), errorStats(3))
BER = 0.009800
Number of errors = 98
Total bits = 10000

詳細

すべて展開する

参照

[1] Proakis, John G. Digital Communications. 4th ed. New York: McGraw Hill, 2001.

拡張機能

バージョン履歴

R2012a で導入