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 merupakan fungsi untuk mencari jumlah karakter yang ditulis. 3.1.2
a.Length
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] { if(flag==0 && if (flag == 1 flag = 1; } else if ((temp[i]
== '1' && temp[tengah] == '1') flag1==0) hasiljumlah[i] = '0'; || flag1==1) hasiljumlah[i] = '1';
== '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.