Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

comm.OQPSKModulator

OQPSK 法を使用した変調

説明

comm.OQPSKModulator オブジェクトは、オフセット直交位相シフト キーイング (OQPSK) 手法を使って入力信号を変調し、出力波形に対してパルス整形フィルターを適用します。詳細については、パルス整形フィルターを参照してください。出力は、変調信号のベースバンド表現です。

変調器と復調器のペアの処理によって発生する遅延の詳細は、変調の遅延を参照してください。

オフセット直交位相シフト キーイングを使用して信号を変調するには、以下の手順に従います。

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

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

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

作成

説明

oqpskmod = comm.OQPSKModulator は変調器 System object™ を作成します。このオブジェクトは、オフセット直交位相シフト キーイング (OQPSK) の変調およびパルス整形フィルターを入力信号に適用します。

oqpskmod = comm.OQPSKModulator(demod) は、OQPSK 復調器オブジェクト demod に対して対称的な構成をもつ変調器 System object を作成します。

oqpskmod = comm.OQPSKModulator(Name,Value) は、1 つ以上の名前と値のペアを使用してプロパティを設定します。各プロパティ名を一重引用符で囲みます。

例: comm.OQPSKModulator('BitInput',true)

oqpskmod = comm.OQPSKModulator(phase,Name,Value) は、phase に対して作成されたオブジェクトの PhaseOffset プロパティを設定し、指定されたその他の NameValue ペアを設定します。

例: comm.OQPSKModulator(0.5*pi,'SymbolMapping','Binary')

プロパティ

すべて展開する

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

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

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

π/4 からの位相オフセット。ラジアン単位のスカラーとして指定します。位相オフセットは、直交成分の遅延前にコンスタレーションの 0 番目の点に適用されます。OQPSK 虚数部遅延後、信号は力率 1 で正規化されます。

例: 'PhaseOffset',pi/4 とすると、QPSK コンスタレーション点の 0 番目の点が座標軸上で {(1,0), (0,j), (-1,0), (0,-j)} に配置されます。

データ型: double

ビットで入力するためのオプション。false または true として指定します。

  • このプロパティを false に設定すると、入力値は、2 ビットの入力セグメントおよび 0-3 の範囲の整数表現でなくてはなりません。

  • このプロパティを true に設定した場合、入力値は偶数長のバイナリ ベクトルでなければなりません。要素ペアは、整数のバイナリ表現です。

データ型: logical

コンスタレーションのビット マッピング。'Gray''Binary'、または 0 から 3 までの整数の値をもつ 4 要素のカスタム数値ベクトルとして指定します。

設定整数のコンスタレーション マッピングビットのコンスタレーション マッピングコメント

Gray

信号のコンスタレーション マッピングは、グレイ符号化されます。

Binary

入力整数 m (0 ≤ m ≤ 3) の信号のコンスタレーション マッピングは、複素数値 e(j*(PhaseOffset+π/4) + j*2*π*m/4) です。

0 から 3 までの整数の値をもつ 4 要素のカスタム数値ベクトル

要素 [a b c d] は、値のセット [0, 1, 2, 3] (順序は任意) で構成しなければなりません。

データ型: char | double

パルス整形のフィルター処理。'Half sine''Normal raised cosine''Root raised cosine'、または 'Custom' として指定します。

データ型: char

レイズド コサイン フィルターのロールオフ係数。0-1 のスカラーとして指定します。

依存関係

このプロパティは、PulseShape'Normal raised cosine' または 'Root raised cosine' の場合に有効になります。

データ型: double

シンボル内のフィルターの長さ。スカラーとして指定します。理想的なレイズド コサイン フィルターの実現には、インパルス応答が無限に必要となります。しかし、このフィルターの実践的な実装を実現するため、オブジェクトは FilterSpanInSymbols シンボルに対するインパルス応答を切り捨てます。

依存関係

このプロパティは、PulseShape'Normal raised cosine' または 'Root raised cosine' の場合に有効になります。

データ型: double

フィルター分子。行ベクトルとして指定します。

依存関係

このプロパティは、PulseShape'Custom' の場合に有効になります。

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

シンボルあたりのサンプル数。正の偶数の整数として指定します。

データ型: double

出力に割り当てられるデータ型。'double' または 'single' として指定します。

データ型: char

使用法

説明

waveform = oqpskmod(insignal) は、ベースバンド変調出力を返します。出力波形は、構成プロパティ PulseShape および SamplesPerSymbol に従ってパルス整形されます。

入力引数

すべて展開する

入力信号。NS 要素の整数またはビットの列ベクトルとして指定します。ここで、NS はサンプルの数です。

BitInput プロパティの設定は、入力ベクトルの解釈を決定します。

データ型: double

出力引数

すべて展開する

出力波形。ベクトルとして返されます。出力波形は、構成プロパティ PulseShape および SamplesPerSymbol に従ってパルス整形されます。

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

OQPSK 変調器と復調器のペアを作成します。シンボルあたりのビット数が 2 の AWGN チャネル オブジェクトを作成します。

oqpskmod = comm.OQPSKModulator('BitInput',true);
oqpskdemod = comm.OQPSKDemodulator('BitOutput',true);
channel = comm.AWGNChannel('EbNo',4,'BitsPerSymbol',2);

誤り率計算機を作成します。変調器と復調器の間の遅延を考慮するには、ReceiveDelay プロパティを 2 に設定します。

errorRate = comm.ErrorRate('ReceiveDelay',2);

以下の手順を繰り返して 300 フレームのデータを処理します。

  • 100 要素のランダムなバイナリ データのベクトルを生成します。

  • データを OQPSK 変調します。データ フレームは、2 ビット バイナリ データの 50 サンプルのフレームとして処理されます。

  • 変調データを AWGN チャネルを介して渡します。

  • データを OQPSK 復調します。

  • データのフレームについて誤り統計を収集します。

for counter = 1:300
    txData = randi([0 1],100,1);
    modSig = oqpskmod(txData);
    rxSig = channel(modSig);
    rxData = oqpskdemod(rxSig);
    errorStats = errorRate(txData,rxData);
end

誤りの統計を表示します。

ber = errorStats(1)
ber = 3.3336e-05
numErrors = errorStats(2)
numErrors = 1
numBits = errorStats(3)
numBits = 29998

OQPSK 変調器オブジェクトの作成時に、OQPSK 復調器オブジェクトを使用して OQPSK 変調器オブジェクトを初期化します。

OQPSK 復調器を作成します。位相オフセットは、12π を割り当てます。

phase = 0.5*pi;
oqpskdemod = comm.OQPSKDemodulator(phase)
oqpskdemod = 
  comm.OQPSKDemodulator with properties:

   Modulation
         PhaseOffset: 1.5708
       SymbolMapping: 'Gray'
           BitOutput: false

   Filtering
          PulseShape: 'Half sine'
    SamplesPerSymbol: 4

      OutputDataType: 'double'

OQPSK 変調器オブジェクトの作成時に、復調器オブジェクトを使用して OQPSK 変調器オブジェクトを初期化します。

oqpskmod = comm.OQPSKModulator(oqpskdemod)
oqpskmod = 
  comm.OQPSKModulator with properties:

   Modulation
         PhaseOffset: 1.5708
       SymbolMapping: 'Gray'
            BitInput: false

   Filtering
          PulseShape: 'Half sine'
    SamplesPerSymbol: 4

      OutputDataType: 'double'

OQPSK 変調および復調を実行し、ルート レイズド コサイン フィルター処理を波形に適用します。

システム初期化

シミュレーション パラメーターを定義し、OQPSK 変調および復調のためにオブジェクトを作成します。

sps = 12; % samples per symbol
bits = randi([0, 1], 800, 1); % transmission data

modulator = comm.OQPSKModulator('BitInput',true,'SamplesPerSymbol',sps,'PulseShape','Root raised cosine');
demodulator = comm.OQPSKDemodulator(modulator);

波形の送信および受信

modulator オブジェクトを使用して OQPSK 変調を適用し、送信フィルター処理を入力データに対して適用します。

oqpskWaveform = modulator(bits);

チャネルを通して波形を渡します。

snr = 0;
rxWaveform = awgn(oqpskWaveform, snr);

demodulator オブジェクトを使用して、受信フィルター処理と OQPSK 復調を波形に適用します。

demodData = demodulator(rxWaveform);

ビット誤り率を計算してデータ復元の品質を確認します。

delay = (1+modulator.BitInput)*modulator.FilterSpanInSymbols;
[~, ber] = biterr(bits(1:end-delay), demodData(delay+1:end))
ber = 0

関数 qamdemod を使用して、OQPSK 変調された信号の軟判定出力をシミュレートします。

OQPSK 変調された信号を生成します。

sps = 4;
msg = randi([0 1],1000,1);
oqpskMod = comm.OQPSKModulator('SamplesPerSymbol',sps,'BitInput',true);
oqpskSig = oqpskMod(msg);

生成された信号にノイズを追加します。

impairedSig = awgn(oqpskSig,15);

軟判定復調の実行

QPSK に相当する信号を作成し、同相と直交を揃えます。

impairedQPSK = complex(real(impairedSig(1+sps/2:end-sps/2)), imag(impairedSig(sps+1:end)));

受信した OQPSK 信号に整合フィルターを適用します。

halfSinePulse = sin(0:pi/sps:(sps)*pi/sps);
matchedFilter = dsp.FIRDecimator(sps,halfSinePulse,'DecimationOffset',sps/2);
filteredQPSK = matchedFilter(impairedQPSK);

フィルター処理した OQPSK 信号の軟復調を実行するために、関数 qamdemod を使用します。qamdemod のシンボル マッピングを comm.OQPSKModulator で使用されるシンボル マッピングに一致させてから、信号を復調します。

oqpskModSymbolMapping = [1 3 0 2];
demodulated = qamdemod(filteredQPSK,4,oqpskModSymbolMapping,'OutputType','llr');

詳細

すべて展開する

拡張機能

参考

オブジェクト

ブロック

トピック

R2012a で導入