先把星座图画出来
这段是毕设里 star3.m 的代码,分别画 QPSK 和 16QAM 星座图,让每个符号的同相、正交分量直接显示在坐标上。
QPSK 用四个复数点并除以平方根 2;16QAM 从四个电平组合出 16 个点,再做平均功率归一化。两张图最后分别保存成 PNG,下面保留了当时的文件名。
这次整理只翻了源码,完整的 OFDM 信道仿真还没重新跑过。
源码摘录
matlab
clc;
clear;
close all;
%% QPSK调制星座图
qpsk_symbols = [1+1j, -1+1j, -1-1j, 1-1j] / sqrt(2);
qpsk_labels = {'00','01','11','10'};
figure;
plot(real(qpsk_symbols), imag(qpsk_symbols), 'bo', ...
'MarkerSize', 10, 'LineWidth', 2);
grid on;
axis equal;
xlim([-1.5 1.5]);
ylim([-1.5 1.5]);
xlabel('同相分量 I');
ylabel('正交分量 Q');
title('QPSK调制星座图');
set(gca, 'FontSize', 12);
for k = 1:length(qpsk_symbols)
text(real(qpsk_symbols(k))+0.05, imag(qpsk_symbols(k))+0.05, ...
qpsk_labels{k}, 'FontSize', 11);
end
saveas(gcf, 'Fig3_2_QPSK_Constellation.png');
%% 16QAM调制星座图
levels = [-3 -1 1 3];
[I, Q] = meshgrid(levels, levels);
qam16_symbols = I(:) + 1j * Q(:);
% 平均功率归一化
qam16_symbols = qam16_symbols / sqrt(mean(abs(qam16_symbols).^2));
figure;
plot(real(qam16_symbols), imag(qam16_symbols), 'rs', ...
'MarkerSize', 8, 'LineWidth', 2);
grid on;
axis equal;
xlim([-1.5 1.5]);
ylim([-1.5 1.5]);
xlabel('同相分量 I');
ylabel('正交分量 Q');
title('16QAM调制星座图');
set(gca, 'FontSize', 12);
saveas(gcf, 'Fig3_3_16QAM_Constellation.png');