Matlab环境下16-QAM仿真1.原理框图2.matlab程序:clearall;nsymbol=100000;%每种信噪比下的发送符号数M=16;%16-QAMgraycode=[0132457612131514891110];%格雷码编码规则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;%求出每个符号的平均功率forindx=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);%求误符号率Endp4=2*(1-1/sqrt(M)*qfunc(sqrt(3*snr1/(M-1))));ser1=1-(1-p4).^2;%理论误符号率均匀随机数M=2n的QAM信号映射器+==+高斯随机数高斯随机数检测器比较差错计数器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.仿真结果: