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.
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
Visua
l C# untuk
Huffman Code
adalah sebagai berikut.
// cara mengambil karakter yang samastring a = textBoxInputanHuffmanCode.Text;
char[] d = new char[100]; int j = 0;
int temp1 = 0;
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++) {
{
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,
amerupakan masukan dalam bentuk string. Dan
a.Lengthmerupakan 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
Dari diagram
Arithmetic Code,
dibuat tabel
penyandiannya, lalu bisa
diawasandikan kembali.
Program
Visua
l 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); }
}
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.
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 parity
nya „1‟. Paritas
Gasal
merupakan kebalikan
Paritas Genap.
Program
Visua
l 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;
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
LRC
nya.
Program
Visua
l 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];
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'; }
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
CRC
nya.
CRC
ini menggunakan pembagian
biner
.
Program
Visua
l 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];
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';
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
biner
nya
16 maka dibagi 2, masing-masing 8
bit
. Kemudian kedua bagian
dijumlahkan. Hasil penjumlahan dikomplemen untuk mendapatkan hasil
checksum
nya.
Program
Visua
l 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') {
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.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
Hamming Code
juga menggunakan
bit
tambahan yaitu tambahan
bit
ke
1,2,4,8,16,dan seterusnya tergantung pada jumlah jumlah
bit
masukan.
Program
Visua
l 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;
} 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.
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
.
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') {
}
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
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'; }
{
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