LAMPIRAN 1 Flowchart Algoritma Simulasi Kinerja OFCDM 1. Additive White Gaussian Noise (AWGN) MULAI
Input data Para;fftlen;
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;
SELESAI
TIDAK
Untuk s = 1 sampai 2
TIDAK
Untuk eb/No = 1 sampai 15
TIDAK
Untuk iii = 1 sampai loop
E
YA
PROSES DI TRANSMITTER
DATA DIBANGKITKAN Seldata = rand (1,para*nd*ml)>0.5;
KONVERSI DATA SERIAL KE PARAREL Paradata = reshape (seldata, para, nd*ml);
FUNGSI qpskmod DIJALANKAN
A
Universitas Sumatera Utara
A
PROSES MODULASI QPSK
M2 = ml/2; Paradata = paradata.*2-1; Count 2 =0;
PROSES SPREADING 2D
Ich1 = ich.*kmod*sr*8; qch1 = qch.*kmod*sr*8;
TIDAK
B
untuk jj = 1 sampai nd
Iout((1:para),jj) = isi; Qout((1:para),jj) = isq; Count2 = count2 + ml
YA
Isi = zeros (para,1); Isq = zeros (para,1);
TIDAK
untuk ii = 1 sampai m2
YA
Isi = isi+2.^(m2-ii).*paradata2((1:para),ii+count2);; Isq = isq+2.^(m2-ii).*paradata2((1:para),ii+count2);;
Universitas Sumatera Utara
B
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);
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);
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
Universitas Sumatera Utara
C
PROSES DI RECEIVER
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))
FUNGSI girem DIJALANKAN
PROSES PELEPASAN GUARD INTERVAL
Idata2 = reshape (idata,fftlen2,nd); Qdata2 = resahpe (qdata,fftlen2, nd); Iout = idata2(gilen+1:fftlen2,;); Qout = qdata2(gilen+1:fftlen2,;);
PROSES FFT DIJALANKAN
Rx = ich5 + qch5.*i; Ry = fft (rx); Ich6 = real (ry); Qch6 = imag (ry);
Proses Despreading 2D
PROSES DEMODULASI QPSK
Ich7 = ich6./kmod; Qch7 = qch6./kmod;
FUNGSI qpskdemod DIJALANKAN
D
Universitas Sumatera Utara
D
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;
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
E
Universitas Sumatera Utara
2. Fading Rayleigh MULAI
Input data Ml
DEFINISI PARAMETER SIMULASI para = 512; fftlen = 512; noc = 512; nd = 600; ml = 2; sr = 25000; br =sr.*ml; gilen = 48; ebno = 24;
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;
DEFINISI PARAMETER PENGULANGAN Nloop = 100; noe =0; nod = 0; eop = 0; nop = 0;
TIDAK
SELESAI
Untuk s = 1 sampai 2
Untuk eb/No = 1 sampai 15
TIDAK
Untuk iii = 1 sampai loop
TIDAK
E
YA PROSES DI TRANSMITTER
DATA DIBANGKITKAN Seldata = rand (1,para*nd*ml)>0.5;
F
Universitas Sumatera Utara
Universitas Sumatera Utara
B
PROSES IFFT
X = ich1 + qch1.*i; Y = ifft (x); Ich2 = real(y); Qch2 = imag(y);
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);
G
Universitas Sumatera Utara
G
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);
FUNGSI sefade DIJALANKAN
H
Universitas Sumatera Utara
H
PROSES MEMBANGKITKAN FREKUENSI SELEKTIF FADING
Iout = zeros (1,nsamp); Qout = zeros (1,nsamp); Total_attn = sum (10.^(-1.0.*dlvl./10.0));
TIDAK
Iout = zeros (1,nsamp); Qout = zeros (1,nsamp); Total_attn = sum (10.^(-1.0.*dlvl./10.0));
Untuk k = 1 sampai n1;
YA
C
Atts = 10.^-0.05.*dlvl(k)); J
Jika dlvl (k) = 40.0
YA
TIDAK
Theta = th(k).*pi./180.0;
Atts = 0.0;
FUNGSI delay DIJALANKAN
I
Universitas Sumatera Utara
I
PROSES PEMBERIAN DELAY
Iout = zeros (1,nsamp); Qout = zeros (1,nsamp);
TIDAK
Jika idel ~= 0
YA
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);
J
Universitas Sumatera Utara
C
PROSES DI RECEIVER
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))
FUNGSI girem DIJALANKAN
PROSES PELEPASAN GUARD INTERVAL
Idata2 = reshape (idata,fftlen2,nd); Qdata2 = resahpe (qdata,fftlen2, nd); Iout = idata2(gilen+1:fftlen2,;); Qout = qdata2(gilen+1:fftlen2,;);
PROSES FFT DIJALANKAN
Rx = ich5 + qch5.*i; Ry = fft (rx); Ich6 = real (ry); Qch6 = imag (ry);
Proses Despreading 2D
PROSES DEMODULASI QPSK
Ich7 = ich6./kmod; Qch7 = qch6./kmod;
FUNGSI qpskdemod DIJALANKAN
D
Universitas Sumatera Utara
D
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;
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
E
Universitas Sumatera Utara
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; fftlen=128; noc=128; nd=6; ml=2; sr=250000; br=sr.*ml; gilen=32; ebn0=10:10:50;
% % % % % % % % %
Jumlah kanal paralel yang ditransmisikan Panjang FFT Jumlah carrier Jumlah simbol OFCDM untuk satu loop Level modulasi : QPSK Symbol rate Bit rate per carrier Panjang guard interval (points) Eb/N0
%******************** Bagian Main Loop ****************** nloop=100; noe = 0; nod = 0;
% Jumlah loop simulasi % Jumlah data error % 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);
Universitas Sumatera Utara
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; qch1=qch.*kmod*sr*8; end
% proses spreading % proses spreading
% [ich1,qch1]=crmapping(ich1,qch1,fftlen,nd); %************************ IFFT ************************ x=ich1+qch1.*i; y=ifft(x); ich2=real(y); qch2=imag(y);
% ifft : dibangun di dalam fungsi % real : dibangun di dalam fungsi % 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); ich6=real(ry); qch6=imag(ry);
% fft : dibangun di dalam fungsi % real : dibangun di dalam fungsi % imag : dibangun di dalam fungsi
%********************** Demodulasi ************************ %[ich6,qch6]=crdemapping (ich6,qch6,fftlen,nd); ich7=ich6./kmod; qch7=qch6./kmod;
Universitas Sumatera Utara
[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;
Universitas Sumatera Utara
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 | % fprintf : built in function end
%0.10f |\n',ebn0(u),ber(u));
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; fftlen=128; noc=128;
% Jumlah kanal paralel yang ditransmisikan % Panjang FFT % Jumlah carrier
Universitas Sumatera Utara
nd=6; ml=2; sr=250000; br=sr.*ml; gilen=32; ebn0=10:10:50;
% % % % % %
Jumlah simbol OFCDM untuk satu loop Level modulasi : QPSK Symbol rate Bit rate per carrier Panjang guard interval (points) 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 %********************* Transmitter **********************
Universitas Sumatera Utara
%****************** 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
********************
Universitas Sumatera Utara
[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))));
Universitas Sumatera Utara
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 fprintf : built in function end
|
%0.5f |\n',ebn0(u),ber(u)); %
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'); legend('OFDM','OFCDM','BER OFDM Teori');
Universitas Sumatera Utara
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 gelombang % langsung dlvl = [0];
untuk
setiap
multipath
yang
dinormalisasi
oleh
% 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]
Universitas Sumatera Utara
fd=320; % Flat variabel flat=1; %******************* Bagian Main Loop ******************* nloop=100;
% Jumlah loop simulasi
noe = 0; nod = 0;
% Jumlah data error % 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);
Universitas Sumatera Utara
%********************* 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 ich6=real(ry); % real qch6=imag(ry); % imag
: dibangun di dalam fungsi : dibangun di dalam fungsi : 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 %******************* Hasil Keluaran ********************
Universitas Sumatera Utara
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]; ditransmisikan fftlen=para; noc=128; nd=6; ml=2;
% Jumlah kanal paralel yang % % % %
Panjang FFT Jumlah carrier Jumlah simbol OFCDM untuk satu loop Level modulasi : QPSK
Universitas Sumatera Utara
sr=250000; br=sr.*ml; gilen=32; ebn0=10;
% % % %
Symbol rate Bit rate per carrier Panjang guard interval (points) 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 gelombang % langsung dlvl = [0];
untuk
setiap
multipath
yang
dinormalisasi
oleh
% 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; nod = 0;
% Jumlah data error % Jumlah data yang ditransmisikan
for s = 1:5 for iii=1:nloop
%*********************** Transmitter ********************
Universitas Sumatera Utara
%****************** 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; qch1=qch.*kmod*sr*8;
% proses spreading % 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 ***********************
Universitas Sumatera Utara
[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);
Universitas Sumatera Utara
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; fftlen=128; noc=128; nd=6; ml=2; sr=50000:50000:500000; br=sr.*ml; gilen=32; ebn0=10;
% % % % % % % % %
Jumlah kanal paralel yang ditransmisikan Panjang FFT Jumlah carrier Jumlah simbol OFCDM untuk satu loop Level modulasi : QPSK Symbol rate Bit rate per carrier Panjang guard interval (points) Eb/N0
%*************** Inisialisasi Fading ****************** % Resolusi waktu tstp=1./sr/(fftlen+gilen);
Universitas Sumatera Utara
% Waktu kedatangan untuk setiap multipath yang dinormalisasi oleh tstp itau = [0]; % Daya rata-rata gelombang % langsung dlvl = [0];
untuk
setiap
multipath
yang
dinormalisasi
oleh
% 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; nod = 0;
% Jumlah data error % 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); % reshape : dibangun di dalam fungsi
Universitas Sumatera Utara
%******************** Modulasi QPSK ************************ [ich,qch]=qpskmod(paradata,para,nd,ml); kmod=1/sqrt(2); % sqrt : dibangun di dalam fungsi ich1=ich.*kmod*sr(s)*8; qch1=qch.*kmod*sr(s)*8;
% proses spreading % 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
Universitas Sumatera Utara
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 fprintf : built in function
| %0.5f |\n',br(u),ber(u)); %
Universitas Sumatera Utara
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; fftlen=64; noc=53; nd=6; knd=1; ml=2; sr=250000; br=sr.*ml; gilen=16; ebno=1000;
% % % % % % % % % % % %
Jumlah kanal paralel yang ditransmisikan points Panjang FFT Jumlah carrier Jumlah simbol OFCDM untuk satu loop Jumlah estimasi kanal (CE) simbol OFCDM Level modulasi : QPSK Symbol rate (250 ksymbol/s) Bit rate per carrier Panjang guard interval (points) Eb/N0
%------------------- Inisialisasi Fading --------------------tstp=1/sr/(fftlen+gilen); itau=[0];
dlvll=[0]; multipath yang
% Resolusi Waktu % Waktu kedatangan untuk setiap multipath yang % dinormalisasi oleh tstp % Daya rata-rata untuk setiap % dinormalisasi oleh gelombang
langsung n0=[6]; fading th1=[0,0]; itnd1=[1000]; now1=1; gelombang
% Jumlah gelombang untuk membangkitkan % % % %
n0(1),n0(2) Fasa awal gelombang yang tertunda Penyusunan counter fading Jumlah gelombang langsung + jumlah
% yang tertunda
Universitas Sumatera Utara
fd=150; flat=0; itnd0=nd*(fftlen+gilen)*10;
% Frekuensi Doppler maksimum % Flat atau tidak % Jumlah counter fading untuk melompat
%-------------Inisialisasi Gelombang Interferensi----------------ci=10:10:100; ml2=2;
% Perbandingan C/I % 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; nod=0;
% Jumlah data error % 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 qch=qch.*kmod*sr*8; % proses spreading
Universitas Sumatera Utara
%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]; qch2=[ceqch', qch1];
% Data transmisi I-channel % 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) ; itnd2 = itnd2+itnd02;
Universitas Sumatera Utara
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).*(ice1j.*qce1)); qv=imag((1./(ice1.^2+qce1.^2)).*(ice0+j.*qce0).*(ice1j.*qce1)); %Matrik untuk rotasi reverse ieqvl=[iv iv iv iv iv iv iv]; qeqvl=[qv qv qv qv qv qv qv];
Universitas Sumatera Utara
%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);
Universitas Sumatera Utara
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 qdata iout qout fftlen gilen
: : : : : :
Masukan data Ich Masukan data Qch Keluaran data Ich Keluaran data Qch Panjang FFT (points) 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 qdata iout qout fftlen gilen nd
: : : : : : :
Masukan data Ich Masukan data Qch Keluaran data Ich Keluaran data Qch Panjang FFT (points) Panjang guard interval (points) Jumlah simbol OFCDM
% ***************************************************** idata2=reshape(idata,fftlen2,nd);
Universitas Sumatera Utara
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 % Fungsi pemberian delay kepada sinyal masukan
Universitas Sumatera Utara
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; % counter fading
Universitas Sumatera Utara
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
Universitas Sumatera Utara
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 %qdata %iout %qout %fftlen %nd
: : : : : :
Masukan data Ich Masukan data Qch Keluaran data Ich Keluaran data Qch Panjang FFT (points) 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,:);
Universitas Sumatera Utara
17. Function File interwave.m %interwave.m %Fungsi untuk menambah gelombang interferensi function [iout,qout]=interwave(ci,spow,ml,nsamp,tstp,fadingpara) %*************************variables****************************** %ci %spow %ml %nsamp %tstp %fadingpara %iout %qout
: : : : : : : :
Perbandingan carrier to interference Daya sinyal yang diharapkan Level modulasi Jumlah sampel Resolusi waktu Parameter fading Sinyal Keluaran Ich 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; br=sr.*ml; gilen=16;
% symbol rate % bit rate per carrier % 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
Universitas Sumatera Utara
%%%%%%%%%%%%%%%%%%%%% 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]; qch22=[ceqch.' qch2];
% Data transmisi kanal-I % 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
Universitas Sumatera Utara
iout = zeros(1,nsamp); qout = zeros(1,nsamp); end %**************************** Akhir Dari File ********************************
Universitas Sumatera Utara