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中不同区间的数值,比如:
这样每个数值对应的星座点会分布在不同的I分量列上,绘图时就能看到变化的I和Q分量了。data = [3, 35, 67, 99, 131, 163, 195, 227]; - 生成覆盖全范围的随机输入:如果想直观看到完整的星座分布,可以先生成二进制序列再转成十进制整数,确保覆盖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
相关产品推荐
相关产品推荐

