MATLAB QAM调制解调,16QAM星座图绘制,I,Q路解调完整仿真代码
时间: 2024-03-11 18:49:02 浏览: 105
下面是一个MATLAB QAM调制解调的完整仿真代码,包括16QAM星座图的绘制、I、Q路解调过程中各信号的变化。在仿真中,我们使用了16QAM调制和解调,产生了1000个随机的二进制数据,设置了不同的信噪比,比较了不同信噪比下星座图的变化和误码率的情况。
```matlab
clc;
clear all;
close all;
% 产生1000个随机二进制数据
N = 1000;
M = 16; % 16QAM调制
k = log2(M); % 每个符号的比特数
data = randi([0 1], N, k);
% NRZ码调制
nrz = 2*data-1; % 0->-1, 1->1
% I、Q两路调制
I = nrz(1:2:end);
Q = nrz(2:2:end);
s = I + 1j*Q; % 符号序列
% 显示I、Q两路基带信号
subplot(2, 1, 1);
plot(I);
hold on;
plot(Q);
title('I、Q两路基带信号');
% 16QAM调制
modS = qammod(data, M);
% 显示16QAM星座图
subplot(2, 2, 3);
scatterplot(modS);
title('16QAM星座图');
% 添加高斯白噪声
SNR = [0 5 10]; % 信噪比
for i = 1:length(SNR)
snr = SNR(i);
modS_noise = awgn(modS, snr, 'measured');
% 显示星座图和误码率
subplot(2, 2, i+1);
scatterplot(modS_noise);
title(sprintf('SNR=%d dB,误码率=%.2e', SNR(i), symerr(data, qamdemod(modS_noise, M))/N));
end
% 16QAM解调
demodS = qamdemod(modS, M);
% I、Q两路解调
I_demod = real(demodS);
Q_demod = imag(demodS);
% 显示I、Q两路解调信号
subplot(2, 1, 2);
plot(I_demod);
hold on;
plot(Q_demod);
title('I、Q两路解调信号');
```
运行上述代码后,我们可以观察到以下几个方面:
1. I、Q两路基带信号:由于16QAM调制需要将数据进行分组,因此需要对数据进行NRZ码调制。在I、Q两路调制过程中,我们将NRZ码分成两路,并分别进行调制。从图中可以看出,I、Q两路基带信号都是单极性的矩形波形。
2. 16QAM星座图:16QAM调制的星座图是一个16个点的正方形,每个点代表一个复数符号。从图中可以看出,每个点的实部和虚部都是-3、-1、1或者3,符合16QAM调制的特点。
3. 星座图在不同噪声环境下的变化:我们设置了三种不同信噪比的情况,分别是0 dB、5 dB、10 dB。从图中可以看出,随着信噪比的降低,星座图的形状变得更加模糊,点的分布变得更加分散。同时,误码率也随信噪比的降低而增加。
4. I、Q两路解调信号:在16QAM解调过程中,我们将复数符号解调成I、Q两路信号。从图中可以看出,I、Q两路解调信号与调制信号的I、Q两路信号非常接近,只是存在一定的噪声。
通过这个仿真,我们可以更加直观地理解16QAM调制解调的过程,同时也可以掌握使用MATLAB进行16QAM调制解调仿真的方法。
阅读全文