最新16QAM理论误码率与实际误码率MATLAB仿真程序.docx
精品资料16QAM理论误码率与实际误码率MATLAB仿真程序.%16QAM%等效基带调制clc;clear all;close all;%关闭所有窗口,比如之前画的图nsymbol = 10000;%每种信噪比下符号数的发送符号数,106个数errornumber = zeros(1,10);errorratio = zeros(1,10);data = randi(0,1,1,4*nsymbol);%产生1行,4*nsymbol列均匀分布的随机数data_mod1 = zeros(1,nsymbol);%各参量初始化data_mod2 = zeros(1,nsymbol);data_demod1 = zeros(1,nsymbol);data_demod2 = zeros(1,nsymbol);data_demod3 = zeros(1,nsymbol);data_demod4 = zeros(1,nsymbol);s_receive1 = zeros(1,nsymbol);s_receive2 = zeros(1,nsymbol);for i = 1:nsymbol %格雷码调制到星座图的映射 if data(4*i-3)=0 && data(4*i-2)=0 data_mod1(i) = 3; if data(4*i-1)=0 && data(4*i)=0 data_mod2(i) = 3; elseif data(4*i-1)=0 && data(4*i)=1 data_mod2(i) = 1; elseif data(4*i-1)=1 && data(4*i)=1 data_mod2(i) = -1; elseif data(4*i-1)=1 && data(4*i)=0 data_mod2(i) = -3; end elseif data(4*i-3)=0 && data(4*i-2)=1 data_mod1(i) = 1; if data(4*i-1)=0 && data(4*i)=0 data_mod2(i) = 3; elseif data(4*i-1)=0 && data(4*i)=1 data_mod2(i) = 1; elseif data(4*i-1)=1 && data(4*i)=1 data_mod2(i) = -1; elseif data(4*i-1)=1 && data(4*i)=0 data_mod2(i) = -3; end elseif data(4*i-3)=1 && data(4*i-2)=1 data_mod1(i) = -1; if data(4*i-1)=0 && data(4*i)=0 data_mod2(i) = 3; elseif data(4*i-1)=0 && data(4*i)=1 data_mod2(i) = 1; elseif data(4*i-1)=1 && data(4*i)=1 data_mod2(i) = -1; elseif data(4*i-1)=1 && data(4*i)=0 data_mod2(i) = -3; end elseif data(4*i-3)=1 && data(4*i-2)=0 data_mod1(i) = -3; if data(4*i-1)=0 && data(4*i)=0 data_mod2(i) = 3; elseif data(4*i-1)=0 && data(4*i)=1 data_mod2(i) = 1; elseif data(4*i-1)=1 && data(4*i)=1 data_mod2(i) = -1; elseif data(4*i-1)=1 && data(4*i)=0 data_mod2(i) = -3; end endendSNR_dB = 1:10;%信噪比dB形式SNR = 10.(SNR_dB/10);%信噪比转化为线性值for loop= 1:10 sigma = sqrt(5/SNR(loop); s_receive1 = data_mod1 + sigma * randn(1,length(data_mod1); s_receive2 = data_mod2 + sigma * randn(1,length(data_mod2);%? for k = 1:nsymbol if s_receive1(k)>2 data_demod1(k) = 0; data_demod2(k) = 0; if s_receive2(k)>2 data_demod3(k) = 0; data_demod4(k) = 0; elseif s_receive2(k)>0 && s_receive2(k)<2 data_demod3(k) = 0; data_demod4(k) = 1; elseif s_receive2(k)>-2 && s_receive2(k)<0 data_demod3(k) = 1; data_demod4(k) = 1; elseif s_receive2(k)<-2 data_demod3(k) = 1; data_demod4(k) = 0; end elseif s_receive1(k)>0 && s_receive1(k)<2 data_demod1(k) = 0; data_demod2(k) = 1; if s_receive2(k)>2 data_demod3(k) = 0; data_demod4(k) = 0; elseif s_receive2(k)>0 && s_receive2(k)<2 data_demod3(k) = 0; data_demod4(k) = 1; elseif s_receive2(k)>-2 &&s_receive2(k)<0 data_demod3(k) = 1; data_demod4(k) = 1; elseif s_receive2(k)<-2 data_demod3(k) = 1; data_demod4(k) = 0; end elseif s_receive1(k)<0 && s_receive1(k)>-2 data_demod1(k) = 1; data_demod2(k) = 1; if s_receive2(k)>2 data_demod3(k) = 0; data_demod4(k) = 0; elseif s_receive2(k)>0 && s_receive2(k)<2 data_demod3(k) = 0; data_demod4(k) = 1; elseif s_receive2(k)>-2 && s_receive2(k)<0 data_demod3(k) = 1; data_demod4(k) = 1; elseif s_receive2(k)<-2 data_demod3(k) = 1; data_demod4(k) = 0; end elseif s_receive1(k)<-2 data_demod1(k) = 1; data_demod2(k) = 0; if s_receive2(k)>2 data_demod3(k) = 0; data_demod4(k) = 0; elseif s_receive2(k)>0 && s_receive2(k)<2 data_demod3(k) = 0; data_demod4(k) = 1; elseif s_receive2(k)>-2 && s_receive2(k)<0 data_demod3(k) = 1; data_demod4(k) = 1; elseif s_receive2(k)<-2 data_demod3(k) = 1; data_demod4(k) = 0; end end if (data_demod1(k) = data(k*4-3) | (data_demod2(k) = data(k*4-2)|(data_demod3(k) = data(k*4-1) | (data_demod4(k) = data(k*4) errornumber(loop) = errornumber(loop) + 1; end end errorratio(loop) = errornumber(loop)/nsymbol;endt = 0.75*erfc(sqrt(3*SNR/30);ser_theory = 1-(1-t).2;%理论误码率,注意Q函数和误差函数的对应关系semilogy(SNR_dB,errorratio,'-k*',SNR_dB,ser_theory,'-ro');title('16QAM信号在AWGN信道下的性能(格雷码)');xlabel('信噪比/dB');ylabel('误码率');legend('误码率','理论误码率');grid on;%坐标线