当前位置:文档之家› Matlab环境中16-QAM的性能仿真

Matlab环境中16-QAM的性能仿真

Matlab环境下16-QAM仿真
1.原理框图
2.matlab程序:
clear all;
nsymbol=100000;%每种信噪比下的发送符号数
M=16;%16-QAM
graycode=[0 1 3 2 4 5 7 6 12 13 15 14 8 9 11 10];%格雷码编码规则
EsN0=5:20;%信噪比的范围
snr1=10.^(EsN0/10);%将dB值转化成线性值
msg=randint(1,nsymbol,M);%由0-15的整数值组成的均匀随机数
msg1=graycode(msg+1);%将随机数映射成格雷码
msgmod=qammod(msg1,M);%16-QAM调制
spow=norm(msgmod).^2/nsymbol;%求出每个符号的平均功率
for indx=1:length(EsN0)
sigma=sqrt(spow/(2*snr1(indx))) ;%根据符号功率求出噪声功率
rx=msgmod+sigma*(randn(1,length(msgmod))+j*randn(1,length(msgmod)));
%混入高斯加性白噪声
y=qamdemod(rx,M);%16-QAM的解调
decmsg=graycode(y+1);%格雷码的逆映射
[err,ber(indx)]=biterr(msg,decmsg,log2(M));%求误比特率
[err,ser(indx)]=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;%理论误比特率
semilogy(EsN0,ber,'o',EsN0,ser,'*',EsN0,ser1,EsN0,ber1,'-k.');
title('16-QAM载波调制信号在AWGN信道下的性能');
xlabel('Es/N0');ylabel('误比特率和误符号率');
legend('误比特率','误符号率','理论误符号率','理论误比特率');
scatterplot(msgmod);%画出调制之后的星座图
title('16-QAM调制之后的星座图');
xlabel('同相分量');ylabel('正交分量');
scatterplot(rx);%画出混入高斯加性白噪声后的星座图
title('16-QAM信号经过AWGN信道之后的星座图');
xlabel('同相分量');ylabel('正交分量');
程序说明:
先将均匀随机数映射成格雷码,再用qammod函数实现16-QAM调制,已调信号由分别表示幅度和相位的两部分数据构成。

计算出每个符号的平均功率之后,再根据信噪比算出噪声的平均功率。

将噪声叠加到已调信号上,对幅度和相位两部分都叠加上噪声。

其后通过qamdemod函数解调,得到由格雷码表示的数据,再通过格雷码的逆映射还原出0-15组成的均匀随机数,再与没有调制的数据比较,得出误比特率和误符号率。

并画出调制之后的信号和叠加了噪声之后的已调信号的星座图。

3.仿真结果:。

相关主题