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.

Problem with simulating OFDM in Matlab

Status
Not open for further replies.

dhruva

Banned
Joined
Mar 20, 2008
Messages
37
Helped
2
Reputation
4
Reaction score
1
Trophy points
1,288
Location
usa
Activity points
0
dear sir

i am smulating ofdm in matlab

but in this mentioned code i am not able to draw graph between ci and ber(ie snr n bit error rate only one point is displayed .

plz have a look

and help

where i went wrong plz correct

thanks

dhruva

% Simulate effect of interfarence noise

%

%

% GI CE GI data GI data...(data 6symbols)

%


%********************** preparation part ***************************


para=52; % Number of parallel channel to transmit (points)

fftlen=64; % FFT length

noc=53; % Number of carriers

nd=6; % Number of information OFDM symbol for one loop

knd=1; % Number of known channel estimation (CE) OFDM symbol

ml=2; % Modulation level : QPSK

sr=250000; % OFDM symbol rate (250 ksyombol/s)

br=sr.*ml; % Bit rate per carrier

gilen=16; % Length of guard interval (points)

ebn0=1000; % Eb/N0


%---------------------- fading initialization ----------------------


tstp=1/sr/(fftlen+gilen); % Time resolution

itau=[0]; % Arrival time for each multipath normalized by tstp

dlvl1=[0]; % Mean power for each multipath normalized by direct wave.

n0=[6]; % Number of waves to generate fading n0(1),n0(2)

th1=[0.0]; % Initial Phase of delayed wave

itnd1=[1000]; % set fading counter

now1=1; % Number of directwave + Number of delayed wave

fd=150; % Maximum Doppler frequency

flat=0; % Flat or not (see ofdm_fading.m)

itnd0=nd*(fftlen+gilen)*10; % Number of fading counter to skip


%----------------- interference wave initialization --------------------


ci=10; % C/I ratio

ml2=2; % modulation level


itau2=[0];

dlvl2=[0];

n02=[6];

th2=[0.0];

itnd2=[10000+floor(rand(1)*10)*1000];

now2=1;

fd2=fd;

flat2=0;

itnd02=nd*(fftlen+gilen)*300; % Number of fading counter to skip


%% store all parameters in one matrix "fadingpara"


fadingpara=zeros(8,length(itau2));

fadingpara(1,:)=itau2;

fadingpara(2,:)=dlvl2;

fadingpara(3,:)=n02;

fadingpara(4,:)=th2;

fadingpara(5,:)=itnd2;

fadingpara(6,:)=now2;

fadingpara(7,:)=fd2;

fadingpara(8,:)=flat2;


%************************** main loop part **************************


nloop=1000; % Number of simulation loops


noe = 0; % Number of error data

nod = 0; % Number of transmitted data

eop=0; % Number of error packet

nop=0; % Number of transmitted packet


%************************** transmitter *****************************

for iii=1:nloop


seldata=rand(1,para*nd*ml)>0.5; % DC=0


paradata=reshape(seldata,para,nd*ml); %size(51 * nd*ml)


%-------------- ml modulation ----------------


[ich,qch]=qpskmod(paradata,para,nd,ml);

kmod=1/sqrt(2);

ich=ich.*kmod;

qch=qch.*kmod;


% CE data generation

kndata=zeros(1,fftlen);

kndata0=2.*(rand(1,52)>0.5)-1;

kndata(2:27)=kndata0(1:26);

kndata(39:64)=kndata0(27:52);

ceich=kndata; % CE:BPSK

ceqch=zeros(1,64);


%------------- data mapping (DC=0) -----------


[ich1,qch1]=crmapping(ich,qch,fftlen,nd);


ich2=[ceich.' ich1]; % I-channel transmission data

qch2=[ceqch.' qch1]; % Q-channel transmission data


%------------------- IFFT -------------------


x=ich2+qch2.*i;

y=ifft(x);

ich3=real(y);

qch3=imag(y);


%---------- Gurad interval insertion ---------


fftlen2=fftlen+gilen;

[ich4,qch4]= giins(ich3,qch3,fftlen,gilen,nd+1);


%---------- Attenuation Calculation ----------

spow=sum(ich4.^2+qch4.^2)/nd./52;

attn=0.5*spow*sr/br*10.^(-ebn0/10);

attn=sqrt(attn);



%********************** fading channel ******************************

%If you would like to simulate performance under fading, please remove "*"

%from the following four sentenses

[ifade,qfade,ramp,rcos,rsin]=sefade(ich4,qch4,itau,dlvl1,th1,n0,itnd1,now1,length(ich4),tstp,fd,flat);

itnd1 = itnd1+itnd0; % Updata fading counter

ich4=ifade;

qch4=qfade;


%%% interference wave addition

% interference

[iintw,qintw]=interwave(ci,spow,ml2,length(ich4),tstp,fadingpara);

itnd2 = itnd2+itnd02;

fadingpara(5,:)=itnd2;

ich4=ich4+iintw;

qch4=qch4+qintw;


%*************************** Receiver *****************************

%--------------- AWGN addition ---------------

[ich5,qch5]=comb(ich4,qch4,attn);


%----Perfect fading compensation for one path fading ----

%If you would like to simulate performance under perfect compensation, please remove "*"

%from the following four sentenses

%ifade2=1./ramp.*(rcos(1,:).*ich5+rsin(1,:).*qch5);

%qfade2=1./ramp.*(-rsin(1,:).*ich5+rcos(1,:).*qch5);

%ich5=ifade2;

%qch5=qfade2;


%----------- Guard interval removal ----------


[ich6,qch6]= girem(ich5,qch5,fftlen2,gilen,nd+1);


%------------------ FFT --------------------


rx=ich6+qch6.*i;

ry=fft(rx);

ich7=real(ry);

qch7=imag(ry);


%-------------- Fading compensation by CE symbol --------------

%

%If you would like to simulate performance under CE-based compensation, please remove "*"

%in this area

%


% preparation known CE data

ce=1;

ice0=ich2:),ce);

qce0=qch2:),ce);


% taking CE data out of received data

ice1=ich7:),ce);

qce1=qch7:),ce);


% calculating reverse rotation

iv=real((1./(ice1.^2+qce1.^2)).*(ice0+i.*qce0).*(ice1-i.*qce1));

qv=imag((1./(ice1.^2+qce1.^2)).*(ice0+i.*qce0).*(ice1-i.*qce1));


% matrix for reverse rotation

ieqv1=[iv iv iv iv iv iv iv];

qeqv1=[qv qv qv qv qv qv qv];


% reverse rotation

icompen=real((ich7+i.*qch7).*(ieqv1+i.*qeqv1));

qcompen=imag((ich7+i.*qch7).*(ieqv1+i.*qeqv1));

ich7=icompen;

qch7=qcompen;


%---------- CE symbol removal ----------------


ich8=ich7:),knd+1:nd+1);

qch8=qch7:),knd+1:nd+1);


%---------- DC and pilot data removal --------


[ich9,qch9]=crdemapping(ich8,qch8,fftlen,nd);


%----------------- demoduration --------------


ich10=ich9./kmod;

qch10=qch9./kmod;

[demodata]=qpskdemod(ich10,qch10,para,nd,ml);


%-------------- error calculation ----------


demodata1=reshape(demodata,1,para*nd*ml);

noe2=sum(abs(demodata1-seldata));

nod2=length(seldata);


% calculating PER

if noe2~=0

eop=eop+1;

else

eop=eop;

end

eop;

nop=nop+1;


% calculating BER

noe=noe+noe2;

nod=nod+nod2;


fprintf('%d\t%e\t%d\n',iii,noe2/nod2,eop);

per=eop/nop;

ber=noe/nod;

semilogy(ci,ber,'-*');

legend('ber performance');

xlabel('snr');

ylabel('ber');

end



%********************** Output result ***************************


fprintf('%f\t%e\t%e\t%d\t%d\n',ci,ber,per,nloop,fd);


fid = fopen('BERofdmci.dat','a');

fprintf(fid,'%f\t%e\t%e\t%d\t%d\n',ci,ber,per,nloop,fd);

fclose(fid);


%******************** end of file ***************************

% Simulate effect of interfarence noise

%

%

% GI CE GI data GI data...(data 6symbols)

%


%********************** preparation part ***************************


para=52; % Number of parallel channel to transmit (points)

fftlen=64; % FFT length

noc=53; % Number of carriers

nd=6; % Number of information OFDM symbol for one loop

knd=1; % Number of known channel estimation (CE) OFDM symbol

ml=2; % Modulation level : QPSK

sr=250000; % OFDM symbol rate (250 ksyombol/s)

br=sr.*ml; % Bit rate per carrier

gilen=16; % Length of guard interval (points)

ebn0=1000; % Eb/N0


%---------------------- fading initialization ----------------------


tstp=1/sr/(fftlen+gilen); % Time resolution

itau=[0]; % Arrival time for each multipath normalized by tstp

dlvl1=[0]; % Mean power for each multipath normalized by direct wave.

n0=[6]; % Number of waves to generate fading n0(1),n0(2)

th1=[0.0]; % Initial Phase of delayed wave

itnd1=[1000]; % set fading counter

now1=1; % Number of directwave + Number of delayed wave

fd=150; % Maximum Doppler frequency

flat=0; % Flat or not (see ofdm_fading.m)

itnd0=nd*(fftlen+gilen)*10; % Number of fading counter to skip


%----------------- interference wave initialization --------------------


ci=10; % C/I ratio

ml2=2; % modulation level


itau2=[0];

dlvl2=[0];

n02=[6];

th2=[0.0];

itnd2=[10000+floor(rand(1)*10)*1000];

now2=1;

fd2=fd;

flat2=0;

itnd02=nd*(fftlen+gilen)*300; % Number of fading counter to skip


%% store all parameters in one matrix "fadingpara"


fadingpara=zeros(8,length(itau2));

fadingpara(1,:)=itau2;

fadingpara(2,:)=dlvl2;

fadingpara(3,:)=n02;

fadingpara(4,:)=th2;

fadingpara(5,:)=itnd2;

fadingpara(6,:)=now2;

fadingpara(7,:)=fd2;

fadingpara(8,:)=flat2;


%************************** main loop part **************************


nloop=1000; % Number of simulation loops


noe = 0; % Number of error data

nod = 0; % Number of transmitted data

eop=0; % Number of error packet

nop=0; % Number of transmitted packet


%************************** transmitter *****************************

for iii=1:nloop


seldata=rand(1,para*nd*ml)>0.5; % DC=0


paradata=reshape(seldata,para,nd*ml); %size(51 * nd*ml)


%-------------- ml modulation ----------------


[ich,qch]=qpskmod(paradata,para,nd,ml);

kmod=1/sqrt(2);

ich=ich.*kmod;

qch=qch.*kmod;


% CE data generation

kndata=zeros(1,fftlen);

kndata0=2.*(rand(1,52)>0.5)-1;

kndata(2:27)=kndata0(1:26);

kndata(39:64)=kndata0(27:52);

ceich=kndata; % CE:BPSK

ceqch=zeros(1,64);


%------------- data mapping (DC=0) -----------


[ich1,qch1]=crmapping(ich,qch,fftlen,nd);


ich2=[ceich.' ich1]; % I-channel transmission data

qch2=[ceqch.' qch1]; % Q-channel transmission data


%------------------- IFFT -------------------


x=ich2+qch2.*i;

y=ifft(x);

ich3=real(y);

qch3=imag(y);


%---------- Gurad interval insertion ---------


fftlen2=fftlen+gilen;

[ich4,qch4]= giins(ich3,qch3,fftlen,gilen,nd+1);


%---------- Attenuation Calculation ----------

spow=sum(ich4.^2+qch4.^2)/nd./52;

attn=0.5*spow*sr/br*10.^(-ebn0/10);

attn=sqrt(attn);



%********************** fading channel ******************************

%If you would like to simulate performance under fading, please remove "*"

%from the following four sentenses

[ifade,qfade,ramp,rcos,rsin]=sefade(ich4,qch4,itau,dlvl1,th1,n0,itnd1,now1,length(ich4),tstp,fd,flat);

itnd1 = itnd1+itnd0; % Updata fading counter

ich4=ifade;

qch4=qfade;


%%% interference wave addition

% interference

[iintw,qintw]=interwave(ci,spow,ml2,length(ich4),tstp,fadingpara);

itnd2 = itnd2+itnd02;

fadingpara(5,:)=itnd2;

ich4=ich4+iintw;

qch4=qch4+qintw;


%*************************** Receiver *****************************

%--------------- AWGN addition ---------------

[ich5,qch5]=comb(ich4,qch4,attn);


%----Perfect fading compensation for one path fading ----

%If you would like to simulate performance under perfect compensation, please remove "*"

%from the following four sentenses

%ifade2=1./ramp.*(rcos(1,:).*ich5+rsin(1,:).*qch5);

%qfade2=1./ramp.*(-rsin(1,:).*ich5+rcos(1,:).*qch5);

%ich5=ifade2;

%qch5=qfade2;


%----------- Guard interval removal ----------


[ich6,qch6]= girem(ich5,qch5,fftlen2,gilen,nd+1);


%------------------ FFT --------------------


rx=ich6+qch6.*i;

ry=fft(rx);

ich7=real(ry);

qch7=imag(ry);


%-------------- Fading compensation by CE symbol --------------

%

%If you would like to simulate performance under CE-based compensation, please remove "*"

%in this area

%


% preparation known CE data

ce=1;

ice0=ich2:),ce);

qce0=qch2:),ce);


% taking CE data out of received data

ice1=ich7:),ce);

qce1=qch7:),ce);


% calculating reverse rotation

iv=real((1./(ice1.^2+qce1.^2)).*(ice0+i.*qce0).*(ice1-i.*qce1));

qv=imag((1./(ice1.^2+qce1.^2)).*(ice0+i.*qce0).*(ice1-i.*qce1));


% matrix for reverse rotation

ieqv1=[iv iv iv iv iv iv iv];

qeqv1=[qv qv qv qv qv qv qv];


% reverse rotation

icompen=real((ich7+i.*qch7).*(ieqv1+i.*qeqv1));

qcompen=imag((ich7+i.*qch7).*(ieqv1+i.*qeqv1));

ich7=icompen;

qch7=qcompen;


%---------- CE symbol removal ----------------


ich8=ich7:),knd+1:nd+1);

qch8=qch7:),knd+1:nd+1);


%---------- DC and pilot data removal --------


[ich9,qch9]=crdemapping(ich8,qch8,fftlen,nd);


%----------------- demoduration --------------


ich10=ich9./kmod;

qch10=qch9./kmod;

[demodata]=qpskdemod(ich10,qch10,para,nd,ml);


%-------------- error calculation ----------


demodata1=reshape(demodata,1,para*nd*ml);

noe2=sum(abs(demodata1-seldata));

nod2=length(seldata);


% calculating PER

if noe2~=0

eop=eop+1;

else

eop=eop;

end

eop;

nop=nop+1;


% calculating BER

noe=noe+noe2;

nod=nod+nod2;


fprintf('%d\t%e\t%d\n',iii,noe2/nod2,eop);

per=eop/nop;

ber=noe/nod;

semilogy(ci,ber,'-*');

legend('ber performance');

xlabel('snr');

ylabel('ber');

end



%********************** Output result ***************************


fprintf('%f\t%e\t%e\t%d\t%d\n',ci,ber,per,nloop,fd);


fid = fopen('BERofdmci.dat','a');

fprintf(fid,'%f\t%e\t%e\t%d\t%d\n',ci,ber,per,nloop,fd);

fclose(fid);


%******************** end of file ***************************
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top