16qam调制解调、误码率曲线、星座图、眼图matlab代码,并注释
时间: 2023-07-10 15:33:53 浏览: 221
以下是16QAM调制解调、误码率曲线、星座图、眼图的Matlab代码以及注释:
%% 16QAM调制解调
% 假设我们要传输的数字信号为:[1 0 1 1 0 1 0 0]
data = [1 0 1 1 0 1 0 0];
% 将数字信号转换为符号(即将2进制转换为16QAM星座图中的点)
M = 16; % 星座图的大小
symbols = bi2de(reshape(data, [], log2(M)).','left-msb'); % 将二进制转换为十进制作为符号
% 显示16QAM星座图
scatterplot(qammod(0:M-1, M));
% 对符号进行16QAM调制
Fs = 1000; % 采样率
fc = 100; % 载波频率
t = 0:1/Fs:(length(symbols)-1)/Fs; % 时间轴
modulated = qammod(symbols, M); % 16QAM调制
transmitted = real(modulated .* exp(1j*2*pi*fc*t)); % 按照载波频率进行移频
% 在时域和频域中显示调制后的信号
figure;
subplot(2,1,1);
plot(t, transmitted);
title('Modulated signal in time domain');
xlabel('Time (s)');
ylabel('Amplitude');
subplot(2,1,2);
f = -Fs/2:Fs/length(transmitted):Fs/2-Fs/length(transmitted);
plot(f, fftshift(abs(fft(transmitted))));
title('Modulated signal in frequency domain');
xlabel('Frequency (Hz)');
ylabel('Magnitude');
% 对调制后的信号进行16QAM解调
received = transmitted .* exp(-1j*2*pi*fc*t); % 进行移频还原
demodulated = qamdemod(received, M); % 16QAM解调
% 将解调后的符号转换为二进制
binary = reshape(de2bi(demodulated, log2(M)).', [], 1).';
disp(['Original data:', num2str(data)]);
disp(['Demodulated data:', num2str(binary)]);
%% 16QAM误码率曲线
% 生成随机的数字信号
data = randi([0 1], 1, 1000);
% 将数字信号转换为符号
M = 16; % 星座图的大小
symbols = bi2de(reshape(data, [], log2(M)).','left-msb'); % 将二进制转换为十进制作为符号
% 对符号进行16QAM调制
Fs = 1000; % 采样率
fc = 100; % 载波频率
t = 0:1/Fs:(length(symbols)-1)/Fs; % 时间轴
modulated = qammod(symbols, M); % 16QAM调制
transmitted = real(modulated .* exp(1j*2*pi*fc*t)); % 按照载波频率进行移频
% 添加高斯白噪声
EbNo = 0:2:20; % 信噪比范围
ber = zeros(size(EbNo)); % 误码率
for i = 1:length(EbNo)
snr = EbNo(i) + 10*log10(log2(M)); % 转换为信噪比
noisy = awgn(transmitted, snr, 'measured'); % 添加高斯白噪声
received = noisy .* exp(-1j*2*pi*fc*t); % 进行移频还原
demodulated = qamdemod(received, M); % 16QAM解调
binary = reshape(de2bi(demodulated, log2(M)).', [], 1).'; % 将解调后的符号转换为二进制
[~, ber(i)] = biterr(binary, data); % 计算误码率
end
% 绘制误码率曲线
figure;
semilogy(EbNo, ber);
title('16QAM Bit Error Rate');
xlabel('Eb/No (dB)');
ylabel('Bit Error Rate');
%% 16QAM星座图
% 显示16QAM星座图
scatterplot(qammod(0:15, 16));
%% 16QAM眼图
% 生成随机的数字信号
data = randi([0 1], 1, 1000);
% 将数字信号转换为符号
M = 16; % 星座图的大小
symbols = bi2de(reshape(data, [], log2(M)).','left-msb'); % 将二进制转换为十进制作为符号
% 对符号进行16QAM调制
Fs = 1000; % 采样率
fc = 100; % 载波频率
t = 0:1/Fs:(length(symbols)-1)/Fs; % 时间轴
modulated = qammod(symbols, M); % 16QAM调制
transmitted = real(modulated .* exp(1j*2*pi*fc*t)); % 按照载波频率进行移频
% 绘制眼图
eyediagram(transmitted, Fs/16); % 每个符号的采样点数为16
阅读全文