Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

matlab code for 4QAM with SNR vs BER graph

Status
Not open for further replies.

bee

Full Member level 2
Joined
Nov 29, 2003
Messages
135
Helped
7
Reputation
14
Reaction score
5
Trophy points
1,298
Activity points
883
ber graph

Can ne one plz give me the matlab code for the simulation of 4QAM with SNR vs BER graph?

Waiting....

cheers
 

ber snr matlab

hi , below is the link for a MPSK simulation in matlab which with minor modification can be used for 4QAM simulation


the link foe m-file :
 

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');
%%%%%%%%%%%%%%%%%%%%%%%%
 

ber grapy

tx allot every one.
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top