clc; clear;
Simulation_num = 20; % 仿真次数
Power = 20;
f1 = 2;
f2 = 5;
f3 = 10;
t3 = [0:0.01:1];
x3 = 2*cos(2*pi*f1.*t3) + cos(2*pi*f2.*t3) + cos(2*pi*f3.*t3);
Quantization_8 = round(x3) + 3;
txdata = [];
for i=1:length(Quantization_8)
switch Quantization_8(i)
case 0
temp = [0,0,0,0];
case 1
temp = [0,0,0,1];
case 2
temp = [0,0,1,0];
case 3
temp = [0,0,1,1];
case 4
temp = [0,1,0,0];
case 5
temp = [0,1,0,1];
case 6
temp = [0,1,1,0];
case 7
temp = [0,1,1,1];
end
txdata = [txdata, temp];
end
Datalen = length(txdata);
for k=1:Simulation_num
%%%%%%%%%%%%%%%%%%%%%%%%%% BPSK %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 0 : -1, 1 : +1
for i=1:Datalen % for 数据长度的循环
if txdata(i) == 0 % txdata长度循环
MappingData_B(i) = -1;
elseif txdata(i) == 1
MappingData_B(i) = 1;
end
end
% noise添加
for i=1:Datalen
for j=0:Power % 0db ~ Powerdb
AWGNdata_B(j+1,i) = awgn(MappingData_B(i), j);
end
end
% 0db ~ 20db范围
% 0 : -1, 1 : +1
for i=1:Datalen
for j=1:Power+1
if AWGNdata_B(j,i) < 0
rxdata_B(j,i) = 0;
elseif AWGNdata_B(j,i) >= 0
rxdata_B(j,i) = 1;
end
end
end
% Error啦阑 八免 茄促.
for i=1:Power+1
temp = xor(txdata, rxdata_B(i,1:Datalen));
Error_B(k,i) = sum(temp);
end
%%%%%%%%%%%%%%%%%%%%%%%%%% QPSK %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 00 : -1-1j, 01 : -1+1j, 10 : 1-1j, 11 : 1+1j qpsk映射;
a = 1;
for i=1:2:Datalen
temp = 2*txdata(i) + txdata(i+1);
if temp == 0
MappingData(a) = -1-1j;
elseif temp == 1
MappingData(a) = -1+1j;
elseif temp == 2
MappingData(a) = 1-1j;
elseif temp == 3
MappingData(a) = 1+1j;
end
MappingData(a) = MappingData(a) / sqrt(2);
a = a+1;
end
for i=1:Datalen/2
for j=0:Power % 0db ~ Powerdb
AWGNdata(j+1,i) = awgn(MappingData(i), j);
AWGNdata(j+1,i) = AWGNdata(j+1,i) * sqrt(2);
end
end
% 00 : -1-1j, 01 : -1+1j, 10 : 1-1j, 11 : 1+1j
for i=1:Datalen/2
for j=1:Power+1
realtemp = real(AWGNdata(j,i));
imagetemp = imag(AWGNdata(j,i));
if (realtemp < 0) & (imagetemp < 0)
rxdata(j,(i*2)-1) = 0;
rxdata(j,i*2) = 0;
elseif (realtemp < 0) & (imagetemp >= 0)
rxdata(j,(i*2)-1) = 0;
rxdata(j,i*2) = 1;
elseif (realtemp >= 0) & (imagetemp < 0)
rxdata(j,(i*2)-1) = 1;
rxdata(j,i*2) = 0;
elseif (realtemp >= 0) & (imagetemp >= 0)
rxdata(j,(i*2)-1) = 1;
rxdata(j,i*2) = 1;
end
end
end
% Error啦阑 八免 茄促.
for i=1:Power+1
temp = xor(txdata, rxdata(i,1:Datalen));
Error(k,i) = sum(temp);
end
%%%%%%%%%%%%%%%%%%%%%%%% 16QAM %%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 0000 -3-3j 0001 -3-1j 0010 -3+3j 0011 -3+1j
% 0100 -1-3j 0101 -1-1j 0110 -1+3j 0111 -1+1j
% 1000 3-3j 1001 3-1j 1010 3+3j 1011 3+1j
% 1100 1-3j 1101 1-1j 1110 1+3j 1111 1+1j
a = 1;
for i=1:4:Datalen
temp = 8*txdata(i) + 4*txdata(i+1) + 2*txdata(i+2) + txdata(i+3);
if temp == 0
MappingData16(a) = -3-3j;
elseif temp == 1
MappingData16(a) = -3-1j;
elseif temp == 2
MappingData16(a) = -3+3j;
elseif temp == 3
MappingData16(a) = -3+1j;
elseif temp == 4
MappingData16(a) = -1-3j;
elseif temp == 5
MappingData16(a) = -1-1j;
elseif temp == 6
MappingData16(a) = -1+3j;
elseif temp == 7
MappingData16(a) = -1+1j;
elseif temp == 8
MappingData16(a) = 3-3j;
elseif temp == 9
MappingData16(a) = 3-1j;
elseif temp == 10
MappingData16(a) = 3+3j;
elseif temp == 11
MappingData16(a) = 3+1j;
elseif temp == 12
MappingData16(a) = 1-3j;
elseif temp == 13
MappingData16(a) = 1-1j;
elseif temp == 14
MappingData16(a) = 1+3j;
elseif temp == 15
MappingData16(a) = 1+1j;
end
MappingData16(a) = MappingData16(a) / sqrt(10);
a = a+1;
end
for i=1:Datalen/4
for j=0:Power % 0db ~ Powerdb
AWGNdata16(j+1,i) = awgn(MappingData16(i), j);
AWGNdata16(j+1,i) = AWGNdata16(j+1,i) * sqrt(10);
end
end
% 0000 -3-3j 0001 -3-1j 0010 -3+3j 0011 -3+1j
% 0100 -1-3j 0101 -1-1j 0110 -1+3j 0111 -1+1j
% 1000 3-3j 1001 3-1j 1010 3+3j 1011 3+1j
% 1100 1-3j 1101 1-1j 1110 1+3j 1111 1+1j
for i=1:Datalen/4
for j=1:Power+1
realtemp = real(AWGNdata16(j,i));
imagetemp = imag(AWGNdata16(j,i));
if (realtemp < -2) & (imagetemp < -2)
rxdata16(j,(i*4)-3) = 0;
rxdata16(j,(i*4)-2) = 0;
rxdata16(j,(i*4)-1) = 0;
rxdata16(j,i*4) = 0;
elseif (realtemp < -2) & ((imagetemp < 0) & (imagetemp >= -2))
rxdata16(j,(i*4)-3) = 0;
rxdata16(j,(i*4)-2) = 0;
rxdata16(j,(i*4)-1) = 0;
rxdata16(j,i*4) = 1;
elseif (realtemp < -2) & ((imagetemp >= 0) & (imagetemp < 2))
rxdata16(j,(i*4)-3) = 0;
rxdata16(j,(i*4)-2) = 0;
rxdata16(j,(i*4)-1) = 1;
rxdata16(j,i*4) = 1;
elseif (realtemp < -2) & (imagetemp >= 2)
rxdata16(j,(i*4)-3) = 0;
rxdata16(j,(i*4)-2) = 0;
rxdata16(j,(i*4)-1) = 1;
rxdata16(j,i*4) = 0;
elseif ((realtemp < 0) & (realtemp >= -2)) & (imagetemp < -2)
rxdata16(j,(i*4)-3) = 0;
rxdata16(j,(i*4)-2) = 1;
rxdata16(j,(i*4)-1) = 0;
rxdata16(j,i*4) = 0;
elseif ((realtemp < 0) & (realtemp >= -2)) & ((imagetemp < 0) & (imagetemp >= -2))
rxdata16(j,(i*4)-3) = 0;
rxdata16(j,(i*4)-2) = 1;
rxdata16(j,(i*4)-1) = 0;
rxdata16(j,i*4) = 1;
elseif ((realtemp < 0) & (realtemp >= -2)) & ((imagetemp >= 0) & (imagetemp < 2))
rxdata16(j,(i*4)-3) = 0;
rxdata16(j,(i*4)-2) = 1;
rxdata16(j,(i*4)-1) = 1;
rxdata16(j,i*4) = 1;
elseif ((realtemp < 0) & (realtemp >= -2)) & (imagetemp >= 2)
rxdata16(j,(i*4)-3) = 0;
rxdata16(j,(i*4)-2) = 1;
rxdata16(j,(i*4)-1) = 1;
rxdata16(j,i*4) = 0;
elseif ((realtemp >= 0) & (realtemp < 2)) & (imagetemp < -2)
rxdata16(j,(i*4)-3) = 1;
rxdata16(j,(i*4)-2) = 1;
rxdata16(j,(i*4)-1) = 0;
rxdata16(j,i*4) = 0;
elseif ((realtemp >= 0) & (realtemp < 2)) & ((imagetemp < 0) & (imagetemp >= -2))
rxdata16(j,(i*4)-3) = 1;
rxdata16(j,(i*4)-2) = 1;
rxdata16(j,(i*4)-1) = 0;
rxdat
评论0