clear all;
close all;
clf;
clc;
data=7936;%Jumlah bit yang dikirim(128*31Subcar*2(QPSK)
Ebno=60;
M=4;
k=log2(M);
Ns=128; %jumlah sub carrier
Nfft=1024; %jumlah ifft dan fft(1kbit)2pangkat10
guard=0.25*Nfft;
jmlsimbol=31;%(jumsimOFDM)
Rb=4e6;Tb=1/Rb;
Ts=2*Tb;Tsamp=(Ns*Ts)/Nfft;
iterasi=10;
% dengan Estimasi
for t=1:iterasi
for x=1:Ebno+1
snr=x+(10*log10(2*Ns))+(10*log10(1280/(2*Ns)));
genbit=randint(1,data,[0 1]);
info=reshape(genbit,2,[]);
%Modulasi QPSK
inp=info(1,:);
quad=info(2,:);
inphase=(2*inp-1)*(1/sqrt(2));
quadrature=(2*quad-1)*(1/sqrt(2));
qpsk=inphase+i.*quadrature;
%Serial to paralel
ofdm_in=reshape(qpsk,Ns,[]);
%proses pilot insertion
for m=1:Ns
c(:,:,m)=reshape(ofdm_in(m,:),jmlsimbol,[]);
z(:,:,m)=[ones(1,length(c(1,:,m)));c(:,:,m)];
g(:,:,m)=reshape(z(:,:,m),1,[]);
h(m,:)=g(:,:,m);
end
%IFFT
ofdm=ifft(h,Nfft);
%cyclic prefix
cp=ofdm((Nfft-(0.25*Nfft))+1:Nfft,:);
ofdmcp=[cp;ofdm];
%paralel to serial
ofdm_tx=reshape(ofdmcp,1,[]);
%--------------------------------------------%
%kanal Rayleigh fading dengan 3 path
%----------------------------------------------
%path-1(tidak terdelay dan path gain 0 db)
%----------------------------------------------
%rate=4 Mbps;%inisialisasi
p=1;
randn('seed',p);
inphase1_sui=(randn(1,length(ofdm_tx)))*0.707;
randn('seed',p+1);
quadrature1_sui=(randn(1,length(ofdm_tx)))*0.707;
envelope1_sui=sqrt(inphase1_sui.*inphase1_sui+quadrature1_sui.*quadrature1_sui);
rms_envelope1_sui=sqrt(mean(envelope1_sui.^2));
envelope1_sui1=envelope1_sui/rms_envelope1_sui;
hasil_p1_sui=envelope1_sui1.*ofdm_tx;
%path-2(terdelay 0.5 mikroseconds dan path gain -5 db)
%---------------------------------------------------
xnx2_sui=zeros(1,length(ofdm_tx));
xnx2_sui(1,6:length(ofdm_tx))=ofdm_tx(1,(1:length(ofdm_tx)-5)); %0.5us=5 titik
pathgain2=10^(-5/10);
randn('seed',p+2);
inphase2_sui=(randn(1,length(ofdm_tx)))*0.707;
randn('seed',p+3);
quadrature2_sui=(randn(1,length(ofdm_tx)))*0.707;
envelope2_sui=sqrt(inphase2_sui.*inphase2_sui+quadrature2_sui.*quadrature2_sui);
rms_envelope2_sui=sqrt(mean(envelope2_sui.^2));
envelope2_sui2=envelope2_sui/rms_envelope2_sui;
hasil_p2_sui=envelope2_sui2.*xnx2_sui*pathgain2;
%path-3(terdelay 1 mikroseconds dan path gain -10 db)
%---------------------------------------------------
xnx3_sui=zeros(1,length(ofdm_tx));
xnx3_sui(1,11:length(ofdm_tx))=ofdm_tx(1,(1:length(ofdm_tx)-10)); %1us=10 titik
pathgain3=10^(-10/10);
randn('seed',p+4);
inphase3_sui=(randn(1,length(ofdm_tx)))*0.707;
randn('seed',p+5);
quadrature3_sui=(randn(1,length(ofdm_tx)))*0.707;
envelope3_sui=sqrt(inphase3_sui.*inphase3_sui+quadrature3_sui.*quadrature3_sui);
rms_envelope3_sui=sqrt(mean(envelope3_sui.^2));
envelope3_sui3=envelope3_sui/rms_envelope3_sui;
hasil_p3_sui=envelope3_sui3.*xnx3_sui*pathgain3;
kanal_sui=hasil_p1_sui+hasil_p2_sui+hasil_p3_sui;
%awgn
data_awgn=awgn(kanal_sui,snr);
%Serial to paralel
Receiver=reshape(data_awgn,[],(length(data_awgn)/(Nfft+guard)));
%remove cyclic
ofdmrx_ray=Receiver((0.25*Nfft)+1:(Nfft+(0.25*Nfft)),:);
%proses FFT
a_ray=fft(ofdmrx_ray,Nfft);
data_rxa=a_ray(1:Ns,:);
%proses estimasi
esta=diag(h(:,1));
esta1=inv(esta)*data_rxa(:,1);
esta_ray=diag(esta1);
esta_ray1=inv(esta_ray)*data_rxa(:,2:jmlsimbol+1);
%Paralel to serial
data_rx_ray=reshape(esta_ray1,1,[]);
%Demodulasi
demod_I=real(data_rx_ray);
demod_Q=imag(data_rx_ray);
for n=1:data/2
if demod_I(1,n)<0
S_IR(1,n)=-1;
else
S_IR(1,n)=1;
end
if demod_Q(1,n)<0
S_QR(1,n)=-1;
else
S_QR(1,n)=1;
end
end
est_bit=[];
est_bit(1,:)=S_IR;
est_bit(2,:)=S_QR;
est_bit1=reshape(est_bit,1,data);
est_bita=(est_bit1+1)/2;
error(x)=biterr(genbit,est_bita);
BER(x)=error(x)/data;
end
BER_E(t,:)=BER;
end
avg_ber=sum(BER_E)/iterasi
aa=0:Ebno;
b=avg_ber(1:Ebno+1);
semilogy(aa,b,'k->')
hold on
% proses tanpa etimasi
for t=1:iterasi
for x=1:Ebno+1
snr=x+(10*log10(2*Ns))+(10*log10(1280/(2*Ns)));
genbit=randint(1,data,[0 1]);
info=reshape(genbit,2,[]);
%Modulasi QPSK
inp=info(1,:);
quad=info(2,:);
inphase=(2*inp-1)*(1/sqrt(2));
quadrature=(2*quad-1)*(1/sqrt(2));
qpsk=inphase+i.*quadrature;
%Serial to paralel
ofdm_in=reshape(qpsk,Ns,[]);
%IFFT
ofdm=ifft(ofdm_in,Nfft);
%cyclic prefix
cp=ofdm((Nfft-(0.25*Nfft))+1:Nfft,:);
ofdmcp=[cp;ofdm];
%paralel to serial
ofdm_tx=reshape(ofdmcp,1,[]);
%--------------------------------------------%
%kanal Rayleigh fading dengan 3 path
%----------------------------------------------
%path-1(tidak terdelay dan path gain 0 db)
%----------------------------------------------
%rate=4 Mbps;%inisialisasi
p=1;
randn('seed',p);
inphase1_sui=(randn(1,length(ofdm_tx)))*0.707;
randn('seed',p+1);
quadrature1_sui=(randn(1,length(ofdm_tx)))*0.707;
envelope1_sui=sqrt(inphase1_sui.*inphase1_sui+quadrature1_sui.*quadrature1_sui);
rms_envelope1_sui=sqrt(mean(envelope1_sui.^2));
envelope1_sui1=envelope1_sui/rms_envelope1_sui;
hasil_p1_sui=envelope1_sui1.*ofdm_tx;
%path-2(terdelay 0.5 mikroseconds dan path gain -5 db)
%---------------------------------------------------
xnx2_sui=zeros(1,length(ofdm_tx));
xnx2_sui(1,6:length(ofdm_tx))=ofdm_tx(1,(1:length(ofdm_tx)-5)); %0.5us=5 titik
pathgain2=10^(-5/10);
randn('seed',p+2);
inphase2_sui=(randn(1,length(ofdm_tx)))*0.707;
randn('seed',p+3);
quadrature2_sui=(randn(1,length(ofdm_tx)))*0.707;
envelope2_sui=sqrt(inphase2_sui.*inphase2_sui+quadrature2_sui.*quadrature2_sui);
rms_envelope2_sui=sqrt(mean(envelope2_sui.^2));
envelope2_sui2=envelope2_sui/rms_envelope2_sui;
hasil_p2_sui=envelope2_sui2.*xnx2_sui*pathgain2;
%path-3(terdelay 1 mikroseconds dan path gain -10 db)
%---------------------------------------------------
xnx3_sui=zeros(1,length(ofdm_tx));
xnx3_sui(1,11:length(ofdm_tx))=ofdm_tx(1,(1:length(ofdm_tx)-10)); %1us=10 titik
pathgain3=10^(-10/10);
randn('seed',p+4);
inphase3_sui=(randn(1,length(ofdm_tx)))*0.707;
randn('seed',p+5);
quadrature3_sui=(randn(1,length(ofdm_tx)))*0.707;
envelope3_sui=sqrt(inphase3_sui.*inphase3_sui+quadrature3_sui.*quadrature3_sui);
rms_envelope3_sui=sqrt(mean(envelope3_sui.^2));
envelope3_sui3=envelope3_sui/rms_envelope3_sui;
hasil_p3_sui=envelope3_sui3.*xnx3_sui*pathgain3;
kanal_sui=hasil_p1_sui+hasil_p2_sui+hasil_p3_sui;
%awgn
data_awgn=awgn(kanal_sui,snr);
%Serial to paralel
Receiver=reshape(data_awgn,[],(length(data_awgn)/(Nfft+guard)));
%remove cyclic
ofdmrx_ray=Receiver((0.25*Nfft)+1:(Nfft+(0.25*Nfft)),:);
%proses FFT
a_ray=fft(ofdmrx_ray,Nfft);
data_rxa=a_ray(1:Ns,:);
%Paralel to serial
data_rx_ray=reshape(data_rxa,1,[]);
%Demodulasi
demod_I=real(data_rx_ray);
demod_Q=imag(data_rx_ray);
for n=1:data/2
if demod_I(1,n)<0
S_IR(1,n)=-1;
else
S_IR(1,n)=1;
end
if demod_Q(1,n)<0
S_QR(1,n)=-1;
else
S_QR(1,n)=1;
end
end
est_bit=[];
est_bit(1,:)=S_IR;
est_bit(2,:)=S_QR;
est_bit1=reshape(est_bit,1,data);
est_bita=(est_bit1+1)/2;
error(x)=biterr(genbit,est_bita);
BER(x)=error(x)/data;
end
BER_E(t,:)=BER;
end
avg_ber1=sum(BER_E)/iterasi
aa=0:Ebno;
b=avg_ber1(1:Ebno+1);
semilogy(aa,b,'k-o')
hold on
for t=1:iterasi
for x=1:Ebno+1
snr=x+(10*log10(2*Ns))+(10*log10(1280/(2*Ns)));
genbit=randint(1,data,[0 1]);
info=reshape(genbit,2,[]);
%Modulasi QPSK
inp=info(1,:);
quad=info(2,:);
inphase=(2*inp-1)*(1/sqrt(2));
quadrature=(2*quad-1)*(1/sqrt(2));
qpsk=inphase+i.*quadrature;
%Serial to paralel
ofdm_in=reshape(qpsk,Ns,[]);
%IFFT
ofdm=ifft(ofdm_in,Nfft);
%cyclic prefix
cp=ofdm((Nfft-(0.25*Nfft))+1:Nfft,:);
ofdmcp=[cp;ofdm];
%paralel to serial
ofdm_tx=reshape(ofd