Pertama, aku ingin menginformasikan bahwa ini adalah postingan blog dengan judul terpanjang yang pernah aku buat.
Fiuuuuuuuw….
Postingan ini diperlukan bagi pembaca yang sedang atau akan mensimulasikan performa komunikasi wireless (grafik BER Vs Eb/E0) untuk kanal AWGN dan fading Rayleigh dan ingin menunjukkan titik-titik dimana proses Monte Carlo dilakukan. Terutama, pembaca yang sedang mengambil Mata Kuliah Sistem Komunikasi Seluler (Siskomsel). Tugasnya Pak Adit euy.
Skrip matlab simulasi kanal fading Rayleigh (tanpa menunjukkan proses Monte Carlo) telah banyak diketahui. Bagi yang belum tahu ini dia skripnya untuk Monte Carlo 5x:
(parameter2 dapat diubah sesui kebutuhan):
%===========================================================================
function BER = fadingku(N) %N=jumlah/banyak data yang dikirimkan
clf; %Generate data
EbNo=linspace(0,25,6); %Generate nilai Eb/No yang diinginkan
N=10000;
for i=1:length(EbNo)
BER(i)=0;
for j=1:5
b=randn(1,N); % Pembangkitan data secara random
b=sign(b);
f=fading(N,30,0.0001); % kanal fading dengan Fd=30Hz dan T=0.0001
f=abs(f’);
n=randn(1,N)./(10^(EbNo(i)/20)); % Pembangkitan Noise dengan nilai Eb/No
r=(b.*f)+n; %data yang diterima
r=sign(r);
BER(i)=BER(i)+(sum(abs(b-r))/2); % menghitung jumlah bit yang error
end
BER(i)=BER(i)/5/N; % BER= jumlah Error rata-rata/jml Bit yang dikirim
end
semilogy(EbNo,BER,’rp’); % menampilkan hasil dengan skala semilogaritmik
hold on;
%Memplot kurve BER vs SNR untuk noise AWGN
t=linspace(0,10,1000);
ebn0 = 10.^[t/10];
Pe=1/2.*erfc(sqrt(ebn0));
%Rumus probability of error (Pe) unt sinyal antipodal
% Referensi :Proakis,”Digital Comm. 2nd,ed.”" p.246
semilogy(t,Pe,’blue’);
grid on;
%Memplot kurve BER vs SNR untuk rayleigh fading
t=linspace(0,25,1000);
ebn0 = 10.^[t./10];
Pe = 0.5.*(1-sqrt(ebn0./(1+ebn0)));
%Rumus probability of error (Pe) unt sinyal antipodal
% Referensi :Proakis,”Digital Comm. 2nd,ed.”" p.774
semilogy(t,Pe,’k');
title(’BER vs Eb/No untuk Kanal Fading Rayleigh’);
xlabel(’Eb/No(dB)’);
ylabel(’Bit Error Rate, BER’);
disp(’- Kurva biru menunjukkan nilai teoretis untuk kanal AWGN’);
disp(’- Kurva hitam menunjukkan nilai teoretis untuk Kanal fading’);
disp(’- Kurva dengan tanda pentagram merah menunjukkan hasil simulasi’);
%===========================================================================
Karena kita ingin menunjukkan titik dimana proses Monte Carlo dilakukan, maka ada bagian yang harus diubah, yakni:
BER(i)=BER(i)+(sum(abs(b-r))/2); ……………… (1)
==> mengakumulasikan data/bit yang salah pada tiap titik (belum merupakan BER yang sesungguhnya) untuk tiap proses Monte Carlo sebanyak 5x, lalu….
BER(i)=BER(i)/5/N; ……………………………………………………………… (2)
Akumulasi data/bit yang salah di atas dirata2kan(dibagi 5), baru dihitung BER-nya (dibagi dengan jumlah data yang dikirimkan).
Idenya Sederhana
Kita harus menghitung nilai BER untuk Eb/E0 tertentu pada tiap proses Monte Carlo-nya. Semisal, nilai tersebut ditampung pada variabel “BER_tiap_montecarlo”. Lalu, plot BER_tiap_montecarlo sesuai dengan nilai Eb/E0-nya. Tapi, kita juga harus tetap menghitung akumulasi variabel BER_tiap_montecarlo untuk nantinya mendapatkan nilai rata-ratanya.
Sederhana bukan!
Realisasi
Tambahkan baris-baris berikut menggantikan kedua baris di atas (1 dan 2):
(1)BER_tiap_montecarlo(i)=(sum(abs(b-r))/2)/N;
% BER untuk tiap titik pada Eb/No tertentu
BER(i)=BER(i)+BER_tiap_montecarlo(i); % BER komulatif pada Eb/No tertentu
semilogy(EbNo(i),BER_tiap_montecarlo(i),’bp’);
% Menampilkan BER tiap Montecarlo sesuai nilai Eb/No-nya
hold on;
(2) BER(i)=BER(i)/5;
Simple isn’t it!
Feel free to ask!
Berikut hasil simulasinya: