Main Content

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

comm.OQPSKDemodulator

OQPSK 方式を使用した復調

説明

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

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

OQPSK 変調された信号を復調するには、以下の手順に従います。

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

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

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

作成

説明

oqpskdemod = comm.OQPSKDemodulator は復調器 System object™ を作成します。このオブジェクトは、同時にフィルターを一致させ、波形を間引きし、それをオフセット直交位相偏移変調 (OQPSK) 手法を使って復調します。

oqpskdemod = comm.OQPSKDemodulator(mod) は、OQPSK 変調器オブジェクト mod に対して対称的な構成をもつ復調器 System object を作成します。変調器オブジェクトが IIR フィルター (PulseShape='Custom' かつ FilterDenominator がスカラーではない) の場合、復調器は PulseShape='Custom' かつ FilterNominator=1 の積分とダンプ (I&D) フィルターになります。

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

例: comm.OQPSKDemodulator('BitOutput',true)

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

例: comm.OQPSKDemodulator(0.5*pi,'SamplesPerSymbol',2)

プロパティ

すべて展開する

特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 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 に設定すると、オブジェクトはビット値のバイナリ列ベクトルを出力します。出力ベクトルの長さは、入力シンボルの数の 2 倍です。

データ型: logical

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

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

Gray

Integer order Q1: 0, Q2: 1, Q3: 3, and Q4: 2

Bit order Q1: 00, Q2: 01, Q3: 11 and Q4: 10

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

Binary

Integer order Q1: 0, Q2: 1, Q3: 2, and Q4: 3

Bit order Q1: 00, Q2: 01, Q3: 10 and Q4: 11

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

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

Integer order Q1: a, Q2: b, Q3: c, and Q4: d

Bit order Q1: a, Q2: b, Q3: c, and Q4: d

要素 [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

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

依存関係

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

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

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

データ型: double

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

データ型: char

使用法

説明

outsignal = oqpskdemod(waveform) は復調された出力信号を返します。このオブジェクトは、各入力パルスに対して 1 つの出力シンボルを生成します。

入力引数

すべて展開する

受信した波形。複素数のスカラーまたは列ベクトルとして指定します。

このオブジェクトは可変サイズの入力を受け入れます。オブジェクトがロックされると、各入力チャネルのサイズは変更できますが、チャネルの数は変更できません。詳細については、Variable-Size Signal Support with System Objectsを参照してください。

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

出力引数

すべて展開する

復調された信号。NS 要素の整数ベクトルまたはビット ベクトルとして返されます。ここで、NS はサンプルの数です。

受信した波形は、構成プロパティ PulseShape および SamplesPerSymbol に従ってパルス整形されます。BitOutput プロパティの設定は、受信した波形の解釈を決定します。

データ型: double

オブジェクト関数

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

release(obj)

すべて展開する

constellation理想的な信号コンスタレーションの計算またはプロット

すべて展開する

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 変調および復調のためにオブジェクトを作成します。

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');

OQPSK 変調器を使用して送信機を作成します。

bits = randi([0, 1], 800, 1);     % message signal
order = 6;       % CCSDS, TM
btProduct = 0.5; % CCSDS, TM
[num, denom] = butter(order, btProduct);
modulator = comm.OQPSKModulator('BitInput', true, PulseShape="Custom", ...
                         FilterNumerator=num, FilterDenominator=denom);
oqpskWaveform = modulator(bits);

チャネルのプロパティを指定します。

snr = 10;
received = awgn(oqpskWaveform, snr);

OQPSK 復調器を使用して受信機を作成します。

demodulator = comm.OQPSKDemodulator(modulator); % FIR Integrate and Dump in Demod, for IIR pulses in Modulator
demodulated = demodulator(received);

BER を計算します。

delay = 1 + modulator.BitInput;
[~, ber] = biterr(bits(1:end-delay), demodulated(delay+1:end));
fprintf('Bit error rate: %f\n', ber);
Bit error rate: 0.051378

詳細

すべて展開する

拡張機能

バージョン履歴

R2012a で導入

参考

オブジェクト

ブロック

トピック