snr ber graph
hi
the following is a matlab code for 16QAM by a small modification it will be for 4QAM
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% QAM %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;clc;
nbit=100000;
M=16;
L=sqrt(M);
Eav=4;
data=randint(1,nbit);
k=sqrt((3*Eav)/(2*(M-1)));
Tx=[];
for i=1:4:nbit
if data(i
i+3))==[1 1 0 0]
Tx=[Tx (k+j*k)];
elseif data(i
i+3))==[1 0 0 0]
Tx=[Tx (-k+j*k)];
elseif data(i
i+3))==[0 0 0 0]
Tx=[Tx (-k-j*k)];
elseif data(i
i+3))==[0 1 0 0]
Tx=[Tx (k-j*k)];
elseif data(i
i+3))==[1 1 0 1]
Tx=[Tx (3*k+j*k)];
elseif data(i
i+3))==[1 1 1 1]
Tx=[Tx (3*k+j*3*k)];
elseif data(i
i+3))==[1 1 1 0]
Tx=[Tx (k+j*3*k)];
elseif data(i
i+3))==[1 0 0 1]
Tx=[Tx (-k+j*3*k)];
elseif data(i
i+3))==[1 0 1 1]
Tx=[Tx (-3*k+j*3*k)];
elseif data(i
i+3))==[1 0 1 0]
Tx=[Tx (-3*k+j*k)];
elseif data(i
i+3))==[0 0 0 1]
Tx=[Tx (-3*k-j*k)];
elseif data(i
i+3))==[0 0 1 1]
Tx=[Tx (-3*k-j*3*k)];
elseif data(i
i+3))==[0 0 1 0]
Tx=[Tx (-k-j*3*k)];
elseif data(i
i+3))==[0 1 0 1]
Tx=[Tx (k-j*3*k)];
elseif data(i
i+3))==[0 1 1 1]
Tx=[Tx (3*k-j*3*k)];
elseif data(i
i+3))==[0 1 1 0]
Tx=[Tx (3*k-j*k)];
end;
end;
noise=randn(1,nbit/L)+j*randn(1,nbit/L);
BER=[];
SNR=-2:0.5:10;
for l=1:length(SNR)
No(l)=10^(-SNR(l)/10);
Rx=Tx+(sqrt(No(l)/2)*noise);
error=0;
for r=1:nbit/L
if (real(Rx(r))<2*k & real(Rx(r))>0) & (imag(Rx(r))<2*k & imag(Rx(r))>0)
Rx(r)=k+j*k;
elseif (real(Rx(r))>-2*k & real(Rx(r))<0) & (imag(Rx(r))<2*k & imag(Rx(r))>0)
Rx(r)=-k+j*k;
elseif (real(Rx(r))>-2*k & real(Rx(r))<0) & (imag(Rx(r))>-2*k & imag(Rx(r))<0)
Rx(r)=-k-j*k;
elseif (real(Rx(r))<2*k & real(Rx(r))>0) & (imag(Rx(r))>-2*k & imag(Rx(r))<0)
Rx(r)=k-j*k;
elseif (real(Rx(r))>2*k) & (imag(Rx(r))<2*k & imag(Rx(r))>0)
Rx(r)=3*k+j*k;
elseif (real(Rx(r))>2*k) & (imag(Rx(r))>2*k)
Rx(r)=3*k+j*3*k;
elseif (real(Rx(r))<2*k & real(Rx(r))>0) & (imag(Rx(r))>2*k)
Rx(r)=k+j*3*k;
elseif (real(Rx(r))>-2*k & real(Rx(r))<0) & (imag(Rx(r))>2*k)
Rx(r)=-k+j*3*k;
elseif (real(Rx(r))<-2*k) & (imag(Rx(r))>2*k)
Rx(r)=-3*k+j*3*k;
elseif (real(Rx(r))<-2*k) & (imag(Rx(r))<2*k & imag(Rx(r))>0)
Rx(r)=-3*k+j*k;
elseif (real(Rx(r))<-2*k) & (imag(Rx(r))>-2*k & imag(Rx(r))<0)
Rx(r)=-3*k-j*k;
elseif (real(Rx(r))<-2*k) & (imag(Rx(r))<-2*k)
Rx(r)=-3*k-j*3*k;
elseif (real(Rx(r))>-2*k & real(Rx(r))<0) & (imag(Rx(r))<-2*k)
Rx(r)=-k-j*3*k;
elseif (real(Rx(r))<2*k & real(Rx(r))>0) & (imag(Rx(r))<-2*k)
Rx(r)=k-j*3*k;
elseif (real(Rx(r))>2*k) & (imag(Rx(r))<-2*k)
Rx(r)=3*k-j*3*k;
elseif (real(Rx(r))>2*k) & (imag(Rx(r))>-2*k & imag(Rx(r))<0)
Rx(r)=3*k-j*k;
end;
end;
for r=1:nbit/L
if Tx(r)~=Rx(r)
error=error+1;
end;
end;
BER=[BER error/nbit];
end;
figure();
plot((10*log10(1./No)),BER);
grid on;
xlabel('Eb/No in dB');
ylabel('BER');
title('BER for 16-QAM');
%%%%%%%%%%%%%%%%%%%%%%%%