% ***********SIMULATION OF 8 QAM through a AWGN channel************ %
% Writer: Xiaochen WANG
%******************************************************************
clc;
clear;
close all;
%% parameter
N=1000;
M=8;
j=1i;
sym8QAM=[2 2+2j 2-2j 2j -2j -2+2j -2-2j -2];
F = 1e2;
Fs = 2e3;
%% send bit
李沂明
bitstream=binornd(1,0.5,log2(M),N);
symbolstream=zeros(1,N);
%% 8QAM mapper
pack=bitstream(:,n1).';
if pack==[0 0 0]
symbolstream(n1)=2;
elseif pack==[0 0 1]电刷镀溶液
symbolstream(n1)=2+2j;
elseif pack==[0 1 0]
symbolstream(n1)=2-2j;
elseif pack==[0 1 1]
symbolstream(n1)=2j;
elseif pack==[1 0 0]
symbolstream(n1)=-2j;
elseif pack==[1 0 1]立柱桩
symbolstream(n1)=-2+2j;
elseif pack==[1 1 0]
symbolstream(n1)=-2-2j;
else symbolstream(n1)=-2;
end
end
scatterplot(symbolstream);
%% carrier
sampledots=round(Fs/F);
I=cos(2*pi*F/Fs*[1:N*(sampledots)]);
Q=sin(2*pi*F/Fs*[1:N*(sampledots)]);
sig = sqrt(2)*(I+1i*Q);
symbolstream4=repmat(symbolstream,sampledots,1); symbolstream4=reshape(symbolstream4,1,numel(symbolstream4));
send=symbolstream4.*sig;
%% PSD
figure;
plot(10*log10(abs(fftshift(fft(send,1024)))));
%% AWGN RECV
nn=1;
for snr=1:.01:10
recv = awgn(send,snr);
recvsym = recv.*(I-1i*Q);
if snr==9
scatterplot(recvsym);
end
recvsymdp=recvsym(1:sampledots:end);
rbit=zeros(log2(M),N);
for n2=1:N
dis=abs(recvsymdp(n2)-sym8QAM);
mindis=max(dis);
for k=0:7
if dis(k+1)<mindis
mindis=dis(k+1);
mindisk=k;
end
rbit(1,n2)=(mindisk/4>=1);
rbit(2,n2)=(mod(mindisk,4)/2>=1);
rbit(3,n2)=mod(mindisk,2);
end
err1=xor(rbit,bitstream);
err=sum(sum(err1));
errs(nn)=snr;
errp(nn)=err/N;
nn=nn+1;
end
figure;
fmcm
plot(errs,log10(errp))