LAMPIRAN 1
Flowchart Algoritma Simulasi Kinerja OFCDM
1. Additive White Gaussian Noise (AWGN)
MULAI
DEFINISI PARAMETER SIMULASI para = 256; fftlen = 256; noc = 256; nd = 6; ml = 2; sr =
25000; br =sr.*ml; gilen = 48; ebno = 3;
DEFINISI PARAMETER PENGULANGAN Nloop = 100; noe =0; nod = 0; eop = 0; nop = 0;
Untuk iii = 1 sampai loop
DATA DIBANGKITKAN Seldata = rand (1,para*nd*ml)>0.5;
KONVERSI DATA SERIAL KE PARAREL Paradata = reshape (seldata, para, nd*ml);
Input data Para;fftlen;
PROSES DI TRANSMITTER
FUNGSI qpskmod DIJALANKAN
E
YA TIDAK
Untuk eb/No = 1 sampai 15 Untuk s = 1 sampai 2
TIDAK TIDAK
A PROSES MODULASI QPSK M2 = ml/2; Paradata = paradata.*2-1; Count 2 =0; untuk jj = 1 sampai nd
Isi = zeros (para,1); Isq = zeros (para,1);
untuk ii = 1 sampai m2 Isi = isi+2.^(m2-ii).*paradata2((1:para),ii+count2);; Isq = isq+2.^(m2-ii).*paradata2((1:para),ii+count2);; Iout((1:para),jj) = isi; Qout((1:para),jj) = isq; Count2 = count2 + ml B YA TIDAK YA TIDAK PROSES SPREADING 2D Ich1 = ich.*kmod*sr*8; qch1 = qch.*kmod*sr*8;
B
PENYISIPAN GUARD INTERVAL
FUNGSI giins DIJALANKAN
Fftlen2 = fftlen + gilen;
PERHITUNGAN ATENUASI DIJALANKAN
Spow = sum (ich3.^2 + qch3.^2)/nd./para; Attn = 0.5*spow*sr/br*10.^(-ebn0/10);
Attn = sqrt (attn);
C
PROSES PENYISIPAN GUARD INTERVAL
Idata1 = reshape (idata,fftlen,nd); Qdata1 = resahpe (qdata,fftlen, nd); Idata2 = [idata1 (fftlen-gilen+1 : fftlen,;); idata1]; Qdata = [qdata1(fftlen-gilen+1:fftlen,:); qdata1]; Iout = reshape (idata2, 1, (fftlen + gilen)*nd); Qout = reshape (qdata,1,(fftlen + gilen)*nd);
Kmod = 1/sqrt(2); Ich1 = ich.*kmod; Qch1 =qch.*kmod PROSES IFFT X = ich1 + qch1.*i; Y = ifft (x); Ich2 = real(y); Qch2 = imag(y);
C
PROSES FFT DIJALANKAN
Rx = ich5 + qch5.*i; Ry = fft (rx); Ich6 = real (ry); Qch6 = imag (ry);
PROSES DEMODULASI QPSK
Ich7 = ich6./kmod; Qch7 = qch6./kmod;
PROSES PELEPASAN GUARD INTERVAL
Idata2 = reshape (idata,fftlen2,nd); Qdata2 = resahpe (qdata,fftlen2, nd);
Iout = idata2(gilen+1:fftlen2,;); Qout = qdata2(gilen+1:fftlen2,;);
FUNGSI girem DIJALANKAN
FUNGSI qpskdemod DIJALANKAN FUNGSI comb DIJALANKAN
PENAMBAHAN AWGN PADA SIMULASI
Iout = randn (1,length (idata)).*attn; Qout = randn (1,length (qdata)).*attn;
Iout = iout + idata (1:le ngth(idata)); Qout = qout + qdata (1:length (qdata))
D
PROSES DI RECEIVER
PROSES KONVERSI DATA PARAREL KE SERIAL
Demodata1 = reshape (demodata,1,para*nd*ml);
PROSES PERHITUNGAN BER
Noe2 = sum (abs(demodata1 – seldata)); Nod2 = length (seldata);
Noe = noe + noe2; Nod = nod + nod2;
Ber=noe/nod;
NILAI BER DITAMPILKAN PROSES DEMODULASI QPSK Demodata = zeros(para,ml*nd); Demodata((1:para),(1:ml:ml*nd-1)) = idata((1:para),(1:nd))>=0; Demodata((1:para),(2:ml:ml*nd)) = qdata((1:para),(1:nd))>=0; D E
2. Fading Rayleigh
MULAI
DEFINISI PARAMETER SIMULASI para = 512; fftlen = 512; noc = 512; nd = 600;
ml = 2; sr = 25000; br =sr.*ml; gilen = 48; ebno = 24;
DEFINISI PARAMETER PENGULANGAN Nloop = 100; noe =0; nod = 0; eop = 0; nop = 0;
DATA DIBANGKITKAN Seldata = rand (1,para*nd*ml)>0.5;
Input data Ml
PROSES DI TRANSMITTER PROSES INISIALISASI FADING
Tstp = 1/sr/(fftlen+gilen); Itau = [0]; dlvl = [0]; n0 = [6]; th1 = [0.0]; PENGHITUNG FADING Itnd0 = nd*(fftlen+gilen)*10; Itnd1 = [1000]; Now1 = 1; Frkuensi doplper Fd = 200; Flat = 1;
Untuk iii = 1 sampai loop E
YA TIDAK
Untuk eb/No = 1 sampai 15 Untuk s = 1 sampai 2 TIDAK
SELESAI
PROSES PENYISIPAN GUARD INTERVAL
FUNGSI giins DIJALANKAN
PROSES PENYISIPAN GUARD INTERVAL
Idata1 = reshape (idata,fftlen,nd); Qdata1 = resahpe (qdata,fftlen, nd); Idata2 = [idata1 (fftlen-gilen+1 : fftlen,;); idata1];
Qdata = [qdata1(fftlen-gilen+1:fftlen,:); qdata1]; Iout = reshape (idata2, 1, (fftlen + gilen)*nd);
Qout = reshape (qdata,1,(fftlen + gilen)*nd); PROSES IFFT X = ich1 + qch1.*i; Y = ifft (x); Ich2 = real(y); Qch2 = imag(y); B G
PERHITUNGAN ATENUASI DIJALANKAN
Spow = sum (ich3.^2 + qch3.^2)/nd./para; Attn = 0.5*spow*sr/br*10.^(-ebn0/10);
Attn = sqrt (attn); Fftlen2 = fftlen + gilen;
G
FUNGSI sefade DIJALANKAN
H
PROSES MEMBANGKITKAN FREKUENSI SELEKTIF FADING
Iout = zeros (1,nsamp); Qout = zeros (1,nsamp); Total_attn = sum (10.^(-1.0.*dlvl./10.0));
Untuk k = 1 sampai n1;
Theta = th(k).*pi./180.0; Jika dlvl (k) = 40.0
Atts = 0.0;
FUNGSI delay DIJALANKAN
I
J Atts = 10.^-0.05.*dlvl(k));
Iout = zeros (1,nsamp); Qout = zeros (1,nsamp); Total_attn = sum (10.^(-1.0.*dlvl./10.0)); C YA TIDAK YA TIDAK
I
J
PROSES PEMBERIAN DELAY
Iout = zeros (1,nsamp); Qout = zeros (1,nsamp);
Jika idel ~= 0
Iout (1:idel) = zeros (1,idel); Qout (1:idel) = zeros (1,idel);
Iout (idel+1:nsamp) = idata(1:nsamp-idel); Qout (idel+1:nsamp) = qdata(1:nsamp-idel);
YA TIDAK
C
PROSES FFT DIJALANKAN
Rx = ich5 + qch5.*i; Ry = fft (rx); Ich6 = real (ry); Qch6 = imag (ry);
PROSES DEMODULASI QPSK
Ich7 = ich6./kmod; Qch7 = qch6./kmod;
PROSES PELEPASAN GUARD INTERVAL
Idata2 = reshape (idata,fftlen2,nd); Qdata2 = resahpe (qdata,fftlen2, nd);
Iout = idata2(gilen+1:fftlen2,;); Qout = qdata2(gilen+1:fftlen2,;);
FUNGSI girem DIJALANKAN
FUNGSI qpskdemod DIJALANKAN FUNGSI comb DIJALANKAN
PENAMBAHAN AWGN PADA SIMULASI
Iout = randn (1,length (idata)).*attn; Qout = randn (1,length (qdata)).*attn;
Iout = iout + idata (1:le ngth(idata)); Qout = qout + qdata (1:length (qdata))
PROSES DI RECEIVER
PROSES KONVERSI DATA PARAREL KE SERIAL
Demodata1 = reshape (demodata,1,para*nd*ml);
PROSES PERHITUNGAN BER
Noe2 = sum (abs(demodata1 – seldata)); Nod2 = length (seldata);
Noe = noe + noe2; Nod = nod + nod2;
Ber=noe/nod;
NILAI BER DITAMPILKAN PROSES DEMODULASI QPSK Demodata = zeros(para,ml*nd); Demodata((1:para),(1:ml:ml*nd-1)) = idata((1:para),(1:nd))>=0; Demodata((1:para),(2:ml:ml*nd)) = qdata((1:para),(1:nd))>=0; D E
LAMPIRAN 2
Program Simulasi
1.
Script File ofcdm.m
% ofcdm.m
% Program simulasi untuk mendapatkan kinerja BER sistem OFCDM yang dipengaruhi
% kanal AWGN
%****************** Bagian Persiapan ****************** clear all;
clc;
para=128; % Jumlah kanal paralel yang ditransmisikan
fftlen=128; % Panjang FFT
noc=128; % Jumlah carrier
nd=6; % Jumlah simbol OFCDM untuk satu loop
ml=2; % Level modulasi : QPSK
sr=250000; % Symbol rate
br=sr.*ml; % Bit rate per carrier
gilen=32; % Panjang guard interval (points)
ebn0=10:10:50; % Eb/N0
%******************** Bagian Main Loop ****************** nloop=100; % Jumlah loop simulasi
noe = 0; % Jumlah data error
nod = 0; % Jumlah data yang ditransmisikan for s = 1:2 for ss = 1:5 for iii=1:nloop %********************* Transmitter ********************** %****************** Pembangkitan Data ******************* seldata=rand(1,para*nd*ml) > 0.5;
% rand : dibangun di dalam fungsi
%********** Konversi Dari Serial Ke Parallel ************ paradata=reshape(seldata,para,nd*ml);
% reshape : dibangun di dalam fungsi
%******************* Modulasi QPSK ****************** [ich,qch]=qpskmod(paradata,para,nd,ml);
kmod=1/sqrt(2); % sqrt : dibangun di dalam fungsi if s == 1; ich1=ich.*kmod; qch1=qch.*kmod; elseif s == 2;
ich1=ich.*kmod*sr*8; % proses spreading qch1=qch.*kmod*sr*8; % proses spreading end
% [ich1,qch1]=crmapping(ich1,qch1,fftlen,nd);
%************************ IFFT ************************ x=ich1+qch1.*i;
y=ifft(x); % ifft : dibangun di dalam fungsi ich2=real(y); % real : dibangun di dalam fungsi qch2=imag(y); % imag : dibangun di dalam fungsi %************** Penyisipan Guard Interval ***************
[ich3,qch3]= giins(ich2,qch2,fftlen,gilen,nd); fftlen2=fftlen+gilen;
%****************** Kalkulasi Atenuasi ******************* spow=sum(ich3.^2+qch3.^2)/nd./para;
% sum : dibangun di dalam fungsi
attn=0.5*spow*sr/br*10.^(-ebn0(ss)/10); attn=sqrt(attn);
%************************ Receiver ************************ %********************* Penambahan AWGN ******************** [ich4,qch4]=comb(ich3,qch3,attn);
%**************** Pengeluaran Guard Interval ************** [ich5,qch5]= girem(ich4,qch4,fftlen2,gilen,nd); %************************* FFT *************************** rx=ich5+qch5.*i;
ry=fft(rx); % fft : dibangun di dalam fungsi
ich6=real(ry); % real : dibangun di dalam fungsi qch6=imag(ry); % imag : dibangun di dalam fungsi
%********************** Demodulasi ************************ %[ich6,qch6]=crdemapping (ich6,qch6,fftlen,nd); ich7=ich6./kmod;
qch7=qch6./kmod;
[demodata]=qpskdemod(ich7,qch7,para,nd,ml); %************** Konversi Dari Paralel Ke Serial ************ demodata1=reshape(demodata,1,para*nd*ml);
%****************** Bit Error Rate (BER) ******************* % Jumlah error yang muncul dan data
noe2=sum(abs(demodata1-seldata)); % sum : dibangun di dalam fungsi
nod2=length(seldata);
% length : dibangun di dalam fungsi
% Jumlah error kumulatif dan data pada noe dan nod noe=noe+noe2;
nod=nod+nod2;
fprintf ('Nilai BER untuk EbN0 %d percobaan ke %3.0f adalah %0.5f \n', ebn0(ss),iii,(noe2/nod2)); end %******************* Hasil Keluaran ******************** switch s case 1 berd(ss)=(noe/nod); case 2 berc(ss)=(noe/nod); end if s == 1 berteori(ss) = (1/2)*erfc(sqrt((ebn0(ss)))); end
%fprintf('Nilai BER rata-rata untuk 100 kali percoba%f\t%e\t%d\t\n',ebn0,ber,nloop);
%********************* Akhir Dari File ******************** end end disp (' '); disp (' '); for s = 1:3 switch s case 1 ber = berd;
fprintf('Nilai BER rata-rata untuk tiap EbN0 pada OFDM\n');
case 2
ber = berc;
fprintf('Nilai BER rata-rata untuk tiap EbN0 pada OFCDM\n');
case 3
ber = berteori;
fprintf('Nilai BER secara teori untuk tiap EbN0 pada OFCDM\n');
end
fprintf('|---|\n'); fprintf('| EbN0 | BER |\n'); fprintf('|---|\n'); for u = 1:5
fprintf('| %2.0f dB | %0.10f |\n',ebn0(u),ber(u)); % fprintf : built in function
end fprintf('|---|\n\n\n'); if s ==1; plot(ebn0,ber,'--b'); elseif s ==2; plot(ebn0,ber,'--r'); elseif s == 3; plot(ebn0,berteori,'--g'); end grid on;hold on end xlabel('EbN0 (dB)'); ylabel('BER');
title ('GRAFIK PERBANDINGAN BER TERHADAP Eb/N0 PADA KANAL AWGN'); legend('OFDM','OFCDM','BER OFDM Teori');
2.
Script File ofcdm_fading.m
% ofcdm_fading.m
% Program simulasi untuk mendapatkan kinerja BER sistem OFCDM yang dipengaruhi
% kanal Fading Rayleigh % (dengan satu jalur fading)
%****************** Bagian Persiapan ****************** clear all;
clc;
para=128; % Jumlah kanal paralel yang ditransmisikan
fftlen=128; % Panjang FFT
nd=6; % Jumlah simbol OFCDM untuk satu loop
ml=2; % Level modulasi : QPSK
sr=250000; % Symbol rate
br=sr.*ml; % Bit rate per carrier
gilen=32; % Panjang guard interval (points)
ebn0=10:10:50; % Eb/N0
%*************** Inisialisasi Fading ****************** % Resolusi waktu
tstp=1/sr/(fftlen+gilen);
% Waktu kedatangan untuk setiap multipath yang dinormalisasi oleh tstp
itau = [0];
% Daya rata-rata untuk setiap multipath yang dinormalisasi oleh gelombang
% langsung dlvl = [0];
% Jumlah gelombang yang membangkitkan fading pada setiap multipath n0=[6];
% Fasa awal gelombang yang tertunda th1=[0.0];
% Jumlah counter fading untuk melompat itnd0=nd*(fftlen+gilen)*10;
% Nilai awal counter fading itnd1=[1000];
% Jumlah gelombang langsung + jumlah gelombang yang tertunda now1=1;
% Frekuensi Doppler maksimum [Hz] fd=320;
% Flat variabel flat=1;
%******************* Bagian Main Loop ******************* nloop=100; % Jumlah loop simulasi
noe = 0; % Jumlah data error
nod = 0; % Jumlah data yang ditransmisikan for s = 1:2
for ss = 1:5
for iii=1:nloop
%****************** Pembangkitan Data ******************* seldata=rand(1,para*nd*ml) > 0.5;
% rand : dibangun di dalam fungsi
%*********** Konversi Dari Serial Ke Paralel ************ paradata=reshape(seldata,para,nd*ml);
% reshape : dibangun di dalam fungsi
%****************** Modulasi QPSK ********************** [ich,qch]=qpskmod(paradata,para,nd,ml);
kmod=1/sqrt(2); % sqrt : dibangun di dalam fungsi if s == 1;
ich1=ich.*kmod; qch1=qch.*kmod; elseif s == 2;
ich1=ich.*kmod*sr*8; % proses spreading qch1=qch.*kmod*sr*8; % proses spreading end
%************************ IFFT ************************* x=ich1+qch1.*i;
y=ifft(x); % ifft : dibangun di dalam fungsi ich2=real(y); % real : dibangun di dalam fungsi qch2=imag(y); % imag : dibangun di dalam fungsi %************** Penyisipan Guard Interval ************** [ich3,qch3]= giins(ich2,qch2,fftlen,gilen,nd); fftlen2=fftlen+gilen;
%***************** Kalkulasi Atenuasi ******************* spow=sum(ich3.^2+qch3.^2)/nd./para;
% sum : dibangun di dalam fungsi
attn=0.5*spow*sr/br*10.^(-ebn0(ss)/10); attn=sqrt(attn);
%********************* Kanal Fading ********************** % Data yang dibangkitkan dimasukkan kedalam simulator fading
[ifade,qfade]=sefade2(ich3,qch3,itau,dlvl,th1,n0,itnd1,... now1,length(ich3),tstp,fd,flat);
% Counter fading updata
itnd1 = itnd1+ itnd0;
%************************ Receiver ************************ %******************** Penambahan AWGN ********************
[ich4,qch4]=comb(ifade,qfade,attn);
%*************** Pengeluaran Guard Interval *************** [ich5,qch5]= girem(ich4,qch4,fftlen2,gilen,nd); %************************* FFT ***************************** rx=ich5+qch5.*i;
ry=fft(rx); % fft : dibangun di dalam fungsi ich6=real(ry); % real : dibangun di dalam fungsi qch6=imag(ry); % imag : dibangun di dalam fungsi %*********************** Demodulasi ************************* ich7=ich6./kmod;
qch7=qch6./kmod;
[demodata]=qpskdemod(ich7,qch7,para,nd,ml);
%************ Konversi Dari Paralel Ke Serial **************** demodata1=reshape(demodata,1,para*nd*ml);
%******************* Bit Error Rate (BER) ******************** % Jumlah error yang muncul dan data
noe2=sum(abs(demodata1-seldata)); % sum : dibangun di dalam fungsi
nod2=length(seldata);
% length : dibangun di dalam fungsi
% Jumlah error kumulatif dan data pada noe dan nod noe=noe+noe2;
nod=nod+nod2;
fprintf ('Nilai BER untuk EbN0 %d percobaan ke %3.0f adalah %0.5f \n', ebn0(ss),iii,noe2/nod2); end %********************* Hasil Keluaran *********************** switch s case 1 berd(ss)=noe/nod; case 2 berc(ss)=noe/nod; end if s == 1 bt=1+(1/(ebn0(ss))); berteori(ss) = 1/2*(1-(1/(sqrt(bt))));
end
%fprintf('Nilai BER rata-rata untuk 100 kali percoba%f\t%e\t%d\t\n',ebn0,ber,nloop);
%********************* Akhir Dari Data ******************** end end disp (' '); disp (' '); for s = 1:3 switch s case 1 ber = berd;
fprintf('Nilai BER rata-rata untuk tiap EbN0 pada OFDM\n');
case 2
ber = berc;
fprintf('Nilai BER rata-rata untuk tiap EbN0 pada OFCDM\n');
case 3
ber = berteori;
fprintf('Nilai BER secara teori untuk tiap EbN0 pada OFCDM\n');
end
fprintf('|---|\n'); fprintf('| EbN0 | BER |\n'); fprintf('|---|\n'); for u = 1:5
fprintf('| %2.0f dB | %0.5f |\n',ebn0(u),ber(u)); % fprintf : built in function
end fprintf('|---|\n\n\n'); if s ==1; plot(ebn0,ber,'--b'); elseif s ==2; plot(ebn0,ber,'--r'); elseif s == 3; plot(ebn0,berteori,'--g'); end grid on;hold on end xlabel('EbN0 (dB)'); ylabel('BER');
title ('GRAFIK PERBANDINGAN BER TERHADAP Eb/N0 PADA KANAL FADING RAYLEIGH');
3. Script File spreading.m
% spreading.m
% Program simulasi untuk mendapatkan kinerja BER sistem OFCDM yang dipengaruhi
% ukuran VSF
% (dengan satu jalur fading)
%****************** Bagian Persiapan ****************** clear all;
clc;
para=128; % Jumlah kanal paralel yang ditransmisikan fftlen=128; % Panjang FFT
noc=128; % Jumlah carrier
nd=6; % Jumlah simbol OFCDM untuk satu loop ml=2; % Level modulasi : QPSK
sr=250000; % Symbol rate
br=sr.*ml; % Bit rate per carrier
gilen=32; % Panjang guard interval (points) ebn0=10; % Eb/N0
vsf=[1 2 4 8 16 32 64 128 256 512 1024]; % Ukuran SF %*************** Inisialisasi Fading ****************** % Resolusi waktu
tstp=1/sr/(fftlen+gilen);
% Waktu kedatangan untuk setiap multipath yang dinormalisasi oleh tstp
itau = [0];
% Daya rata-rata untuk setiap multipath yang dinormalisasi oleh gelombang
% langsung dlvl = [0];
% Jumlah gelombang yang membangkitkan fading pada setiap multipath n0=[6];
% Fasa awal gelombang yang tertunda th1=[0.0];
% Jumlah counter fading untuk melompat itnd0=nd*(fftlen+gilen)*10;
% Nilai awal counter fading itnd1=[1000];
% Jumlah gelombang langsung + jumlah gelombang yang tertunda now1=1;
fd=320;
% Flat variabel flat=1;
%******************* Bagian Main Loop ******************* nloop=100; % Jumlah loop simulasi
noe = 0; % Jumlah data error
nod = 0; % Jumlah data yang ditransmisikan for s = 1:11 for iii=1:nloop %********************* Transmitter ********************** %****************** Pembangkitan Data ******************* seldata=rand(1,para*nd*ml) > 0.5;
% rand : dibangun di dalam fungsi
%********** Konversi Dari Serial Ke Paralel ************* paradata=reshape(seldata,para,nd*ml);
% reshape : dibangun di dalam fungsi
%******************** Modulasi QPSK ********************* [ich,qch]=qpskmod(paradata,para,nd,ml);
kmod=1/sqrt(2); % sqrt : dibangun di dalam fungsi
ich1=ich.*kmod*sr*vsf(s); % proses spreading qch1=qch.*kmod*sr*vsf(s); % proses spreading
%************************ IFFT ************************** x=ich1+qch1.*i;
y=ifft(x); % ifft : dibangun di dalam fungsi
ich2=real(y); % real : dibangun di dalam fungsi qch2=imag(y); % imag : dibangun di dalam fungsi
%**************** Penyisipan Guard Interval ************* [ich3,qch3]= giins(ich2,qch2,fftlen,gilen,nd); fftlen2=fftlen+gilen;
%***************** Kalkulasi Atenuasi ******************* spow=sum(ich3.^2+qch3.^2)/nd./para;
% sum : dibangun di dalam fungsi
attn=0.5*spow*sr/br*10.^(-ebn0/10); attn=sqrt(attn);
%********************* Kanal Fading ********************* % Data yang dibangkitkan dimasukkan kedalam simulator fading
[ifade,qfade]=sefade2(ich3,qch3,itau,dlvl,th1,n0,itnd1,... now1,length(ich3),tstp,fd,flat);
% Counter fading updata
itnd1 = itnd1+ itnd0;
%********************** Receiver ********************* %****************** Penambahan AWGN ***************** [ich4,qch4]=comb(ifade,qfade,attn);
%************* Pengeluaran Guard Interval ************ [ich5,qch5]= girem(ich4,qch4,fftlen2,gilen,nd); %*********************** FFT ************************* rx=ich5+qch5.*i;
ry=fft(rx); % fft : dibangun di dalam fungsi
ich6=real(ry); % real : dibangun di dalam fungsi qch6=imag(ry); % imag : dibangun di dalam fungsi
%*********************** Demodulasi ******************** ich7=ich6./kmod;
qch7=qch6./kmod;
[demodata]=qpskdemod(ich7,qch7,para,nd,ml); %********** Konversi Dari Paralel Ke Serial *********** demodata1=reshape(demodata,1,para*nd*ml); %**************** Bit Error Rate (BER) ***************** % Jumlah error yang muncul dan data
noe2=sum(abs(demodata1-seldata)); % sum : dibangun di dalam fungsi
nod2=length(seldata);
% length : dibangun di dalam fungsi
% Jumlah error kumulatif dan data pada noe dan nod noe=noe+noe2;
nod=nod+nod2;
fprintf ('Nilai BER untuk Spreading %d percobaan ke %3.0f adalah %0.2f \n', vsf(s),iii,noe2/nod2);
end
ber(s)=noe/nod;
%fprintf('Nilai BER rata-rata untuk 100 kali percobaan%f\t%e\t%d\t\n',ebn0,ber,nloop);
%******************** Akhir Dari File ****************** end
disp (' '); disp (' '); %figure(2);
fprintf('Nilai BER rata-rata untuk tiap Spreading\n'); fprintf('|---|\n'); fprintf('| VSF | BER |\n'); fprintf('|---|\n'); for u = 1:11 fprintf('| %2.0f dB | %0.5f |\n',vsf(u),ber(u)); % fprintf : dibangun di dalam fungsi
end fprintf('|---|\n\n\n'); plot(vsf,ber,'--b'); grid on; xlim('manual'); xlim([-10 1024]); xlabel('VSF'); ylabel('BER');
title ('GRAFIK PERBANDINGAN BER TERHADAP UKURAN VSF PADA SISTEM OFCDM');
%legend('OFDM','OFCDM');
4.
Script File carrier.m
% carrier.m
% Program simulasi untuk mendapatkan kinerja BER sistem OFCDM yang dipengaruhi
% jumlah carrier
% (dengan satu jalur fading)
%****************** Bagian Persiapan ****************** clear all;
clc;
para=[128 256 512 1024 2048]; % Jumlah kanal paralel yang ditransmisikan
fftlen=para; % Panjang FFT
noc=128; % Jumlah carrier
nd=6; % Jumlah simbol OFCDM untuk satu loop
sr=250000; % Symbol rate
br=sr.*ml; % Bit rate per carrier
gilen=32; % Panjang guard interval (points)
ebn0=10; % Eb/N0
%*************** Inisialisasi Fading ****************** % Resolusi waktu
tstp=1/sr./(fftlen+gilen);
% Waktu kedatangan untuk setiap multipath yang dinormalisasi oleh tstp
itau = [0];
% Daya rata-rata untuk setiap multipath yang dinormalisasi oleh gelombang
% langsung dlvl = [0];
% Jumlah gelombang yang membangkitkan fading pada setiap multipath n0=[6];
% Fasa awal gelombang yang tertunda th1=[0.0];
% Jumlah counter fading untuk melompat itnd0=nd*(fftlen+gilen)*10;
% Nilai awal counter fading itnd1=[1000];
% Jumlah gelombang langsung + jumlah gelombang yang tertunda now1=1;
% Frekuensi Doppler maksimum [Hz] fd=320;
% Flat variabel flat=1;
%******************* Bagian Main Loop ******************* nloop=100; % Jumlah loop simulasi
noe = 0; % Jumlah data error
nod = 0; % Jumlah data yang ditransmisikan for s = 1:5
for iii=1:nloop
%****************** Pembangkitan Data ******************* seldata=rand(1,para(s)*nd*ml) > 0.5;
% rand : dibangun di dalam fungsi
%************* Konversi Dari Serial Ke Paralel ********** paradata=reshape(seldata,para(s),nd*ml); % reshape : dibangun di dalam fungsi
%******************** Modulasi QPSK ********************* [ich,qch]=qpskmod(paradata,para(s),nd,ml);
kmod=1/sqrt(2); % sqrt : dibangun di dalam
fungsi
ich1=ich.*kmod*sr*8; % proses spreading
qch1=qch.*kmod*sr*8; % proses spreading
%************************ IFFT ************************** x=ich1+qch1.*i;
y=ifft(x); % ifft : dibangun di dalam fungsi ich2=real(y); % real : dibangun di dalam fungsi qch2=imag(y); % imag : dibangun di dalam fungsi %**************** Penyisipan Guard Interval *************** [ich3,qch3]= giins(ich2,qch2,fftlen(s),gilen,nd); fftlen2=fftlen(s)+gilen;
%********************* Kalkulasi Atenuasi ***************** spow=sum(ich3.^2+qch3.^2)/nd./para(s);
% sum : dibangun di dalam fungsi
attn=0.5*spow*sr/br*10.^(-ebn0/10); attn=sqrt(attn);
%************************ Kanal Fading ********************* % Data yang dibangkitkan dimasukkan kedalam simulator fading
[ifade,qfade]=sefade2(ich3,qch3,itau,dlvl,th1,n0,itnd1,... now1,length(ich3),tstp(s),fd,flat);
% Counter fading updata
itnd1 = itnd1+ itnd0(s);
%*********************** Receiver *************************** %******************** Penambahan AWGN ***********************
[ich4,qch4]=comb(ifade,qfade,attn);
%**************** Pengeluaran Guard Interval ***************** [ich5,qch5]= girem(ich4,qch4,fftlen2,gilen,nd); %************************** FFT ****************************** rx=ich5+qch5.*i;
ry=fft(rx); % fft : dibangun di dalam fungsi ich6=real(ry); % real : dibangun di dalam fungsi qch6=imag(ry); % imag : dibangun di dalam fungsi %************************** Demodulasi *********************** ich7=ich6./kmod;
qch7=qch6./kmod;
[demodata]=qpskdemod(ich7,qch7,para(s),nd,ml); %************** Konversi Paralel Ke Serial ******************** demodata1=reshape(demodata,1,para(s)*nd*ml);
%********************* Bit Error Rate (BER) ******************** % Jumlah error yang muncul dan data
noe2=sum(abs(demodata1-seldata)); % sum : dibangun di dalam fungsi
nod2=length(seldata);
% length : dibangun di dalam fungsi
% Jumlah error kumulatif dan data pada noe dan nod noe=noe+noe2;
nod=nod+nod2;
fprintf ('Nilai BER untuk Carrier %d percobaan ke %3.0f adalah %0.2f \n', para(s),iii,noe2/nod2);
end
%********************** Hasil Keluaran ************************ ber(s)=noe/nod;
%fprintf('Nilai BER rata-rata untuk 100 kali percoba%f\t%e\t%d\t\n',ebn0,ber,nloop);
%*********************** Akhir Dari File *********************** end
disp (' '); disp (' '); figure(2);
fprintf('Nilai BER rata-rata untuk tiap Carrier pada OFCDM\n');
fprintf('|---|\n'); fprintf('| Carrier | BER |\n'); fprintf('|---|\n'); for u = 1:5
fprintf('| %2.0f | %0.5f |\n',para(u),ber(u)); % fprintf : built in function
end fprintf('|---|\n\n\n'); plot(para,ber) grid on; xlabel('Jumlah Carrier'); ylabel('BER');
title ('GRAFIK PERBANDINGAN BER TERHADAP JUMLAH CARRIER PADA SISTEM OFCDM');
5.
Script File bit_rate.m
% bit_rate.m
% Program simulasi untuk mendapatkan kinerja BER sistem OFCDM yang dipengaruhi
% bit rate
% (dengan satu jalur fading)
%****************** Bagian Persiapan ****************** clear all;
clc;
para=128; % Jumlah kanal paralel yang ditransmisikan
fftlen=128; % Panjang FFT
noc=128; % Jumlah carrier
nd=6; % Jumlah simbol OFCDM untuk satu loop
ml=2; % Level modulasi : QPSK
sr=50000:50000:500000; % Symbol rate
br=sr.*ml; % Bit rate per carrier
gilen=32; % Panjang guard interval (points)
ebn0=10; % Eb/N0
%*************** Inisialisasi Fading ****************** % Resolusi waktu
% Waktu kedatangan untuk setiap multipath yang dinormalisasi oleh tstp
itau = [0];
% Daya rata-rata untuk setiap multipath yang dinormalisasi oleh gelombang
% langsung dlvl = [0];
% Jumlah gelombang yang membangkitkan fading pada setiap multipath n0=[6];
% Fasa awal gelombang yang tertunda th1=[0.0];
% Jumlah counter fading untuk melompat itnd0=nd*(fftlen+gilen)*10;
% Nilai awal counter fading itnd1=[1000];
% Jumlah gelombang langsung + jumlah gelombang yang tertunda now1=1;
% Frekuensi Doppler maksimum [Hz] fd=320;
% Flat variabel flat=1;
%******************* Bagian Main Loop ******************* nloop=100; % Jumlah loop simulasi
noe = 0; % Jumlah data error
nod = 0; % Jumlah data yang ditransmisikan for s = 1:10
for iii=1:nloop
%********************** Transmitter ********************* %*******************Pembangkitan Data ******************* seldata=rand(1,para*nd*ml) > 0.5;
% rand : dibangun di dalam fungsi
%************* Konversi Dari Serial Ke Paralel ************* paradata=reshape(seldata,para,nd*ml);
%******************** Modulasi QPSK ************************ [ich,qch]=qpskmod(paradata,para,nd,ml);
kmod=1/sqrt(2); % sqrt : dibangun di dalam fungsi
ich1=ich.*kmod*sr(s)*8; % proses spreading
qch1=qch.*kmod*sr(s)*8; % proses spreading
%************************ IFFT ***************************** x=ich1+qch1.*i;
y=ifft(x); % ifft : dibangun di dalam fungsi ich2=real(y); % real : dibangun di dalam fungsi
qch2=imag(y); % imag : dibangun di dalam fungsi %***************** Penyisipan Guard Interval *************** [ich3,qch3]= giins(ich2,qch2,fftlen,gilen,nd); fftlen2=fftlen+gilen;
%******************* Kalkulasi Atenuasi ********************** spow=sum(ich3.^2+qch3.^2)/nd./para;
% sum : dibangun di dalam fungsi
attn=0.5*spow*sr(s)/br(s)*10.^(-ebn0/10); attn=sqrt(attn);
%*********************** Kanal Fading ************************ % Data yang dibangkitkan dimasukkan kedalam simulator fading
[ifade,qfade]=sefade2(ich3,qch3,itau,dlvl,th1,n0,itnd1,... now1,length(ich3),tstp(s),fd,flat);
% Counter fading updata
itnd1 = itnd1+ itnd0;
%************************** Receiver ************************** %*********************** Penambahan AWGN ********************** [ich4,qch4]=comb(ifade,qfade,attn);
%****************** Pengeluaran Guard Interval *************** [ich5,qch5]= girem(ich4,qch4,fftlen2,gilen,nd); %*************************** FFT ******************************* rx=ich5+qch5.*i;
ry=fft(rx); % fft : dibangun di dalam fungsi ich6=real(ry); % real : dibangun di dalam fungsi
qch6=imag(ry); % imag : dibangun di dalam fungsi %************************ Demodulasi ************************** ich7=ich6./kmod;
qch7=qch6./kmod;
[demodata]=qpskdemod(ich7,qch7,para,nd,ml);
%************* Konversi Dari Paralel Ke Serial ************** demodata1=reshape(demodata,1,para*nd*ml);
%****************** Bit Error Rate (BER) ******************** % Jumlah error yang muncul dan data
noe2=sum(abs(demodata1-seldata)); % sum : dibangun di dalam fungsi
nod2=length(seldata);
% length : dibangun di dalam fungsi
% Jumlah error kumulatif dan data pada noe dan nod noe=noe+noe2;
nod=nod+nod2;
fprintf ('Nilai BER untuk Data rate %d percobaan ke
%3.0f adalah 0.2f \n', br(s),iii,noe2/nod2);
end
%*********************** Hasil Keluaran ********************* ber(s)=noe/nod;
%fprintf('Nilai BER rata-rata untuk 100 kali percoba%f\t%e\t%d\t\n',ebn0,ber,nloop);
%*********************** Akhir Dari Data ******************** end
disp (' '); disp (' '); %figure(2);
fprintf('Nilai BER rata-rata untuk tiap Spreading\n'); fprintf('|---|\n');
fprintf('| Data Rate | BER |\n'); fprintf('|---|\n'); for u = 1:10
fprintf('| %2.0f bps | %0.5f |\n',br(u),ber(u)); % fprintf : built in function
end fprintf('|---|\n\n\n'); plot(br,ber,'--b'); grid on; xlabel('BIT RATE'); ylabel('BER');
title ('GRAFIK PERBANDINGAN BER TERHADAP BIT RATE'); %legend('OFDM','OFCDM');
6.
Script File interference.m
% interference.m
% Program simulasi untuk mendapatkan kinerja BER sistem OFCDM yang dipengaruhi
% interferensi
%********************** Bagian Persiapan ******************** clear;
para=52; % Jumlah kanal paralel yang ditransmisikan % points
fftlen=64; % Panjang FFT noc=53; % Jumlah carrier
nd=6; % Jumlah simbol OFCDM untuk satu loop knd=1; % Jumlah estimasi kanal
% (CE) simbol OFCDM ml=2; % Level modulasi : QPSK
sr=250000; % Symbol rate (250 ksymbol/s) br=sr.*ml; % Bit rate per carrier
gilen=16; % Panjang guard interval (points) ebno=1000; % Eb/N0
%--- Inisialisasi Fading
---tstp=1/sr/(fftlen+gilen); % Resolusi Waktu
itau=[0]; % Waktu kedatangan untuk setiap
multipath yang % dinormalisasi oleh tstp
dlvll=[0]; % Daya rata-rata untuk setiap
multipath yang
% dinormalisasi oleh gelombang
langsung
n0=[6]; % Jumlah gelombang untuk membangkitkan
fading
% n0(1),n0(2)
th1=[0,0]; % Fasa awal gelombang yang tertunda
itnd1=[1000]; % Penyusunan counter fading
now1=1; % Jumlah gelombang langsung + jumlah
gelombang
fd=150; % Frekuensi Doppler maksimum
flat=0; % Flat atau tidak
itnd0=nd*(fftlen+gilen)*10; % Jumlah counter fading untuk melompat %---Inisialisasi Gelombang Interferensi---ci=10:10:100; % Perbandingan C/I
ml2=2; % Level modulasi itau2=[0]; dlvl2=[0]; n02=[6]; th2=[0.0]; itnd2=[1000+floor(rand(1)*10)*1000]; now2=1; fd2=fd; flat2=0;
itnd02=nd*(fftlen+gilen)*300; % Jumlah counter fading untuk
melompat
%%Penyimpanan semua parameter di dalam satu matrik "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;
%********************** Bagian Main Loop ************************** nloop=100; % Jumlah loop simulasi
noe=0; % Jumlah data error
nod=0; % Jumlah data yang ditransmisikan
%*********************** Transmitter ******************************* for c = 1:10 for iii=1:nloop seldata=rand(1,para*nd*ml) > 0.5; paradata=reshape(seldata,para,nd*ml); % Ukuran(51*nd*ml) %--- Modulasi ml [ich,qch]=qpskmod(paradata,para,nd,ml); kmod=1/sqrt(2);
ich=ich.*kmod*sr*8; % proses spreading
%Pembangkitan data CE 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); %--- Pemetaan Data (DC=0) [ich1,qch1]=crmapping(ich,qch,fftlen,nd);
ich2=[ceich', ich1]; % Data transmisi I-channel qch2=[ceqch', qch1]; % Data transmisi Q-channel
%IFFT- x=ich2+qch2.*i; y=ifft(x); ich3=real(y); qch3=imag(y);
%--- Penyisipan Guard Interval - fftlen2=fftlen+gilen; [ich4,qch4]=giins(ich3,qch3,fftlen,gilen,nd+1); %- Kalkulasi Atenuasi spow=sum(ich4.^2+qch4.^2)/nd./52; attn=0.5*spow*sr/br*10.^(ebno/10); attn=sqrt(attn); %*************************** Kanal Fading *************************** [ifade,qfade,ramp,rcos,rsin]=sefade2(ich4,qch4,itau,dlvll,th1,n0,itn d1,... now1,length(ich4),tstp,fd,flat);
itnd1 = itnd1+itnd0; %Updata fading counter ich4=ifade;
qch4=qfade;
%%%Penambahan gelombang interferensi %interferensi
[iintw,qintw]=interwave(ci(c),spow,ml2,length(ich4),tstp,fadingpara) ;
fadingpara(5,:)=itnd2; ich4=ich4+iintw; qch4=qch4+qintw; %***************************Receiver******************************** ** %-- Penambahan AWGN [ich5,qch5]=comb(ich4,qch4,attn);
%--- Kompensasi Fading Yang Perfect Untuk Satu Jalur fading -
---%ifade2=1./ramp.*(rcos(1,:).*ich5+rsin(1,:).*qch5); %qfade2=1./ramp.*(rsin(1,:).*ich5+rcos(1,:).*qch5); %ich5=ifade2;
%qch5=qfade2;
%--- Pengeluaran Guard Interval [ich6,qch6]=girem(ich5,qch5,fftlen2,gilen,nd+1); %FFT- rx=ich6+qch6.*i; ry=fft(rx); ich7=real(ry); qch7=imag(ry);
%--- Kompensasi Fading Oleh Simbol CE --
---%Persiapan data CE ce=1;
ice0=ich2(:,ce); qce0=qch2(:,ce);
%Pengambilan data CE data diluar data yang diterima ice1=ich7(:,ce);
qce1=qch7(:,ce); %Perhitungan rotasi reverse
iv=real((1./(ice1.^2+qce1.^2)).*(ice0+j.*qce0).*(ice1-j.*qce1));
qv=imag((1./(ice1.^2+qce1.^2)).*(ice0+j.*qce0).*(ice1-j.*qce1));
%Matrik untuk rotasi reverse
ieqvl=[iv iv iv iv iv iv iv]; qeqvl=[qv qv qv qv qv qv qv];
%rotasi reverse icompen=real((ich7+j.*qch7).*(ieqvl+j.*qeqvl)); qcompen=imag((ich7+j.*qch7).*(ieqvl+j.*qeqvl)); ich7=icompen; qch7=qcompen; % Pengeluaran Simbol CE - ich8=ich7(:,knd+1:nd+1); qch8=qch7(:,knd+1:nd+1);
%--- Pengeluaran Data DC dan Data Pilot - [ich9,qch9]=crdemapping (ich8,qch8,fftlen,nd); %--- Demodulasi -- ich10=ich9./kmod; qch10=qch9./kmod; [demodata]=qpskdemod(ich10,qch10,para,nd,ml); %-- Perhitungan Error - demodata1=reshape(demodata,1,para*nd*ml); noe2=sum(abs(demodata1-seldata)); nod2=length(seldata); %Perhitungan BER noe=noe+noe2; nod=nod+nod2;
fprintf('Ber C/I ke %3.0f percobaan ke %3.0f adalah %1.5f\n\n',ci(c),iii,noe2/nod2); end ber(c)=noe/nod; end %************************* Hasil Keluaran **************************** fprintf('|---|\n'); fprintf('| C/I | BER |\n'); fprintf('|---|\n'); for u = 1:10
fprintf('| %3.0f | %1.5f |\n',ci(u),ber(u)); % fprintf : dibangun di dalam simulasi
end
fprintf('|---|\n\n\n'); plot(ci,ber);
grid on;
%********************** Akhir Dari File ****************************
7.
Function File giins.m
% giins.m
% Fungsi untuk menyisipkan guard interval ke sinyal tranmisi function [iout,qout]=giins(idata,qdata,fftlen,gilen,nd) %********************** variables ********************* % idata : Masukan data Ich
% qdata : Masukan data Qch % iout : Keluaran data Ich % qout : Keluaran data Qch % fftlen : Panjang FFT (points)
% gilen : Panjang guard interval (points)
% ***************************************************** idata1=reshape(idata,fftlen,nd); qdata1=reshape(qdata,fftlen,nd); idata2=[idata1(fftlen-gilen+1:fftlen,:); idata1]; qdata2=[qdata1(fftlen-gilen+1:fftlen,:); qdata1]; iout=reshape(idata2,1,(fftlen+gilen)*nd); qout=reshape(qdata2,1,(fftlen+gilen)*nd);
%******************** Akhir Dari File *********************
8.
Function File girem.m
% girem.m
% Fungsi untuk mengeluarkan guard interval dari sinyal yang diterima function [iout,qout]= girem(idata,qdata,fftlen2,gilen,nd)
%********************** variables ********************* % idata : Masukan data Ich
% qdata : Masukan data Qch % iout : Keluaran data Ich % qout : Keluaran data Qch % fftlen : Panjang FFT (points)
% gilen : Panjang guard interval (points) % nd : Jumlah simbol OFCDM
% ***************************************************** idata2=reshape(idata,fftlen2,nd);
qdata2=reshape(qdata,fftlen2,nd); iout=idata2(gilen+1:fftlen2,:); qout=qdata2(gilen+1:fftlen2,:);
%***************** Akhir Dari File ********************
9.
Function File qpskmod.m
%%%%%%%%% Fungsi Untuk Menunjukkan Modulasi QPSK %%%%%% function[iout,qout]=qpskmod(paradata,para,nd,ml) m2=ml./2; paradata2=paradata.*2-1; count2=0; for jj=1:nd isi=zeros(para,1); isq=zeros(para,1); for ii=1:m2 isi=isi+2.^(m2-ii).*paradata2((1:para),ii+count2); isq=isq+2.^(m2-ii).*paradata2((1:para),ii+count2); end iout((1:para),jj)=isi; qout((1:para),jj)=isq; count2=count2+ml; end
10.
Function File qpskdemod.m
function [demodata]=qpskdemod(idata,qdata,para,nd,ml) demodata=zeros(para,ml*nd);
demodata((1:para),(1:ml:ml*nd-1))=idata((1:para),(1:nd))>=0; demodata((1:para),(2:ml:ml*nd))=qdata((1:para),(1:nd))>=0;
11.
Function File comb.m
function [iout,qout]=comb(idata,qdata,attn) iout=randn(1,length(idata)).*attn;
qout=randn(1,length(qdata)).*attn; iout=iout+idata(1:length(idata)); qout=qout+qdata(1:length(qdata));
12.
Function File delay.m
% delay.m
function [iout,qout] = delay(idata,qdata,nsamp,idel ) %********************** variables ********************* % idata : Masukan data Ich
% qdata : Masukan data Qch % iout : Keluaran data Ich % qout : Keluaran data Qch
% nsamp : Jumlah sampel yang disimulasikan % idel : Jumlah sampel yang tertunda
%****************************************************** iout=zeros(1,nsamp); qout=zeros(1,nsamp); if idel ~= 0 iout(1:idel) = zeros(1,idel); qout(1:idel) = zeros(1,idel); end iout(idel+1:nsamp) = idata(1:nsamp-idel); qout(idel+1:nsamp) = qdata(1:nsamp-idel);
%******************** Akhir Dari File *********************
13.
Function File fade.m
% fade.m
% Fungsi pembangkitan Fading Rayleigh
function [iout,qout,ramp,rcos,rsin]=fade(idata,qdata,... nsamp,tstp,fd,no,counter,flat)
%********************** variables ********************* % idata : Masukan data Ich
% qdata : Masukan data Qch % iout : Keluaran data Ich % qout : Keluaran data Qch
% ramp : Amplitudo yang dikontaminasi oleh fading % rcos : Nilai Cosine yang dikontaminasi oleh fading % rsin : Nilai Cosine yang dikontaminasi oleh fading % nsamp : Jumlah sampel yang disimulasi
% tstp : Resolusi waktu minimum % fd : Frekuensi Doopler maksimum
% no : Jumlah gelombang untuk pembangkitan fading % counter : counter fading
% flat : fading flat atau tidak
%****************************************************** if fd ~= 0.0
ac0 = sqrt(1.0 ./ (2.0.*(no + 1))); % Daya yang ternormalisasi konstan(ich) as0 = sqrt(1.0 ./ (2.0.*no));
% Daya yang ternormalisasi konstan(qch) ic0 = counter;
pai = 3.14159265; wm = 2.0.*pai.*fd; n = 4.*no + 2; ts = tstp; wmts = wm.*ts; paino = pai./no; xc=zeros(1,nsamp); xs=zeros(1,nsamp); ic=[1:nsamp]+ic0; for nn = 1: no cwn = cos( cos(2.0.*pai.*nn./n).*ic.*wmts ); xc = xc + cos(paino.*nn).*cwn; end cwmt = sqrt(2.0).*cos(ic.*wmts); xc = (2.0.*xc + cwmt).*ac0; xs = 2.0.*xs.*as0; ramp=sqrt(xc.^2+xs.^2); rcos=xc./ramp; rsin=xs./ramp; if flat ==1 iout = sqrt(xc.^2+xs.^2).*idata(1:nsamp); % sinyal keluaran (ich)
qout = sqrt(xc.^2+xs.^2).*qdata(1:nsamp); % sinyal keluaran (qch)
else
iout = xc.*idata(1:nsamp) - xs.*qdata(1:nsamp); % sinyal keluaran (ich)
qout = xs.*idata(1:nsamp) + xc.*qdata(1:nsamp); % sinyal keluaran (qch) end else iout=idata; qout=qdata; end
%********************* Akhir Dari File ********************
14.
Function File sefade.m
function[iout,qout,ramp,rcos,rsin]=sefade2(idata,qdata,itau,dlvl,th, n0,itn,n1,nsamp,tstp,fd,flat) iout = zeros(1,nsamp); qout = zeros(1,nsamp); total_attn = sum(10 .^( -1.0 .* dlvl ./ 10.0)); for k=1:n1 atts = 10.^( -0.05 .* dlvl(k)); if dlvl(k) == 40.0
atts = 0.0; end
theta = th(k) .* pi ./ 180.0;
[itmp,qtmp] = delay (idata,qdata,nsamp,itau(k)); [itmp3,qtmp3,ramp,rcos,rsin] = fade (itmp,qtmp,... nsamp,tstp,fd,n0(k),itn(k),flat);
iout = iout + atts .* itmp3 ./ sqrt(total_attn); qout = qout + atts .* qtmp3 ./ sqrt(total_attn); end
15.
Function File crmapping.m
%crmapping.m
%Fungsi untuk menyusun data pada subcarrier %(DC=0)
function[iout,qout]=crmapping(idata,qdata,fftlen,nd); %*******************variables*********************** %idata : Masukan data Ich
%qdata : Masukan data Qch %iout : Keluaran data Ich %qout : Keluaran data Qch %fftlen : Panjang FFT (points) %nd : Jumlah simbol OFCDM
%************************************************** iout=zeros(fftlen,nd); qout=zeros(fftlen,nd); iout(2:27,:)=idata(1:26,:); qout(2:27,:)=qdata(1:26,:); iout(39:64,:)=idata(27:52,:); qout(39:64,:)=qdata(27:52,:);
%******************** Akhir dari file*******************
16.
Function File crdemapping.m
function [iout,qout]=crdemapping(idata,qdata,fftlen,nd) iout(1:26,:)=idata(2:27,:);
qout(1:26,:)=qdata(2:27,:); iout(27:52,:)=idata(39:64,:); qout(27:52,:)=qdata(39:64,:);
17.
Function File interwave.m
%interwave.m
%Fungsi untuk menambah gelombang interferensi
function [iout,qout]=interwave(ci,spow,ml,nsamp,tstp,fadingpara) %*************************variables****************************** %ci : Perbandingan carrier to interference
%spow : Daya sinyal yang diharapkan %ml : Level modulasi
%nsamp : Jumlah sampel %tstp : Resolusi waktu %fadingpara : Parameter fading %iout : Sinyal Keluaran Ich %qout : Sinyal Keluaran Qch
%***************************************************************** itau=fadingpara(1,:); dlvll=fadingpara(2,:); n0=fadingpara(3,:); th1=fadingpara(4,:); itnd1=fadingpara(5,:); now1=fadingpara(6,:); fd=fadingpara(7,:); flat=fadingpara(8,:); if ci > 40 %%%%%%%%%%%%%%%%%%%%%% Bagian Persiapan %%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%format frame para=52; fftlen=64;
noc=53; % jumlah carrier
nd=6; % jumlah simbol informasi knd=1; % jumlah simbol data sr=250000; % symbol rate
br=sr.*ml; % bit rate per carrier gilen=16; % panjang guard interval %%%Penyusunan beban data CE
kndata=zeros(1,fftlen); kndata0=2.*(rand(1,52)>0.5)-1; kndata(2:27)=kndata0(1:26); kndata(39:64)=kndata0(27:52); %%% Memulai simulasi %%% Inisialisasi fading
%%%%%%%%%%%%%%%%%%%%% Transmitter %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% seridata=rand(1,para*nd*ml) > 0.5; % DC=0 paradata=reshape(seridata,para,nd*ml); %ukuran(51 * nd*ml) %%% modulasi ml [ich,qch]=qpskmod(paradata,para,nd,ml); kmod=1/sqrt(2); ich=ich.*kmod; qch=qch.*kmod; % modulasi CE ceich=kndata; % CE:BPSK ceqch=zeros(1,64); %%% pemetaan data (DC=0) [ich2,qch2]=crmapping(ich,qch,fftlen,nd); % penambahan carrier pilot dan simbol CE
ich22=[ceich.' ich2]; % Data transmisi kanal-I qch22=[ceqch.' qch2]; % Data transmisi kanal-Q %%%IFFT x=ich22+qch22.*i; y=ifft(x); ich3=real(y); qch3=imag(y);
%%%Penyisipan Guard Interval %Penyisipan Guard Interval
[ich5,qch5]=giins(ich3,qch3,fftlen,gilen,nd+1); %%%Kalkulasi fading [ifade2,qfade2,ramp,rcos,rsin]=sefade2(ich5,qch5,itau,... dlvll,th1,n0,itnd1,now1,length(ich5),tstp,fd,flat); %%%Reduksi C/I spowintw=sum(ich5.^2+qch5.^2)/(nd)/52; rint=spow/spowintw*10^(ci/10); iout=ifade2.*sqrt(rint); qout=qfade2.*sqrt(rint); else
iout = zeros(1,nsamp); qout = zeros(1,nsamp); end
%**************************** Akhir Dari File ********************************