このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
comm.OQPSKModulator
OQPSK 法を使用した変調
説明
comm.OQPSKModulator オブジェクトは、オフセット直交位相偏移変調 (OQPSK) 手法を使って入力信号を変調し、出力波形に対してパルス整形フィルターを適用します。詳細については、パルス整形フィルターを参照してください。出力は、変調信号のベースバンド表現です。
変調器と復調器のペアの処理によって発生する遅延の詳細については、変調の遅延を参照してください。
オフセット直交位相偏移変調を使用して信号を変調するには、以下の手順に従います。
comm.OQPSKModulator
オブジェクトを作成し、そのプロパティを設定します。関数と同様に、引数を指定してオブジェクトを呼び出します。
System object の機能の詳細については、System object とはを参照してください。
作成
構文
説明
は変調器 System object™ を作成します。このオブジェクトは、オフセット直交位相偏移変調 (OQPSK) の変調およびパルス整形フィルターを入力信号に適用します。oqpskmod
= comm.OQPSKModulator
は、OQPSK 復調器オブジェクト oqpskmod
= comm.OQPSKModulator(demod
)demod
に対して対称的な構成をもつ変調器 System object を作成します。
は、1 つ以上の名前と値のペアを使用してプロパティを設定します。各プロパティ名を一重引用符で囲みます。oqpskmod
= comm.OQPSKModulator(Name
,Value
)
例: comm.OQPSKModulator('BitInput',true)
は、oqpskmod
= comm.OQPSKModulator(phase
,Name
,Value
)phase
に対して作成されたオブジェクトの PhaseOffset プロパティを設定し、指定されたその他の Name
、Value
ペアを設定します。
例: comm.OQPSKModulator(0.5*pi,'SymbolMapping','Binary')
プロパティ
特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release
を使用します。
プロパティが "調整可能" の場合、その値をいつでも変更できます。
プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。
PhaseOffset
— 信号コンスタレーションの 0 番目の点の位相
0
(既定値) | スカラー
π/4 からの位相オフセット。ラジアン単位のスカラーとして指定します。位相オフセットは、直交成分の遅延前に信号コンスタレーションの 0 番目の点に適用されます。OQPSK 虚数部遅延後、信号は力率 1 で正規化されます。
例: 'PhaseOffset',pi/4
とすると、QPSK 信号コンスタレーション点の 0 番目の点が座標軸上で {(1,0), (0,j), (-1,0), (0,-j)} に配置されます。
データ型: double
BitInput
— ビットで入力するオプション
false
(既定値) | true
ビットで入力するためのオプション。false
または true
として指定します。
このプロパティを
false
に設定すると、入力値は、2 ビットの入力セグメントおよび 0-3 の範囲の整数表現でなくてはなりません。このプロパティを
true
に設定した場合、入力値は偶数長のバイナリ ベクトルでなければなりません。要素ペアは、整数のバイナリ表現です。
データ型: logical
SymbolMapping
— 信号コンスタレーションのビット マッピング
'Gray'
(既定値) | 'Binary'
| 0 から 3 までの整数の値をもつ 4 要素のカスタム数値ベクトル
信号コンスタレーションのビット マッピング。'Gray'
、'Binary'
、または 0 から 3 までの整数の値をもつ 4 要素のカスタム数値ベクトルとして指定します。
設定 | 整数のコンスタレーション マッピング | ビットのコンスタレーション マッピング | コメント |
---|---|---|---|
| | | 信号コンスタレーションのマッピングは、グレイ符号化されます。 |
| | | 入力整数 |
0 から 3 までの整数の値をもつ 4 要素のカスタム数値ベクトル | | | 要素 [a b c d] は、値のセット [0, 1, 2, 3] (順序は任意) で構成しなければなりません。 |
データ型: char
| double
PulseShape
— パルス整形のフィルター処理
'Half sine'
(既定値) | 'Normal raised cosine'
| 'Root raised cosine'
| 'Custom'
パルス整形のフィルター処理。'Half sine'
、'Normal raised cosine'
、'Root raised cosine'
、または 'Custom'
として指定します。
データ型: char
RolloffFactor
— レイズド コサイン フィルターのロールオフ係数
0.2
(既定値) | スカラー
レイズド コサイン フィルターのロールオフ係数。0
-1
のスカラーとして指定します。
依存関係
このプロパティは、PulseShape が 'Normal raised cosine'
または 'Root raised cosine'
の場合に有効になります。
データ型: double
FilterSpanInSymbols
— Filter length
10
(既定値) | スカラー
シンボル内のフィルターの長さ。スカラーとして指定します。理想的なレイズド コサイン フィルターの実現には、インパルス応答が無限に必要となります。しかし、このフィルターの実践的な実装を実現するため、オブジェクトは FilterSpanInSymbols
シンボルに対するインパルス応答を切り捨てます。
依存関係
このプロパティは、PulseShape が 'Normal raised cosine'
または 'Root raised cosine'
の場合に有効になります。
データ型: double
FilterNumerator
— カスタム フィルターの分子係数
[0.7071 0.7071]
(既定値) | 行ベクトル
カスタム フィルターの分子係数。行ベクトルとして指定します。
依存関係
このプロパティは、PulseShape が 'Custom'
の場合に有効になります。
データ型: double
複素数のサポート: あり
FilterDenominator
— カスタム フィルターの分母係数
1
(既定値) | 行ベクトル
カスタム フィルターの分母係数。行ベクトルとして指定します。FilterDenominator
がスカラーの場合、フィルターは FIR になります。FilterDenominator
がスカラーでない場合、フィルターは IIR になります。
依存関係
このプロパティは、PulseShape が 'Custom'
の場合に有効になります。
データ型: double
複素数のサポート: あり
SamplesPerSymbol
— シンボルあたりのサンプル数
4
(既定値) | 正の偶数
シンボルあたりのサンプル数。正の偶数として指定します。
データ型: double
OutputDataType
— 出力に割り当てられるデータ型
'double'
(既定値) | 'single'
出力に割り当てられるデータ型。'double'
または 'single'
として指定します。
データ型: char
使用法
説明
は、ベースバンド変調出力を返します。出力波形は、構成プロパティ PulseShape および SamplesPerSymbol に従ってパルス整形されます。waveform
= oqpskmod(insignal
)
入力引数
insignal
— 入力信号
整数列ベクトル | ビット列ベクトル
入力信号。NS 要素の整数またはビットの列ベクトルとして指定します。ここで、NS はサンプルの数です。
BitInput プロパティの設定は、入力ベクトルの解釈を決定します。
このオブジェクトは可変サイズの入力を受け入れます。オブジェクトがロックされると、各入力チャネルのサイズは変更できますが、チャネルの数は変更できません。詳細については、Variable-Size Signal Support with System Objectsを参照してください。
データ型: double
出力引数
waveform
— 出力波形
ベクトル
出力波形。ベクトルとして返されます。出力波形は、構成プロパティ PulseShape および SamplesPerSymbol に従ってパルス整形されます。
オブジェクト関数
オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj
という名前の System object のシステム リソースを解放するには、次の構文を使用します。
release(obj)
comm.OQPSKModulator
に固有
constellation | 理想的な信号コンスタレーションの計算またはプロット |
例
AWGN 環境下の OQPSK 信号
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 変調器オブジェクトを初期化します。
OQPSK 復調器を作成します。位相オフセットは、 を割り当てます。
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 変調および復調を実行し、ルート レイズド コサイン フィルター処理を波形に適用します。
システム初期化
シミュレーション パラメーターを定義し、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
軟判定 OQPSK 変調/復調
関数 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 波形の生成
整数でメッセージ信号を作成します。
symbols = randi([0, 3], 800, 1);
order = 6;
btProduct = 0.5;
[num, denom] = butter(order, btProduct);
oqpskMod = comm.OQPSKModulator(PulseShape="Custom", FilterNumerator=num, FilterDenominator=denom);
波形を生成します。
waveform = oqpskMod(symbols); % joint oqpsk modulation and filtering
詳細
変調の遅延
デジタル変調と復調オブジェクトは、入出力間で遅延を起こすことがあり、受信データの到着サンプルのオフセットにつながります。プロットしたり誤り統計情報を計算したりするなど、送信データと受信データを比較する場合は、システムの遅延を考慮に入れなければなりません。以下に示すとおり、OQPSK 変調/復調の遅延は、パルス整形フィルター、オブジェクト ペアの入力/出力設定によって異なります。
パルス整形 | 入力/出力データ (*) | OQPSK 変調器と復調器のオブジェクト ペアによって発生するエンドツーエンドでの遅延 (サンプル単位) |
---|---|---|
'Half sine' または 'Custom' | 整数 | 1 |
ビット | 2 | |
'Normal raised cosine' または 'Root raised cosine' | 整数 | FilterSpanInSymbols |
ビット | 2*FilterSpanInSymbols | |
(*) データ型のプロパティを (変調の場合は |
パルス整形フィルター
OQPSK 変調スキームでは、直交チャネルを 90 度遅延 (またはオフセット) させるために、2 つ以上のオーバーサンプリングが必要です。このオーバーサンプリングは、パルス整形によって実装される内挿フィルター処理を通じて実現できます。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
System Objects in MATLAB Code Generation (MATLAB Coder) を参照してください。
バージョン履歴
R2012a で導入R2023b: コンスタレーション ダイアグラムのプロット
オブジェクト関数 constellation
を使用した、comm.OQPSKModulator
System object のコンスタレーション ダイアグラムのプロットのサポート。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)