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' 名称-值参量设置输出信号,使其平均信号功率为 1W。
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
在不应用任何射频或信道损伤的情况下,将发射信号赋给接收信号。由于没有损伤使接收信号失真,解调后的信号与原始信号匹配。使用硬决策解调符号,并确认信号解调正确。
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
名称-值参数
将可选参量对组指定为 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。
输出参量
调制信号,以数值组成的复数标量、向量、矩阵或数组形式返回。
有关输出数据类型的详细信息,请参阅 OutputDataType。
数据类型: double | single | fi | int8 | int16 | uint8 | uint16
详细信息
格雷码,也称为反射二进制码,是一种编码系统,其中相邻星座图点中的比特模式仅相差一位。
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
版本历史记录
在 R2006a 之前推出qammod 函数通过使用 OutputDataType 参量增强了对输出数据类型的支持。以前,输出数据类型是从输入数据类型继承的或设置为定点设置。此次增强支持后,您还可以将输出数据类型指定为 single 或 double。
qammod 函数增加了对 gpuArray (Parallel Computing Toolbox) 对象处理的支持,以在图形处理单元 (GPU) 上运行代码。
从 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.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 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)