16QAM理论误码率与实际误码率MATLAB仿真程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%%16QAM
%%等效基带调制
clc;
clear all;
close all;%%关闭所有窗口,比如之前画的图
nsymbol = 10000;%%每种信噪比下符号数的发送符号数,10^6个数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
end
end
SNR_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;