主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

qammod

正交调幅 (QAM)

说明

Y = qammod(X,M) 使用具有指定调制阶数 M 的 QAM 调制输入信号 X

示例

Y = qammod(X,M,symOrder) 指定符号顺序。

示例

Y = qammod(___,Name=Value) 支持上述语法中的任何输入参量组合,且可使用名称-值参量指定选项。例如,InputType=bit 将输入信号的类型设置为比特。

示例

示例

全部折叠

使用 QAM 调制数据,并在散点图中显示结果。

将调制阶数设置为 16,并创建一个包含每个可能符号的数据向量。

M = 16;
x = (0:M-1)';

使用 qammod 函数调制数据。

y = qammod(x,M);

使用 scatterplot 函数显示调制信号的星座图。

scatterplot(y)

Figure Scatter Plot contains an axes object. The axes object with title Scatter plot, xlabel In-Phase, ylabel Quadrature contains a line object which displays its values using only markers. This object represents Channel 1.

将调制阶数设置为 256,并显示调制信号的散点图。

M = 256;
x = (0:M-1)';
y = qammod(x,M);
scatterplot(y)

Figure Scatter Plot contains an axes object. The axes object with title Scatter plot, xlabel In-Phase, ylabel Quadrature contains a line object which displays its values using only markers. This object represents Channel 1.

使用 QAM 调制随机数据符号。归一化调制器输出,使其平均信号功率为 1 W。

设置调制阶数并生成随机数据。

M = 64;
x = randi([0 M-1],1000,1);

调制数据。使用 'UnitAveragePower' 名称-值参量设置输出信号,使其平均信号功率为 1W。

y = qammod(x,M,UnitAveragePower=true);

确认信号具有单位平均功率。

avgPower = mean(abs(y).^2)
avgPower = 
1.0070

绘制生成的星座图。

scatterplot(y)
title('64-QAM, Average Power = 1 W')

Figure Scatter Plot contains an axes object. The axes object with title 64-QAM, Average Power = 1 W, xlabel In-Phase, ylabel Quadrature contains a line object which displays its values using only markers. This object represents Channel 1.

绘制格雷、二进制和自定义符号映射的 QAM 星座图。

设置调制阶数,并创建一个包含调制方案完整符号集的数据序列。

M = 16;
d = 0:M-1;

调制数据,并绘制其星座图。默认符号映射使用格雷编码顺序。星座点的排列不是顺序的。

y = qammod(d,M,PlotConstellation=true);

Figure contains an axes object. The axes object with title 16-QAM, Gray Mapping, UnitAveragePower=false, xlabel In-phase Amplitude, ylabel Quadrature Amplitude contains 19 objects of type line, text. One or more of the lines displays its values using only markers

使用二进制符号映射重复调制过程。符号映射遵循二进制编码顺序并且是顺序排列的。

z = qammod(d,M,'bin',PlotConstellation=true);

Figure contains an axes object. The axes object with title 16-QAM, Binary Mapping, UnitAveragePower=false, xlabel In-phase Amplitude, ylabel Quadrature Amplitude contains 19 objects of type line, text. One or more of the lines displays its values using only markers

创建一个自定义符号映射。

smap = randperm(M)-1;

调制并绘制星座图。

w = qammod(d,M,smap,PlotConstellation=true);

Figure contains an axes object. The axes object with title 16-QAM, Custom Mapping, UnitAveragePower=false, xlabel In-phase Amplitude, ylabel Quadrature Amplitude contains 19 objects of type line, text. One or more of the lines displays its values using only markers

绘制各种 M-QAM 星座图以演示形状对调制阶数的依赖性。

根据每符号比特数 k,定义一个调制阶数 M 的值向量。

k = 1:7;  % Number of bits per symbol
M = 2.^k; % Modulation order

使用 for 循环为调制方案创建一个包含完整符号集的数据序列,调制数据,并为向量 k 中的值范围内的每个调制阶数绘制星座图。请注意,星座图形状取决于每符号比特数 k

  • 如果 k 为偶数值,星座图是正方形。

  • 如果 k>3 为奇数值,星座图是十字形。

  • 如果 k=1k=3,星座图是矩形。

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

Figure contains an axes object. The axes object with title 2-QAM, Gray Mapping, UnitAveragePower=false, xlabel In-phase Amplitude, ylabel Quadrature Amplitude contains 5 objects of type line, text. One or more of the lines displays its values using only markers

k = 2

Figure contains an axes object. The axes object with title 4-QAM, Gray Mapping, UnitAveragePower=false, xlabel In-phase Amplitude, ylabel Quadrature Amplitude contains 7 objects of type line, text. One or more of the lines displays its values using only markers

k = 3

Figure contains an axes object. The axes object with title 8-QAM, Gray Mapping, UnitAveragePower=false, xlabel In-phase Amplitude, ylabel Quadrature Amplitude contains 11 objects of type line, text. One or more of the lines displays its values using only markers

k = 4

Figure contains an axes object. The axes object with title 16-QAM, Gray Mapping, UnitAveragePower=false, xlabel In-phase Amplitude, ylabel Quadrature Amplitude contains 19 objects of type line, text. One or more of the lines displays its values using only markers

k = 5

Figure contains an axes object. The axes object with title 32-QAM, Gray Mapping, UnitAveragePower=false, xlabel In-phase Amplitude, ylabel Quadrature Amplitude contains 35 objects of type line, text. One or more of the lines displays its values using only markers

k = 6

Figure contains an axes object. The axes object with title 64-QAM, Gray Mapping, UnitAveragePower=false, xlabel In-phase Amplitude, ylabel Quadrature Amplitude contains 67 objects of type line, text. One or more of the lines displays its values using only markers

k = 7

Figure contains an axes object. The axes object with title 128-QAM, Gray Mapping, UnitAveragePower=false, xlabel In-phase Amplitude, ylabel Quadrature Amplitude contains 131 objects of type line, text. One or more of the lines displays its values using only markers

使用 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

在不应用任何射频或信道损伤的情况下,将发射信号赋给接收信号。由于没有损伤使接收信号失真,解调后的信号与原始信号匹配。使用硬决策解调符号,并确认信号解调正确。

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

在不应用任何射频或信道损伤的情况下,将发射信号赋给接收信号。由于没有损伤使接收信号失真,解调后的信号与原始信号匹配。使用硬决策解调符号,并确认信号解调正确。

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' - 使用二进制编码顺序。

  • 向量 - 使用自定义符号顺序

向量必须使用范围 [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) 的整数倍。

单位平均功率标志,指定为数值或逻辑值 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

  • 如果输入是定点类型,则必须指定此参量。

绘制星座图的选项,指定为数值或逻辑值 0 (false) 或 1 (true)。要绘制 QAM 星座图,请指定 PlotConstellation=true

输出参量

全部折叠

调制信号,以数值组成的复数标量、向量、矩阵或数组形式返回。

  • 对于整数输入,输出 Y 与输入信号 X 具有相同的维度。

  • 对于比特输入,Y 中的行数是 X 中的行数除以 log2(M)

有关输出数据类型的详细信息,请参阅 OutputDataType

数据类型: double | single | fi | int8 | int16 | uint8 | uint16

详细信息

全部折叠

扩展功能

全部展开

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

版本历史记录

在 R2006a 之前推出

全部展开