Main Content

comm.gpu.PSKModulator

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

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

説明

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

M-PSK 法を使用して信号を変調するには、次を行います。

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

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

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

作成

説明

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

gpumpskmod = comm.gpu.PSKModulator(Name=Value) は、名前と値の引数を 1 つ以上使用してプロパティを設定します。たとえば、comm.gpu.PSKModulator(BitInput=true) は、入力値がバイナリでなければならないことを指定します。

gpumpskmod = comm.gpu.PSKModulator(M,Name=Value) は、ModulationOrder プロパティを M に設定し、オプションで名前と値の引数を設定します。

gpumpskmod = comm.gpu.PSKModulator(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) または 1 (true) として指定します。

  • このプロパティを false に設定する場合、入力値は範囲 [0, (ModulationOrder – 1)] の整数でなければなりません。

  • このプロパティを true に設定する場合、入力値はバイナリでなければならず、入力ベクトルの長さはシンボルあたりのビットの数 log2(ModulationOrder) の整数倍でなければなりません。

データ型: 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

出力データ型。'double' または 'single' を指定します。

使用法

説明

y = gpumpskmod(x) は、M-PSK 手法を使用して入力信号を変調します。出力は変調した M-PSK ベースバンド信号です。

入力引数

すべて展開する

入力信号。整数またはビットの列ベクトルとして指定します。BitInput プロパティで、必要とされる入力値およびベクトルの長さを指定します。

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

データ型: double | single

出力引数

すべて展開する

M-PSK 変調されたベースバンド信号。複素数値のコンスタレーション シンボルから成るスカラーまたはベクトルとして返されます。OutputDataType プロパティは、出力のデータ型を指定します。

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

100 個の 4 ビット シンボルのバイナリ データを作成します。

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

ビットを入力とする 16-PSK 変調器の System object™、およびグレイ符号化された信号コンスタレーションを作成します。位相オフセットを π/16 に変更します。

gpupskmod = comm.gpu.PSKModulator(16,'BitInput',true);
gpupskmod.PhaseOffset = pi/16;

データを変調してプロットします。また、オブジェクト関数 constellation を使用して、構成されたコンスタレーションを表示します。

modData = gpupskmod(data);
scatterplot(modData)

constellation(gpupskmod)

この例では、畳み込み符号化率 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

詳細

すべて展開する

アルゴリズム

バイナリ符号化の場合、出力ベースバンド信号では、入力ビットまたは整数が次に従って複素数シンボルにマッピングされます。

sn(t)=exp(jπ(2n+1M));n{0,1,,M1}.

入力がビット用に構成されている場合、log2(M) ビットのグループが、構成されたシンボル マッピングの複素数シンボルを表します。マッピングは、バイナリ符号化、グレイ符号化、またはカスタム符号化できます。

グレイ符号化には、隣接するコンスタレーション点間で変化するビットが 1 つだけであるという利点があるため、ビット エラー レート性能が向上します。次の表は、グレイ符号化を使用した 8-PSK 変調での入力シンボルと出力シンボルの間のマッピングを示しています。

入力出力
0 0 (000)
1 1 (001)
2 3 (011)
3 2 (010)
4 6 (110)
5 7 (111)
6 5 (101)
7 4 (100)

次のコンスタレーション ダイアグラムは、対応するシンボルとそのバイナリ値を示しています。

Constellation diagram showing 8-PSK Gray Mapping with phase offset=0.3972 radians

参照

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

拡張機能

バージョン履歴

R2012a で導入