You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab中256-QAM调制后同相(I)分量固定为-15、正交(Q)分量正常变化的问题求助

Matlab中256-QAM调制后同相(I)分量固定为-15、正交(Q)分量正常变化的问题求助

各位好,我现在用Matlab的qammod命令实现QAM调制,输入是一个整数向量,但绘图时发现同相(I)分量始终固定在-15,只有正交(Q)分量在变化,不管怎么修改输入数据都是这样。我已经试过更换输入数值,也翻了官方文档,但还是没找到问题所在,有没有大佬能帮忙分析下或者给个解决办法?

我的代码如下:

clc

data = [3, 4, 5, 6, 7, 8, 9, 10];

% Modulate using 256-QAM
M = 256; % QAM order
symbols = qammod(data, M);

disp('QAM Symbols (I and Q):');
disp(symbols);

% Plot the QAM constellation
figure;
plot(real(symbols), imag(symbols), 'o');
title('256-QAM Constellation');
xlabel('I (In-phase)');
ylabel('Q (Quadrature)');
grid on;
axis square;

问题原因分析

其实这个现象是因为你输入的数值范围太小啦!256-QAM的星座图是16×16的网格结构(因为√256=16),每个维度的取值是从-15到15的奇数(未归一化时)。qammod默认会把输入的0255的整数映射到对应的星座点,其中数值较小的一批数(比如015)都会对应到I分量为-15的那一行星座点,所以你输入的3~10自然都落在这一行,I分量就固定不变了。

解决办法

给你两个简单的解决思路:

  • 扩大输入数据的范围:把data改成包含0~255中不同区间的数值,比如:
    data = [3, 35, 67, 99, 131, 163, 195, 227];
    
    这样每个数值对应的星座点会分布在不同的I分量列上,绘图时就能看到变化的I和Q分量了。
  • 生成覆盖全范围的随机输入:如果想直观看到完整的星座分布,可以先生成二进制序列再转成十进制整数,确保覆盖0~255的所有区间:
    % 生成32位二进制数据(每个256-QAM符号需要8位,共4个符号)
    data_bin = randi([0,1], 1, 8*4);
    % 转换为十进制整数
    data = bi2de(reshape(data_bin, 8, [])', 'left-msb');
    
  • 另外,你也可以直接用qammod的参数查看完整星座图,确认所有点的分布:
    qammod(data, M, 'PlotConstellation', true);
    

备注:内容来源于stack exchange,提问作者Andrew Annor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 13:08:00