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
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 untuk jj = 1 sampai nd YA Isi = zeros (para,1); Isq = zeros (para,1); B Iout((1:para),jj) = isi; Qout((1:para),jj) = isq; Count2 = count2 + ml 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);;
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
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
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
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; SELESAI TIDAK Untuk s = 1 sampai 2 Untuk eb/no = 1 sampai 15 TIDAK TIDAK Untuk iii = 1 sampai loop E YA PROSES DI TRANSMITTER DATA DIBANGKITKAN Seldata = rand (1,para*nd*ml)>0.5; F
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
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
H PROSES MEMBANGKITKAN FREKUENSI SELEKTIF FADING Iout = zeros (1,nsamp); Qout = zeros (1,nsamp); Total_attn = sum (10.^(-1.0.*dlvl./10.0)); TIDAK Untuk k = 1 sampai n1; Iout = zeros (1,nsamp); Qout = zeros (1,nsamp); Total_attn = sum (10.^(-1.0.*dlvl./10.0)); 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
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
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
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
LAMPIRAN 2 Program Simulasi 1. Script File ofcdm.m % ofcdm.m % Program simulasi untuk mapatkan 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; % 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);
fungsi kmod=1/sqrt(2); % sqrt : dibangun di dalam if s == 1; ich1=ich.*kmod; qch1=qch.*kmod; elseif s == 2; ich1=ich.*kmod*sr*8; qch1=qch.*kmod*sr*8; % 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;
[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)); %******************* Hasil Keluaran ******************** switch s case 1 berd(ss)=(noe/nod); case 2 berc(ss)=(noe/nod); if s == 1 berteori(ss) = (1/2)*erfc(sqrt((ebn0(ss)))); %fprintf('nilai BER rata-rata untuk 100 kali percoba%f\t%e\t%d\t\n',ebn0,ber,nloop); %********************* Akhir Dari File ******************** 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'); fprintf(' ---------------------- \n'); fprintf(' EbN0 BER \n'); fprintf(' ---------------------- \n'); for u = 1:5 fprintf(' %2.0f db % fprintf : built in function %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'); grid on;hold on xlabel('ebn0 (db)'); ylabel('ber'); title ('GRAFIK PERBANDINGAN BER TERHADAP Eb/N0 PADA KANAL AWGN'); leg('ofdm','ofcdm','ber OFDM Teori'); 2. Script File ofcdm_fading.m % ofcdm_fading.m % Program simulasi untuk mapatkan 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
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 **********************
%****************** 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 %************************ 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); %********************* 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); %********************* Hasil Keluaran *********************** switch s case 1 berd(ss)=noe/nod; case 2 berc(ss)=noe/nod; if s == 1 bt=1+(1/(ebn0(ss))); berteori(ss) = 1/2*(1-(1/(sqrt(bt))));
%fprintf('nilai BER rata-rata untuk 100 kali percoba%f\t%e\t%d\t\n',ebn0,ber,nloop); %********************* Akhir Dari Data ******************** 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'); 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 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'); grid on;hold on xlabel('ebn0 (db)'); ylabel('ber'); title ('GRAFIK PERBANDINGAN BER TERHADAP Eb/N0 PADA KANAL FADING RAYLEIGH'); leg('ofdm','ofcdm','ber OFDM Teori');
3. Script File spreading.m % spreading.m % Program simulasi untuk mapatkan 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; % 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: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); 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/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); %******************* Hasil Keluaran ********************
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 ****************** 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 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'); %leg('ofdm','ofcdm'); 4. Script File carrier.m % carrier.m % Program simulasi untuk mapatkan 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
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 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; nod = 0; % Jumlah data error % Jumlah data yang ditransmisikan for s = 1:5 for iii=1:nloop %*********************** Transmitter ********************
%****************** 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 ********************* fungsi [ich,qch]=qpskmod(paradata,para(s),nd,ml); kmod=1/sqrt(2); % sqrt : dibangun di dalam ich1=ich.*kmod*sr*8; qch1=qch.*kmod*sr*8; % proses spreading % proses spreading %************************ 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(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); %********************** 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 *********************** disp (' '); disp (' '); figure(2);
OFCDM\n'); fprintf('nilai BER rata-rata untuk tiap Carrier pada 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 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 mapatkan 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 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; 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
%******************** 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); 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(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); %*********************** 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 ******************** 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
fprintf(' -------------------------- \n\n\n'); plot(br,ber,'--b'); grid on; xlabel('bit RATE'); ylabel('ber'); title ('GRAFIK PERBANDINGAN BER TERHADAP BIT RATE'); %leg('ofdm','ofcdm'); 6. Script File interference.m % interference.m % Program simulasi untuk mapatkan 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 langsung n0=[6]; fading th1=[0,0]; itnd1=[1000]; now1=1; gelombang % Resolusi Waktu % Waktu kedatangan untuk setiap multipath yang % dinormalisasi oleh tstp % Daya rata-rata untuk setiap % dinormalisasi oleh gelombang % Jumlah gelombang untuk membangkitkan % n0(1),n0(2) % Fasa awal gelombang yang tertunda % Penyusunan counter fading % Jumlah gelombang langsung + jumlah % yang tertunda
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; noe=0; nod=0; % Jumlah loop simulasi % 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
%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;
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); ber(c)=noe/nod; %************************* 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 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); iout((1:para),jj)=isi; qout((1:para),jj)=isq; count2=count2+ml; 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
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); 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
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; 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) else iout=idata; qout=qdata; %********************* 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; 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); 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,:);
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; nd=6; knd=1; % jumlah carrier % jumlah simbol informasi % 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]; 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
iout = zeros(1,nsamp); qout = zeros(1,nsamp); %**************************** Akhir Dari File ********************************