% 64QAM
clear
clc
close all
sample_nums=3000000;
BER_AWGN=[];
SNR_db = 20:1:50;
m=1;
for SNR=20:1:50
%发送序列
sent_bits = randi([0,1], sample_nums,1);
%调制,发送信号
modulated_bits=qammod(sent_bits,64,'InputType','bit')/sqrt(42);
%AWGN
sigma = (10^(-SNR/10));
awgn=complex(sqrt(sigma/2)*randn(length(modulated_bits),1),sqrt(sigma/2)*randn(length(modulated_bits),1));
%通过AWGN信道
modulated_bits_awgn=modulated_bits+awgn;
%通过rayleigh信道
gaussian_real = randn(length(modulated_bits),1);
gaussian_image = randn(length(modulated_bits),1);
channel_gain = sqrt(1/2)*(gaussian_real + 1i*gaussian_image);% 计算复数信道增益
% awgn解调
recieved_bits=qamdemod(modulated_bits_awgn*sqrt(42),64,'OutputType','bit');
BER_AWGN(m)=bit_error_rate(sent_bits,recieved_bits);
% 瑞利解调
receive_signal=modulated_bits.*channel_gain+awgn;
modulated_bits_rayleigh=receive_signal./channel_gain;
recieved_bits_rayleigh=qamdemod(modulated_bits_rayleigh*sqrt(42),64,'OutputType','bit');
BER_rayleigh(m)=bit_error_rate(sent_bits,recieved_bits_rayleigh);
m=m+1;
% if SNR == 25
%
% scatterplot(modulated_bits_awgn);
% title('awgn星座图 SNR=25')
% xlim([-2,2]);
% ylim([-2,2]);
% scatterplot(modulated_bits_rayleigh);
% title('瑞利星座图 SNR=25')
% xlim([-2,2]);
% ylim([-2,2]);
% end
% if SNR == 35
%
% scatterplot(modulated_bits_awgn);
% title('awgn星座图 SNR=35')
% xlim([-2,2]);
% ylim([-2,2]);
% scatterplot(modulated_bits_rayleigh);
% title('瑞利星座图 SNR=35')
% xlim([-2,2]);
% ylim([-2,2]);
% end
if SNR == 45
scatterplot(modulated_bits_awgn);
title('awgn星座图 SNR=45')
xlim([-2,2]);
ylim([-2,2]);
scatterplot(modulated_bits_rayleigh);
title('瑞利星座图 SNR=45')
xlim([-2,2]);
ylim([-2,2]);
end
end
%误差绘图
figure
semilogy(SNR_db,BER_AWGN,'o','MarkerFaceColor',[0 0.447 0.741]);
title('64QAM: error for AWGN');
grid on
xlabel('SNR');
ylabel('BER');
figure
semilogy(SNR_db,BER_rayleigh,'o','MarkerFaceColor',[0 0.447 0.741]);
title('64QAM: error for rayleigh');
grid on
xlabel('SNR');
ylabel('BER');
% 计算误比特率的函数
function ber = bit_error_rate(sent_bits, received_bits)
% 计算比特之间的差异
errors = sum(sent_bits ~= received_bits);
% 计算误比特率
ber = errors / length(sent_bits);
end
瑞利信道64QAM调制与解调matlab仿真
最新推荐文章于 2024-11-19 16:22:29 发布