qammod
直交振幅変調 (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 を使用してランダム データ シンボルを変調します。平均信号強度が 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 コンスタレーションをプロットします。
変調次数を設定し、変調スキームのシンボルの完全なセットを含むデータ シーケンスを作成します。
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);

さまざまな M-QAM コンスタレーションをプロットして、形状が変調次数によって異なることを示します。
シンボルあたりのビット数 から、変調次数 の値のベクトルを定義します。
k = 1:7; % Number of bits per symbol M = 2.^k; % Modulation order
forループを使用して、変調スキームのシンボルの完全なセットを含むデータ シーケンスを作成し、そのデータを変調して、ベクトル k の値の範囲内で各変調次数のコンスタレーションをプロットします。シンボルあたりのビット数 k によってコンスタレーションの形状が異なることに注意してください。
kの値が偶数である場合、コンスタレーションは正方形になる。の値が奇数である場合、コンスタレーションは十字になる。
および の場合、コンスタレーションは四角形になる。
for ii = 1:length(M) disp(['k = ',num2str(k(ii))]) d = 0:M(ii)-1; y = qammod(d,M(ii),PlotConstellation=true); end
k = 1

k = 2

k = 3

k = 4

k = 5

k = 6

k = 7

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 信号を復調し、データが正しく復元されていることを検証します。
変調次数を 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
ユーティリティ関数 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)

ユーティリティ関数 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)

入力引数
入力信号。スカラー、ベクトル、行列、または配列として指定します。この入力信号の要素は、バイナリ値または範囲 [0, (M – 1)] の整数でなければなりません。ここで、M は変調次数です。
メモ
入力信号をバイナリの要素として処理するには、InputType='bit' を指定します。バイナリ入力の場合、行数は log2(M) の整数倍でなければなりません。log2(M) ビットのグループがシンボルにマッピングされます。ここで、最初のビットは MSB を表し、最後のビットは LSB を表します。
データ型: double | single | fi(S,WL,0) | int8 | int16 | uint8 | uint16
変調次数。2 の正の整数乗として指定します。変調次数は信号コンスタレーション点の数を指定します。
データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
シンボルの順序。'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')
入力タイプ。'integer' または 'bit' として指定します。
'integer'を指定した場合、入力信号は範囲 [0, (M– 1)] の整数で構成されなければなりません。'bit'を指定する場合は、入力信号がバイナリ値を含まなければならず、行数は log2(M) の整数倍でなければなりません。
単位平均パワー フラグ。数値または logical を使用して、0 (false) または 1 (true) として指定します。
このフラグが
1(true) の場合、関数は 1 オームを基準とした 1 ワットの平均電力にコンスタレーションをスケーリングします。このフラグが
0(false) の場合、関数は、QAM コンスタレーション点が最小距離 2 で分割されるように、コンスタレーションをスケーリングします。
出力のデータ型。'double'、'single'、または numerictype オブジェクトとして指定します。これらのオブジェクトの作成の詳細については、numerictype (Fixed-Point Designer) を参照してください。この引数は、出力される変調後シンボルのデータ型、および途中の計算で使用されるデータ型を決定します。固定小数点型は、MATLAB® でのシミュレーション時にはスケーリングされていない符号付きの numerictype オブジェクトとして出力され、C コードまたは MEX の生成時にはスケーリングされた符号付きの numerictype オブジェクトとして出力されます。
この引数を指定せず、かつ入力データ型が
doubleまたは組み込み整数の場合、出力データ型はdoubleです。入力データ型が
singleの場合、出力データ型はsingleです。入力が固定小数点の場合、この引数は指定しなければなりません。
コンスタレーションをプロットするためのオプション。数値または logical を使用して、0 (false) または 1 (true) として指定します。QAM コンスタレーションをプロットするには、PlotConstellation=true を指定します。
出力引数
変調した信号。数値の複素数のスカラー、ベクトル、行列、または配列として返されます。
出力データ型の詳細については、OutputDataType を参照してください。
データ型: double | single | fi | int8 | int16 | uint8 | uint16
詳細
交番 2 進符号とも呼ばれる "グレイ符号" は、隣接するコンスタレーション点の間でビット パターンが 1 ビットだけ異なるシステムです。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
この関数は、GPU 配列の入力をサポートします。詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
使用上の注意および制限:
固定小数点の出力データ型はサポートされていません。
バージョン履歴
R2006a より前に導入関数 qammod は、引数 OutputDataType を使用して出力のデータ型を拡張することができます。これまで、出力のデータ型は、入力のデータ型から継承されるか、固定小数点数に設定されていました。今回の追加により、出力のデータ型を single または double としても指定できるようになりました。
関数 qammod において、グラフィックス処理装置 (GPU) でコードを実行するための gpuArray (Parallel Computing Toolbox) オブジェクト処理のサポートが追加されました。
R2018b 以降、関数 qammod を使用して QAM コンスタレーションの初期位相をオフセットできなくなりました。
QAM 変調データの初期位相を調整するには、代わりに、genqammod を使用して、変調されるデータの初期位相をオフセットします。または、qammod の出力と目的の初期位相を乗算することもできます。
y = qammod(x,M) .* exp(1i*initPhase)
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)