BAB III PERANCANGAN 3.1. Perancangan -...
Transcript of BAB III PERANCANGAN 3.1. Perancangan -...
34
BAB III
PERANCANGAN
3.1. Perancangan
Tampilan simulator ini dibuat dengan menggunakan GUI (Graphical User
Interface), supaya sistem yang dirancang terlihat lebih menarik dan mudah untuk
dioperasikan.
Tampilan simulator penyandian dan pengawasandian terdiri dari menu utama
dan 10 jenis penyandian yang terpisah tiap GUI-nya.
Setelah program dijalankan maka akan keluar tampilan menu utama yang berisi
pilihan penyandian dan pengawasandian yang akan dipilih. Terdapat 10 jenis
penyandian dan pengawasandian yaitu Huffman Code, Arithmetic Code,Parity Check
Code, Longitudinal Redudancy Code,Cyclic Redundacy Check Code, Checksum Code,
Bose Chaudhuri Hocqueqhem Code, Hamming Code, Reed Salomon Code, dan
Convolution Code seperti pada Gambar 3.1.
Gambar 3.1.Tampilan Utama Simulator Penyandian dan Pengawasandian.
35
3.1.1 Simulator Penyandaian dan Pengawasandian Huffman Code
Tampilan simulator penyandian dan pengawasandian Huffman Code ditunjukkan
pada Gambar 3.2.
Gambar 3.2. Tampilan Simulator Penyandian dan Pengawasandian Huffman
Code.
Penyandian Huffman Code menggunakan probabilitas tiap karakter, yang
kemudian diurutkan dari yang paling besar ke yang paling kecil, lalu dibuat
diagram pohon Huffman. Probabilitas karakter paling kecil dan probabilitas
karakter yang terkecil kedua dijumlahkan kemudian dibandingkan dengan
probabilitas karakter yang lain.
Selanjutnya diurutkan kembali kemudian diberi kode „1‟ untuk bagian
atas dan kode „0‟ untuk bagian bawah.
Program Visual C# untuk Huffman Code adalah sebagai berikut.
// cara mengambil karakter yang sama string a = textBoxInputanHuffmanCode.Text;
char[] d = new char[100];
int j = 0; int temp1 = 0; for (int i = 0; i < a.Length; i++) {
36
for (int k = 0; k <= j; k++) { if (a[i] != d[k]) { temp1++; } } if (temp1 == j + 1) { d[j] = a[i]; j++; } temp1 = 0; }
% cara mengambil jumlah angka tiap karakter int[] jumlah = new int[100]; int h = 0; for (int i = 0; i < j; i++) { for (int k = 0; k < a.Length; k++) { if (d[i] == a[k]) { jumlah[h]++; } } h++; }
% cara mencari probabilitas tiap karakter float[] prob = new float[100]; for (int i = 0; i < j; i++) prob[i] = (float)jumlah[i] / a.Length; % cara mengurutkan jumlah dari paling kecil ke besar
float[] temp3=new float[100]; for (int i = 0; i < j; i++) { for (int k = 0; k < j; k++) { if (prob[k] > prob[i]) { temp3[0] = prob[k]; prob[k] = prob[i]; prob[i] = temp3[0]; } } } % cara membuat pohon huffman
float[] prob2=new float[100]; float[] prob3 = new float[100]; prob2[0] = prob[0] + prob[1]; for (int i = 2; i < j; i++) { prob2[i - 1] = prob[i]; } int[] flag = new int[100]; for (int k = 2; k <= j; k++) { for (int i = 2; i < j; i++)
37
{ if (prob2[i - 2] >= prob2[i-1]) { flag[k] += 1; temp3[0] = prob2[i-1]; prob2[i - 1] = prob2[i - 2]; prob2[i - 2] = temp3[0]; } else { prob2[i - 1] = prob2[i-1]; } }
}
Pada Program, a merupakan masukan dalam bentuk string. Dan a.Length
merupakan fungsi untuk mencari jumlah karakter yang ditulis.
3.1.2 Simulator Penyandian dan Pengawasandian Arithmetic Code
Gambar 3.3 menunjukkan tampilan simulator penyandian dan pengawasandian
Arithmetic Code.
Gambar 3.3.Tampilan Simulator Penyandian dan Pengawasandian Arithmetic
Code.
Penyandian Arithmetic Code menggunakan probabilitas tiap karakter
yang dibuat interval dari 0 sampai 1, lalu dibuat diagram Arithmetic Code
berdasarkan masukan karakter pertama sampai karakter yang terakhir.
38
Dari diagram Arithmetic Code, dibuat tabel penyandiannya, lalu bisa
diawasandikan kembali.
Program Visual C# untuk Arithmetic Code adalah sebagai berikut.
//Cara membuat range dalam Arithmetic Code
float[] range0 = new float[100]; float[] high = new float[100]; float[] low = new float[100]; range0[0]=0; for (int i = 1; i <= j; i++) { range0[i] += range0[i - 1]; high[i - 1] = range0[i]; low[i - 1] = range0[i - 1]; range0[i] += prob[i - 1]; }
// Algoritma membuat diagram Arithmetic Code
double[] hasil = new double[100]; double[] hasil2 = new double[100]; double[] hasil3 = new double[100]; double[] range1 = new double[100]; double[] range2 = new double[100]; range1[0] = high[1]-low[0]; int[] flag = new int[100]; int n = 0; double[] high1 = new double[100]; double[] low1 = new double[100]; double[] selisih = new double[100]; int satu = 1;
hasil[1] = range0[1]; hasil[0] = range0[0];
for (int k = 0; k < a.Length; k++) { for (int i = 0; i <= j; i++) { if (a[k] == d[i]) { n = i; } } range1[n] = hasil[n + 1] – hasil[n]; range1[n] = Math.Round(range1[n], belakangkoma); hasil[0] = hasil[n]; high1[k] = hasil[n + 1]; low1[k] = hasil[n]; selisih[k] = high1[k] – low1[k]; for (int i = 1; i <= j; i++) { hasil[i] = range1[n] * prob[i – 1] + hasil[i – 1]; hasil[i] = Math.Round(hasil[i], belakangkoma); } }
// Cara pengawasandian Arithmetic Code
39
int n1 = 0; for (int k = 1; k < a.Length; k++) { for (int i = 1; i <= j; i++) { if (hasilDecode[k – 1] <= range0[i] && hasilDecode[k – 1] >=
range0[i –1] ) n1 = i; } pembilang[k] = hasilDecode[k – 1] – range0[n1 – 1]; penyebut[k] = range0[n1] – range0[n1 – 1]; hasilDecode[k]= ((hasilDecode[k-1]-range0[n1-1])/(range0[n1]-
range0[n1-1])); hasilDecode[k] = Math.Round(hasilDecode[k], belakangkoma); penyebut[k] = Math.Round(penyebut[k], belakangkoma); pembilang[k] = Math.Round(pembilang[k], belakangkoma);
}
3.1.3 Simulator Penyandian dan Pengawasandian Parity Check Code
Tampilan simulator penyandian dan pengawasandian Parity Check Code
ditunjukkan pada Gambar 3.4.
Gambar 3.4.Tampilan Simulator Penyandian dan Pengawasandian Parity Check
Code.
Penyandian Parity Check Code menggunakan bit biner. Kata masukan
akan diubah menjadi kode ASCII dahulu, kemudian kode ASCII diubah menjadi
kode biner dengan cara menghitung angka “1”nya.
40
Parity Check Code dibagi 2 yaitu Paritas Genap dan Paritas Gasal. Jika
menggunakan Paritas Genap, dan jumlah angka „1‟nya genap misal 10, maka bit
paritasnya „0‟. Jika menggunakan Paritas Genap, dan jumlah angka „1‟nya
genap misal 11, maka bit paritynya „1‟. Paritas Gasal merupakan kebalikan
Paritas Genap.
Program Visual C# untuk Parity Check Code adalah sebagai berikut.
// proteksi untuk memilih paritas genap atau paritas gasal if (checkBoxGenap.Checked == true)
{ flaggenap = 1; } else if (checkBoxGasal.Checked == true) { flaggenap = 0; } else { MessageBox.Show(‚silahkan pilih parity genap atau ganjil dahulu‛); return; }
// cara mencari jumlah angka ‘1’ setelah masukan diubah menjadi biner. databinerParityCheckCode = textBoxBinerParityCheckCode.Text;
int panjangdatabiner = databinerParityCheckCode.Length; int jumlahsatu = 0; for (int i = 0; i < panjangdatabiner; i++) { if (databinerParityCheckCode[i] == ‘1’) { jumlahsatu++; } }
// cara mendapatkan bit parity
int bitParity = jumlahsatu % 2; if (flaggenap == 1) { textBoxBitParity.Text = bitParity.ToString(); } else { if (bitParity == 1) bitParity = 0; else bitParity = 1; textBoxBitParity.Text = bitParity.ToString(); }
41
3.1.4. Simulator Penyandian dan Pengawasandian Longitudinal Redundancy
Check
Tampilan simulator penyandian dan pengawasandian Longitudinal
Redundancy Check Code ditunjukkan pada Gambar 3.5.
Gambar 3.5.Tampilan Simulator Penyandian dan Pengawasandian
Longitudinal Redundancy Check.
Penyandian Longitudinal Redundancy Check menggunakan bit biner.
Kata masukan akan diubah menjadi kode ASCII dahulu, kemudian kode
ASCII diubah menjadi kode biner.
Longitudinal Redundancy Check dibuat dengan cara setiap karakter yang
telah dijadikan biner dijumlahkan dimodulo 2 dengan setiap karakter yang
lain, tetapi dengan urutan bit yang sama. Selanjutnya akan didapat hasil
LRCnya.
Program Visual C# untuk Parity Check Code adalah sebagai berikut.
// cara membuat setiap karakter diubah menjadi 8 bit biner.
int[] jumlahbinerperkarakter = new int[100]; int[] kurang=new int[100]; string[] tambahnol = new string[100]; for (int i = 0; i < a.Length; i++) {
42
tambahnol[i]=""; } for (int i = 0; i < a.Length; i++) { jumlahbinerperkarakter[i] = c1[i].Length; if (jumlahbinerperkarakter[i] < 8) { kurang[i] = 8 - jumlahbinerperkarakter[i]; } for (int k = 0; k < kurang[i]; k++) { tambahnol[i] += "0"; } } string[] c2 = new string[100]; for (int i = 0; i < a.Length; i++) { c2[i] += tambahnol[i];
c2[i]+=c1[i]; }
// Cara mencari LRCnya for (int i = 0; i < 8; i++)
{ for (int k = 0; k < j; k++) { if (c2[k][i] == '1') { flag += 1; } }
if (flag % 2 == 0) { hasilLCR[i] = '0'; } else { hasilLCR[i] = '1'; } flag = 0;
}
43
3.1.5. Simulator Penyandian dan Pengawasandian Cyclic Redundancy Code
Tampilan simulator penyandian dan pengawasandian Cyclic Redundancy
Code ditunjukkan pada Gambar 3.6.
Gambar 3.6.Tampilan Simulator Penyandian dan Pengawasandian Cyclic
Redundancy Code.
Penyandian Cyclic Redundancy Code menggunakan bit biner. Kata
masukan akan diubah menjadi kode ASCII dahulu, kemudian kode ASCII
diubah menjadi kode biner.
Cyclic Redundancy Code menggunakan pembagi untuk mendapatkan
sisa CRCnya. CRC ini menggunakan pembagian biner.
Program Visual C# untuk Cyclic Redundancy Code adalah sebagai
berikut.
// Cara algoritma mencari sisa CRC
string satu = "1"; string nol = "0"; int databinertanpatitik = databiner[0].Length;
string[] pengurang = new string[100]; string[] pengurang2 = new string[100];
44
int panjangpembagi = textBoxPembagiData.Text.Length; char[] temp = new char[100]; string[] hasilcheck1 = new string[100]; string[] hasilcheck2 = new string[100];
for (int j = 0; j < databinertanpatitik; j++) { for (int i = 1; i < panjangpembagi; i++) { if (pengurang[j][i] == '0' && hasilcheck1[j][i] == '0') { hasilcheck1[j + 1] += '0'; } else if (pengurang[j][i] == '1' && hasilcheck1[j][i] == '1') { hasilcheck1[j + 1] += '0'; } else if ((pengurang[j][i] == '1' && hasilcheck1[j][i] == '0') ||
(pengurang[j][i] == '0' && hasilcheck1[j][i] == '1')) { hasilcheck1[j + 1] += '1'; } } hasilcheck1[j + 1] += temp[panjangpembagi + j]; if (hasilcheck1[j + 1][0] == '1') { textBoxHasilBagiCRC.AppendText(satu); pengurang[j + 1] = textBoxPembagiData.Text; } else { if (j < databinertanpatitik - 1) textBoxHasilBagiCRC.AppendText(nol); for (int k = 0; k < panjangpembagi; k++) pengurang[j + 1] += '0'; } }
45
3.1.6. Simulator Penyandian dan Pengawasandian Checksum Code
Tampilan simulator penyandian dan pengawasandian Checksum Code
ditunjukkan pada Gambar 3.7.
Gambar 3.7.Tampilan Penyandian dan Pengawasandian Checksum Code.
Penyandian Checksum Code menggunakan bit biner. Kata masukan akan
diubah menjadi kode ASCII dahulu, kemudian kode ASCII diubah menjadi
kode biner.
Data biner Checksum Code dibagi 2 bagian. Misal jumlah data binernya
16 maka dibagi 2, masing-masing 8 bit. Kemudian kedua bagian
dijumlahkan. Hasil penjumlahan dikomplemen untuk mendapatkan hasil
checksumnya.
Program Visual C# untuk Checksum Code adalah sebagai berikut.
//Cara algoritma checksum code dari sebuah data
int tengah=databinertanpatitik-1; int flag = 0,flag1=0; char[] hasiljumlah=new char[100]; for (int i = (databinertanpatitik / 2)-1; i >=0; i--) { if (temp[i] == '0' && temp[tengah] == '0') { if (flag==0 && flag1==0)hasiljumlah[i] = '0'; else if (flag == 1||flag1==1) hasiljumlah[i] = '1';
46
flag = 0; flag1 = 0; } else if ( temp[i] == '1' && temp[tengah] == '1') { if(flag==0 && flag1==0) hasiljumlah[i] = '0'; if (flag == 1 || flag1==1) hasiljumlah[i] = '1'; flag = 1; } else if ((temp[i] == '1' && temp[tengah] == '0') || temp[i] == '0' &&
temp[tengah] == '1') { if (flag == 0 && flag1 == 0) { hasiljumlah[i] = '1'; flag1 = 0; } else if (flag == 1 || flag1==1) { flag1 = 1; hasiljumlah[i] = '0'; } } tengah--; }
3.1.7. Simulator Penyandian dan Pengawasandian Hamming Code
Gambar 3.8 menujukkan Tampilan Menu Penyandian dan Pengawasandian
Hamming Code, sedangkan Gambar 3.9 menunjukkan tampilan penyandian dan
pengawasandian Hamming Code dalam 1 baris, dan Gambar 3.10 menunjukkan
tampilan penyandian dan pengawasandian Hamming Code tiap karakter.
Gambar 3.8.Tampilan Menu Penyandian dan Pengawasandian Hamming
Code.
47
Gambar 3.9.Tampilan Penyandian dan Pengawasandian Hamming Code
dalam 1 Baris.
Gambar 3.10.Tampilan Penyandian dan Pengawasandian Hamming Code
tiap Karakter.
Penyandian Hamming Code merupakan penyandian Block Code yang
mempunyai keakuratan cukup baik. Hamming Code merupakan penyandian
Error Control Code yang mampu mendeteksi dan mengoreksi data jika
terjadi kesalahan. Kata masukan akan diubah menjadi biner dengan cara
kata masukan dibuat menjadi kode ASCII dahulu, kemudian kode ASCII
diubah menjadi kode biner.
48
Hamming Code juga menggunakan bit tambahan yaitu tambahan bit ke
1,2,4,8,16,dan seterusnya tergantung pada jumlah jumlah bit masukan.
Program Visual C# untuk Hamming Code adalah sebagai berikut.
// Cara membuat Hamming Code
for (int i = panjangdata-1; i >= 0;i--) { if (x == z) { z *= 2; i++; data[x] = 'x'; x++; flag++; } else { data[x] = databiner[0][i]; x++;} }
// Cara algoritma membuat hamming Code int[] flag1 = new int[100]; //0,flag2=0,flag3=0; int tanda2=0; int y = 2; int tanda4 = 0; int tanda8 = 0; int tanda16 = 0; y = 2; int g1 = 4; int g2 = 8; int g3 = 16; for (int i = 0; i < panjangdata + flag + 1; i++) { if (i % 2 == 1) { if (data[i] == '1') flag1[1]++; } if (i == y) { if (data[i] == '1') flag1[2]++; if (tanda2 % 2 == 0) y += 1; else y += 3; tanda2++; } if(i==g1) { if (data[i] == '1') flag1[3]++; tanda4++; if (tanda4 % 4 == 0) g1 += 5; else g1++; } if(i==g2) { if (data[i] == '1') flag1[4]++; tanda8++; if (tanda8 % 8 == 0) g2 += 9; else g2++;
49
} if (i == g3) { if (data[i] == '1') flag1[5]++; tanda16++; if (tanda16 % 16 == 0) g3 += 17; else g3++; } } int x1 = 1; for (int i = 1; i <= flag; i++) { if (flag1[i] % 2 == 0) { data[x1] = '0'; } else { data[x1] = '1'; } x1 *= 2; }
3.1.8. Simulator Penyandian dan Pengawasandian BCH Code
Tampilan simulator penyandian dan pengawasandian BCH Code
ditunjukkan pada Gambar 3.11.
Gambar 3.11.Tampilan Penyandian dan Pengawasandian BCH Code.
Bose Chaudhuri Hocqueqhem Code (BCH Code) merupakan subkelas
penyandian siklik (Cyclic Code) yang menawarkan pemilihan parameter, yaitu
50
panjang blok dan laju kode. Bose Chaudhuri Hocqueqhem Code (BCH Code)
merupakan penyandian Error Control Code yang mampu mendeteksi dan
mengoreksi data jika terjadi kesalahan.
Dalam simulator ini menggunakan masukan berupa 1 karakter yang
berisi 7 bit. dengan jumlah kesalahan 1.
for (int i = 0; i < q.Length; i++) { if (q[i] == '1') { hasil=i; if (hasil == 0) textBoxMasukanBCH.AppendText("1"); else textBoxMasukanBCH.AppendText("X^" + hasil.ToString()); tanda += 1; if (tanda < jumlahtambah) { textBoxMasukanBCH.AppendText("+"); } } }
3.1.9. Simulator Penyandian dan Pengawasandian Convolution Code
Tampilan simulator penyandian dan pengawasandian Convolution Code
ditunjukkan pada Gambar 3.12.
G
a
m
b
a
r
3
.
3.12.Tampilan Penyandian dan Pengawasandian Convolution Code
51
Convolution Code merupakan jenis penyandian yang sering dipakai
untuk berbagai aplikasi, terutama pada pengiriman data. Seperti pengiriman data
untuk video digital, radio, komunikasi bergerak, dan
komunikasisatelit.Convolution Code juga termasuk dari penyandian Error Control
Code.
Dalam simulator ini memakai sistem s1 dan s2 saja yang akan dijelaskan
pada Bab 4.
string A = "00"; string B = "10"; string C = "11"; string D = "01"; string code=""; string next=""; string present; present = A; for (int i = 0; i < panjangdata; i++) { if (present == A) { if (data[i] == '1') { next = B; code = "11"; } else if (data[i] == '0') { next = A; code = "00"; } } else if (present == B) { if (data[i] == '1') { next = D; code = "01"; } else if (data[i] == '0') { next = C; code = "10"; } } else if (present == C) { if (data[i] == '1') { next = B; code = "00"; } else if (data[i] == '0') { next = A; code = "11"; }
52
} else if (present == D) { if (data[i] == '1') { next = D; code = "11"; } else if (data[i] == '0') { next = C; code = "01"; } } present = next; textBox1.AppendText(code + " "); } }
3.1.10. Simulator Penyandian dan Pengawasandian Reed Salomon Code
Tampilan simulator penyandian dan pengawasandian Convolution Code
ditunjukkan pada Gambar 3.13.
3.13.Tampilan Penyandian dan Pengawasandian RS Code.
Reed Salomon Code juga merupakan subkelas penyandian Block Code
yang mempunyai cara kerja multibit. Reed Salomon Code juga merupakan
53
penyandian Error Control Code yang mampu mendeteksi dan mengoreksi data
jika terjadi kesalahan.
Pada simulator ini memakai contoh yang sudah tetap karena kode ini
cukup sulit baik dalam proses penyandian maupun pengawasandian, sehingga
masukan tidak bisa sesuai masukan pengguna simulator.
3.2 Program Pembangkit Error dan Program Konversi Kata Masukan menjadi
Biner
Program pembangkit error disini digunakan untuk membangkitkan error
secara acak pada bit data yang diterima. Sehingga data yang dikirim dan data
yang diterima tidak sama. Program pembangkit error dituliskan sebagai berikut.
// cara membuat error
int[] biterror = new int[100]; Random random = new Random(); biterror[0] = random.Next(panjangdatabiner - 1); tanda = 0; for (int i = 1; i < jumlahbiterror; i++) { biterror[i] = random.Next(panjangdatabiner - 1); } for (int i = 1; i < jumlahbiterror; i++) { tanda = 0; for (int O = 0; O < i; O++) { biterror[i] = random.Next(panjangdatabiner - 1);
if (biterror[i] == biterror[O] || biterror[i] == 0 || temp[biterror[i]] == '.')
{ tanda = 1; } } if (tanda == 1) i -= 1; } int bitParityError = 0; char[] temp = new char[100]; for (int i = 0; i < panjangdatabiner; i++) { temp[i] = databinerParityCheckCode[i]; } for (int i = 0; i < jumlahbiterror; i++) { if (temp[biterror[i]] == '1') { temp[biterror[i]] = '0'; } else if (temp[biterror[i]] == '0')
54
{ temp[biterror[i]] = '1'; } }
Program pengkonversi kata masukan menjadi deretan biner adalah sebagai
berikut.
// cara kata masukkan menjadi biner
string[] c1 = new string[100]; string databinerParityCheckCode; int[] b = new int[100]; for (int i = 0; i < a.Length; i++) { b[i] = Convert.ToInt32(a[i]); c1[i] = Convert.ToString(b[i], 2); }
3.3 Pedoman Penggunaan Simulator Penyandian dan Pengawasandian
Pedoman penggunaan simulator merupakan sebuah pedoman yang
digunakan untuk memandu langkah-langkah pengguna simulasi penyandian dan
pengawasandian, hal ini disertakan pada lampiran.