• Tidak ada hasil yang ditemukan

SIMULASI PENYANDI DAN PENGAWASANDI SANDI BCH (15,7) DENGAN VISUAL C++ TUGAS AKHIR - Simulasi penyandi dan pengawasandi sandi BCH [15,7] dengan visual C++ - USD Repository

N/A
N/A
Protected

Academic year: 2019

Membagikan "SIMULASI PENYANDI DAN PENGAWASANDI SANDI BCH (15,7) DENGAN VISUAL C++ TUGAS AKHIR - Simulasi penyandi dan pengawasandi sandi BCH [15,7] dengan visual C++ - USD Repository"

Copied!
125
0
0

Teks penuh

(1)

i

TUGAS AKHIR

Diajukan untuk memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Teknik

Jurusan Teknik Elektro

disusun oleh :

IDA BAGUS MADE SINARYASA

995114051

PROGRAM STUDI TEKNIK ELEKTRO

JURUSAN TEKNIK ELEKTRO

FAKULTAS TEKNIK

UNIVERSITAS SANATA DHARMA

YOGYAKARTA

(2)

ii

FINAL PROJECT

Presented as Partial Fulfillment of the Requirements To Obtain the Sarjana Teknik Degree

In Electrical Engineering

By :

IDA BAGUS MADE SINARYASA

995114051

ELECTRICAL ENGINEERING STUDY PROGRAM

ELECTRICAL ENGINEERING DEPARTMENT

ENGINEERING FACULTY

SANATA DHARMA UNIVERSITY

YOGYAKARTA

(3)
(4)
(5)

v

!

" ! #

#

(6)

vi

tidak memuat karya atau bagian karya atau bagaian karya orang lain, kecuali yang telah disebutkan dalam kutipan dan daftar pustaka, sebagaimana layaknya sebuah karya ilmiah “

Yogyakarta, 25 Januari 2007 Penulis,

(7)

vii

INTISARI

Transmisi data adalah suatu proses pengiriman dan penerimaan data. Pada proses ini diharapkan data yang dikirim sama dengan data yang diterima. Dalam prakteknya hal tersebut sulit untuk dicapai, karena adanya error pada media penyalurannya yang begitu peka terhadap derau, distorsi dan interferensi.

Sandi BCH (15,7) merupakan salah satu metode yang sering digunakan untuk mendeteksi dan mengoreksi data yang salah selama proses pengiriman tersebut. Oleh karena itu untuk mengetahui lebih banyak tentang sandi BCH (15,7) maka dibuatlah simulasi sandi BCH (15,7) yang diimplementasikan dengan visual C++. Data yang dimasukkan pengguna akan disimilasikan melalui program penyandi, pemberi galat dan pengwasandi yang diproses tiap satu bingkai atau maksimal 50 karakter.

(8)

viii

ABSTRACT

Data transmission is a process about sending and receiving a data, expected result in this process is the received data would be the same as the data that was sent before. But in the fact that was very difficult to achieved, because there was something called error in the media of data transmitting. The media are very sensitive to sound of roaring, distortion, and interference.

BCH (15,7) codes is one of the methods that often used for data error detection and data error correction along the data transmitting process. To know further about BCH (15,7) codes, a simulation of BCH (15,7) codes was made by using Visual C++ as an implantation device. The encoder, the error maker and the decoder program will make the simulation of the data those inputted by user, which processed every one frame or maximum for 50 character.

(9)

ix

Esa, Ida Sang Hyang Widhi Wasa atas rahmat, berkat, karunia dan penyelenggaraan-Nya yang dilimpahkan kepada penulis, sehingga penulis dapat menyelesaikan Tugas Akhir ini dengan baik.

Penulisan Tugas Akhir ini merupakan salah satu syarat untuk mengakhiri masa studi penulis dan untuk memperoleh gelar sarjana teknik Jurusan Teknik Elektro di Universitas Sanata Dharma. Penulisan Tugas Akhir ini didasarkan pada hasil-hasil yang penulis peroleh mulai dari perancangan, pembuatan program sampai pada pengujian program yang diajukan, juga kemungkinan pengembangannya.

Pada kesempatan yang baik ini penulis ingin mengucapkan banyak terima kasih kepada semua pihak yang telah banyak membantu penulis dalam menyelesaikan Tugas Akhir ini. Ucapan terima kasih setulusnya penulis haturkan, terutama kepada:

1. Ibu Ir. Th Prima Ari Setyani, M.T. selaku dosen pembimbing I Tugas Akhir, dan Ibu Wiwien Widyastuti, S.T, M.T. selaku dosen pembimbing II Tugas Akhir, yang telah banyak memberikan pengarahan, petunjuk serta saran selama pengerjaan Tugas Akhir.

(10)

x

habisnya, terimakasih untuk menjadi ibu, sahabat, tempat sampah, tempat bergantung dan segalanya dalam hidupku.

5. Bapak Ida Bagus Putu Sapta, atas pengertian dan pengalaman hidup yang menjadi pelajaran berharga dalam hidupku. Terimakasih untuk menjadi Ayah, sahabat, pembimbing, penasehat dan segalanya dalam hidupku. 6. Abangku Ida Bagus Putu “Paul” Wismaya dan adikku Ida Ayu Nyoman

“Enyung” Puspadewi atas pengalaman hidup bersama, support, doa dan perasaan penuh cinta diantara kita.

7. Ida Ayu Putu Dewi Anggriyani, pribadi istimewa yang dikaruniakan Tuhan untukku, atas kebersamaan dalam pendewasaan pribadi.

8. Keluarga Pak Yan Sukadana, Mek Ngah, Iluh, Dek Bodrex, Komang terima kasih atas perhatian, cinta, semangat dan segalanya yang tak tergantikan.

(11)

xi

teman – teman KMHD yang yang telah menyemarakkan perjalan hidupku. 11. Berbagai pihak yang tidak dapat penulis sebutkan satu persatu di sini.

Penulis menyadari bahwa dalam karya tulis ini masih terdapat banyak kekurangan dan jauh dari sempurna. Oleh karena itu segala bentuk kritik dan saran serta masukan yang membangun sangat penulis harapkan dari pembaca, demi perbaikan dan kesempurnaan karya tulis ini.

Terima kasih Yogyakarta, 25 Januari 2007

(12)

xii

LEMBAR PENGESAHAN PENGUJI ……….……... iv

HALAMAN PERSEMBAHAN ... v

LEMBAR KEASLIAN KARYA... vi

INTISARI...……….………...vii

ABSTRACT ………..………...…………... viii

KATA PENGANTAR...………... ix

DAFTAR ISI. ………...………... xii

DAFTAR GAMBAR ………....……….. xv

DAFTAR LAMPIRAN ...xvii

BAB I PENDAHULUAN I.1 Judul ... 1

I.2 Latar Belakang ... 1

I.3 Batasan Masalah ... 3

I.4 Tujuan Penelitian ... 4

I.5 Manfaat Penelitian ... 4

I.6 Sistematika Penulisan ... 4

BAB II DASAR TEORI ... 6

II.1 Sandi BCH ... 7

II.1.1 Galois field GF (24) ... 8

(13)

xiii

II.3.1 Sindrom galat ... 14

II.3.2 Koreksi galat ... 15

II..4 Visual C++ ... 18

II.4.1 Sekilas tenyang Visual C++ ... 18

II.4.2 Mengenal lingkungan Visual C++ ... 20

II.4.3 Konsep pemrograman Visual C++ ... 22

II.4.4 Langkah-langkah pembuatan aplikasi ... 23

BAB III RANCANGAN PENELITIAN ... 25

III.1 Penyandian ... 26

III.2 Deteksi dan koreksi kesalahan ... 27

III.3 Diagram Alir Program ... 30

III.3.1 Diagram alir untuk Penyandian ... 30

III.3.1.1 Sub Program diagram alir untuk pengubah ASCII ke biner ... 31

III.3.1.2 Sub Program diagram alir Penyandian register geser ... 32

III.3.2 Diagram alir untuk program pemberian kesalahan ... 34

III.3.3 Diagram alir untuk Program deteksi dan koreksi error ... 35

(14)

xiv

III.3.3.3 Sub Program diagram alir untuk Chien's search

... 39

BAB IV ANALISA DAN PEMBAHASAN ... 41

IV.1 Hasil Akhir dari Perancangan ... 41

IV.2 Cara Kerja Program ... 42

IV.2.1 Penyandian ... ... 42

IV.3 Pemberian Error ... 47

IV.4 Pendeteksian dan koreksi kesalahan ... 50

BAB V KESIMPULAN dan SARAN ... ... 59

V.1 Kesimpulan ... 59

V.2 Saran ... 60 DAFTAR PUSTAKA

(15)

xv

Polinomial ... 13

Gambar 2.3 Blok diagram pengawasandi secara umum ... 14

Gambar 3.1 Rancangan Program Encoding pada sandi BCH ... 26

Gambar 3.2 Diagram Blok Penyandian dengan register geser ... 27

Gambar 3.3 Rangkaian untuk menghitung sindrom sandi BCH (15,7) ... 28

Gambar 3.4 Rangkaian Chien’s searching untuk sandi BCH (15,7) ... 30

Gambar 3.5 Diagram Alir untuk Penyadian ... 31

Gambar 3.6 Sub Program Diagram Alir untuk Pengubah ASCII ke Biner ... 32

Gambar 3.7 Sub Program Diagram Alir untuk penyandian register geser ... 33

Gambar 3.8 Diagram Alir program pemberian Kesalahan ... 34

Gambar 3.9 Diagram Alir untuk Program deteksi dan koreksi galat.... ... 35

Gambar 3.10 Sub program Diagram Alir untuk sindrom galat ... .... ... 36

Gambar 3.11 Sub program Diagram Alir untuk algoritma Berlekemp ... 38

Gambar 3.12 Sub program Diagram Alir untuk Chien’s search ... 39

Gambar 4.1.a Tampilan penyandian sebelum terjadinya proses ... 42

Gambar 4.1.b Tampilan penyandian pengubahan ke biner ... 43

Gambar 4.1.c Tampilan penyandian setelah proses penyandian ... 44

Gambar 4.1.d Tampilan Penyandian untuk menyimpan data ... 46

Gambar 4.2.a Tampilan pemberian error sebelum terjadinya proses ... 47

Gambar 4.2.b Tampilan untuk membuka data ... 48

Gambar 4.2.c Tampilan untuk mengisi letak galat ... 49

Gambar 4.2.d Tampilan setelah pemberian galat ... 49

Gambar 4.2.e Tampilan setelah pemberian galat acak ... 50

Gambar 4.3.a Tampilan Decoder sebelum terjadinya proses ... 51

Gambar 4.3.b Tampilan Decoder setelah data dibuka ... 52

Gambar 4.3.c Tampilan setelah proses dekode ... 52

Gambar 4.3.d Tampilan untuk deteksi dan koreksi tanpa galat... 54

(16)
(17)

xvii

(18)

1 1.1 Judul

Simulasi Penyandi dan Pengawasandi sandi BCH (15,7) dengan Visual C++ (an Encoder and Decoder of Binary BCH Code (15,7) Simulation with Visual C++).

1.2 Latar Belakang

Kemajuan teknologi yang sangat pesat yang terjadi pada akhir-akhir ini merupakan sesuatu yang tidak dapat dihindari dari kehidupan manusia, hal tersebut muncul sebagai akibat dari tuntutan manusia yang menginginkan segala sesuatu secara cepat. Termasuk dalam dunia komunikasi, manusia tidak lagi dibatasi oleh jarak berkat kemajuan dalam dunia komunikasi.

Untuk berkomunikasi manusia menggunakan alat bantu, diantaranya : telepon, faksimili, telepon genggam dan lain sebagainya. Semua sistem ini melakukan proses trasmisi data guna menyampaikan informasi dan bertujuan untuk menyamakan atau menyelaraskan antara data yang dikirim oleh pengirim serta data yang diterima oleh penerima.

(19)

interferensi sehingga perlu dicari suatu sandi yang dapat mengoreksi kesalahan tersebut sehingga data yang dikirim dapat diterima secara benar dan sesuai.

Dalam pengiriman atau transmisi data secara digital dikenal istilah menyandikan suatu data (encoding) yaitu proses pengubahan data yang akan dikirimkan menjadi suatu bentuk sandi atau kode tertentu. Dalam proses transmisi data sering terjadi perbedaan antara data yang dikirim dengan data yang diterima yang disebabkan oleh kegagalan dalam sistem transmisi dan media penyaluran.

Kesalahan dalam transmisi data secara digital didefinisikan sebagai perubahan dari “1” menjadi “0” dan sebaliknya “0” menjadi “1” antara pengirim dan penerima. Kesalahan yang terjadi seperti ini merupakan hal yang fatal bila terjadi dalam sistem pengiriman data. Oleh sebab itu kesalahan seperti ini perlu dideteksi untuk kemudian dikoreksi.

Salah satu sandi yang digunakan untuk mendeteksi dan mengoreksi kesalahan pada pengiriman data adalah sandi BCH (Bose-Chaudhuri-Hocquenghem). Sandi BCH adalah salah satu sandi yang terkemuka untuk pengoreksian galat dalam teori dan prakteknya. Beberapa alasan kenapa sandi ini disebut terkemuka adalah : (1) panjang blok yang digunakan tidak terlalu banyak atau panjang. (2) Relatif sederhana serta teknik penyandian dan pengawasandiannya cukup banyak diketahui. (3) Pengertian yang mendalam pada sandi BCH mungkin adalah salah satu langkah awal untuk mempelajari sandi – sandi yang lainnya.

(20)

polinomial dan register geser, sehingga kesalahan dapat terdeteksi jika polinomial kata sandi yang diterima tidak sama dengan polinomial kata sandi yang dikirim.

Secara garis besar dapat dijelaskan sebagai berikut, bahwa terjadi kesalahan jika sindrom (hasil bagi antara vektor kata sandi dengan generator polinomial) ≠ 0 atau = 1, sedangkan tidak terjadi kesalahan jika sindrom = 0, sehingga bit yang mengalami kesalahan akan diperbaiki, hingga data yang diterima akan sama dengan data yang dikirim.

Dalam tugas akhir ini penulis akan membuat simulasi penyandian sandi siklis yang diimplimentasikan dengan bahasa C. Tahapan dalam pembuatan simulasi ini adalah pembuatan desain tampilan yang menggunakan visual C++ yang memuat tampilan tentang penyandian (encoding); pemberian kesalahan (error) serta tampilan tentang pendeteksian dan koreksi kesalahan.

Pengujian secara keseluruhan dilakukan dengan cara simulasi untuk memasukkan data (input) menggunakan keyboard, sedangkan pada tampilan keluaran (output) menggunakan monitor pada suatu personal computer (PC).

1.3 Batasan Masalah

Pada pelaksanaan dan penyusunan tugas akhir ini, penulis membatasi permasalahan yang ada dan yang akan timbul adalah sebagai berikut:

(21)

1.4 Tujuan Penelitian

Adapun tujuan yang akan dicapai dalam penulisan tugas akhir ini adalah: 1. Menghasilkan suatu program bantu untuk memudahkan pemahaman

tentang sandi BCH (15,7)

2. Memvisualkan suatu metode simulasi untuk mengetahui lokasi kesalahan pada sandi BCH

3. Memanfaatkan program visual C++ dalam mensimulasikan sandi BCH

1.5 Manfaat penelitian

Adapun manfaat yang dapat diambil dalam melakukan penelitian ini adalah:

1. Mempermudah dalam pemahaman penyandian dengan sandi BCH dalam bentuk visual.

2. Langkah awal implementasi ke perangkat keras.

1.6 Sistematika Penulisan

(22)

BAB I PENDAHULUAN

Pada bab pendahuluan ini berisi tentang judul, latar belakang, perumusan masalah, pembatasan masalah, tujuan penelitian, manfaat penelitian dan sistematika penulisan.

BAB II DASAR TEORI

Dasar teori akan menjelaskan tentang penyandian sandi BCH secara keseluruhan termasuk juga pendeteksian dan pengoreksian kesalahan (detection and error correction). Juga disertakan penjelasan tentang Visual C++ yang digunakan dalam perancangan program ini.

BAB III PERANCANGAN PROGRAM

Dalam bab ini dijelaskan juga tentang diagram blok program dan diagram alir dari program tersebut.

BAB IV ANALISIS DAN PEMBAHASAN

Bab IV membahas tentang analisis program encoder, program pemberian kesalahan (error), serta program pendeteksian dan pengkoreksian kesalahan.

BAB V PENUTUP

(23)

BAB II

DASAR TEORI

Sandi pada sistem komunikasi digital merupakan angka biner yang tersusun menjadi deret denyut 0 dan 1. Ada berbagai metode penyandian yang dikenal pada sistem pengiriman data, antara lain Hamming code, linear code , cyclic code dan masih banyak yang lainnya. Proses pengirimaan data diperlihatkan pada gambar 2.1 yang menampilkan diagram kotak sandi secara umum.

Keluaran dari sumber informasi u(X) akan diteruskan ke bagian penyandi yang berfungsi membangkitkan bit-bit paritas. Pada bagian penyandi ini akan menghasilkan keluaran berupa sandi-sandi yang telah dikodekan C(X), selanjutnya data akan ditrasmisikan melalui suatu media penyalur yang sangat peka terhadap kesalahan sehingga sering terjadi data yang diterima oleh pengawasandi R(X) tidak sama dengan data yang dikirim oleh penyandi. Pengawasandi akan mendeteksi dan mengoreksi kesalahan yang terjadi sehingga data yang diterima u'(X) sama dengan data yang dikirim u(X).

(24)

Sandi BCH merupakan bentuk subklas dari sandi siklis dan mempunyai 2 (dua) sifat yang khas yaitu :

1. Penyandian dan perhitungan sindrom dapat dengan mudah diimplementasikan dengan menggunakan register geser umpan balik (feedback shift register).

2. Tiap sandi mempunyai susunan yang banyak jumlahnya dan mampu mengoreksi galatnya sendiri secara menyeluruh.

II.1 SANDI BCH

Sandi BCH merupakan sub bagian dari sandi siklis yang pembangkit polinomial atau generator polinomialnya memiliki akar-akar yang dibangun untuk meningkatkan kemampuaan koreksi kesalahan. Sandi BCH (n,k) yang didefinisikan memiliki kemampuan untuk mengoreksi t galat.

Pada proses pengkoreksian galat untuk mengoreksi sebanyak t bit galat digunakan prinsip-prinsip pada sandi BCH, sebagai berikut :

Panjang blok (n) : n = 2m – 1 (2.1)

Urutan digit cek paritasnya : n – k < mt (2.2) Jarak minimum (dmin) : dmin > 2t + 1 (2.3)

Dan panjang informasi (k) : k = 2m – 1 – r (2.4) t adalah jumlah galat

(25)

Syarat yang harus dipenuhi adalah sebagai berikut :

m(m >3) dan t(t < 2m -1). (2.5)

Perlu diperhatikan bahwa bit paritas r(x) yang dibangkitkan oleh pembangkit polinomial dapat pula berfungsi untuk mengoreksi galat pada bit pesan. Adapun untuk mengoreksi k bit pesan (bit data) diperlukan mt bit paritas :

2m > n + 1, k = n – mt (2.6)

Sandi BCH adalah jenis dari sandi blok karena informasinya dipisah atau dibagi menjadi blok-blok dengan panjang (n) yang telah ditetapkan dan setiap blok disandikan terpisah dan disandi ulang secara bebas untuk blok-blok yang lainnya.

II.1.1 Galois Field GF(24)

Field adalah sebuah letak dari elemen - elemen yang didalamnya dapat dilakukan penjumlahan, pengurangan, perkalian, dan pembagian. Penjumlahan dan perkalian yang dilakukan haruslah memenuhi hukum-hukum asosiatif, komutatif, dan distributif..

Pada Galois Field (2m), jika diketahui m = 4 maka primitive polynomial nya

adalah ( ) 1 4

x x x

p = + + (table dari Primitive Polynomial dapat dilihat pada Lamp. 1.1). Dengan menetapkan

( )

α =1+α+α4 =0diperoleh nilaiα4 =1+α

p .

(26)

Tabel 1. Representasi untuk elemen – elemen dari GF(24)

Representasi Pangkat Representasi Polinomial Representasi 4-Tuple

0 0 (0 0 0 0)

II.1.2 Generator Polinomial

(27)

Multiple) pada GF(2)yang mempunyai α, α2, α3, …,α2t sebagai akar-akarnya.

Generator polinomial ditulis sebagai

g(x) = (x + α1)(x + α2)…(x + αr) (2.7) Dapat dilihat bahwa g(x) ditetapkan oleh akar pangkatnya. Minimal polinomial dari elemen field φi(X) adalah polinomial biner dari pangkat terkecil yang memiliki φi sebagai akar. Oleh karena itu, pembangkit polinomial dapat didefinisikan sebagai

{

( ), ( ), , ( )

}

)

(X LCM 1 x 2 X 2 X

g = φ φ Λ φ t (2.8)

jika i adalah bilangan bulat genap, maka hal ini dapat diekspresikan sebagai perkalian dengan bentuk berikut :

l

i

i= '2 , (2.9)

dengan i’ adalah bilangan ganjil dan l ≥ 1. Maka αi =(αi')2l adalah konjugasi

dari αi' dan oleh karena itu αi dan αi'mempunyai minimal polinomial yang

sama, yaitu :

) ( ) (X i' X

i φ

φ = . (2.10)

(28)

{

( ), ( ), , ( )

}

)

(X LCM 1 X 3 X 2 1 X

g = φ φ Λ φ t . (2.11)

Sepanjang pangkat dari setiap minimal polinomial adalah m atau kurang, pangkat dari g(X) lebih banyak dari mt. maka dari itu, urutan digit cek paritas, n-k, dari sandi-sandi adalah lebih besar atau sama dengan mt.

Dengan demikian, diketahui cara untuk membangun suatu generator polynomial adalah sebagai berikut :

1. Pilih prime polynomial dari derajat m dan bangun GF(qm). 2. Temukan φi(X), minimal polinomial dari αi untuk i = 1,…, 2t.

3. g(X)=LCM

{

φ1(X),φ3(X),Λ ,φ2t1(X)

}

II.2 Penyandian Sandi BCH

Penyandian sandi BCH berfungsi untuk menghasilkan polinomial kata sandi yang didalamnya berisi bit-bit paritas dan bit-bit pesan. Proses penyandian sandi BCH pada bahasan ini adalah menggunakan register geser, tetapi ada baiknya mengetahui dulu proses penyandian secara sistematis, karena nantinya juga akan dipergunakan.

Dalam penyandian sebuah sandi BCH (n,k) dalam bentuk sistematis terdiri atas tahap-tahap berikut:

1. Mengalikan pesan polinomial u(X) dengan Xn-k Xn-ku(X) = u0Xn-k + u1Xn-k+1 + … + uk-1Xn-1

(29)

Dengan r(X) = r0 + r1 X + r2 X2 + … + r n-k-1 Xn-k-1

3. Menjumlahkan sisa hasil bagi r(X) dengan Xn-ku(X) sehingga terbentuk polinomial kata sandi yang sesuai vektor sandi C

C(X) =r(X) + Xn-k u(X)

= r0 + r1X + r2X2 + … + r n-k-1Xn-k-1 + u0Xn-k + u1Xn-k+1 + … + uk-1Xn-1

hingga terbentuk C = ( r0 , r1 , … , r n-k-1 , u0, u1, … , uk-1 ) (n-k) bit paritas k bit pesan

II.2.1 Penyandian Sistematis Sandi BCH dengan Register Geser

Pada penyandian ini masih menggunakan bentuk sistematis dari sandi BCH yang melibatkan perhitungan bit paritas sebagai hasil dari Xn-ku(X) modulo g(X). Pergeseran hanya untuk memberikan tempat kepada bit paritas yang ditambahkan pada bit pesan, untuk menghasilkan vektor sandi dalam bentuk yang sistematis.

(30)

Sambungan umpan balik rangkaian berhubungan dengan koefisien dari polinomial pembangkit, yang dapat ditulis :

g(X) = 1 + g1X + g2X2 + … + gn-k-1 Xn-k-1+ Xn-k (2.11)

Berikut ini mengenai tahap-tahap dalam prosedur penyandian yang menggunakan register geser pada:

1) Saklar 1 tertutup selama k pergeseran pertama, agar bit-bit pesan dapat terkirim ke register geser penyandian n-k tingkat.

2) Saklar 2 pada posisi ke bawah, agar bit-bit pesan terkirim langsung ke register output selama k pergeseran pertama.

3) Setelah pengiriman bit pesan ke-k, saklar 1 terbuka dan saklar 2 berpindah ke posisi atas.

4) n-k pergeseran yang tersisa membersihkan register penyandi dengan memindah bit-bit paritas ke register output.

5) Jumlah total pergeseran sama dengan n, dan isi dari register output adalah polinomial kata sandi r(X) + Xn-ku(X)

Gambar 2.2 Rangkaian Penyandian untuk sandi siklis (n,k) dengan Generator

(31)

II.3 Pengawasandian Sandi BCH

Dari gambar 2.3, dapat dijelaskan dengan singkat bagaimana proses Pengawasandian tersebut berlangsung. Data yang keluar dari hasil penyandian yang kemudian ditransmisikan tentunya akan mendapatkan galat selama proses pengiriman datanya, data ini akan diterima oleh rangkaian pengawasandi untuk memperbaiki galat tersebut. Pertama tama data yang diterima oleh pengawasandi akan diproses dengan perhitungan Sindrom galat (Syndrome Error) sehingga diketahui ada atau tidaknya error dalam data tersebut, selanjutnya data akan diproses pada rangkaian Error Locator Polynomial (ELP) dengan menggunakan algoritma Berlekemp. Setelah lokasi galat ditemukan proses diteruskan dengan memperbaiki galat dengan prosedur Chien,s.

Gambar 2.3 Blok diagram Pengawasandi secara umum

II.3.1 Sindrom Galat

(32)

Sindrom ini dapat diperoleh dengan mensubstitusikan elemen α,α2,Λ,α2tke

Sindrom polinomial dapat dibentuk dari hasil sindrom 2t. Polinomial memiliki semua sindrom-sindrom seperti koefisien-koefisien dan mengikuti : S(x) = S1x + S2x2 + … + S2tx2t.

II.3.2 Koreksi galat

Dalam pendeteksian dan pengoreksian suatu vektor sandi yang diterima mengalami galat atau tidak maka dari pihak penerima data dapat mendesain generator polinomialnya karena mungkin dalam proses pengiriman data generator polinomial tersebut tidak diikut sertakan dalam pengiriman. Berikut ini ada beberapa pola rancangan untuk mendesain generator polinomialnya:

1. Galat Tunggal (Single Error)

g(X) berisi paling sedikit dua syarat yaitu Xn dan 1.Untuk single error, e(X) berasal dari Xi dan g(X) tidak dapat dibagi dengan e(X) tanpa

remainder.

2. Galat Ganda (All double error)

(33)

Xp+1, untuk beberapa p sampai dengan n-1. Dapat dikatakan bahwa untuk double eror syaratnya bahwa g(X) terdiri dari 3 bit atau kurang. 3. Galat Genap

e(X) = (X+1)g(X)q(X), yang berarti bahwa q(X) adalah hasil dari pembagian (tanpa remainder). Apabila diperoleh hasil bahwa X=1, tepat pada sisi kiri suatu nomer genap, sehingga penjumlahan mod-2 adalah 1. Pada sisi kanan, (X+1) akan selalu diberi nilai 0. Dimaksudkan untuk error genap rancangan generatornya berisi (X+1)

4. Galat Penuh (burst) dengan panjang < n dan error burst yang besar. Untuk error burst dengan jarak p < n, e(X) adalah urutan dari

Xm+...+Xm-p+1(Xp-1+...+1) tetapi bukan g(X) dengan pangkat n yang tidak dapat dibagi tanpa remainder.

Ketika galat ditambahkan ke kata sandi atau code word oleh chanel, kita dapat menulis polinomial yang diterima sebagai jumlah dari penyandian sandi polinomial dan sebuah polinomial galat. Itu adalah R(x) = C(x) + e(x), C(x) adalah vektor sandi yang dikirim dan e(x) adalah galat yang dimasukkan oleh chanel. Jika kita menilai R(αj) dimana j rentang pada pangkat urutan akar 2t dari α, kita tahu bahwa C(αj) = 0 oleh batasan BCH, oleh karena itu R(αj) = e(αj),

yang mana akan memberikan lokasi dari error tersebut. Semua perhitungan dari sindrom R(αj), 1 j 2t, adalah dihitung pada GF(2m).

(34)

Berlekamp’s binary BCH decoding Algorithm: 1. Inisialisasi nilai awal :

1

Setelah lokasi galat polynomial (ELP) ditemukan dilanjutkan dengan prosedur chien’s untuk mencari akar – akar dari ELP tersebut.

(35)

t σ σ

σ1, 2,Λ kemudian dimasukkan ke register. Perkalian ini memerlukan

pergeseran n-kali. Pada akhir pergeseran ke-l register akan berisi

tl ditemukan sehingga hasilnya adalah kebalikan (inverse) dari data tersebut.

II.4 Visual C++

II.4.1 Sekilas tentang Visual C++

Visual C++ merupakan perangakat pengembangan aplikasi yang menggunakan C++ sebagai bahasa pemrograman dan dapat digunakan untuk membuat aplikasi berbasis Windows maupun berbasis Teks (aplikasi konsol). Perangkat ini menyediakan lingkungan yang dinamakan IDE (Integrated Development Environment) yang memungkinkan pemakai membuat, mengkompilasi, menggabungkan, dan menguji program dengan cepat dan mudah.

Beberapa komponen penting dalam Visual C++ adalah sebagai berikut :

1. Editor

(36)

akan memberi warna tersendiri terhadap kata-kata seperti itu. Keuntungannya, program menjadi lebih mudah dibaca dan jika terjadi kesalahan dalam penulisan program akan lebih cepat terdeteksi.

2. Kompiler

Kompiler adalah perangkat lunak yang berfungsi untuk menterjemahkan kode sumber (source code) menjadi bentuk bahasa mesin. Piranti ini dapat memberikan pesan-pesan kesalahan jika terjadi kesalahan kaidah penulisan program yang terdeteksi pada tahap proses kompilasi. Hasil kompilasi berupa kode objek (object code) yang disimpan dalam berkas berekstansi .obj.

3. Linker

Linker adalah perangkat lunak yang berfunsi menggabungkan berbagai modul yang dihasilkan oleh compiler dan modul kode dari berbagai pustaka C++, serta membentuk menjadi kode yang dapat dieksekusi. Sebagaimana kompiler, Linker juga dapat mendeteksi kesalahan. Kesalahan yang terjadi sewaktu proses Linking yang biasa desebabkan oleh adanya bagian pustaka atau bagian program yang tidak ditemukan.

4. Pustaka

(37)

kuadrat dan mengakses database. Pustaka-pustaka yang tersedia antara lain berupa :

a) Standard C++ library (berisi semua rutin yang tersedia pada kebanyakan compiler C++)

b) Microsoft Foundation Classes and Templates (MFC&T), yang berkaitan dengan pemrograman Windows.

5. AppWizard

Perangkat ini bermanfaat untuk membangkitkan suatu kerangka dasar aplikasi Windows yang sangat memudahkan pemrogram untuk membuat aplikasi Windows.

6. ClassWizard

Perangkat ini berfungsi untuk mengedit kelas-kelas yang dibangkitkan oleh APPWizard.

II.4.2 Mengenal lingkungan Visual C++

(38)

Menu bar

Menampilkan menu perintah untuk pengembangan aplikasi. Selain perintah standar windows seperti File, Window, Help, Edit dan View terdapat juga menu-menu khusus dalam pemrogramannya seperti halnya Project, Build, Layout.

Tool Bars

Menyediakan akses cepat pada perintah-perintah yang populer. Secara default (yang ditetapkan oleh pembuat program) tool bar standar akan ditampilkan. Context Menu

Berisi short-cuts untuk keperluan yang sering diminta ToolBox

Merupakan jendela tempat icon-icon yang tersedia untuk membuat antar muka dengan cara drag-drop.

Jendela Project Workspace

Jendela tersebut berisi tiga buah tab, yaitu :

1. Tab Class View, yang berguna melihat maupun untuk menyunting kelas-kelas dalam proyek.

(39)

3. Tab File View, yang memungkinkan anda melihat atau menyunting berkas-berkas proyek. Misalnya untuk melihat berkas yang berisi definisi kelas.

Jendela kode C++

Jendela berisi kode-kode dalam bahasa pemrograman C++.

II.4.3 Konsep Pemrograman Visual C++

Untuk menguasai pengembangan aplikasi harus memahami beberapa konsep kunci yang mendasari bagaimana Visual C++ bekerja. Sebagai bahasa pemrograman untuk mengembangkan aplikasi visual, perlu diketahui juga sistem berbasis visual yaitu Microsoft Windows.

Bayangkan jendela (Window) sebagai suatu daerah persegi dengan batasan-batasannya, misalnya jendela Explorer, jendela Notepad atau lainnya. Dalam jendela tersebut dapat dijumpai icon, menu bar, kotak teks, kotak perintah atau sebagainya. Sistem kemudian akan memonitor setiap jendela untuk menandai adanya aktifitas atau event.

(40)

tersebut (misalnya menggambar ulang jika sebelumnya tertutup oleh jendela lain yang telah selesai beroperasi).

Dapat dibayangkan bahwa dengan berbagai kombinasi jendela, kejadian dan pesan yang jumlahnya bisa puluhan atau lebih, tentunya komputer akan lebih banyak mengeluarkan energi memonitor dan mengaturnya (untuk itulah sistem operasi window memerlukan proses berkecepatan tinggi). Untunglah visual basic dapat mengisolasi tahapan-tahapan tersebut dan menghindarkan kita dalam menangani proses low-level tersebut. Banyak pesan ditangani langsung oleh visual basic dan menyisakan event yang diperlukan untuk menjalankan aplikasi secara mudah. Hal tersebut memungkinkan untuk membuat aplikasi yang berdaya guna tanpa harus berhubungan dengan hal lain yang tidak diperlukan.

II.4.4 Langkah-langkah Pembuatan Aplikasi

Ada empat tahap utama yang diperlukan untuk membuat aplikasi Window dengan Visual C++, yaitu:

a. Membuat antar muka visual dengan objek-objek siap pakai buatan Microsoft. Selain mempermudah pemrograman juga menjamin bahwa aplikasi yang dibuat compatible dengan Windows.

b. Mengubah nilai properti objek agar sesuai dengan aplikasi yang dibuat.

(41)
(42)

BAB III

PERANCANGAN PROGRAM

Pada perancangan ini disesuaikan dengan batasan masalah yang diharapkan yaitu pemberian galat maksimal 2 bit sehingga dari batasan masalah tersebut akan mempengaruhi notasi (n,k) yang dibentuk pada proses penyandian. Dengan pemberian galat 2 bit digunakan parameter sandi BCH sebagai berikut : Panjang blok : n=2m 1=24 1=15

Urutan digit cek paritasnya : n – k < mt = 15 – k < 4.2; k < 7 Jarak minimum : dmin > 2t + 1 = dmin > 2.2 + 1; dmin > 5

Generator Polinomial :

( )

1 4 6 7 8

x x x x x

g = + + + +

Galos Field : GF(24)

Dengan syarat yang harus dipenuhi adalah sebagai berikut : m(m >3) dan t(t < 2m -1).

Perhitungan diatas menghasilkan nilai (n,k) sebesar (15,7) sehingga dapat dijelaskan bahwa nilai untuk panjang blok adalah 15 dan untuk nilai bit pesan (k) maksimum atau sama dengan 7. Untuk nilai r diperoleh nilainya adalah 8.

(43)

Gambar 3.1 Rancangan program penyandian pada sandi BCH

Pada perancangan ini, diambil suatu inisiatif untuk memanfaatkan program visual C++. Masukan data adalah dari Keyboard berupa teks. Untuk lebih jelasnya berikut ini dipaparkan tentang blok-blok diagram rancangan program.

III.1 Penyandian

Secara garis besar proses penyandian dapat dilihat dari gambar 3.2. Langkah-langkah penyandian dimulai dari pembuatan vektor pesan yang diperoleh dari pesan yang dijumlahkan dengan banyaknya jumlah generator polinomial. Berikut ini mengenai tahap-tahap dalam prosedur penyandian yang menggunakan register geser, yaitu :

(44)

pengiriman bit pesan ke-7, saklar 1 terbuka dan saklar 2 berpindah ke posisi atas. 8 pergeseran yang tersisa membersihkan register penyandi dengan memindah bit-bit paritas ke output register. Jumlah total pergeseran sama dengan n = 15, dan isi dari register output adalah polinomial kata sandi r(X) + Xn-ku(X)

Gambar 3.2 Diagram Blok Penyandian dengan register geser Dari proses diatas akan dihasilkan vektor sandi C

C(X) =r(X) + Xn-k u(X)

= r0 + r1X + r2X2 + … + r n-k-1Xn-k-1 + u0Xn-k + u1Xn-k+1 + … + uk-1Xn-1

= r0 + r1X + r2X2 + … + r7X7 + u0X8 + u1X9 + … + u6X14

hingga terbentuk C = ( r0 , r1 , … , r7 , u0, u1, … , u6)

(n-k) bit paritas k bit pesan

III.2 Deteksi dan koreksi kesalahan

Penjelasan mengenai deteksi dan koreksi kesalahan ini dimulai dari perhitungan sindrom galat kemudian sindrom tersebut akan diproses untuk mencari lokasi galat dan memperbaikinya.

Gambar 3.3 adalah gambar rangkaian untuk menghitung sindrom sandi BCH (15,7), rangkaian ini menggunakan dua buah register geser.

(45)

( ) 4 1 X =1+x+x

φ

( ) 2 3 4

3 X =1+x+x +x +x φ

Gambar 3.3Rangkaian untuk menghitung Sindrom sandi BCH (15,7)

(46)

sedangkan register B akan menghasilkan S3. Karena jumlah pesan yang akan diproses adalah 15 bit, maka diperlukan 15 kali pergeseran untuk rangkaian ini. Setelah pergeseran yang ke-15, register A akan menghasilkan :

(

0 1 2 3

) (

1 3

) (

2 3

)

3

Sindrom galat ini kemudian akan diproses dengan menggunakan algoritma Berlekemp untuk mendapatkan lokasi galat polinomialnya (ELP). Setelah menemukan lokasi galat polynomial σ(x), proses akan diteruskan dengan prosedur Chien’s untuk memperoleh akar – akar dari lokasi galat polinomial

Gambar 3.4 adalah gambar rangkaian Chien,s searching untuk sandi BCH (15,7). Lokasi error polynomial σ1,σ2 yang ditemukan sebelumnya masukan

dalam register. Register A berisi σ1 dan register B berisi σ2. Proses ini

memerlukan pergeseran sebanyak 15 kali. Pada akhir pergeseran ke-l register a0 akan berisi σ αl

1 dan b0 berisi σ2α2l . Hasil ini kemudian dijumlahkan dengan 1

sehingga menjadi l 2l 2 1

1+σ α +σ α . Jika hasil penjumlahan adalah 0, maka α15−l

adalah nilai lokasi errornya. Jika sebaliknya, maka α15−l bukanlah nilai lokasi

galat. Kemudian dilanjutkan dengan menjumlahkan tiap output dari masing – masing register (a1 + b1, a2 + b2, a3 + b3). Hasil penjumlahan kemudian

(47)

dengan me-NOT kan data tersebut, maka pada output gerbang OR ditambahkan sebuah gerbang NOT.

α

dengan Perkalian

2 dengan

Perkalian α

Gambar 3.4 Rangkaian Chien,s searching untuk sandi BCH (15,7) III.3 Diagram Alir Program

Diagram alir program secara keseluruhan dibagi menjadi 3 buah program yaitu program penyandi, program pemberian kesalahan dan program deteksi dan koreksi kesalahan.

(48)

Dari gambar 3.5 berikut ini akan tertampil sub program diagram penyandian yang dimulai dengan pesan masukan dalam bentuk ASCII diproses dan diubah ke bentuk biner. Maka pesan yang akan terproses untuk membentuk vektor sandi dalam bentuk biner ( 1 dan 0). Pesan yang diterima akan disandikan dengan menggunakan metode register geser. Setelah proses penyandian selesai, data akan disimpan dan bisa dipanggil apabila diperlukan.

Gambar 3.5 Diagram alir untuk Penyandian

(49)

Gambar sub program diagram alir untuk pengubah ASCII ke biner yang secara umum dijelaskan bahwa pesan masukan dalam bentuk ASCII diproses dan diubah ke bentuk heksa terlebih dahulu setelah diproses dalam heksa maka ditampilkan dalam bentuk biner. Maka pesan akan terproses untuk membentuk vektor sandi dalam bentuk biner ( 1 dan 0).

Gambar 3.6 Sub Program diagram alir untuk Perubah ASCII ke Biner

III.3.1.2 Sub Program diagram alir untuk Penyandian Register geser

Untuk Penyandian dengan register geser ini vektor sandi terbentuk dari hasil pergeseran pada register geser. Yaitu isi register terakhir dari suatu pergeseran sebagai bit paritasnya ditambah dengan pola vektor sandi yang berasal dari kerangka vektor sandi yang merupakan hasil perkalian dari u(x).Xn-k .

(50)

pada suatu rangkaian register geser. Pesan dalam bentuk biner akan diproses satu persatu hingga pesan tersebut habis.

(51)

Program akan meginisialisasi register dan parameter lain (G(x), H, U(x), Y) yang akan digunakan dalam proses perhitungan register r untuk tiap blok pesan. Parameter H digunakan untuk menghitung register r saat Y = 1. Parameter Y menunjukkan nilai hasil proses Uz(a) + r(7). U(z) sebagai pesan ke-z (z = 1

sampai n). U(x) sebagai bit pesan (1 atau 0). Hasil penyandian akan ditampilkan setelah semua blok pesan selesai diproses.

III.3.2 Diagram alir untuk Program pemberian kesalahan

(52)

Gambar 3.8 Diagram alir program pemberian kesalahan. III.3.3 Diagram alir untuk Program deteksi dan koreksi galat

(53)

Gambar 3.9 Diagram alir program deteksi dan koreksi galat

(54)

tidak dapat diperbaiki. Apabila jumlah galat lebih kecil atau sama dengan t maka data akan deperbaiki dan diakhiri dengan menampilkan data yang sudah diperbaiki tersebut.

III.3.3.1 Sub Program diagram alir untuk Sindrom galat

( ) ( ) ( )

Gambar 3.10 Sub Program diagram alir untuk Sindrom galat

Pada gambar 3.10 dapat diketahui bahwa progam diawali dengan pemanggilan data yang diterima yaitu data dari proses penyandian dan pemberian galat, Z(x) = U(x) + e(x). Dilanjutkan dengan mengeset minimal polinomial dari

( )

, ,

( )

dimana 1, ,2 .

α Kemudian dilakukan

(55)

dengan minimal polinomial φi

( )

x ,Λ ,φ2t

( )

x . Sindrom galat didapat dari hasil pensubstitusian αikebi(x). Hasil Sindrom galat akan disimpan untuk keperluan berikutnya.

III.3.3.2 Sub Program diagram alir untuk Algoritma Berlekemp

Dari gambar 3.11 dapat diketahui bahwa program dimulai dengan menginisialisasi nilai awal lokasi galat polinomial (ELP) (0)( )

x

σ , index k, panjang register geser L, auxilary polinomial T(x), kemudian dilanjutkan dengan menghitung galat dengan sindrom dk, jika nilai dk = 0 maka akan ditanyakan

apakah nilai k <2t, jika ya maka akan dilakukan perhitungan untuk nilai T(x) yang baru dan lokasi galat polinomial (ELP) ( )( )

x

k

(56)

( )0( )=1

(57)

III.3..3 Sub Program diagram alir untuk Chien’s Search

Dari gambar 3.11 dapat diketahui bagaimana Algorima Berlekemp dapat menemukan lokasi galat polinomial (ELP). Selanjutnya lokasi galat polinomial ini akan diproses oleh program Chien’s untuk menemukan akar – akar dari lokasi galat polinomial tersebut.

Gambar 3.12 Sub Program diagram alir untuk Chien’s Search

(58)
(59)

BAB IV

ANALISA DAN PEMBAHASAN

IV. 1 Hasil akhir dari perancangan

Pada pembahasan berikut ini akan menjelaskan tentang langkah-langkah pemilihan fungsi pada PC yang digunakan dalam pembuatan program penyandian.

Program lainnya adalah pemberian kesalahan dilakukan dengan 2 (dua) pilihan pemberian kesalahan yang terdiri dari pemberian kesalahan secara acak dan pemberian kesalahan secara manual. Selain program penyandian dan pemberian kesalahan juga dibahas tentang pendeteksian dan koreksi kesalahan, program ini untuk mengetahui ada tidaknya kesalahan dan mengoreksi kesalahan dari pesan yang diterima.

(60)

IV.2 Cara Kerja Program

IV.2.1 Penyandian

Tampilan penyandian gambar 4.1.a. tersedia sebuah textbox yang digunakan untuk mengisi masukan data dari keyboard berupa teks (maksimal 50 karakter). Perhatikan gambar 4.1.a merupakan tampilan penyandian sebelum terjadinya proses dibawah ini:

Gambar 4.1.a. Tampilan penyandian sebelum terjadinya proses.

(61)

Pada proses ini data yang kita masukkan akan diubah dalam bentuk biner terlebih dahulu agar proses penyandian sandi BCH (15,7) dapat dilanjutkan.

Gambar 4.1.b. Tampilan penyandian pengubahan ke biner.

(62)

Gambar 4.1.c. Tampilan penyandian setelah proses penyandian. Perhitungan secara manual dari gambar 4.1.c adalah sebagai berikut :

[

]

(63)

Diketahui :

1. Mengalikan M(x) dengan n k

x

(64)

3. untuk mendapatkan T(x), tambahkan r(x) dengan n k

x − M(x)

00011 1011001010

1011001 00011

0000000010 ) ( ) ( )

(

=

+ =

+ =xM x r x

x

T n k

Pada setiap proses penyandian ini akan menghasilkan 15 bit biner (nilai n), dengan demikian jumlah bit pesan tersandi yang dihasilkan adalah nilai n dikalikan dengan jumlah proses yang dilakukan (j).

Setelah proses penyandian selesai dilakukan, tekan tombol simpan maka akan muncul tampilan seperti gambar 4.1.d. Pesan tersandi disimpan terlebih dahulu untuk kemudian dipanggil lagi pada program pemberian galat atau pengawasandi.

(65)

IV.3 Pemberian galat

Pada tampilan pemberian galat ini terdapat beberapa teksbox yang harus diisi oleh pengguna, data yang akan diberikan galat harus dibuka terlebih dahulu sebelum teksbox letak galat diisi. Gambar 4.2.a. adalah gambar tampilan pemberian galat, apabila tombol Buka File ditekan maka akan keluar tampilan seperti gambar 4.2.b.

(66)

Gambar 4.2.b. Tampilan untuk membuka data.

Setelah data yang akan diberi galat tertampil maka pengguna dapat mengisikan letak atau posisi galat yang diinginkan, seperti yang terlihat pada gambar 4.2.c. Apabila terjadi galat ganda atau nilai letak galat 1 = letak galat 2 = letak galat 3 maka letak galat yang dipakai adalah letak galat 2. Apabila nilai letak galat lebih besar dari jumlah bit pesan maka akan dianggap tidak diberikan galat.

(67)

Gambar 4.2.c. Tampilan untuk mengisi letak galat.

(68)

Pemberian galat juga dapat dilakukan dengan cara pemberian galat secara acak, seperti yang terlihat pada gambar 4.2.e. Prosesnya adalah saat tombol buat galat acak ditekan maka program buat galat acak akan memberikan galat pada pesan asli secara acak disesuaikan dengan batas maksimal dari jumlah bit pesan asli. Apabila terjadi galat ganda atau nilai letak galat 1 = letak galat 2 maka letak galat yang dipakai adalah letak galat 2.

Gambar 4.2.e. Tampilan setelah pemberian galat acak. IV.4 Pendeteksian dan Koreksi Kesalahan

(69)

telah didekode dan letak atau posisi galat dari pesan biner tersebut. Proses akhir dilakukan dengan menekan tombol Ubah ke ASCII yang akan menampilkan karakter ASCII dari data yang telah didekode.

Berikut ini dapat dilihat tampilan-tampilan dari program pengawasandi mulai dari awal (sebelum tombol Buka File ditekan, gambar 4.3.a). Setelah tombol Buka File ditekan, pilih data yang akan ditampilkan maka akan terlihat tampilan seperti gambar 4.3.b.

(70)

Gambar 4.3.b. Tampilan pengawasandi setelah data dibuka.

(71)

Setelah tombol ‘Decode’ ditekan akan terlihat tampilan seperti gambar 4.3.c., tampilan ini memperlihatkan pesan biner yang telah di dekode dan letak galat dari data tersebut.

Proses Decode dilakukan dengan cara mengambil data dari input tersandi perblok atau per-15 bit (nilai n). Jika dalam satu blok tidak terdapat galat maka akan terlihat tampilan seperti gambar 4.3.d.

(72)

Gambar 4.3.d.2. Tampilan hasil pengawasandian karakter a

Gambar 4.3.d. Tampilan untuk deteksi dan koreksi tanpa galat Jika dalam satu blok terdapat 1 galat, maka akan terlihat tampilan seperti gambar 4.3.e. Jika dalam satu blok terdapat 2 galat, maka akan terlihat tampilan seperti gambar 4.3.f. Dalam hal ini program pengawasandi dapat bekerja dengan benar.

(73)

aslinya,dan tampilan letak galat juga akan salah (karakter ‘a’ akan diterjemahkan menjadi karakter C). Hal ini dikarenakan keterbatasan kemampuan dari sandi BCH (15,7) yang hanya mampu mengoreksi galat maksimal 2 bit.

(74)

Gambar 4.3.e.2. Tampilan hasil pemberian galat pada bit 1

Gambar 4.3.e.3. Tampilan hasil pengawasandian karakter a.

(75)

Gambar 4.3.f.1. Tampilan hasil pemberian galat pada bit 1 dan 2.

Gambar 4.3.f.2. Tampilan hasil pengawasandian karakter a.

(76)

Gambar 4.3.g.1. Tampilan hasil pemberian galat pada bit 1,2 dan 3.

Gambar 4.3.g.2. Tampilan hasil pengawasandian karakter a

(77)

. Jika galat yang diberikan lebih dari 2 dan letaknya diluar blok maka pengawasandi tidak akan dapat mendeteksi maupun mengoreksinya,seperti yang tertampil pada gambar 4.3.h. Hal ini dikarenakan keterbatasan kemampuan dari sandi BCH (15,7) yang hanya mampu mengoreksi galat maksimal 2 bit

(78)

Gambar 4.3.h.2. Tampilan hasil pemberian galat pada bit 1,2 dan 20.

Gambar 4.3.h.3. Tampilan hasil pengawasandian karakter ab

(79)

BAB V

KESIMPULAN DAN SARAN

V.1 Kesimpulan

Dari Hasil Perancangan dan penelitian yang telah dilakukan, dapat diperoleh suatu kesimpulan secara umum tentang simulasi sandi BCH sebagai media pembelajaran, yaitu:

1. Pada sandi BCH (15,7), program penyandi mampu bekerja dengan benar (kesalahan 0 %).

2. Pada sandi BCH (15,7), program pemberi galat yang lebih besar dari 2 bit untuk maksimal 50 karakter atau satu bingkai.

3. Pada sandi BCH (15,7), program pengawasandi mampu mendeteksi dan mengoreksi galat yang lebih kecil atau sama dengan 2 bit dengan benar untuk satu bingkai atau maksimal 50 karakter (kesalahan 0 %).

4. Pada sandi BCH (15,7), program pengawasandi mampu mendeteksi tapi tidak dapat mengoreksi galat yang lebih besar dari 2 bit yang letaknya dalam satu blok.

(80)

V.2 Saran

Dari program, yang telah dibuat dan diselesaikan, masih banyak terdapat kekurangan. Untuk menghindari hal – hal yang sama maka penulis menyarankan:

1. Tugas ahkir ini merupakan sistem komunikasi data, ada baiknya jika digunakan lebih dari 1 komputer yang mana satu komputer sebagai pengirim dan komputer yang lainnya sebagai penerima.

2. Karena pada tugas ahkir penulis mengunakan program ini sebagai media pembelajaran maka, akan lebih baik jika tiap – tiap perubahan pada setiap proses yang terjadi baik pada proses penyandian, pemberian galat dan deteksi dan koreksi kesalahan ditampilkan secara jelas dan terperinci. 3. Untuk memaksimalkan kerja dari proses penyandian, deteksi dan koreksi

kesalahan pada suatu sandi BCH, maka besar notasi (n,k) dapat ditambah, disini penulis menggunakan notasinya adalah (15,7)

(81)

Bernand Sklar. “DIGITAL COMUNICATIOAN”. P T R Prentice hall Englewood

Cliffs, New Jersey 07362

Richard E. Blahut. “Theory and Practice of Error Control Codes”. Addison-Wesley

Publishing Company.

Shu Lin / Daniel J. Costello, Jr. “Error Control Coding : Fundamental and

(82)

#include "stdafx.h" #include "Encoder.h" #include "EncoderDlg.h" #include <conio.h> #include <iostream.h> #include <math.h> #include <fstream.h> #include <stdio.h> #include <stdlib.h> #ifdef _DEBUG

#define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif

//Variable untuk Sandi BCH

int m;//derajatnya int p[21];

int alpha_to[1048576], index_of[1048576], g[10]; //utk gen pol int recd[1048576], bb[548576];

int seed;

int numerr, errpos[1024], decerror = 0;

char nilai_gen_poly[]={' '}; //untuk output generator polynomial

char w[]={' '}; //untuk output

char w2[750]={' '}; int data[8];

int data2[400];

int length; //panjang Sandi BCH

int t; //kemampuan koreksi bit

int d; //=((2*t)+1); int k;

(83)

//{{AFX_DATA_INIT(CEncoderDlg) m_Masukan = _T("");

m_Biner = _T(""); m_Output = _T(""); m_JumlahBiner = 0; m_JumlahHuruf = 0; m_JumlahSandi = 0;

m_Nilai_Gen_Poly = _T(""); //}}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CEncoderDlg::DoDataExchange(CDataExchange* pDX) {

CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CEncoderDlg)

DDX_Text(pDX, IDC_EDIT_MASUKAN, m_Masukan); DDV_MaxChars(pDX, m_Masukan, 50);

DDX_Text(pDX, IDC_EDIT_BINER, m_Biner); DDV_MaxChars(pDX, m_Biner, 400);

DDX_Text(pDX, IDC_EDIT_OUTPUT, m_Output); DDV_MaxChars(pDX, m_Output, 750);

DDX_Text(pDX, IDC_EDIT_JUMLAH_BINER, m_JumlahBiner); DDX_Text(pDX, IDC_EDIT_JUMLAH_HURUF, m_JumlahHuruf); DDX_Text(pDX, IDC_EDIT_JUMLAH_SANDI, m_JumlahSandi); DDX_Text(pDX, IDC_NILAI_GEN_POLY, m_Nilai_Gen_Poly); DDV_MaxChars(pDX, m_Nilai_Gen_Poly, 9);

(84)

BOOL CEncoderDlg::OnInitDialog() {

CDialog::OnInitDialog();

// Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog

SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here

return TRUE; // return TRUE unless you set the focus to a control }

// If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework.

void CEncoderDlg::OnPaint() {

if (IsIconic()) {

CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle

int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon

dc.DrawIcon(x, y, m_hIcon); }

(85)

// The system calls this to obtain the cursor to display while the user drags // the minimized window.

HCURSOR CEncoderDlg::OnQueryDragIcon() {

return (HCURSOR) m_hIcon; }

Program untuk Tombol simpan, otomatisnya file dengan ext *.txt

void CEncoderDlg::OnButtonSimpan() {

char pesan[750]=(" "); //pesan tempat int cc,dd;

for(cc=0;cc<m_JumlahSandi;cc++) {

pesan[cc]=m_Output.GetAt(cc); //char di m_Output diambil }

dd=m_JumlahSandi;

CFileDialog dlg(FALSE,"txt","*.txt"); //panggil menu save as dg default *.txt

if(dlg.DoModal()==IDOK) {

CFile

file(dlg.GetPathName(),CFile::modeCreate|CFile::modeWrite); //modenya create, file.Write((LPCTSTR)pesan,dd);

//tindas file lama }

}

(86)

UpdateData(TRUE); m_Biner.Empty();

//kosongkan s, spy bisa dipakai yg lainya lagi int kosong;

for(kosong=0;kosong<=400;kosong++) {

s[kosong]=NULL; }

UpdateData(FALSE); UpdateData(TRUE); int z,y;

z=m_Masukan.GetLength(); //jumlah huruf masukan m_JumlahHuruf=z;

for(y=0;y<z;y++) {

char f;

UpdateData(TRUE);

f=m_Masukan.GetAt(y); //ambil huruf satu-satu UpdateData(FALSE);

b=int(f); //ubah ke ascii

s1=y*7; //7 bit

UbahBiner(); //jadikan biner }

UpdateData(TRUE);

strncpy(m_Biner.GetBuffer(400),s,400); //tampilkan biner ke m_Biner m_Biner.ReleaseBuffer();

m_JumlahBiner=m_Biner.GetLength(); //update jumlahnya m_JumlahHuruf=m_Masukan.GetLength();

(87)

{

unsigned int bit0: 1; unsigned int bit1: 1; unsigned int bit2: 1; unsigned int bit3: 1; unsigned int bit4: 1; unsigned int bit5: 1; unsigned int bit6: 1; unsigned int bit7: 1; };

union UByte {

unsigned char byte; InfoBit bit;

};

UByte bilangan;

int n[7]; //Hasil bit yg berupa array int

bilangan.byte=b; //dirubah ke bit n[0]=bilangan.bit.bit0;

n[1]=bilangan.bit.bit1; //ini yg diambil n[2]=bilangan.bit.bit2;

n[3]=bilangan.bit.bit3; n[4]=bilangan.bit.bit4; n[5]=bilangan.bit.bit5; n[6]=bilangan.bit.bit6; unsigned int c=0;

for (c=0;c<=6;c++) {

if(n[c]!=1)

s[c+s1]='0'; //dirubah ke char agar bisa ditampilkan per char

else

s[c+s1]='1'; }

(88)

for(int kosong2=0;kosong2<=750;kosong2++) {

w2[kosong2]=NULL; //w2 dikosongkan } //agar jika ditekan lagi datanya yg baru

UpdateData(TRUE);

int jum=m_JumlahHuruf; //ambil jumlah hruruf m_Output.Empty();

m_JumlahSandi=m_Output.GetLength(); UpdateData(FALSE);

m=4; //derajat length=15; //panjang sandi

t=2; //kemampuan koreksi error read_p();

generate_gf();

gen_poly(); //generator polynomial char a;

int binsize=m_JumlahBiner; for (int i2=0;i2<binsize-1;i2++) {

UpdateData(TRUE);

a=m_Biner.GetAt(i2); //ambil data dari text biner UpdateData(FALSE);

if (a!='1')

data2[i2]=0; //ubah ke int else

data2[i2]=1; }

(89)

Sandikan(); //data biner disandikan per 7

for (i=0;i<length;i++) {

if (recd[i]!=1) //hasil pesan tersandi w2[(i2*15)+i]='0'; //dimasukkan ke char array

else //utk dicopykan ke tampilan

w2[(i2*15)+i]='1'; }

}

UpdateData(TRUE);

strncpy(m_Output.GetBuffer(750),w2,750); //tampilkan pesan tersandi ke output

m_Output.ReleaseBuffer();

m_JumlahSandi=m_Output.GetLength(); //update jumlahnya UpdateData(FALSE);

int gg;

for (gg=0;gg<=9;gg++) {

if(g[gg]!=1) //ambil data GF

nilai_gen_poly[gg]='0'; //buat ke char array else

nilai_gen_poly[gg]='1'; }

UpdateData(TRUE); //tampilkan gen poly

strncpy(m_Nilai_Gen_Poly.GetBuffer(9),nilai_gen_poly,9); m_Nilai_Gen_Poly.ReleaseBuffer();

UpdateData(FALSE);

(90)

int i, ninf;

printf("p(x) = "); n = 1;

Program Galois Field

void CEncoderDlg::generate_gf() {

(91)

alpha_to[m] ^= mask; mask <<= 1;

}

index_of[alpha_to[m]] = m; mask >>= 1; index_of[alpha_to[i]] = i;

}

index_of[0] = -1; }

Program Generator Polinomial

void CEncoderDlg::gen_poly() {

register int ii, jj, ll, kaux;

register int test, aux, nocycles, root, noterms, rdncy;

(92)

//cek cycle sets lama

rdncy += size[min[kaux]]; kaux++; zeros[kaux] = cycle[min[ii]][jj]; kaux++;

}

(93)

}

//hitung generator poly g[0] = alpha_to[zeros[1]];

g[1] = 1; // g(x) = (X + zeros[1]) initially for (ii = 2; ii <= rdncy; ii++) {

g[ii] = 1;

for (jj = ii - 1; jj > 0; jj--) if (g[jj] != 0)

g[jj] = g[jj - 1] ^ alpha_to[(index_of[g[jj]] + zeros[ii]) % n]; else

g[jj] = g[jj - 1];

g[0] = alpha_to[(index_of[g[0]] + zeros[ii]) % n]; }

//g[] = gen poly keluar:

; }

void CEncoderDlg::Sandikan() {

//Encode Data register int i, j; register int feedback;

for (i = 0; i < length - k; i++)

bb[i] = 0; //pembagian dg digeser

for (i = k - 1; i >= 0; i--) {

feedback = data[i] ^ bb[length - k - 1];

if (feedback != 0) { //cek sisa

for (j = length - k - 1; j > 0; j--) if (g[j] != 0)

bb[j] = bb[j - 1] ^ feedback; else

(94)

} }

for (i = 0; i < length - k; i++) //masukan data recd[i] = bb[i];

for (i = 0; i < k; i++)

recd[i + length - k] = data[i]; }

void CEncoderDlg::OnButtonTentang() //untuk tombol tentang {

MessageBox("Software Simulasi Penyandian BCH \ndengan Visual C++ \noleh Bagus",

"Tentang", MB_OK|MB_ICONINFORMATION); //message error lebih dari 2 // TODO: Add your control notification handler code here

}

Pembuat Error

// ErrorMakerDlg.cpp : implementation file //

#include "stdafx.h" #include "ErrorMaker.h" #include "ErrorMakerDlg.h" #include <stdlib.h>

#include <time.h> #ifdef _DEBUG

#define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif

(95)

CErrorMakerDlg::CErrorMakerDlg(CWnd* pParent /*=NULL*/) : CDialog(CErrorMakerDlg::IDD, pParent)

{

//{{AFX_DATA_INIT(CErrorMakerDlg) m_LetakError1 = 0;

m_LetakError2 = 0; m_PesanAsli = _T(""); m_PesanDierror = _T(""); m_JumlahBitPesanAsli = 0; m_JumlahBitPesanDierror = 0; m_Keterangan = _T(""); m_LetakError3 = 0; m_LetakErrorAcak1 = 0; m_LetakErrorAcak2 = 0; //}}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CErrorMakerDlg::DoDataExchange(CDataExchange* pDX) {

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CErrorMakerDlg)

DDX_Text(pDX, IDC_EDIT_LETAK_ERROR_1, m_LetakError1); DDX_Text(pDX, IDC_EDIT_LETAK_ERROR_2, m_LetakError2); DDX_Text(pDX, IDC_EDIT_PESAN_ASLI, m_PesanAsli);

DDV_MaxChars(pDX, m_PesanAsli, 750);

DDX_Text(pDX, IDC_EDIT_PESAN_DIERROR, m_PesanDierror); DDV_MaxChars(pDX, m_PesanDierror, 750);

DDX_Text(pDX, IDC_EDIT_JUMLAH_BIT_PESAN_ASLI, m_JumlahBitPesanAsli);

DDX_Text(pDX, IDC_EDIT_JUMLAH_BIT_PESAN_DIERROR, m_JumlahBitPesanDierror);

DDX_Text(pDX, IDC_EDIT_KETERANGAN, m_Keterangan); DDX_Text(pDX, IDC_EDIT_LETAK_ERROR_3, m_LetakError3); DDX_Text(pDX, IDC_EDIT_LETAK_ERROR_ACAK_1,

m_LetakErrorAcak1);

(96)

//{{AFX_MSG_MAP(CErrorMakerDlg)

// CErrorMakerDlg message handlers BOOL CErrorMakerDlg::OnInitDialog() {

CDialog::OnInitDialog();

// Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog

SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon //====================================== // INI YANG DIJALANKAN PERTAMA KALI

//===============================================

UpdateData(TRUE);

m_Keterangan=("Program pembuat Error. Input = *.TXT Output = *.TXT");

//Sebelum buka file semua tombol selain buka file dibuat tidak aktif GetDlgItem(IDC_EDIT_LETAK_ERROR_1)->EnableWindow(FALSE);

GetDlgItem(IDC_EDIT_LETAK_ERROR_2)->EnableWindow(FALSE);

(97)

GetDlgItem(IDC_EDIT_LETAK_ERROR_ACAK_2)->EnableWindow(FALSE);

GetDlgItem(IDC_BUTTON_BUAT_ERROR_ACAK)->EnableWindow(FALSE);

GetDlgItem(IDC_BUTTON_SIMPAN_FILE)->EnableWindow(FALSE);

UpdateData(FALSE);

return TRUE; // return TRUE unless you set the focus to a control }

// If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework.

void CErrorMakerDlg::OnPaint() {

if (IsIconic()) {

CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle

int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon

dc.DrawIcon(x, y, m_hIcon); }

else {

(98)

HCURSOR CErrorMakerDlg::OnQueryDragIcon() {

return (HCURSOR) m_hIcon; }

Program untuk buka file

void CErrorMakerDlg::OnButtonBukaFile() //Untuk tombol buka file {

CFileDialog dlg(TRUE,"txt","*.txt"); //untuk memanggil file open/save dialog

if(dlg.DoModal()==IDOK) //jika di OK {

CFile file(dlg.GetPathName(),CFile::modeRead); int byteRead=file.Read(s,749);

s[byteRead]=0; UpdateData(TRUE); m_PesanAsli=s;

m_JumlahBitPesanAsli=m_PesanAsli.GetLength(); //setelah buka file semua tombol aktif selain simpan file

GetDlgItem(IDC_EDIT_LETAK_ERROR_1)->EnableWindow(TRUE);

GetDlgItem(IDC_EDIT_LETAK_ERROR_2)->EnableWindow(TRUE);

GetDlgItem(IDC_EDIT_LETAK_ERROR_3)->EnableWindow(TRUE);

GetDlgItem(IDC_BUTTON_BUAT_ERROR)->EnableWindow(TRUE);

GetDlgItem(IDC_EDIT_LETAK_ERROR_ACAK_1)->EnableWindow(TRUE);

GetDlgItem(IDC_EDIT_LETAK_ERROR_ACAK_2)->EnableWindow(TRUE);

GetDlgItem(IDC_BUTTON_BUAT_ERROR_ACAK)->EnableWindow(TRUE);

(99)

void CErrorMakerDlg::OnButtonBuatError() //untuk tombol Buat Error

(100)

}

(101)

{

ss[ee3]='1'; }

} else

; AkhirError:

UpdateData(TRUE); m_PesanDierror.Empty();

strncpy(m_PesanDierror.GetBuffer(m_JumlahBitPesanDierror),ss,750); UpdateData(FALSE);

UpdateData(TRUE);

m_JumlahBitPesanDierror=m_PesanDierror.GetLength();// TODO: Add your control notification handler code here

UpdateData(FALSE);

//Tombol selain simpan dibuat tidak aktif

GetDlgItem(IDC_BUTTON_BUAT_ERROR)->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_BUKA_FILE)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_LETAK_ERROR_1)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_LETAK_ERROR_2)->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_SIMPAN_FILE)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_LETAK_ERROR_3)->EnableWindow(FALSE);

GetDlgItem(IDC_BUTTON_BUAT_ERROR_ACAK)->EnableWindow(FALSE);

}

(102)

r1=((rand()%100)%m_JumlahBitPesanAsli); srand(time(&t)*5);

r2=((rand()%100)%m_JumlahBitPesanAsli);

UpdateData(TRUE); m_LetakErrorAcak1=r1; m_LetakErrorAcak2=r2; UpdateData(FALSE);

UpdateData(TRUE); m_PesanDierror.Empty(); UpdateData(FALSE); UpdateData(TRUE);

m_PesanDierror=m_PesanAsli;

m_JumlahBitPesanDierror=m_PesanDierror.GetLength(); UpdateData(FALSE);

//Ambil Pesan Asli ke ss[] int dd2;

for(dd2=0;dd2<m_JumlahBitPesanDierror;dd2++) {

UpdateData(TRUE);

ss[dd2]=m_PesanDierror.GetAt(dd2); UpdateData(FALSE);

}

//--- int ee4=0;

ee4=m_LetakErrorAcak2-1; if(ss[ee4]!='0')

{

ss[ee4]='0'; }

else {

Gambar

Gambar 3.7 Sub Program diagram alir untuk Penyandian Register geser
Gambar 3.8 Diagram alir program pemberian kesalahan. III.3.3  Diagram alir untuk Program deteksi dan koreksi galat
Gambar 3.9 Diagram alir program deteksi dan koreksi galat
Gambar 3.10 Sub Program diagram alir untuk Sindrom galat
+7

Referensi

Dokumen terkait

Data transaksi volume saham yang ditunjukkan oleh kedua sektor yaitu sektor infrastruktur dan konstruksi dimungkinkan mempunyai interval waktu yang sangat pendek dengan frekuensi

7DEHO 3HUEDQGLQJDQ 3DUDGLJPD 0HWRGRORJL Aspek )KLORVRÀV Positivisme Post positivisme Konstruk - tivisme Critical Theory Partisi- patoris 2QWRORJLV 1DwYH UHDOLVP $GD UHDOLWDV

Setelah dicobakan pada berbagai fungsi kernel tersebut diperoleh model yang paling baik adalah model regresi menggunakan fungsi Kernel Gaussian dengan MSE sebesar

Juga telah ditunjukkan bahwa koset kanan tidak kosong dan tiap dua koset kanan, akan saling lepas atau akan sama yang satu dengan lainnya, maka G juga akan merupakan gabungan dari

We undertook a three-dimensional seismic reflection survey of a small part of a prism arcward of the Middle America Trench off Costa Rica to more correctly image structure and

Apabila perkembangan kearah selatan terbentur pada terbatasnya potensi untuk menjadi pusat perkembangan karena ada samudra India, perkembangan kearah barat selain

Terisolasi, jika pada sebuah sistem basis data terdapat sejumlah transaksi yang dilaksanakan secara bersamaan, maka semua transaksi yang dilaksanakan pada saat

dalam upaya meningkatkan kompetensi guru menyusun RPP berkarakter, yang bermanfaat bagi Kepala Sekolah untuk meningkatkan profesionalisme dan bagi guru untuk