Matlab-16QAM调制与解调 16-QAM星座点图 16-QAM在AWGN信道下的误码率和误比特率性能,仿真值与理论值曲线对比图

本博客环境为Matlab2018 ,软件版本不同可能会有些出入,需要稍作修改。

16QAM调制与解调
仿真要求
用基带等效的方式仿真16-QAM在AWGN信道下的误码率和误比特率性能,并与理论值相比较。

代码如下:

clear all;clc;
nsymbol= 100000;%一共有十万个符号
M=16;%阶数,表示16QAM
graycode=[0 1 3 2 4 5 7 6 12 13 15 14 8 9 11 10];%格雷映射,十进制表示
EsN0=5:20;%符号比,单位db
snr1=10.^(EsN0/10);%将db转为非线性的方式
msg=randi([0,15],1,nsymbol);%随机产生0-15的符号,乘nsymbol得到原始数据
msg1=graycode(msg+1);%格雷映射
msgmod=qammod(msg1,M);%调用qammod函数,得到调制后的符号
scatterplot(msgmod);%画出星座点图
spow=norm(msgmod).^2/nsymbol;%a+bj取模的平方,即功率;功率除以整个符号得到平均功率
for i= 1:length(EsN0)
    sigma=sqrt(spow/(2*snr1(i))); 
    rx=msgmod+sigma*(randn(1,length(msgmod))+1i*randn(1,length(msgmod))); %星座点图乘以随机长度高斯白噪声
    y=qamdemod(rx,M);%转为对应的点
    decmsg=graycode(y+1);%格雷逆映射
    [err1 ,ber(i)]=biterr(msg,decmsg,log2(M));
    [err2,ser(i)]=symerr(msg,decmsg);%比较符号误差
end

p4=2*(1-1/sqrt(M))*qfunc(sqrt(3*snr1/(M-1)));%误码率
ser1=1-(1-p4).^2;
ber1=1/log2(M)*ser1;%误比特率
figure()
%ber仿真值,ser比特仿真值,ber1理论误比特率,ser1理论误码率
semilogy(EsN0,ber,'o' ,EsN0,ser,'*',EsN0,ser1,'-',EsN0,ber1,'-.');
title('16QAM-AWGN')
xlabel('Es/N0');ylabel('SER AND BER');
legend('ber simulation','ser simulation','ser theory' ,'ber theory');

仿真结果如下所示:
星座点图如下图所示:
在这里插入图片描述

仿真与理论的误码率和误比特率性能曲线比较:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44436677/article/details/106819257