このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
qammod
直交振幅変調 (QAM)
説明
例
QAM を使用するデータの変調
QAM を使用してデータを変調し、結果を散布図にプロットします。
変調次数を 16 に設定し、それぞれに予想されるシンボルを含むデータ ベクトルを作成します。
M = 16; x = (0:M-1)';
関数 qammod
を使用してデータを変調します。
y = qammod(x,M);
関数 scatterplot
を使用して、変調した信号コンスタレーションを表示します。
scatterplot(y)
変調次数を 256 に設定して、変調された信号の散布図を表示します。
M = 256; x = (0:M-1)'; y = qammod(x,M); scatterplot(y)
平均パワーによる QAM 信号の正規化
QAM を使用してランダム データ シンボルを変調します。平均信号強度が 1 W になるように変調器出力を正規化します。
変調次数を設定してランダム データを生成します。
M = 64; x = randi([0 M-1],1000,1);
データを変調します。名前と値の引数 'UnitAveragePower'
を使用して、平均電力が 1 W になるように出力信号を設定します。
y = qammod(x,M,UnitAveragePower=true);
信号が単位平均パワーをもつことを確認します。
avgPower = mean(abs(y).^2)
avgPower = 1.0070
結果のコンスタレーションをプロットします。
scatterplot(y)
title('64-QAM, Average Power = 1 W')
QAM シンボルの順序
グレイ、バイナリおよびカスタムの各シンボル マッピングの QAM コンスタレーションをプロットします。
変調次数を設定し、変調スキームのシンボルの完全なセットを含むデータ シーケンスを作成します。
M = 16; d = 0:M-1;
データを変調し、そのコンスタレーションをプロットします。既定のシンボル マッピングではグレイ符号の順序を使用します。点は逐次的になっていません。
y = qammod(d,M,PlotConstellation=true);
バイナリ シンボル マッピングで変調処理を繰り返します。シンボル マッピングはバイナリ符号の順序に従い、かつ連続しています。
z = qammod(d,M,'bin',PlotConstellation=true);
カスタムのシンボル マッピングを作成します。
smap = randperm(M)-1;
変調を行い、コンスタレーションをプロットします。
w = qammod(d,M,smap,PlotConstellation=true);
ビット入力による直交振幅変調
64-QAM を使用してビットのシーケンスを変調します。ノイズの多いチャネルを通して信号を渡します。結果のコンスタレーション ダイアグラムを表示します。
変調次数を設定し、シンボルあたりのビット数を求めます。
M = 64; k = log2(M);
バイナリ データのシーケンスを作成します。バイナリ入力を使用する場合、入力の行数はシンボルあたりのビット数の整数倍でなければなりません。
data = randi([0 1],1000*k,1);
ビット入力を使用して信号を変調し、単位平均パワーをもつように設定します。
txSig = qammod(data,M, ... InputType='bit', ... UnitAveragePower=true);
ノイズの多いチャネルを通して信号を渡します。
rxSig = awgn(txSig,25);
コンスタレーション ダイアグラムをプロットします。
cd = comm.ConstellationDiagram(ShowReferenceConstellation=false); cd(rxSig)
QAM 固定小数点信号の復調
固定小数点 QAM 信号を復調し、データが正しく復元されていることを検証します。
変調次数を 64
として設定し、シンボルあたりのビット数を求めます。
M = 64; bitsPerSym = log2(M);
ランダムなビットを生成します。ビット モードで動作している場合、入力データの長さはシンボルあたりのビット数の整数倍でなければなりません。
x = randi([0 1],10*bitsPerSym,1);
バイナリ シンボル マッピングを使用して入力データを変調します。固定小数点データを出力するように変調器を設定します。数値データ型は符号付きで、語長は 16 ビット、小数部の長さは 10 ビットです。
y = qammod(x,M,'bin', ... InputType='bit', ... OutputDataType=numerictype(1,16,10));
64-QAM 信号を復調します。復調されたデータが入力データと一致することを検証します。
z = qamdemod(y,M,'bin',OutputType='bit'); s = isequal(x,double(z))
s = logical
1
QAM 用の平均電力の正規化
ユーティリティ関数 helperAvgPow2MinD
を使用して、関数 qammod および qamdemod の硬判定出力用に平均電力の正規化を適用します。正規化された平均電力に合わせてコンスタレーションをスケーリングし、基準となるコンスタレーションとスケーリング後のコンスタレーションをプロットします。
指定した平均電力と変調次数に基づいてシンボルの最小距離を計算します。
M = 64; avgPwr = 2; minD = helperAvgPow2MinD(avgPwr,M);
範囲 [0, M
- 1] のランダムな整数から成る信号を変調し、変調後のシンボルをスケーリングします。
x = randi([0,M-1],1000,1); y = qammod(x,M); yTx = (minD/2) .* y;
信号の平均電力が、指定した平均電力 avgPow
とほぼ同じであることを確認します。
sigPwr = mean(abs(yTx).^2)
sigPwr = 2.0141
avgPwr
avgPwr = 2
RF またはチャネル劣化要因を適用せずに、送信信号を受信信号に割り当てます。受信信号を歪ませる劣化要因がないため、復調された信号は元の信号と一致します。硬判定を使用してシンボルを復調し、信号が正しく復調されたことを確認します。
yRx = yTx; z = qamdemod(yRx*2/minD,M); checkDemodIsEqual = isequal(x,z)
checkDemodIsEqual = logical
1
refC = qammod([0:M-1]',M);
コンスタレーションを表示します。
maxAx = ceil(max(abs(refC))); cd = comm.ConstellationDiagram(2, ... 'ShowReferenceConstellation',0, ... 'ShowLegend',true, ... 'XLimits',[-(maxAx) maxAx],'YLimits',[-(maxAx) maxAx], ... 'ChannelNames', ... {'y','yTx'}); cd(y,yTx)
QAM 用のピーク電力の正規化
ユーティリティ関数 helperPeakPow2MinD
を使用して、関数 qammod および qamdemod の硬判定出力用にピーク電力を正規化します。正規化されたピーク電力に合わせてコンスタレーションをスケーリングし、基準となるコンスタレーションとスケーリング後のコンスタレーションをプロットします。
指定したピーク電力と変調次数に基づいてシンボルの最小距離を計算します。
M = 16; pkPwr = 30; minD = helperPeakPow2MinD(pkPwr,M);
範囲 [0, M
- 1] のランダムな整数から成る信号を変調し、変調後のシンボルをスケーリングします。
x = randi([0,M-1],1000,1); y = qammod(x,M); yTx = (minD/2) .* y;
信号のピーク電力が、指定したピーク電力 pkPow
とほぼ同じであることを確認します。
sigPwr = max(abs(yTx).^2)
sigPwr = 30
pkPwr
pkPwr = 30
RF またはチャネル劣化要因を適用せずに、送信信号を受信信号に割り当てます。受信信号を歪ませる劣化要因がないため、復調された信号は元の信号と一致します。硬判定を使用してシンボルを復調し、信号が正しく復調されたことを確認します。
yRx = yTx; z = qamdemod(yRx*2/minD,M); checkDemodIsEqual = isequal(x,z)
checkDemodIsEqual = logical
1
refC = qammod([0:M-1]',M);
コンスタレーションを表示します。
maxAx = ceil(max(abs(refC))); cd = comm.ConstellationDiagram(2, ... 'ShowReferenceConstellation',0, ... 'ShowLegend',true, ... 'XLimits',[-(maxAx) maxAx],'YLimits',[-(maxAx) maxAx], ... 'ChannelNames', ... {'y','yTx'}); cd(y,yTx)
入力引数
X
— 入力信号
スカラー | ベクトル | 行列 | 配列
入力信号。スカラー、ベクトル、行列、または配列として指定します。この入力信号の要素は、バイナリ値または範囲 [0, (M
– 1)] の整数でなければなりません。ここで、M
は変調次数です。
メモ
入力信号をバイナリの要素として処理するには、InputType='bit'
を指定します。バイナリ入力の場合、行数は log2(M
) の整数倍でなければなりません。log2(M
) ビットのグループがシンボルにマッピングされます。ここで、最初のビットは MSB を表し、最後のビットは LSB を表します。
データ型: double
| single
| fi(S,WL,0)
| int8
| int16
| uint8
| uint16
M
— 変調次数
正の整数
変調次数。2 の正の整数乗として指定します。変調次数は信号コンスタレーション点の数を指定します。
データ型: double
| single
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
symOrder
— シンボルの順序
'gray'
(既定値) | 'bin'
| ベクトル
シンボルの順序。'gray'
、'bin'
またはベクトルで指定します。
'gray'
— グレイ符号の順序を使用します。詳細については、グレイ符号を参照してください。'bin'
— バイナリ符号の順序を使用します。Vector — カスタムのシンボル順序を使用
ベクトルには、範囲 [0, (M
– 1)] の一意の要素を使用しなければなりません。最初の要素はコンスタレーションの左上の点に対応しており、続く要素は左から右の列方向に実行されます。
例: [0 3 1 2]
データ型: string
| char
| double
| single
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name
を引用符で囲みます。
例: y = qammod(x,M,symOrder,'InputType','bit')
InputType
— 入力タイプ
'integer'
(既定値) | 'bit'
入力タイプ。'integer'
または 'bit'
として指定します。
'integer'
を指定した場合、入力信号は範囲 [0, (M
– 1)] の整数で構成されなければなりません。'bit'
を指定する場合は、入力信号がバイナリ値を含まなければならず、行数は log2(M
) の整数倍でなければなりません。
UnitAveragePower
— 単位平均パワー フラグ
false
または 0
(既定値) | true
または 1
単位平均パワー フラグ。数値または logical を使用して、0
(false
) または 1
(true
) として指定します。
このフラグが
1
(true
) の場合、関数は 1 オームを基準とした 1 ワットの平均電力にコンスタレーションをスケーリングします。このフラグが
0
(false
) の場合、関数は、QAM コンスタレーション点が最小距離 2 で分割されるように、コンスタレーションをスケーリングします。
OutputDataType
— 出力データ型
'double'
| 'single'
| numerictype
オブジェクト
出力のデータ型。'double'
、'single'
、または numerictype
オブジェクトとして指定します。これらのオブジェクトの作成の詳細については、numerictype
(Fixed-Point Designer) を参照してください。この引数は、出力される変調後シンボルのデータ型、および途中の計算で使用されるデータ型を決定します。固定小数点型は、MATLAB® でのシミュレーション時にはスケーリングされていない符号付きの numerictype
オブジェクトとして出力され、C コードまたは MEX の生成時にはスケーリングされた符号付きの numerictype
オブジェクトとして出力されます。
この引数を指定せず、かつ入力データ型が
double
または組み込み整数の場合、出力データ型はdouble
です。入力データ型が
single
の場合、出力データ型はsingle
です。入力が固定小数点の場合、この引数は指定しなければなりません。
PlotConstellation
— コンスタレーションをプロットするためのオプション
false
または 0
(既定値) | true
または 1
コンスタレーションをプロットするためのオプション。数値または logical を使用して、0
(false
) または 1
(true
) として指定します。QAM コンスタレーションをプロットするには、PlotConstellation=true
を指定します。
出力引数
Y
— 変調した信号
スカラー | ベクトル | 行列 | 配列
変調した信号。数値の複素数のスカラー、ベクトル、行列、または配列として返されます。
出力データ型の詳細については、OutputDataType
を参照してください。
データ型: double
| single
| fi
| int8
| int16
| uint8
| uint16
詳細
グレイ符号
交番 2 進符号とも呼ばれる "グレイ符号" は、隣接するコンスタレーション点の間でビット パターンが 1 ビットだけ異なるシステムです。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は、GPU 配列の入力をサポートします。詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
使用上の注意および制限:
固定小数点の出力データ型はサポートされていません。
バージョン履歴
R2006a より前に導入R2024a: 出力データ型の拡張のサポート
関数 qammod
は、引数 OutputDataType
を使用して出力のデータ型を拡張することができます。これまで、出力のデータ型は、入力のデータ型から継承されるか、固定小数点数に設定されていました。今回の追加により、出力のデータ型を single
または double
としても指定できるようになりました。
R2023b: GPU 配列のサポートの追加
関数 qammod
において、グラフィックス処理装置 (GPU) でコードを実行するための gpuArray
(Parallel Computing Toolbox) オブジェクト処理のサポートが追加されました。
R2018b: 初期位相入力の削除
R2018b 以降、関数 qammod
を使用して QAM コンスタレーションの初期位相をオフセットできなくなりました。
QAM 変調データの初期位相を調整するには、代わりに、genqammod
を使用して、変調されるデータの初期位相をオフセットします。または、qammod
の出力と目的の初期位相を乗算することもできます。
y = qammod(x,M) .* exp(1i*initPhase)
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)