16QAM理论误码率与实际误码率MATLAB仿真程序

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档