Anda di halaman 1dari 256

` COVER BELUM

Implementasi JST dan Wavelet pada FPGA

IMPLEMENTASI BERBAGAI ALGORITMA


NEURAL NETWORK DAN WAVELET PADA
FIELD PROGRAMMABLE GATE ARRAY
(FPGA)

Perpustakaan Nasional: Katalog Dalam Terbitan


ISBN: 978-979-1421-102
Cetakan 1, Desember 2011

Penulis
Wisnu Jatmiko
Petrus Mursanto
Muhamad Fajar
M Iqbal Tawakal
Wahyu Trianggoro
Ruliantyo Syafaadillah Rambe
Fauzi
Arief Ramadhan

Desain Sampul
Muhamad Fajar

Hak Cipta
Seluruh isi buku dan sampul merupakan hak cipta Fakultas Ilmu
Komputer Universitas Indonesia.

Implementasi JST dan Wavelet pada FPGA

Kata Pengantar
Puji syukur kami panjatkan kehadirat Allah SWT, karena berkat
rahmat, karunia, dan hidayah-Nya pada akhirnya penulis dapat
menyelesaikan buku ini. Buku ini ditujukan untuk memberikan
pengetahuan tentang bagaimana mengimplementasikan Jaringan
Saraf Tiruan dan dan salah satu algoritma kompresi yakni algoritma
Wavelet meggunakan FPGA. Buku ini memberikan dasar-dasar
teori mengenai Jaringan Saraf Tiruan dan Wavelet. Buku ini juga
memberikan gambaran umum mengenai apa itu FPGA, VHDL, dan
perangkat keras Xilinx.
Ada tiga algoritma JST yang diimplementasikan ke dalam FPGA di
buku ini, yaitu Backprogation, FLVQ dan FLVQ-PSO. Kemudian,
metode wavelet yang diimplementasikan menggunakan FPGA
adalah metode wavelet dengan filter banks dan metode wavelet
dengan lifting scheme.
Kami mengucapkan terima kasih kepada Direktorat Riset dan
Pengabdian Masyarakat Universitas Indonesia yang telah
memberikan bantuan dana untuk riset yang berjudul
Pengembangan prototype berbasis sistem cerdas untuk akuisisi,
visualisasi, dan analisa di bidang kesehatan: studi kasus konsentrasi
zat Trichloroethylene. Penulis juga berterima kasih kepada
Kementrian Riset dan Teknologi yang membantu pendanaan riset
berjudul Pengembangan Smart Cardio Device sebagai deteksi dini
untuk penyakit jantung berdasarkan sinyal Elektrokardiogram.
Tanpa bantuan dana yang diberikan maka riset-riset tersebut tidak
akan berjalan dan buku ini yang sebenarnya juga hasil dari kedua
riset tersebut tidak akan bisa dituliskan oleh kami.
Terima kasih juga kami haturkan kepada semua pihak yang telah
memberikan dukungan selama pembuatan buku ini, terutama dari
pihak Fakultas Ilmu Komputer Universitas Indonesia yang telah
memberikan dukungan sepenuhnya terhadap kegiatan riset yang
terkait dengan isi buku ini. Tak lupa pula kepada seluruh

Implementasi JST dan Wavelet pada FPGA

mahasiswa di Laboratorium Computer Networks, Architecture &


High Performance Computing yang telah banyak membantu secara
formal maupun informal sehingga riset ini dapat berjalan dengan
segala kelebihan dan kekurangannya. Terima kasih juga kami
ucapkan untuk para anggota lab yang bersedia menjadi reviewer
buku ini, Indra Hermawan, Zaki Imaduddin, dan I Putu Satwika.
Semoga bantuan dan kerja sama ini dapat memberi kontribusi
perkembangan yang berarti bagi keilmuan khususnya di bidang
ilmu komputer di Indonesia.
Depok, Universitas Indonesia
November 2011

Tim Penulis

Implementasi JST dan Wavelet pada FPGA

Sistematika Penyusunan
Buku ini disusun dalam beberapa bab agar pembaca dapat
memiliki
gambaran
singkat
mengenai
bagaimana
mengimplementasikan Jaringan Saraf Tiruan (JST) dan Wavelet
meggunakan Field Programmable Gate Array (FPGA). Berikut
adalah penjelasan isi singkat bab dalam buku ini:

Bab 1: Pendahuluan
Pada bab ini terdapat penjelasan mengenai hal yang
melatarbelakangi dan menjadi alasan penyusunan buku ini.
Penjelasan mengenai penelitian pendahuluan yang menjadi
dasar penulisan buku ini juga terdapat pada bab ini.

Bab 2: Jaringan Saraf Tiruan dan Wavelet


Pada Bab ini pembaca dapat mempelajari dasar-dasar teori
Jaringan Saraf Tiruan (JST). Ada beberapa algoritma yang
secara khusus tersaji pada dalam Bab ini, yaitu
Backpropagation dan LVQ. Pembaca juga akan menemukan
pembahasan mengenai dasar-dasar teori wavelet.
Pembahasan tersaji secara mengalir, mulai dari
transformasi Fourier sampai dengan fungsi skala dan fungsi
wavelet.

Bab 3: Field Programmable Gate Array


Pada bab ini pembaca dapat mempelajari gambaran umum
mengenai apa itu Field Programmable Gate Array (FPGA),
paket perangkat keras Xilinx, dan semua teori terkait
pengembangan menggunakan FPGA. Terdapat pula
penjelansan mengenai VHDL secara lebih dalam. Sintaks
dan semantik dari bahasa ini akan dijelaskan secara
menyeluruh disertai oleh contoh dan ilustrasi untuk

Implementasi JST dan Wavelet pada FPGA

membantu pembaca agar lebih memahami VHDL. Pada bab


ini juga pembaca akan mempelajari berbagai format angka
yang bisa dipakai dalam pengembangan FPGA. Format
angka yang dibahas adalah Fixed Point dan Floating Point.

Bab 4: Implementasi Algoritma Jaringan Saraf Tiruan


Backpropagation Pada FPGA
Bab ini membahas mengenai cara mengimplementasikan
algoritma Backpropagation ke dalam FPGA. Pembaca dapat
mulai belajar cara mengimplementasikan algoritma
Backpropagation pada bab ini.

Bab 5: Implementasi FLVQ dan FLVQ PSO Pada FPGA


Bab ini membahas mengenai cara mengimplementasikan
algoritma Fuzzy Learning Vector Quantization (FLVQ) ke
dalam
FPGA.
Pembaca
dapat
mulai
belajar
mengimplementasikan algoritma FLVQ ketika membaca
Bab ini. Pembahasan mengenai Particle Swarm
Optimization (PSO) dan kaitan antara FLVQ dan PSO juga
akan disajikan pada bab ini. Begitu pula cara implementasi
FLVQ-PSO menggunakan FPGA akan dibahas di bagian akhir
Bab ini.

Bab 6: Implementasi Wavelet Pada FPGA


Pada Bab ini pembaca dapat mempelajari cara
mengimplementasikan wavelet daubechies dengan metode
filter banks dan lifting scheme ke dalam FPGA. Pembahasan
mulai dari dasar teori sampai dengan tentang perbedaan
metode lifting scheme dengan metode filter banks.

Implementasi JST dan Wavelet pada FPGA

Tujuan Penulisan
Buku ini dapat menginspirasi dan menumbuhkan minat pembaca
untuk melakukan riset mengenai implementasi berbagai macam
algoritma (termasuk JST dan wavelet) menggunakan FPGA. Selain
itu, penulis berharap buku ini juga dapat menjadi buku pegangan
bagi mahasiswa atau peneliti yang bergerak di bidang embedded
system. Khususnya bagi mereka yang bergelut dengan perangkat
FPGA.

Implementasi JST dan Wavelet pada FPGA

Daftar Isi
Kata Pengantar .................................................................................. 3
Sistematika Penyusunan ................................................................... 5
Daftar Isi ............................................................................................ 8
Daftar Gambar ................................................................................ 12
Daftar Tabel..................................................................................... 19
Bab 1 Pendahuluan ......................................................................... 20
1.1

Latar Belakang .................................................................. 20

1.2 Pengembangan Prototype Alat Pendeteksi Kerusakan Hati


Akibat Zat Trychloroethylene ...................................................... 21
1.3

Sinyal EKG ......................................................................... 26

1.4 Pengembangan Smart Cardio Device untuk Pendeteksian


Penyakit Jantung berdasarkan Sinyal EKG .................................. 30
1.5

Pengembangan Automatic Sleep Awakening Controller . 35

1.6 Pengembangan Smart Ultrasonography (USG) untuk


Monitoring Kesehatan Jarak Jauh. .............................................. 38
Bab 2 Jaringan Saraf Tiruan dan Wavelet ....................................... 45
2.1

Jaringan Syaraf Tiruan ...................................................... 45

2.1.1

Sejarah Jaringan Syaraf Tiruan .................................. 45

2.1.2
Pemrosesan Informasi Neural (Neural Information
Processing) ............................................................................... 46
2.1.3

Jaringan Syaraf Tiruan Untuk Pengenalan Pola ........ 48

2.1.4

Fungsi-Fungsi Aktivasi ............................................... 50

2.1.5
Jaringan
Syaraf
Tiruan
Propagasi
Balik
(Backpropagation Neural Network) ........................................ 54
2.1.6

Algoritma Fuzzy Learning Vector Quantization (FLVQ)


69

Karakteristik ......................................................................... 69

Implementasi JST dan Wavelet pada FPGA

2.1.7

Particle Swarm Optimization (PSO) .......................... 83

2.1.8
Fuzzy Learning Vector Quantization - Particle Swarm
Optimization (FLVQ-PSO) ......................................................... 86
Karakterisitik ........................................................................ 86
2.2

Wavelet............................................................................. 92

2.2.1

Fourier Transform ..................................................... 93

2.2.2

Short Time Fourier Transform ................................... 97

2.2.3

Wavelet Transform ................................................. 100

2.2.4

Continuous Wavelet Transform .............................. 101

2.2.5

Discrete Wavelet Transform.................................... 105

2.2.6
Fungsi Pengskalaan (Scaling Function) dan Fungsi
Wavelet (Wavelet Function) .................................................. 106
2.2.7

Multi Resolution Analysis ........................................ 110

Bab 3 Field Programmable Gate Array ......................................... 114


3.1

FPGA ............................................................................... 114

3.1.1
Diagram Alur Pengembangan Implementasi pada
Perangkat Keras FPGA ........................................................... 119
3.1.2

Hardware Xilinx Spartan 3A .................................... 120

3.1.3

Software Xilinx Core Generator .............................. 122

3.1.4

Xilinx Core Generator .............................................. 123

3.2

Pengantar VHDL.............................................................. 124

3.2.1

Metode Desain Rangkaian Digital ........................... 126

3.2.2
Very High Speed Integrated Circuit Hardware
Description Language Overview ............................................ 128
Model Structural .................................................................... 131
Model Behaviorial .................................................................. 132
3.2.3

Tipe data pada VHDL ............................................... 133

3.2.4

Ekspresi dan Operator pada VHDL .......................... 136

3.2.5

Terminologi pada VHDL .......................................... 138

3.2.6

Process .................................................................... 143

Implementasi JST dan Wavelet pada FPGA

3.2.7

Component .............................................................. 148

3.2.8

Komponen Test Bench ............................................ 149

3.3

Representasi Angka ........................................................ 153

3.3.1

Fixed Point ............................................................... 153

3.3.2

Floating Point .......................................................... 155

3.3.3

Perbandingan dan Format Lainnya ......................... 161

Bab 4 Implementasi Algoritma Jaringan Saraf Tiruan


Backpropagation Pada FPGA ........................................................ 164
4.1

Backpropagation pada FPGA.......................................... 164

4.2

Implementasi dan Adaptasi Desain ................................ 164

4.3

Representasi Data .......................................................... 165

4.4

Desain Neuron dan Input ROM ...................................... 165

4.5

Multiplier ........................................................................ 167

4.6

Activation Function Unit ................................................. 167

4.7

Desain Layer ................................................................... 168

4.8

Classifier Unit .................................................................. 169

4.9

Waktu Pemrosesan Feedforward ................................... 169

4.10 Komponen Interface ....................................................... 171


4.10.1

Expected Value ROM ............................................... 171

4.10.2

Accuracy Check Unit ................................................ 171

4.10.3

Binary to BCD Unit................................................... 172

4.10.4

BCD to LCD Unit....................................................... 172

4.10.5

LCD Display Unit ...................................................... 172

4.11 State Machine................................................................. 174


4.12 Hasil Synthesis pada Xilinx ISE Design Suite versi 12.3 ... 179
4.13 Sumber Daya yang Terpakai Pada Xilinx Spartan 3AN
XC3S700AN ................................................................................ 180
Bab 5 Implementasi FLVQ dan FLVQ PSO Pada FPGA................... 182
5.1

10

Implementasi FLVQ ........................................................ 182

Implementasi JST dan Wavelet pada FPGA

5.1.1

Rancangan Modul FLVQ .......................................... 182

5.1.2

Random Access Memory (RAM) .............................. 183

5.1.3

Cluster Layer ............................................................ 185

5.1.4

Intersec Calculation ................................................. 186

5.1.5

Neuron Intersec Calculation .................................... 188

5.1.6

UpdateCluster ......................................................... 189

5.2

Desain FLVQ PSO pada FPGA .......................................... 190

5.2.1

Desain Proses Training ............................................ 191

5.2.2

Desain Proses Testing ............................................. 199

5.2.3

Desain Umum .......................................................... 200

Bab 6 Implementasi Wavelet Pada FPGA ..................................... 202


6.1 Implementasi Wavelet Filter Banks pada FPGA .................. 202
6.1.1 Implementasi Filter Banks di Java ................................. 206
6.1.2 Arsitektur di FPGA......................................................... 208
6.2 Implementasi Wavelet Lifting Scheme pada FPGA ............. 216
6.2.1 Pemilihan Jenis Wavelet Daubechies ........................... 225
6.2.2 Implementasi Algoritma Wavelet Daubechies 4 di Java
............................................................................................... 225
6.2.3 Arsitektur Wavelet Lifting Scheme di FPGA .................. 229
Daftar Pustaka ............................................................................... 242
Glosarium ...................................................................................... 247
Index .............................................................................................. 251
Profil Singkat Penulis ..................................................................... 252

Implementasi JST dan Wavelet pada FPGA

11

Daftar Gambar
Gambar 1. Contoh gambar sel hati tikus ........................................ 22
Gambar 3. Rancangan keseluruhan sistem..................................... 24
Gambar
5.
Sinyal
EKG
(gambar
diambil
dari
http://commons.wikimedia.org/wiki/File:SinusRhythmLabels.svg)
......................................................................................................... 27
Gambar 14. Model komputasi JST .................................................. 47
Gambar 15. Analogi pengenalan pola JST pada manusia. .............. 50
Gambar 16. Fungsi identitas ........................................................... 51
Gambar 17. Fungsi tangga biner ..................................................... 51
Gambar 18. Fungsi tangga bipolar .................................................. 52
Gambar 19. Fungsi sigmoid biner ................................................... 53
Gambar 20. Fungsi sigmoid bipolar ................................................ 54
Gambar 21. Arsitektur Backpropagation ........................................ 56
Gambar 22. Feedforward menuju lapisan tersembunyi ................. 64
Gambar 23. Feedforward menuju lapisan output .......................... 64
Gambar 24. Menghitung error lapis tersembunyi .......................... 66
Gambar 25. Penyesuaian Bobot berdasarkan error pada lapisan
tersembunyi .................................................................................... 67
Gambar 26. Penyesuaian Bobot berdasarkan error pada lapisan
output .............................................................................................. 68
Gambar 27. Arsitektur Jaringan FLVQ ............................................ 70
Gambar 28. Ilustrasi Segitiga Fuzzy (Rochmatullah 2009) .............. 71
Gambar 29. Ilustrasi pencarian nilai similaritas antar 2 vektor fuzzy
......................................................................................................... 73
Gambar 32. Vektor pewakil diperlebar fuzzinessnya .................... 76
Gambar 35. Vektor pewakil dipersempit fuzzinessnya .................. 79
Gambar 36. Irisan memiliki nilai similaritas 0 ................................ 80

12

Implementasi JST dan Wavelet pada FPGA

Gambar 37. Vektor pewakil diperlebar fuzzinessnya ..................... 80


Gambar 38. Ilustrasi Inisalisasi Vektor Pewakil Awal ...................... 87
Gambar 39. Ilustrasi pencarian vektor kecepatan pada FLVQ-PSO 89
Gambar 40. Contoh Sinyal Kosinus ................................................. 93
Gambar 41. Sinyal Asli Sebelum Diproses....................................... 94
Gambar 42. Sinyal Setelah Diberi Fourier Transform ..................... 95
Gambar 43. Contoh Sinyal Stasioner .............................................. 96
Gambar 44. Contoh Sinyal Non-stasioner ....................................... 96
Gambar 45. Fourier Transform pada Sinyal Non-stasioner ............ 96
Gambar 46. Contoh Hasil Transformasi STFT. Sumber: Polikar, Robi.
The
Wavelet
Tutorial
Part
2.
http://users.rowan.edu/~polikar/WAVELETS/WTpart2.html ........ 98
Gambar 47. Berbagai Macam Ukuran Window Function ............... 99
Gambar 48. STFT dengan Window Function yang kecil. Sumber:
Polikar,
Robi.
The
Wavelet
Tutorial
Part
2.
http://users.rowan.edu/~polikar/WAVELETS/WTpart2.html ........ 99
Gambar 49. STFT dengan window function Besar. Sumber: Polikar,
Robi.
The
Wavelet
Tutorial
Part
2.
http://users.rowan.edu/~polikar/WAVELETS/WTpart2.html ...... 100
Gambar 50. Proses translasi dan dilasi mother wavelet terhadap
sinyal ............................................................................................. 103
Gambar 51. Continuous Wavelet Transform. Sumber: Polikar, Rob.
The
Wavelet
Tutorial
Part
2.
http://users.rowan.edu/~polikar/WAVELETS/WTpart2.html ...... 104
Gambar 52. Hubungan Frekuensi dan Waktu ............................... 105
Gambar 53. Discrete Wavelet Transform...................................... 106
Gambar 54. Perubahan spektrum frekuensi sinyal sebagai hasil
translasi dan dilasi mother wavelet di ruang frekuensi ................ 107
Gambar 55. Fungsi pengskalaan yang membatasi jumlah fungsi
wavelet yang digunakan. Sumber : Valens, Clemens. A Really
Friendly Guide to Wavelets. 26 Jan 2004. 15 Mei 2011.
http://polyvalens.pagespersoorange.fr/clemens/wavelets/wavelets.html ................................ 108

Implementasi JST dan Wavelet pada FPGA

13

Gambar 56. Tingkat kehalusan wavelet daubechies terhadap


jumlah basis dengan Sobolev regularity. Sumber :
Thielemann,Henning. Bounds for smoothness of refinable
functions.
-.
15
Mei
2011.
http://www.math.unibremen.de/zetem/DFGSchwerpunkt/preprints/orig/refinablesmoothest.pdf ................. 109
Gambar 57. Contoh Sinyal yang Cocok Diberi MRA...................... 111
Gambar 58. Proses dekomposisi bertingkat dalam analisa
multiresolusi.................................................................................. 111
Gambar 59. proses rekonstruksi bertingkat dalam analisa
multiresolusi.................................................................................. 111
Gambar 60. Posisi penempatan hasil dekomposisi dalam analisis
multiresolusi.................................................................................. 112
Gambar 61. Logic Cell.................................................................... 115
Gambar 62. Struktur konseptual dari FPGA .................................. 116
Gambar 63. Configurable Logic Block pada FPGA Xilinx Spartan 3N
....................................................................................................... 117
Gambar 64. Slice di dalam CLB...................................................... 117
Gambar 65. Ilustrasi komponen di dalam Slice............................ 118
Gambar 66. Alur Pengembangan FPGA ........................................ 119
Gambar 67. Spartan-3AN XC3S700AN ......................................... 121
Gambar 68. Project Navigator Xilinx ISE Design Suit ................... 123
Gambar 69. Core Generator ......................................................... 124
Gambar 70. Diagram Pembuatan Rangkaian Digital .................... 127
Gambar 71. Tingkatan deskripsi rangkaian digital ........................ 129
Gambar 72. Metode desain untuk menangani berbagai tingkatan
deskripsi ........................................................................................ 130
Gambar 73. Cakupan VHDL dalam mendeskripsikan rangkaian
digital............................................................................................. 131
Gambar 74. Diagram skematik full adder ..................................... 132
Gambar 75. Kode VHDL dari komponen full adder....................... 132

14

Implementasi JST dan Wavelet pada FPGA

Gambar 76. Kode VHDL dari komponen D flip flop....................... 133


Gambar 77. Contoh kode VHDL untuk data tipe enumerasi ........ 135
Gambar 78. Contoh kode VHDL untuk data physical type............ 135
Gambar 79. Contoh deklarasi signal bertipe std_logic_vector ..... 135
Gambar 80. Contoh deklarasi signal berupa array yang
didefinisikan sendiri ...................................................................... 136
Gambar 81. Contoh deklarasi records........................................... 136
Gambar 82. Contoh ilustrasi nilai yang dapat disimpan dalam
records Insrt_T .............................................................................. 136
Gambar 83. Contoh operasi concate ............................................ 137
Gambar 84. Kode untuk komponen gerbang logika serbaguna ... 138
Gambar 85. Contoh penggunaan generic. .................................... 141
Gambar 86. Contoh constant bertipe positive.............................. 142
Gambar 87. Contoh constant bertipe time. .................................. 142
Gambar 88. Contoh constant bertipe integer............................... 142
Gambar 89. Struktur deklarasi generic ......................................... 143
Gambar 90. Struktur deklarasi constant ....................................... 143
Gambar 91. Struktur Process ........................................................ 144
Gambar 92. Contoh process yang melibatkan perubahan nilai
signal. ............................................................................................ 145
Gambar 93. Contoh process yang melibatkan perubahan nilai
variable. ......................................................................................... 145
Gambar 94. Kode VHDL komponen D flip flop dengan input reset.
....................................................................................................... 146
Gambar 95. Contoh penggunaan loop .......................................... 147
Gambar 96. Contoh penggunaan melewatkan loop menggunakan
next when .................................................................................. 148
Gambar 97. Contoh penggunaan loop dengan counter................ 149
Gambar 98. Contoh component dan port map. ........................... 150
Gambar 99. Contoh berbagai bentuk wait ................................... 151

Implementasi JST dan Wavelet pada FPGA

15

Gambar 100. Contoh komponen test bench................................. 153


Gambar 103. Desain neuron pada FPGA ...................................... 166
Gambar 104. Cakupan desain neuron FPGA ................................. 167
Gambar 106. Desain keseluruhan feedforward ........................... 170
Gambar 107. Gambar desain keseluruhan & komponen interface
....................................................................................................... 173
Gambar 108. Diagram state machine. .......................................... 178
Gambar 111. Skema komponen-komponen Implementasi FLVQ di
FPGA .............................................................................................. 182
Gambar 112. Skema komponen input RAM ................................. 183
Gambar 113. Skema komponen References Vector RAM............. 184
Gambar 114. Skema komponen Cluster Layer .............................. 185
Gambar 115. Skema komponen Intersec Calculation ................... 186
Gambar 116. Skema internal komponen Intersec Calculation ..... 187
Gambar 117. Skema komponen Neuron ...................................... 188
Gambar 118. Skema komponen UpdateCluster ........................... 189
Gambar 119. Skema komponen Update....................................... 189
Gambar 120. Skema komponen Cluster Layer .............................. 191
Gambar 121. Skema komponen Cluster ....................................... 192
Gambar 122. Skema komponen Input (ROM)............................... 193
Gambar 123. Skema komponen Referensi (RAM) ........................ 193
Gambar 124. Skema komponen Neuron ...................................... 194
Gambar 125. Cuplikan kode untuk menghitung titik potong ....... 195
Gambar 130. Komponen penjumlahan......................................... 197
Gambar 131. Komponen pengurangan......................................... 197
Gambar 132. Komponen perkalian ............................................... 197
Gambar 133. Proses update vektor pewakil ................................. 198
Gambar 134. Skema komponen UpdateCluster ........................... 199
Gambar 136. Alur untuk proses training pada FLVQ .................... 200

16

Implementasi JST dan Wavelet pada FPGA

Gambar 137. Alur pada proses Testing ......................................... 201


Gambar 138. Proses dekomposisi bertingkat dalam di metode filter
banks ............................................................................................. 203
Gambar 139. Fungsi pengskalaan, fungsi wavelet, dan koefisien
filter yang digunakan di daubechies-4 (normalisasi = 2) .............. 205
Gambar 145. Arsitektur keseluruhan ............................................ 209
Gambar 146. Skema RAM ............................................................. 210
Gambar 148. Skema InputPadder ................................................. 211
Gambar 150. Arsitektur Konvolusi ................................................ 212
Gambar 151. Skema Convolution .................................................. 212
Gambar 156. Skema DownSampling ............................................. 215
Gambar 158. Skema LCD Driver .................................................... 216
Gambar 160. Proses dekomposisi dan rekonstruksi di metode filter
bank ............................................................................................... 217
Gambar 161. Proses dekomposisi bertingkat dalam di metode filter
bank ............................................................................................... 218
Gambar 162. Proses dekomposisi dengan metode lifting scheme
....................................................................................................... 219
Gambar 163. Proses rekonstruksi dengan metode lifting scheme
....................................................................................................... 219
Gambar 164. Perubahan nilai pada proses dekomposisi lifting
scheme .......................................................................................... 221
Gambar 165. Proses dekomposisi dual lifting scheme dimana
prediksi (dual) dan pembaharuan (update) kebalikan dari lifting
scheme klasik. ............................................................................... 222
Gambar 166. Algoritma dekomposisi di Java ................................ 226
Gambar 167. Perubahan nilai di wavelet daubechies-4 untuk
metode lifting scheme .................................................................. 229
Gambar 168. Rancangan implementasi wavelet daubechies-4 di
FPGA .............................................................................................. 230
Gambar 169. Data masukan untuk rancangan yang
diimplementasikan ........................................................................ 230

Implementasi JST dan Wavelet pada FPGA

17

Gambar 170. Rancangan komponen dekomposisi bertingkat ..... 232


Gambar 171. Rancangan komponen implementasi dekomposisi
wavelet daubechies-4 di FPGA...................................................... 234
Gambar 172. Skema implementasi komponen dekomposisi wavelet
daubechies-4 di FPGA ................................................................... 235
Gambar 173. Rancangan komponen Splitting .............................. 236
Gambar 174. Rancangan komponen predict 1 ............................. 237
Gambar 175. Rancangan komponen update ................................ 238
Gambar 176. Rancangan komponen predict2 .............................. 239
Gambar 177. Rancangan komponen control ................................ 240

18

Implementasi JST dan Wavelet pada FPGA

Daftar Tabel
Tabel 1. Ilustrasi FLVQ MSA pada epoch ke-1 ................................ 82
Tabel 2. Ilustrasi FLVQ MSA pada epoch ke-2 ............................... 83
Tabel 3. Spesifikasi Xilinx Spartan-3 Family XC3S700AN .............. 122
Tabel 4. Representasi fixed point .................................................. 153
Tabel 5. Standar IEEE 754 .............................................................. 157
Tabel 6. floating point 8 bit ........................................................... 158
Tabel 7. Representasi Data ........................................................... 165
Tabel 8. Koefisien filter untuk daubechies-2 hingga daubechies 10
(normalisasi = akar 2) .................................................................... 205
Tabel 9. Koefisien lifting scheme untuk daubechies-2 hingga
daubechies-8 ................................................................................. 223
Tabel 10. Koefisien lifting scheme untuk daubechies-4 ............... 227

Implementasi JST dan Wavelet pada FPGA

19

Bab 1 Pendahuluan
Pada bab ini terdapat penjelasan tentang latar belakang
pembuatan buku ini.

1.1 Latar Belakang


Hal yang melatarbelakangi penulisan buku ini berasal dari
beberapa penelitian yang dilakukan oleh Wisnu Jatmiko dan
kawan-kawan. Sebagian dari disiplin ilmu yang berhasil dituangkan
dalam buku ini telah memberikan efek positif pada kalangan
masyarakat maupun peneliti-peneliti lainnya. Beberapa judul
penelitian tersebut antara lain, Pengembangan prototype berbasis
sistem cerdas untuk akuisisi, visualisasi, dan analisis di bidang
kesehatan: studi kasus konsentrasi zat Trichloroethylene,
Pengembangan Smart Cardio Device sebagai deteksi dini untuk
penyakit jantung berdasarkan sinyal Elektrokardiogram,
Pengembangan Sleep-Awakening Timing Controller untuk
Kesehatan dan Keamanan Kerja Berbasiskan Algoritma Kecerdasan
Komputasional, dan Pengembangan Smart Ultrasonography
(USG) untuk Pengawasan Kesehatan Jarak Jauh.
Penelitian-penelitian ini berkisar mengenai pembuatan alat pada
bidang kesehatan. Beberapa alat didesain untuk memiliki
karakteristik ukuran yang kecil, portable, dan mudah digunakan.
Salah satu teknik untuk prototyping atau merancang alat yang
memiliki sifat tersebut adalah dengan menggunakan FPGA. FPGA
merupakan sebuah chip elektronik yang dapat diprogram ulang
sehingga proses prototyping sebuah rancangan sistem digital bisa
dilaksanakan dengan lebih cepat dan lebih fleksibel, hal ini
menunjukan rancangan FPGA yang lebih unggul dari alat
pengembangan sistem digital lainnya.
Kita dapat melakukan simulasi terhadap implementasi rancangan
sistem digital pada FPGA sehingga kebenarannya dapat dipastikan
sebelum rancangan sistem digital tersebut difabrikasi secara masal.
Pendekatan ini memiliki banyak keuntungan, baik dari waktu
20

Implementasi JST dan Wavelet pada FPGA

pengembangan yang lebih singkat maupun biaya yang lebih hemat.


Hal ini terjadi karena kita tidak perlu bongkar pasang desain
rangkaian digital yang sedang kita buat. Kita cukup merubah kode
dan melakukan simulasi dan pengujian langsung di development
board (papan pengembangan) FPGA. FPGA sendiri biasanya
diperjualbelikan bersama dengan papan pengembangan yang
memiliki berbagai port I/O dan berbagai device interface seperti
Liquid Crystal Display (LCD), Light Emitting Diode (LED), switch
(saklar), dan button (tombol).
Pembaca dari buku ini diharapkan sudah memiliki latar belakang
akademis di bidang Ilmu Komputer terutama pada bidang
Rancangan Sistem Digital. Buku ini adalah suatu usaha untuk
mendokumentasikan proses implementasi algoritma pada FPGA
yang dibutuhkan pada penelitian pada bidang embedded system
sehingga dapat menjadi pelajaran dan referensi bagi pembaca
untuk melakukan penelitian ataupun pengembangan di tersebut.
Subbab-subbab berikutnya berisi penjelasan secara singkat garis
besar dan teori dari beberapa penelitian terkait.

1.2 Pengembangan
Prototype
Alat
Pendeteksi
Kerusakan Hati Akibat Zat Trychloroethylene
Penelitian berjudul Pengembangan Prototype Alat Pendeteksi
Kerusakan Hati Akibat Zat Trychloroethylene memiliki tujuan
mengetahui tingkat kerusakan hati pada manusia yang diakibatkan
oleh zat kimia Trichloroethylene (TCE). TCE terdapat pada drycleaner, proses penyamakan kulit, pelarut lem, tinta dan obatobatan. Penggunaan TCE berbahaya bagi manusia. Salah satu
akibat dari adanya TCE pada tubuh manusia adalah kerusakan
organ hati.
Kerusakan hati akibat zat ini dapat dideteksi melalui citra potongan
sel hati. Percobaan yang kami lakukan menggunakan potongan sel
hati tikus putih, bukan sel hati manusia. Tikus putih dipilih sebagai
pengganti manusia karena ada kedekatan genetis antara keduanya.
Hal ini dilakukan untuk mempermudah proses penelitian. Gambar
1 di bawah menunjukkan contoh potongan hati tikus putih yang
mengalami kerusakan akibat Trichloroethylene.

Implementasi JST dan Wavelet pada FPGA

21

Gambar 1. Contoh gambar sel hati tikus

Pada penelitian ini terdapat 18 tikus putih yang dikelompokan


menjadi tiga kelompok yang berbeda. Kelompok pertama adalah
kelompok kontrol, yakni sama sekali tidak diberikan zat TCE 99% (0
ppm). Kelompok kedua adalah kelompok terpajan TCE rendah,
diberikan zat Tri 99% sebanyak 1000 ppm, Kelompok yang terakhir
adalah kelompok terpajan TCE tinggi yakni diberikan zat TCE
sebanyak 2000 ppm. Setiap tikus memiliki kondisi yang sama yakni
umur 10 minggu, berat 25 gram, dan berkelamin jantan.
Pemberian zat TCE kepada tikus melalui proses inhalasi
(pernapasan) yakni dengan cara meletakan tikus tersebut di
ruangan khusus yang terkontaminasi zat TCE selama 7 hari (8 jam/
hari, pukul 09.30 17.30). Pada Gambar 2 terdapat contoh gambar
dari preparat hati tikus dengan perlakuan yang berbeda.

(a)

(b)

(c)

(d)

Gambar 2. Hasil akuisisi data gambar sel hati tikus (a) dan (b) sel
Histopathology hati setelah dikenakan 0 ppm Trichloroethylene, (c) dan
(d) Histopathology sel hati setelah dikenakan 2000 ppm
Trichloroethylene

Gambar sel hati diperoleh melalui bedah kecil dengan terlebih


dahulu memberikan pembiusan terhadap tikus-tikus tersebut.
Potongan hati tikus harus melalui beberapa tahapan sebelum

22

Implementasi JST dan Wavelet pada FPGA

dapat diamati, antara lain, dehidrasi selama dua jam, infiltrasi


selama dua puluh menit, embedding, sectioning, deparafinisasi
selama sepuluh menit, staining selama sepuluh menit, mounting
pada sebuah preparat dan labelling, baru difoto menggunakan
mikroskop digital. Hasil tangkapan gambar kemudian diproses
menggunakan FPGA untuk diklasifikasi.
Pengembangan algoritma pada FPGA juga memerlukan beberapa
tahapan agar rancangan sistem digital dapat berfungsi sesuai
dengan harapan. Salah satu tahap awal adalah menggunakan data
offline yang di hardcoded ke Read Only Memory (ROM) pada
rancangan FPGA sebelum menggunakan data yang diambil
langsung dari alat tertentu secara online. Pada saat buku ini ditulis
rancangan sistem digital yang kami rancang baru menerima data
gambar yang sudah diproses terlebih dahulu menggunakan KernelPCA (KPCA) pada Personal Computer (PC) dan disimpan ke dalam
ROM FPGA untuk kemudian diklasifikasi menggunakan
implementasi algoritma jaringan saraf tiruan pada rancangan
sistem digital menggunakan FPGA.
Pengembangan sebuah classifier chip atau chip pengklasifikasi
membutuhkan sebuah lingkungan yang berupa prototype sistem.
Prototype sistem yang kami rancang terdiri dari beberapa
komponen. Komponen tersebut antara lain mikroskop digital,
sebuah beagleboard dan sebuah papan pengembangan FPGA.
Gambar prefarat diambil menggunakan mikroskop digital
kemudian data dikirimkan ke Beagleboard setelah itu dilakukan
praproses menggunakan K-PCA. Data fitur hasil ekstraksi
menggunakan K-PCA kemudian dikirimkan secara serial menuju
FPGA dan dikembalikan ke Beagleboard untuk ditampilkan hasil
klasifikasinya melalui monitor.

Implementasi JST dan Wavelet pada FPGA

23

VGA
Display

Digital
Microscope

Beagleboard

FPGA

Keyboard

Gambar 3. Rancangan keseluruhan sistem

Kami menyeleksi algoritma klasifikasi yang akan kami implementasi


di FPGA terlebih dahulu menggunakan bahasa pemrograman
tingkat tinggi. Bahasa pemrograman tingkat tinggi tersebut antara
lain bahasa pemrograman Java atau Matlab. Implementasi pada
bahasa pemrograman tingkat tinggi ini kemudian kami evaluasi.
Kami akan memilih algoritma yang mampu menghasilkan performa
optimum dalam mengklasifikasikan gambar prefarat hati tikus.
Algoritma terpilih kami desain menjadi sebuah rancangan sistem
digital dan kami implementasikan di FPGA. Beberapa algoritma
klasifikasi yang kami uji coba adalah Backpropagation dan FNLVQ.
Bahasan mengenai implementasi kedua algoritma tersebut
terdapat pada bab-bab selanjutnya.
Pengklasifikasian gambar hati dilakukan dengan terlebih dahulu
menentukan Region of Interest (ROI). Pada penelitian ini daerah
yang menjadi ROI adalah Lobus dari sel hati. Lobus hati terbentuk
dari sel parenkimal dan sel non-parenkimal. Sel parenkimal pada
hati disebut hepatosit, menempati sekitar 80% volume hati dan
melakukan berbagai fungsi utama hati. Bagian inilah yang menjadi
pusat perhatian kami. Bagian ini kemudian dicuplik atau di-crop
dan dijadikan masukan untuk algoritma ekstraksi fitur. Pada
penelitian kami algoritma ekstraksi fitur yang digunakan adalah
Kernel Principal Component Analysis (KPCA).
24

Implementasi JST dan Wavelet pada FPGA

Pada awal penelitian topik uji coba adalah mengklasifikasikan


tingkat terpaparnya suatu sel hati oleh Trichloroethylene. Namun
ternyata penelitian yang kami lakukan belum mencapai hasil yang
diharapkan atau nilai akurasi yang dihasilkan belum optimal.
Kemudian kami melakukan uji Kluster untuk mengidentifikasi
karakteristik data menggunakan Fuzzy C Means (FCM). Uji FCM
menunjukan bahwa data yang kami miliki karakteristiknya saling
overlap antar kelas. Pada Gambar 4 terlihat bahwa data dari setiap
kelas melewati masing-masing batas kelas. Hal ini mengindikasikan
adanya suatu kesalahan dalam proses klasfikasi.

Gambar 4. Hasil Plot Clustering Citra Hati Tikus Putih Mengunakan


Fuzzy C Means (FCM)

Akhirnya kami pun kembali berkonsultasi dengan pakar


epidemiologi, Dr. Anom Bowolaksono dan pakar kesehatan
masyarakat Dr. Doni Hikmat Ramdhan. Hasil diskusi kami
memunculkan hipotesis bahwa performa klasifikasi menjadi buruk
karena ada faktor kekebalan sel hati yang berbeda-beda untuk
setiap hati tikus. Hal ini akan menyebabkan pada setiap hati yang
terpapar Trichloroethylene dengan jumlah tertentu belum tentu

Implementasi JST dan Wavelet pada FPGA

25

mengalami kerusakan yang sama walaupun jumlah zat


Trichloroethylene yang terpapar sama. Akibatnya tidak mungkin
dari data visual kita dapat memisahkan mana hati yang terpapar
sedikit zat TCE dan mana pula hati yang terpapar banyak zat TCE.
Klasifikasi yang dapat dilakukan berdasarkan data visual adalah
klasifikasi tingkat kerusakan sel hati bukan klasifikasi tingkat
terpapar zat TCE pada suatu sel hati.

1.3 Sinyal EKG


Polysomnography adalah pemeriksaan menyeluruh terhadap
pasien dengan menggunakan berbagai macam sensor. Sensor
tersebut antara lain sensor untuk memonitor sinyal otak atau
Electroencephalography (EEG), sensor untuk memonitor
pergerakan otot atau Electromyography (EMG), sensor gerakan
mata atau Electrooculography (EOG) dan Electrocardiography
(ECG). Polysomnography membutuhkan dana yang tidak sedikit
dan banyak peralatan yang rumit. Hal ini mendorong para peneliti
untuk mencari alat diagnosa yang lebih murah sebagai pengganti
Polysomnography.
Electrocardiography (ECG) atau Elektrokardiograf (EKG) adalah
sinyal yang menggambarkan aktivitas jantung manusia.
Penggunaan sinyal EKG sebagai alternatif alat diagnosis penyakit
tidur selain menggunakan Polysomnography cukup populer di
kalangan para peneliti bidang computational intelligence. Sinyal
ECG atau EKG adalah sinyal yang kami gunakan pada riset-riset
yang akan kami jelaskan pada subbab-subbab berikutnya.
Pada Gambar 5 terdapat lima komponen yang merupakan bagian
penting dari sinyal EKG. Gelombang tersebut adalah gelombang P,
PR interval, QRS complex, segmen ST, dan gelombang T.
Gelombang- gelombang ini menggambarkan kondisi pemompaan
darah pada jantung manusia berdasarkan penyebaran impuls listrik
pada otot jantung. Gelombang P adalah gelombang pertama dari
sinyal EKG dan merepresentasikan penyebaran impuls listrik
melalui otot atrium (aktivasi atau depolarisasi).

26

Implementasi JST dan Wavelet pada FPGA

Gambar 5. Sinyal EKG (gambar diambil dari


http://commons.wikimedia.org/wiki/File:SinusRhythmLabels.svg)

PR interval dimulai dari awal gelombang P sampai ke awal dari


gelombang QRS complex. PR interval menggambarkan waktu yang
dibutuhkan untuk impuls listrik untuk melalui keseluruhan daerah
dari Sinoatrial (SA) menuju ke serat otot ventrikel. Gelombang
berikutnya adalah QRS complex. Gelombang ini merupakan
komponen terpenting dari sinyal EKG. Komponen ini
menggambarkan penyebaran impuls listrik melalui otot ventrikel
(depolarisasi). QRS complex terdiri dari beberapa gelombang,
antara lain,

Defleksi (perubahan/ belokan) pertama bernilai negatif (ke


bawah), dan disebut gelombang Q.
Defleksi positif selanjutnya adalah gelombang R, hal ini
tidak tergantung dengan ada atau tidaknya gelombang Q
sebelum gelombang R.
Defleksi berikutnya setelah gelombang R adalah gelombang
S.

Implementasi JST dan Wavelet pada FPGA

27

Komponen yang mengikuti QRS complex disebut segmen S-T. Titik


dimana segmen ini dimulai disebut titik J (Junction). Komponen
terakhir adalah gelombang T. Gelombang T merepresentasikan
masa pemulihan dari ventrikel (repolarisasi). Pemetaan antara
gelombang dan kondisi impuls listrik dapat dilihat pada Gambar 6.

28

Implementasi JST dan Wavelet pada FPGA

Implementasi JST dan Wavelet pada FPGA

29

Gambar 6. Ilustrasi keterkaitan sinyal ECG dengan kondisi impuls listrik


pada otot jantung (sumber:
http://commons.wikimedia.org/wiki/File:ECG_principle_slow.gif)

1.4 Pengembangan Smart Cardio Device untuk


Pendeteksian Penyakit Jantung berdasarkan Sinyal
EKG
Penyakit jantung merupakan salah satu penyebab kematian
terbesar di dunia. Arrhythmia atau kelainan detak jantung adalah
gejala awal penyakit jantung yang lebih serius bagi para
penderitanya. Apabila tidak ada tindakan pencegahan maka bukan
tidak mungkin penderita tersebut akan mengalami penyakit
jantung yang serius seperti serangan jantung. Deteksi arrhythmia
dapat dilakukan menggunakan sinyal Elektrokardiogram (EKG).
Pada saat ini belum ada perangkat EKG yang bisa secara otomatis
mendeteksi arrhythmia. Kami berusaha membuat sebuah alat
yang dapat mendeteksi kelainan jantung, sehingga dokter tidak
perlu repot mendiagnosis secara manual sinyal EKG dari pasien.
Apabila terdeteksi kelainan maka dokter dapat melakukan
diagnosis lebih lanjut terhadap pasien.
Secara umum, bagian dari sistem yang kami coba kembangkan
menggunakan FPGA adalah serangkaian proses yang terkait
dengan pendeteksian sinyal EKG yang tidak normal untuk setiap

30

Implementasi JST dan Wavelet pada FPGA

detak jantung. Modul yang terdapat di dalam sistem antara lain


adalah modul Analog to Digital Conventer (ADC), amplifier & band
filter, Wavelet, QRS detection, Random Access Memory (RAM),
Artificial Neural Network (ANN), Video Graphic Array (VGA), dan
Control and State Machine.
Beberapa modul diimplementasikan menjadi rangkaian
elektronika, sisanya menggunakan FPGA (tipe XC3S700AN) dan
memanfaatkan modul yang memang sudah tersedia pada papan
pengembangan FPGA Spartan-3AN. Modul yang direncanakan
untuk diimplementasikan dalam FPGA adalah RAM, modul JST, QRS
detection, Control and State Machine, Wavelet, dan VGA. Modul
Amplifier & Band Filter diimplementasikan dalam rangkaian
elektronika. Modul ADC menggunakan modul jadi yang ada pada
papan pengembangan Spartan-3AN. Control Button dan Switch
sudah ada di papan Spartan-3AN. Tiga buah elektroda dipasangkan
di dekat mata kaki salah satu kaki, dan pada dua bagian bawah
pergelangan tangan (pada nadi). Rancangan sistem dapat dilihat
pada Gambar 7.
Monitor

Electrode

Amplifier &
Band Filter

Control
Button and
Switch

ADC

VGA Module

Wavelet

Neural
Network

QRS
detection

RAM

Control and
State
Machine

Gambar 7. Rancangan Keseluruhan Sistem Pendeteksi Arrhythmia

Pada riset kali ini kami mencoba membuat alat yang mampu
mengambil sinyal EKG dari tiga buah elektroda. Sampling rate atau

Implementasi JST dan Wavelet pada FPGA

31

banyaknya sampel yang di ambil untuk setiap beat adalah 300 titik
dimulai dari puncak QRS Complex. Setelah itu akan dilakukan tahap
ekstraksi fitur terhadap sinyal menggunakan algoritma
dekomposisi Wavelet. Hasil ekstraksi fitur menghasilkan sinyal
dengan panjang 40 titik. Sinyal ini kemudian akan di klasifikasi
menggunakan algoritma FLVQ.
Hingga buku ini dituliskan sebagian dari sistem telah
terimplementasi. Bagian yang didokumentasikan adalah eksplorasi
tentang bagaimana cara mengimplementasikan algoritma Jaringan
Saraf Tiruan pada FPGA menggunakan bahasa pemrograman VHDL.
Selain pengembangan menggunakan FPGA, kami juga
mengeksplorasi pengembangan menggunakan teknologi lain
seperti menggunakan komputer desktop dan juga menggunakan
tablet/ ponsel bersistem operasi Android.
Secara umum penelitian ini dibagi ke dalam beberapa tahap. Tahap
pertama adalah penelitian mengenai studi tentang EKG itu sendiri,
berbagai penyakit yang bisa dideteksi melalui EKG, dan proses
klasifikasi yang dapat dilakukan di dunia ilmu komputer. Tahap
kedua adalah membuat ECG Recorder Prototype buatan sendiri.
Tahap ketiga adalah merampungkan prototipe dari Portable Smart
Cardio Device.
Pada tahap pertama kami mengasumsikan bahwa data EKG
nantinya diambil dari ECG recording device atau alat perekam EKG.
Pada tahap ini kami menggunakan data offline atau data yang
sudah tertulis disuatu alat penyimpan tertentu seperti Personal
Computer (PC). Data sinyal tersebut sudah berupa data digital.
Asumsi kami ketika data masuk dari sensor, data tersebut akan
disimpan pada sebuah memory tertentu sebagai data mentah
sampai batas tertentu sebelum nantinya diproses oleh intelligent
system (sistem cerdas).
Data mentah akan melalui proses penghilangan noise (filtering).
Data yang sudah tidak memiliki noise selanjutnya akan dikompresi
sebelum menjadi masukan bagi sistem pengklasifikasi data. Proses
kompresi sendiri bertujuan untuk meminimalisir fitur data yang

32

Implementasi JST dan Wavelet pada FPGA

harus masuk ke dalam sistem klasifikasi. Hal ini tentunya akan


mempermudah perhitungan yang dilakukan pada proses klasifikasi.
Khusus pada kasus data EKG fitur datanya adalah sinyal EKG yang
telah dikompresi. Fitur data adalah ciri yang akan dimanfaatkan
oleh classifier dalam mengklasifikasikan data masukan. Pemilihan
algoritma klasifikasi dilakukan dengan cara menguji akurasi
algoritma tersebut dalam mengklasifikasikan data EKG. Proses
pengujian dimulai dari memisahkan antara detak jantung yang
normal dengan yang abnormal. Setelah akurasi pada pemisahan
tersebut sudah baik barulah algoritma diujicobakan untuk
mengklasifikasi antara detak jantung normal, detak jantung
berpenyakit jantung tertentu, dan detak jantung berpenyakit
tertentu lainnya.
Pada tahap kedua kami fokus pada pembuatan alat perekam data
EKG. Alat yang akan dibuat memiliki tiga elektroda yang akan
ditempelkan pada nadi di kedua lengan dan daerah di belakang
mata kaki sebelah kanan. Alat perekam data EKG sebenarnya
adalah subbagian dari bagan pada Gambar 7. Alat ini adalah alat
penerima sinyal dari elektroda (electrode), melakukan amplifikasi
atau penguatan sinyal dan reduksi noise (filtering) dan juga
melakukan konversi dari sinyal analog menjadi sinyal digital atau
Analog to Digital Circuit (ADC). Hanya modul ADC yang
menggunakan modul sudah jadi yang terdapat pada papan
pengembangan FPGA. Pada saat percobaan kami menggunakan
papan pengembangan FPGA Basys2 keluaran manufaktur
Digilent.

Gambar 8. Rangkaian penguat sinyal dan filter.

Implementasi JST dan Wavelet pada FPGA

33

Data uji coba di-generate menggunakan alat jadi bernama Patient


Simulator terdapat pada Gambar 9.

Gambar 9. Patient Simulator

Keseluruhan modul terkait perekaman sinyal EKG kami gabungkan


dalam satu tempat. Modul-modul ini akan disambungkan dengan
sebuah komputer untuk menampung sinyal yang dikirim secara
serial dari port serial pada papan pengembangan FPGA ke port
USB. Foto dari prototype alat perekam EKG terdapat pada Gambar
10

Gambar 10. Prototype Alat perekam EKG dengan Patient Simulator.

34

Implementasi JST dan Wavelet pada FPGA

Tahap ketiga adalah mencoba membuat alat yang lebih portable


serta menggabungkan implementasi algoritma klasifikasi beserta
beberapa modul yang belum diimplementasikan ke dalam FPGA.

1.5 Pengembangan
Controller

Automatic

Sleep

Awakening

Kesehatan tidur adalah salah satu bidang kesehatan yang belum


banyak diteliti di Indonesia. Menurut penuturan dari Dr. Andreas
Prasadja seorang dokter spesialis kesehatan tidur dari Rumah Sakit
Mitra Kemayoran bahwa selain kebutuhan olahraga dan juga
kebutuhan gizi yang diperoleh melalui makanan, manusia juga
membutuhkan tidur sebagai penunjang pola hidup sehat. Ada
berbagai penyakit yang dapat didiagnosis melalui observasi
tentang bagaimana seseorang tidur.
Tidur yang cukup identik dengan sebanyak apa proposi tidur
dalam yang dialami oleh seseorang selama delapan jam tidur.
Pengetahuan tentang tingkat kedalaman tidur seseorang dapat
membantu dokter untuk menentukan apakah seseorang tidurnya
telah cukup atau belum. Proses inilah yang ingin diotomatisasi agar
alarm hanya akan berbunyi ketika kita sudah tidur dengan cukup.
Riset kali ini berusaha untuk mengembangkan sebuah alat serupa
jam tangan yang memiliki kemampuan membangunkan seseorang
ketika tidurnya telah mencukupi dengan memanfaatkan sensor
EKG. Pengembangan alat tersebut menuntut kami untuk terlebih
dahulu mengembangkan sistem kontrol yang dapat melakukan
mengukur tingkat kedalaman tidur seseorang.
Pada dasarnya pengamatan tentang tingkat tidur seseorang dapat
dilakukan melalui pengamatan sinyal electroencephalography
(EEG). Hanya saja peralatan EEG tidaklah sederhana (tidak praktis)
seperti pada Gambar 11 dan juga harganya mahal. Tantangan
inilah yang ingin dipecahkan pada riset kali ini, yakni mencari
kemungkinan penggunaan sinyal alternatif (dalam riset ini sinyal
EKG) untuk mendeteksi tingkat kedalaman tidur seseorang.

Implementasi JST dan Wavelet pada FPGA

35

Gambar 11. Gambar seseorang yang dipasangkan sensor EEG (sumber:


http://en.wikipedia.org/wiki/File:EEG_cap.jpg)

Berbagai eksplorasi pun dilakukan, salah satunya adalah meneliti


seberapa baik Jaringan Saraf Tiruan (JST) dapat mengklasifikasi
tingkat kedalaman tidur seseorang dengan memanfaatkan sinyal
EKG. Sepanjang perjalanan riset ini maka diketahui beberapa
kemungkinan pengembangan yang bisa dilakukan melalui
pemanfaatan sinyal EKG.
Murah

Sadar
EKG

Portable
Gangguan
Tidur

Central Sleep
Apnea (Nerve)

Tingkatan
Tidur

Non REM

Deep
Sleep

Obstructive Sleep
Apnea
(Respiratory)

REM
Automatic Sleep
Awakening
Controller

Gambar 12. Rancangan Eksplorasi Riset Automatic Sleep Awakening


Controller

36

Implementasi JST dan Wavelet pada FPGA

Pada Gambar 12 terlihat bahwa penggunaan EKG sebagai sumber


eksplorasi memungkinkan kami membuat alat yang cukup murah
dan portable. Melalui EKG juga ternyata dapat dideteksi beberapa
penyakit gangguan tidur diantaranya, Central Sleep Apnea dan
Obstructive Sleep Apnea.
Melalui EKG juga ternyata kita dapat mendeteksi berbagai
tingkatan tidur. Tingkatan tidur ini oleh beberapa ilmuwan secara
garis besar dibagi menjadi tiga tingkat. Tingkatan tersebut adalah
sadar atau awake, Non Rapid Eye Movement (NREM), dan Rapid
Eye Movement (REM). Tingkatan deep sleep atau tingkatan tidur
dalam terdapat pada REM. Manusia pada umumnya berada pada
tingkatan non REM dan REM ketika tidur. Kedua tingkatan atau
kondisi ini saling bergantian dilewati oleh manusia yang sedang
tidur. Banyaknya deep sleep dalam satu kali tidur dapat
menunjukan apakah seseorang sudah memiliki tidur yang cukup
atau belum.
Pada penelitian ini kami masih menggunakan prototype yang sama
seperti pada penelitian untuk pendeteksian Arrhythmia. Penelitian
ini pun juga dibagi ke dalam tiga tahap. Tahap pertama adalah
studi literatur mengenai semua hal terkait kesehatan tidur. Tahap
kedua adalah pembuatan aplikasi desktop untuk mendeteksi
tingkat tidur seseorang. Tahap ketiga atau terakhir adalah
membuat alat yang lebih kecil yang dapat digunakan pada
pergelangan tangan sehingga dapat dibawa oleh penggunanya
termasuk pada saat tidur.
Pada tahap pertama kami meneliti tentang klasifikasi tahapan tidur
seseorang dan juga penyakit-penyakit tidur yang memungkinkan
seseorang kehilangan tidur yang cukup untuk menyehatkan
badannya. Salah satu penyakit tidur yang cukup berbahaya adalah
Sleep Apnea. Sleep Apnea yang dipelajari adalah Obstructive Sleep
Apnea. Obstructive sleep apnea (OSA) disebabkan oleh
penyumbatan jalan napas yang terjadi berulang kali pada saat tidur
akibat penyempitan saluran pernapasan. Pengidap OSA biasanya
memiliki kelebihan berat badan, sehingga terdapat peningkatan
langit-langit lunak dan lidah pada bagian tenggorokan dan
sekitarnya. Gejalanya mirip dengan orang yang mendengkur, hanya

Implementasi JST dan Wavelet pada FPGA

37

saja orang mengidap OSA mengalami pemberhentian nafas selama


beberapa detik ketika tidur. Inilah yang kemudian diamati melalui
sinyal EKG.
Pada tahap kedua kami membuat aplikasi desktop untuk mengolah
data yang telah diperoleh dari alat perekam EKG. Data sinyal
terlebih dahulu diolah melalui proses deteksi gelombang QRS.
Setelah QRS berhasil terdeteksi, maka data akan diolah kembali
melalui proses ekstraksi fitur. Fitur-fitur data didapatkan melalui
pendataan secara statistik beberapa hal terkait RR interval atau
jarak dari satu titik R ke titik R lainnya. RR interval dapat diturunkan
kembali ke berbagai fitur lainnya seperti AVNN (average/rata-rata
RR interval), SDNN (standar deviasi RR interval), rMSSD (akar
kuadrat dari rata-rata dari kuadrat selisih antar RR interval yang
saling bersebelahan) dan lain-lain. Hasil perolehan dan klasifikasi
data EKG kemudian divisualisasikan dan ditampilkan melalui user
interface pada komputer.
Tahap ketiga adalah membuat alat yang lebih kecil yang dapat
digunakan pada pergelangan tangan selayaknya jam tangan. Kami
menggunakan desain rangkaian elektronika alat perekam EKG yang
diperkecil dengan komponen-komponen elektronika Surface
Mount Device (SMD). Pada tahap ini kami berharap rancangan
FPGA pun bisa difabrikasi ke dalam chip sehingga mampu
ditanamkan pula bersama dengan komponen-komponen SMD.
Namun sebagai alternatif tidak tertutup kemungkinan akan
digunakan rangkaian elektronika lainnya seperti microcontroller
ataupun komputer kecil lainnya apabila memang hal ini tidak dapat
tercapai.

1.6 Pengembangan Smart Ultrasonography (USG) untuk


Monitoring Kesehatan Jarak Jauh.
Berdasarkan hasil Survey Demografi Kesehatan Indonesia (SDKI)
tahun 2007, angka kematian ibu dan bayi masih cukup tinggi
walaupun cenderung menurun dari tahun ke tahun. Penyebab
terjadinya hal ini adalah masih banyak masyarakat Indonesia yang
kurang paham akan pentingnya pemeriksaan janin selama masa
38

Implementasi JST dan Wavelet pada FPGA

kehamilan. Indonesia juga memiliki berbagai permasalahan lain


yang menjadi pemicu tingginya angka ini seperti jumlah tenaga
medis dan jumlah alat pemeriksaan janin dalam kandungan yang
masih sangat terbatas.
Tenaga medis khususnya dokter ahli/ spesialis obstetri dan
ginekologi selain jumlahnya yang terbatas juga memiliki distribusi
yang tidak merata. Obstetri (berasal dari bahasa Latin
obstare, yang berarti siap siaga/ to stand by) adalah spesialisasi
pembedahan yang menangani pelayanan kesehatan wanita selama
masa kehamilan, persalinan dan nifas. Secara umum ginekologi
adalah ilmu yang mempelajari kewanitaan. (science of women).
Namun secara khusus adalah ilmu yang mempelajari dan
menangani kesehatan alat reproduksi wanita (organ kandungan
yang terdiri atas rahim, vagina dan indung telur).
Para ahli tersebut cenderung berpusat di kota besar sehingga
masyarakat pedesaan sulit mendapatkan akses pelayanan
kesehatan yang memadai dari dokter ahli. Alat kedokteran untuk
melakukan pemeriksaan kandungan jumlahnya pun terbatas dan
hanya dimiliki oleh rumah sakit besar.
Permasalahan tersebut memicu kami untuk mencoba
mengembangkan piranti cerdas berdasarkan prinsip kerja USG.
Alat yang dibangun nantinya akan memiliki fungsi yang sama
dengan alat USG yang telah ada di pasaran ditambah beberapa
keunggulan lainnya. Keunggulan tersebut antara lain adalah ukuran
yang kecil dan terdapat suatu sistem kecerdasan yang mampu
melakukan klasifikasi secara otomatis.
Alat yang dibangun berukuran kecil dimaksudkan agar mudah
dibawa oleh tenaga medis yang berada di medan yang cukup sulit
seperti di daerah pelosok tanah air. Alat yang dirancang
sedemikian rupa akan menyerupai alat komunikasi seperti telepon
seluler. Alat ini juga akan dilengkapi dengan sistem cerdas yang
mampu melakukan pengukuran secara otomatis terhadap biometri
janin dan mampu melakukan klasifikasi secara otomatis jika
ditemukan suatu kejanggalan ketika berlangsungnya pemeriksaan.
Tidak hanya itu, alat yang dirancang juga memiliki sistem

Implementasi JST dan Wavelet pada FPGA

39

komunikasi yang memungkinkan tenaga medis yang berada di


daerah untuk mengirimkan hasil pencitraannya kepada dokter
spesialis yang berada di kota. Dengan kata lain, alat dirancang
sehingga para pasien yang ada di daerah terpelosok dapat
melakukan telehealth monitoring.
Penelitian dan pengembangan alat ini masih dalam tahap awal,
yakni studi literatur mengenai USG dan semua teori terkait USG.
Kami kedepannya akan juga mencoba mengukur kemungkinan
penggunaan perangkat FPGA ataupun perangkat-perangkat lainnya
untuk melakukan prototyping. Pada subbab ini akan lebih banyak
menjelaskan informasi terkait USG sebagai tambahan pengetahuan
bagi pembaca. Harapannya selain mendapat pengetahuan baru,
pembaca juga dapat terpicu melakukan penelitian di bidang USG
ini.
USG telah menjadi teknik pencitraan medis populer selama
bertahun-tahun. USG atau ultrasonografi adalah teknik pencitraan
medis yang menggunakan gelombang suara frekuensi tinggi dan
gema untuk melihat sebuah organ yang ada didalam tubuh baik
dalam tubuh manusia maupun hewan. Teknik ini mirip dengan
yang digunakan oleh ekolokasi (metode pemantulan bunyi untuk
mengatur pergerakan) kelelawar, paus dan lumba-lumba, serta
sonar yang digunakan oleh kapal selam. Pada Gambar 13 terdapat
salah satu jenis peralatan USG. Berikut ilustrasi dari cara kerja
sinyal USG.

40

Implementasi JST dan Wavelet pada FPGA

Gambar 13. Peralatan Medical Ultrasound Scanner (Sumber:


http://commons.wikimedia.org/wiki/File:AlokaPhoto2006a.jpg)

1. Mesin USG memancarkan pulsa frekuensi tinggi (1 sampai 5


megahertz) ke dalam tubuh Anda dengan menggunakan sebuah
alat ukur yang dinamakan Probe.
2. Gelombang suara masuk yang masuk kedalam tubuh hingga
menabrak batas antar jaringan (misalnya antara cairan dan
jaringan lunak, jaringan lunak dan tulang).
3. Beberapa gelombang suara bisa dipantulkan kembali ke probe,
namun ada juga yang tidak dapat dipantulkan kembali ke probe
sehingga gambar yang dihasilkan dilayar kurang maksimal
4. Mesin menghitung jarak dari probe ke jaringan atau organ
(batas) dengan menggunakan kecepatan suara dalam jaringan
(5.005 ft/s atau 1, 540 m/s) dan waktu kembalinya setiap gema
5. Mesin menampilkan jarak dan intensitas pantulan pada layar,
membentuk gambar dua dimensi
Tipikal pada USG dapat dijelaskan bahwa, jutaan pulsa dan gema
yang dikirim dan diterima setiap detik oleh Probe dapat
dipindahkan sepanjang permukaan tubuh dan siku untuk

Implementasi JST dan Wavelet pada FPGA

41

mendapatkan berbagai pandangan. Sebuah mesin USG dasar


memiliki bagian-bagian berikut.
Transducer - probe yang mengirim dan menerima gelombang
suara
Central Processing Unit (CPU) - Komputer yang melakukan
semua perhitungan dan berisi pasokan daya listrik untuk dirinya
sendiri dan probe transducer
Kontrol pulsa Transducer - perubahan amplitudo, frekuensi dan
durasi dari pulsa yang dipancarkan dari probe transducer
Monitor - menampilkan gambar dari data USG yang diproses oleh
CPU
Keyboard / cursor - input data dan mengambil pengukuran dari
layar
Disk penyimpanan perangkat (disket, CD) - menyimpan gambar
yang diperoleh
Printer - mencetak gambar dari data yang ditampilkan
Probe transducer adalah bagian utama dari mesin USG. Probe
transducer membuat gelombang suara dan menerima gema. Probe
transducer menghasilkan dan menerima gelombang suara
menggunakan sebuah prinsip yang disebut piezoelectric (listrik
tekanan). Kristal piezoelectric ditemukan oleh Piere Curie dan
Jacques pada tahun 1880. Bila kristal ini diberikan tegangan listrik,
maka lempengan kristal akan mengalami vibrasi sehingga timbullah
ultrasonik. Sebaliknya, vibrasi pada kristal akan menghasilkan
listrik. Oleh karena itu maka kristal piezoelectric digunakan sebagai
transducer pada ultrasonografi.
CPU adalah otak dari mesin USG. CPU pada dasarnya adalah
sebuah komputer yang berisi microprocessor, memory, amplifier,
dan pasokan listrik untuk microprocessor dan probe transducer.
CPU mengirim arus listrik ke probe transducer untuk memancarkan
gelombang suara, dan juga menerima pulsa listrik dari probe yang
diciptakan dari gema yang dikembalikan. CPU melakukan semua
perhitungan yang terlibat dalam pengolahan data.
Setelah data mentah diproses, CPU membentuk gambar pada
monitor. CPU juga dapat menyimpan data olahan dan atau gambar

42

Implementasi JST dan Wavelet pada FPGA

pada disk. Kontrol pulsa tranducer memungkinkan operator, yang


disebut ultrasonographer, untuk mengatur dan mengubah
frekuensi dan durasi pulsa USG, serta modus scan mesin. Perintah
dari operator dijabarkan ke dalam perubahan arus listrik yang
diterapkan pada kristal piezoelectric tranducer dalam pemeriksaan.
Berikut beberapa jenis sonografi medis
1. Kardiologi (Echocardiography): USG untuk jantung digunakan
untuk diagnosis penyakit jantung.
2. Endocrinology.
3. Gastroenterology.
4. Gynaecology (Gynaecologic USG): organ wanita, uterus,
ovarium dll.
5. Obstetrik (Obstetric USG): perkembangan fetus selama
kehamilan.
6. Ophthalmology (A-scan ultrasonography, B-scan ultrasonography): pencitraan mata.
7. Urologi: menentukan jumlah cairan pada kantung kemih,
tendon, otot, saraf, permukaan tulang.
8. Intravaskular
Ultrasound
(IVUS):
teknik
pencitraan
menggunakan kateter yang dirancang khusus dengan probe
ultrasound kecil, sehingga dapat dimasukkan dalam pembuluh
darah. Umumnya digunakan untuk pencitraan dari arteri
jantung (koroner).
9. Intervensional, biopsi, transfusi (penyakit hemolitik dari bayi
yang baru lahir).
10. Contrast-Enhanced Ultrasound (CEUS): menggunakan contrast
agent ultrasound pada USG biasa. Digunakan untuk mengukur
laju alir darah.
USG telah digunakan dalam berbagai pengelolaan klinis, termasuk
pada bagian kebidanan, ginekologi, kardiologi dan kanker.
Keuntungan utama dari USG adalah bahwa struktur tertentu dapat
diamati tanpa menggunakan radiasi. USG dapat melakukan
pendeteksian jauh lebih cepat daripada sinar-X atau teknik
radiografi lainnya. Berikut ini adalah daftar singkat beberapa
bidang medis yang menggunakann alat USG.
Obstetri dan Ginekologi

Implementasi JST dan Wavelet pada FPGA

43

Mengukur ukuran janin untuk menentukan usia kehamilan


Menentukan posisi janin untuk melihat apakah posisi kepala
dalam keadaan normal atau sungsang
Melihat jumlah janin di dalam rahim
Memeriksa jenis kelamin bayi (jika daerah kelamin terlihat jelas)
Melihat tumor
Kardiologi
Melihat bagian dalam jantung untuk mengidentifikasi struktur
normal atau abnormal
Pengukuran aliran darah melalui jantung dan pembuluh darah
utama

44

Implementasi JST dan Wavelet pada FPGA

Bab 2 Jaringan Saraf Tiruan dan


Wavelet
Jaringan Saraf Tiruan (JST) atau Artificial Neural Network (ANN)
adalah teknik kecerdasan buatan yang dibuat dengan mengambil
inspirasi dari cara kerja sel-sel saraf di otak. Sel saraf atau neuron
pada otak saling menembakan sinyal dari satu neuron ke neuron
lainnya. Hal ini pun terjadi pada JST, neuron yang merupakan
pemodelan matematika saling menembakan impuls berupa hasil
perhitungan dari neuron tersebut ke neuron lainnya. Selain JST
pada bab ini juga terdapat pembahasan mengenai algoritma
kompresi wavelet.

2.1 Jaringan Syaraf Tiruan


Sub bab ini akan menjelaskan mengenai definisi JST dan beberapa
algoritma JST mulai dari yang paling sederhana hingga yang paling
kompleks.
2.1.1 Sejarah Jaringan Syaraf Tiruan
Pengembangan Jaringan Saraf Tiruan (JST) sudah dimulai pada
sekitar 50 tahun yang lalu. Pengembangan ini didorong oleh
keinginan untuk lebih memahami organ otak sekaligus mencoba
meniru sebagian keunggulannya. Kemajuan dalam bidang
neurobiologi memungkinkan para peneliti untuk membangun
model-model matematika dari sel-sel syaraf untuk mensimulasikan
perilaku jaringan syaraf manusia.
Model pertama diperkenalkan oleh McCulloch dan Pitts pada
tahun 1943. Hebb, pada tahun 1949, kemudian mengusulkan
sebuah aturan pembelajaran yang menjelaskan bagaimana sebuah
jaringan sel-sel syaraf belajar. Rosenblatt, pada tahun 1958,
menemukan algoritma pembelajaran perceptron, serta Widrow
dan Hoff mengusulkan varian dari pembelajaran perceptron yang
disebut aturan Widrow-Hoff.

Implementasi JST dan Wavelet pada FPGA

45

Pada tahun 1969, Minsky dan Papert menunjukkan keterbatasan


teoritis dari jaringan neural lapis tunggal (single-layer neural
networks) sehingga menyebabkan penurunan riset dalam bidang
ini. Tetapi, pada tahun 1980-an, pendekatan JST kembali hidup
dimulai dari Hopfield yang memperkenalkan ide minimisasi energi
dalam fisika ke dalam JST pada tahun 1982.
Pada pertengahan dekade 80-an, algoritma propagasi-balik
(Backpropagation) yang dikembangkan oleh Rumelhart, Hinton
dan Williams memberikan pengaruh besar tidak hanya bagi risetriset JST, bahkan bagi ilmu komputer, kognitif dan biologi yang
lebih luas. Algoritma ini menawarkan solusi untuk pembelajaran
jaringan neural lapis-banyak (multi-layer neural networks) sehingga
dapat mengatasi keterbatasan jaringan neural lapis tunggal.
Kesuksesan pendekatan ini ditunjukkan oleh sistem NETTalk yang
dikembangkan Sejnowski dan Rosenberg pada tahun 1987, yakni
suatu sistem yang melakukan konversi teks bahasa Inggris menjadi
suara bicara manusia.
2.1.2 Pemrosesan
Processing)

Informasi

Neural

(Neural

Information

Neuron-neuron biologis memancarkan sinyal elektrokimia pada


jalur-jalur syaraf. Setiap neuron menerima sinyal-sinyal dari neuron
lain melalui sambungan khusus yang disebut synapses. Sebagian
sinyal input cenderung menyebabkan neuron tereksitasi;
sementara sebagian yang lain justru menghalanginya. Ketika efek
kumulatif dari sinyal tersebut melebihi suatu batas threshold,
neuron yang bersangkutan akan menembakkan sinyal ke neuron
lainnya.
Jaringan Syaraf Tiruan (JST) merupakan sistem pemrosesan
informasi yang memiliki karakteristik serupa dengan jaringan
neural biologis. Setiap neuron menerima input dari neuron-neuron
sebelumnya yang tersambung ke neuron tersebut. Setiap input
dikalikan dengan sebuah bobot (weight) yang ada pada synapse
tempat input itu mengalir menuju suatu neuron. Jumlah seluruh
input yang telah dikalikan bobot tersebut diakmuluasi pada neuron

46

Implementasi JST dan Wavelet pada FPGA

tujuan dan akan menentukan kemungkinan neuron tujuan untuk


menembakkan kembali sebuah sinyal baru. Nilai ini yang disebut
level aktivasi (activation level). Secara matematis, untuk suatu
neuron, setiap input Xi yang dimodulasikan oleh sebuah bobot Wi
sehingga jumlah total input adalah: i Xi Wi . Atau dalam bentuk
vektor, X W di mana X = *X1, X2, , Xn+ dan W = *W1, W2, ,
Wn].

X1

W
X2

...

Wn
Xn
Y = X1W1 + X2W2 + + XnWn

Gambar 14. Model komputasi JST

Jumlah dari sinyal input yang telah dikalikan bobot akan diproses
oleh sebuah fungsi aktivasi (activation function) untuk
menghasilkan sinyal output. Jika sinyal output tidak bernilai nol,
maka sinyal akan ditransmisikan lagi sebagai keluaran menuju
neuron selanjutnya.
Suatu JST dimodelkan dalam suatu himpunan nodes dan arrows.
Sebuah node mewakili sebuah neuron dan sebuah arrow mewakili
sebuah hubungan/koneksi tempat sinyal mengalir dari satu neuron
ke neuron lainnya. Pada setiap koneksi inilah diasosiasikan sebuah
nilai bobot. Nodes yang berada pada lapisan pertama berhubungan
dengan masukan sistem atau disebut juga neuron input. Nodes
lainnya terhubung dengan nodes yang berada di lapisan tengah
atau langsung berhubungan dengan keluaran sistem yang berada
pada lapisan akhir. Ada berbagai jenis JST yang telah diciptakan
dan ada tiga hal yang akan mencirikan setiap Jenis JST, yakni,

Implementasi JST dan Wavelet pada FPGA

47

1. pola
hubungan/koneksi
antara
elemen-elemen
sederhananya, yakni neuron;
2. metode penentuan bobot koneksi antar neuron;
3. fungsi aktivasinya.
Perilaku dinamis dari JST digambarkan oleh suatu persamaan
diferensial yang menggambarkan bagaimana bobot koneksi
jaringan berubah dari waktu ke waktu. Representasi pertama
mengasumsikan variabel waktu yang kontinyu dan dapat
digunakan untuk simulasi jaringan pada komputer analog,
sementara yang kedua menggunakan variabel waktu diskrit dan
biasanya dipakai untuk melakukan simulasi jaringan pada
komputer digital.
JST memecahkan masalah dengan pembelajaran dan
pengorganisasian secara mandiri. Intelegensinya didapatkan dari
perilaku kolektif mekanisme komputasi yang sederhana. Berikut
kelebihan-kelebihan dari algoritma JST,

Akuisisi pengetahuan di bawah derau (noise) dan


ketidakpastian (uncertainty): JST dapat melakukan
generalisasi, abstraksi dan ekstraksi sifat-sifat statistik dari
data.
Representasi pengetahuan yang fleksibel: JST membuat
representasinya sendiri dengan pengorganisasian mandiri.
Pemrosesan pengetahuan yang efisien: JST dapat
melakukan komputasi secara paralel, yang dikenal paralleldistributed processing atau PDP.
Toleransi kesalahan: Dengan representasi pengetahuan
terdistribusi dan pengkodean informasi yang ganda, kinerja
sistem tidak menurun drastis berkaitan dengan responnya
terhadap kesalahan (faults/errors).

2.1.3 Jaringan Syaraf Tiruan Untuk Pengenalan Pola


JST dapat mengenali, mengklasifikasikan, mengkonversi dan
mempelajari pola-pola, seperti yang disampaikan pada buku ini.
Sebuah pola (pattern) merupakan deskripsi kualitatif atau

48

Implementasi JST dan Wavelet pada FPGA

kuantitatif dari sebuah objek atau konsep atau kejadian. Sebuah


kelas pola (pattern class) adalah sebuah himpunan pola yang
memiliki sifat-sifat yang serupa. Pengenalan pola (pattern
recognition) merujuk kepada kategorisasi data masukan ke dalam
kelas-kelas yang teridentifikasi dengan mengenali ciri-ciri atau
atribut-atribut signifikan dari data tersebut.
Dalam teori pengenalan pola tradisional, sebuah pola diwakili oleh
sebuah vektor ciri n-dimensi (n-dimensional feature vector) atau
sebuah titik dalam ruang n-dimensi. Vektor ciri merupakan vektor
dari nilai-nilai ciri yang disusun dalam suatu urutan tertentu.
Contohnya, satu orang dapat digambarkan sebagai vektor dari
[usia, tinggi badan, berat badan]. Dalam pendekatan JST, sebuah
pola direpresentasikan dengan sebuah himpunan nodes bersama
level aktivasinya.
Sebuah jaringan syaraf tiruan dapat digunakan untuk mengenali
pola (pattern recognition) suatu input yang direpresentasikan
sebagai sebuah vektor. Hal ini dapat dilakukan dengan cara
melakukan pelatihan (traning) pada neural network dan melakukan
penyesuaian pada bobot tiap hubungan antar neuron berulang kali
sampai jaringan syaraf tiruan dapat mengenali pola dengan
batasan error yang telah ditentukan. Proses training-testing untuk
pengenalan pola dapat dianalogikan dengan proses pengenalan
benda pada manusia: setelah melihat objek serupa berkali-kali
(training), seseorang dapat mengenali sebuah objek meskipun
objek tersebut merupakan objek yang berbeda, tetapi memiliki
fitur yang sama dari objek pada proses training. Perhatikan gambar
di bawah ini untuk lebih memahami analogi proses traning dan
testing dalam pengenalan pola.

Implementasi JST dan Wavelet pada FPGA

49

Gambar 15. Analogi pengenalan pola JST pada manusia.

2.1.4 Fungsi-Fungsi Aktivasi


Fungsi aktivasi merupakan fungsi yang menentukan level aktivasi
atau suatu nilai yang akan ditembakan ke neuron selanjutnya.
Level aktivasi ini biasanya dikirim lagi sebagai sinyal input untuk
beberapa neuron pada lapisan selanjutnya. Sebuah neuron hanya
dapat mengirim sinyal satu kali dalam satu waktu, tetapi sinyal
tersebut dapat dikirim sekaligus ke beberapa neuron lainnya pada
lapisan selanjutnya.
Operasi dasar dari sebuah neuron melibatkan penjumlahan sinyal
input berbobot (input yang telah dikalikan bobot) dan
menggunakan hasil penjumlahan tersebut sebagai masukan bagi
sebuah fungsi aktivasi. Bagi neuron yang ada di lapisan input atau
yang berhubungan dengan input dari sistem secara keseluruhan,
fungsi aktivasinya adalah fungsi identitas. Terdapat fungsi aktivasi
lain yang sama untuk seluruh neuron pada semua lapisan lainnya.
Aturan ini tidak mutlak tetapi sudah sangat umum dalam hal
implementasi jaringan saraf tiruan. Fungsi-fungsi aktivasi yang
sering digunakan antara lain,
Fungsi Identitas
f x x,

50

untuk semua x .

Implementasi JST dan Wavelet pada FPGA

Fungsi ini biasanya digunakan pada neuron-neuron lapisan input


dari sistem. Artinya aktivasi dari neuron-neuron input biasanya
sama dengan input-nya itu sendiri, yang dalam hal ini merupakan
input dari sistem secara keseluruhan.
f(x)

Gambar 16. Fungsi identitas

Fungsi Tangga Biner (Binary Step Function)

1, if x
f x
0, if x
di mana adalah suatu nilai threshold.
Jaringan lapis tunggal sering menggunakan fungsi tangga ini untuk
mengubah input bersih (net input), yang merupakan variabel
kontinu, menjadi output berupa nilai biner (0 atau 1). Nilai
threshold di sini menjadi garis pemisah antara daerah dengan
respons aktivasi positif dan daerah dengan respons aktivasi negatif.
Fungsi tangga biner sering disebut juga sebagai fungsi threshold
atau fungsi Heaviside.
f(x)

Gambar 17. Fungsi tangga biner

Implementasi JST dan Wavelet pada FPGA

51

Fungsi Tangga Bipolar

1, if x
f x
1, if x
di mana adalah suatu nilai threshold.
Fungsi tangga bipolar serupa dengan fungsi tangga biner. Hanya
saja, fungsi tangga bipolar memiliki daerah hasil {-1, 1}.

f(x)
1

-1

Gambar 18. Fungsi tangga bipolar

Fungsi Sigmoid Biner


Fungsi sigmoid (kurva berbentuk S) ternyata cukup berguna. Fungsi
logistik dan fungsi tangen hiperbolik merupakan fungsi sigmoid
yang paling sering digunakan. Fungsi-fungsi tersebut terutama
memiliki kelebihan dalam melatih JST menggunakan algoritma
propagasi-balik karena hubungan yang sederhana antara nilai
fungsi pada suatu titik dengan nilai turunannya, sehingga
mengurangi biaya komputasi selama pembelajaran.
Fungsi logistik adalah fungsi sigmoid dengan daerah hasil pada
interval 0 sampai dengan 1. Fungsi ini khususnya digunakan
sebagai fungsi aktivasi untuk JST di mana nilai outputnya biner atau
terletak pada interval 0 sampai dengan 1. Fungsi ini disebut juga
fungsi sigmoid biner karena daerah hasilnya terletak pada interval
0 sampai dengan 1.

52

Implementasi JST dan Wavelet pada FPGA

f x

1
,
1 exp x

di mana merupakan parameter kecuraman (steepness


parameter) yang diberikan. Umumnya nilai dipilih sama dengan
1. Fungsi ini memiliki turunan pertama:
f x f x 1 f x

f(x)
1

Gambar 19. Fungsi sigmoid biner

Fungsi Sigmoid Bipolar


Fungsi sigmoid biner bisa diskalakan sehingga memiliki daerah hasil
pada sembarang interval sesuai dengan permasalahan yang
diberikan. Yang paling umum adalah daerah hasil dari -1 sampai
dengan 1. Fungsi hasil proses skala ini disebut fungsi sigmoid
bipolar, sesuai dengan daerah hasilnya. Jika f(x) adalah fungsi
sigmoid biner, maka fungsi sigmoid bipolarnya:

g x 2 f x 1
2
1
1 exp x
1 exp x

1 exp x

dengan sebagai parameter kecuraman, yang biasanya dipilih


sama dengan 1. Turunan pertama fungsi ini adalah:

Implementasi JST dan Wavelet pada FPGA

53

g x

1 g x 1 g x

Perhatikan bahwa fungsi sigmoid bipolar ini berhubungan dengan


fungsi hiperbolik tangen:

exp x exp x
exp x exp x
1 exp 2 x

1 exp 2 x
hx 1 h x 1 h x
h x

f(x)
1

-1

Gambar 20. Fungsi sigmoid bipolar

2.1.5 Jaringan Syaraf Tiruan Propagasi Balik (Backpropagation


Neural Network)
Backpropagation atau propagasi balik adalah salah satu algoritma
dalam artificial neural network (jaringan syaraf tiruan) yang
pertama kali ditemukan oleh Arthur E. Bryson dan Yu-Chi Ho pada
1969. David E. Rumelhart, Geoffrey E. Hinton dan Ronald J.
Willliams kemudian mengembangkan algoritma ini dan
mempopulerkan algoritma ini pada tahun 1986.
Prinsip dasar algoritma propagasi-balik memiliki tiga fase:
Fase feedforward pola input pembelajaran
Fase kalkulasi dan Backpropagation of error yang didapat.
Fase penyesuaian bobot.

54

Implementasi JST dan Wavelet pada FPGA

Arsitektur yang digunakan adalah jaringan perceptron lapis banyak


(multi-layer perceptrons). Hal ini merupakan generalisasi dari
arsitektur perceptron lapis tunggal (single-layer perceptron).
Secara umum, algoritma jaringan ini membutuhkan waktu
pembelajaran yang memang lambat, namun setelah
pembelajaran/pelatihan selesai, aplikasinya akan memberikan
output yang sangat cepat.
Karakteristik
Jaringan Backpropagation mempunyai karakteristik sebagai berikut :

Jaringan lapis banyak

Terdiri dari satu lapisan unit-unit masukan, satu atau lebih lapisan
tersembunyi dan satu lapisan unit keluaran. Arsitektur jaringannya
pada dasarnya serupa dengan perceptron, namun memiliki lapisan
tersembunyi (hidden layers), sehingga disebut multi-layer
perceptrons.
Setiap neuron pada suatu lapisan dalam jaringan Propagasi-Balik
mendapat sinyal masukan dari semua neuron pada lapisan
sebelumnya beserta satu sinyal bias.

Fungsi aktivasi

Fungsi aktivasi untuk jaringan propagasi-balik harus memiliki


beberapa karakteristik : kontinu, dapat didiferensiasikan, dan
monoton tidak turun. Juga lebih diinginkan demi efisiensi
komputasi, turunan fungsinya juga mudah dihitung. Biasanya,
fungsinya diharapkan untuk bersaturasi atau mendekati maksimum
dan minimumnya secara asimtotik.
Fungsi yang sering digunakan adalah :
fungsi sigmoid biner (range : [0,1]),
f ( x)

1
1 e x

dengan turunannya,

Implementasi JST dan Wavelet pada FPGA

55

f ' ( x) f ( x ) 1 f ( x )

fungsi sigmoid bipolar (range : [-1,1]),


f ( x)

2
1
1 e x

dengan turunannya,
f ' ( x)

1
1 f ( x) 1 f ( x)
2

(12)

Gambar 21. Arsitektur Backpropagation

Arsitektur
Suatu jaringan neural lapis-banyak (MLP) dengan satu lapis
tersembunyi ditunjukkan oleh Gambar 21. Pada gambar
tersebut, lapis masukan (input layer) ditunjukkan oleh unit-unit

56

Implementasi JST dan Wavelet pada FPGA

Xi, sementara lapis keluaran (output layer) ditunjukkan oleh


unit-unit Yk. Lapis tersembunyi (hidden layer) ditunjukkan oleh
unit-unit Zj. Dalam hal ini, lapis tersembunyi dapat terdiri lebih
dari satu lapisan.
Bias untuk suatu unit output Yk, diberikan oleh w0k. Bias ini
bertindak seolah sebagai bobot pada koneksi yang berasal dari
suatu unit/neuron yang keluarannya selalu 1. Unit-unit
tersembunyi juga dapat memiliki bias. Aliran sinyal pada
gambar dinyatakan dengan arah panah. Sedangkan, pada fase
propagasi-balik, sinyal dikirim pada arah yang berlawanan.

Algoritma
o Algoritma ini didasarkan pada aturan error-correction
learning rule. Pelatihannya terdiri dari tiga tahap:

proses pelatihan pola masukan secara feedforward;

penghitungan dan propagasi-balik dari error yang


didapat;

penyesuaian bobot.

o Penerapan JST cukup dengan melibatkan proses


feedforward-nya saja.
o Algoritma ini mengasumsikan hanya terdapat satu lapisan
tersembunyi (hidden layer) saja. Untuk jaringan dengan
lebih dari satu lapisan tersembunyi, algoritma di bawah
cukup dimodifikasikan sedikit. Pada algoritma di bawah,
pada fase feedforward langkah 4 dilakukan berulang-ulang
untuk setiap lapisan tersembunyi dengan menganggap
sinyal masukan terbobot berasal dari unit di lapisan
sebelumnya. Sedangkan pada fase Backpropagation,
langkah 7 dilakukan berulang-ulang untuk setiap lapisan
tersembunyi.

Implementasi JST dan Wavelet pada FPGA

57

Pada dasarnya satu lapisan tersembunyi sudah cukup untuk


sembarang pemetaan kontinyu dari pola input ke pola
output pada sembarang tingkat akurasi. Meskipun, dua
lapis tersembunyi bisa membuat pembelajaran lebih
mudah pada beberapa situasi.

o Algoritma Pembelajaran
Langkah 0. Inisialisasi bobot
acak yang kecil)

(biasanya digunakan nilai

Set laju pembelajaran

Langkah 1. Selama syarat henti salah, lakukan langkah 2


9
Langkah 2. Untuk setiap pasangan pelatihan (masukan
dan target), lakukan langkah 3 8.

Feedforward:
Langkah 3. Setiap unit masukan (Xi, i = 1, , n) menerima
sinyal masukan xi dan meneruskannya ke
seluruh unit pada lapisan di atasnya (hidden
units).
Langkah 4. Setiap unit tersembunyi (Zj, j = 1, , p)
menghitung total sinyal masukan terbobot,
n

z _ in j v0 j xi vij ,
i 1

lalu menghitung sinyal keluarannya dengan


fungsi aktivasi,
z j f z _ in j ,

58

Implementasi JST dan Wavelet pada FPGA

dan mengirimkan sinyal ini ke seluruh unit


pada lapisan di atasnya (lapisan output).
Langkah 5. Setiap unit output (Yk, k = 1, , m) menghitung
total sinyal masukan terbobot,
p

y _ in k w0 k x j w jk ,
j 1

lalu menghitung sinyal keluaran dengan fungsi


aktivasi,
y k f y _ in k .

Backpropagation of error:
Langkah 6. Setiap unit output (Yk, k = 1, , m) menerima
sebuah pola target yang sesuai dengan pola
masukan
pelatihannya.
Unit
tersebut
menghitung informasi kesalahan,
k tk yk f ' y _ ink

kemudian
menghitung
koreksi
bobot
(digunakan untuk mengubah wjk nanti),
w jk k z j

dan menghitung koreksi bias


w0 k k ,

serta mengirimkan nilai k ke unit pada


lapisan di bawahnya.
Langkah 7. Setiap unit tersembunyi (Zj, j = 1, , p)
menghitung selisih input (dari unit-unit pada
layer di atasnya),
m

_ in j k w jk ,
k 1

Implementasi JST dan Wavelet pada FPGA

59

lalu mengalikannya dengan turunan fungsi


aktivasi untuk menghitung informasi errornya,
j _ in j f ' z _ in j ,

selanjutnya menghitung koreksi bobot untuk


mengubah vij nanti,
vij j xi ,

dan menghitung koreksi biasnya,


v0 j j .

Perubahan bobot dan bias:


Langkah 8. Setiap unit output (Yk, k = 1, , m) mengubah
bias dan bobot-bobotnya (j = 0, , p):
w jk (new) w jk (old ) w jk .

Setiap unit tersembunyi (Zj, j = 1, , p)


mengubah bias dan bobotnya (i = 1, , n):
vij (new) vwij (old ) vij

Langkah 9. Uji syarat henti :


n

Jika besar total squared-error

(t
k 1

yk ) 2

lebih kecil dari toleransi yang telah ditentukan


atau jumlah epoh pelatihan sudah mencapai
epoh maksimum, maka selesai; jika tidak maka
kembali ke langkah 1
Nilai toleransi ( ) yang digunakan adalah 1 0 .
o Algoritma Pengujian
Langkah 0. Inisialisasi bobot

60

Implementasi JST dan Wavelet pada FPGA

(digunakan nilai bobot yang diperoleh dari


algoritma pelatihan)
Langkah 1. Untuk setiap vektor masukan x, lakukan
langkah 2-4
Langkah 2. Set nilai aktivasi dari unit masukan, i = 1, ., n
x i si

Langkah 3. Untuk j = 1, , p
n

z _ in j v0 j xi vij ,
i 1

z i f z _ in j .

Langkah 4. Untuk k = 1, , m
m

y _ in k w0 k z j w jk ,
j 1

y k f y _ in k .

o Pemilihan bobot awal dan bias

Pemilihan bobot awal mempengaruhi apakah jaringan


akan mencapai error minimum global (atau lokal), dan
jika tercapai, seberapa cepat konvergensinya.

Update bobot tergantung pada fungsi aktivasi unit yang


lebih dalam (pemberi sinyal input) dan turunan fungsi
aktivasi unit yang lebih luar (penerima sinyal input),
sehingga perlu dihindari pemilihan bobot awal yang
menyebabkan keduanya bernilai 0.

Jika menggunakan fungsi sigmoid, nilai bobot awal tidak


boleh terlalu besar karena dapat menyebabkan nilai
turunannya menjadi sangat kecil (jatuh di daerah
saturasi). Sebaliknya juga tidak boleh terlalu kecil,
karena dapat menyebabkan net input ke unit

Implementasi JST dan Wavelet pada FPGA

61

tersembunyi atau unit output menjadi terlalu dekat


dengan nol, yang membuat pembelajaran terlalu
lambat.

Di sini diberikan dua contoh model inisialisasi bobot dan


bias.

Inisialisasi Acak.
Bobot dan bias diinisialisasi nilai acak antara -0.5
dan 0.5 (atau antara -1 dan 1, atau pada interval lain
yang sesuai).

Inisialisasi Nguyen-Widrow.
Cara ini memberikan laju pembelajaran yang lebih
cepat. Berikut contohnya untuk arsitektur dengan
satu lapis tersembunyi.
o Bobot dari unit/neuron tersembunyi ke
unit/neuron output diinisialisasi dengan nilai
acak antara -0.5 dan 0.5.
o Bobot dari neuron input ke neuron tersembunyi
diinisalisasi sebagai berikut :
(1). Set :
n = jumlah unit input
p = jumlah unit tersembunyi
= faktor skala = 0.7 p 1 / n = 0.7

p.

(2). Untuk setiap unit tersembunyi (j = 1, , p).


lakukan (3) (6).
(3). Untuk i = 1, , n (semua unit input), vij(old) =
bilangan acak antara -0.5 dan 0.5 (atau
antara dan ).

62

Implementasi JST dan Wavelet pada FPGA

(4). Hitung nilai norm ||vj(old)||.


(5). Inisialisasi ulang bobot-bot dari unit input (i =
1, , n) :
(6). Set bias : v0j = bilangan acak antara dan .
Di dalam Gambar 22 sampai dengan Gambar 26, dapat dilihat
ilustasi eksekusi algoritma Backpropagation. Pada ilustrasi JST
tersebut, terdapat 3 neuron dalam lapisan input, 2 neuron pada
lapisan tersembunyi dan tiga neuron pada lapisan output.
Fase Feedforward :

Implementasi JST dan Wavelet pada FPGA

63

Gambar 22. Feedforward menuju lapisan tersembunyi

Gambar 23. Feedforward menuju lapisan output

64

Implementasi JST dan Wavelet pada FPGA

Implementasi JST dan Wavelet pada FPGA

65

Fase Backpropagation:

Gambar 24. Menghitung error lapis tersembunyi

66

Implementasi JST dan Wavelet pada FPGA

Gambar 25. Penyesuaian Bobot berdasarkan error pada lapisan


tersembunyi

Implementasi JST dan Wavelet pada FPGA

67

Gambar 26. Penyesuaian Bobot berdasarkan error pada lapisan output

68

Implementasi JST dan Wavelet pada FPGA

2.1.6 Algoritma Fuzzy Learning Vector Quantization (FLVQ)


Fuzzy Learning Vector Quantization (FLVQ) (Rochmatullah 2009)
merupakan algoritma pengenalan pola yang merupakan
pengembangan dari algoritma Learning Vector Quantization (LVQ).
FLVQ memanfaatkan teori fuzzy pada proses pembentukan vektor
masukan, proses pembelajaran dan proses penentuan vektor
pemenang. Pemanfaatan teori fuzzy pada pembentukan vektor
masukan bertujuan agar distribusi frekuensi data masukan dapat
direpresentasikan. Adopsi terhadap konsep fuzzy membuat FLVQ
memiliki keunggulan komputasi yang cepat layaknya LVQ dan
tingkat pengenalan yang tinggi layaknya Backpropagation
(Rochmatullah 2009).
Proses pembelajaran FLVQ menerapkan paradigma supervised
learning dan bekerja dengan prinsip winner take all yang artinya
hanya ada satu vektor yang paling mirip dengan vektor masukan.
Diakhir proses pembelajaran, akan terbentuk vektor
pewakil/vektor bobot yang paling mirip dengan vektor masukan
(vektor pemenang) yang kemudian vektor pemenang ini akan di
update bobotnya menjauhi atau mendekati vektor masukan.
Karakteristik

Arsitektur

Arsitektur FLVQ terdiri atas 3 lapisan yaitu lapisan masukan,


lapisan keluaran, dan lapisan tersembunyi yang berfungsi
menghitung nilai similaritas vektor masukan dan vektor pewakil.
1. Lapisan input : terdiri dari neuron-neuron yang menerima pola
input dari data. Lapisan input ini menggambarkan fitur-fitur
dari data, banyakya jumlah neuron pada lapisan input adalah
sebanyak jumlah fitur dari data.

Implementasi JST dan Wavelet pada FPGA

69

Lapisan
Masukan

Lapisan
Tersembunyi

Lapisan
Keluaran

mean

2
3

Feature
ke 1

Keluaran
ke 1
1

1
1

Feature
ke 2

mean

max

Keluaran ke 2

Feature
ke i

Keluaran
ke j

mean

2
3

Gambar 27. Arsitektur Jaringan FLVQ


.

2. Lapisan keluaran : lapisan keluaran berisi neuron-neuron yang


menerima hasil komputasi dari lapisan tersembunyi, banyaknya
neuron pada lapisan keluaran adalah sebanyak kelas pada data
3. Lapisan tersembunyi : lapisan ini berisi neuron-neuron vektor
bobot/vektor pewakil. Pada lapisan ini dilakukan pencarian nilai
similaritas antara setiap neuron pada lapisan input dengan
setiap neuron vektor pewakil.
Gambar 27 memperlihatkan arsitektur jaringan FLVQ dengan i
jumlah neuron input pada layer input, j jumlah kelas keluaran, dan i
x j jumlah neuron vektor pewakil. Dengan menggunakan FLVQ
diharapkan ditemukannya vektor pewakil yang paling representatif
sehingga dapat mengenali data masukkan yang diberikan.

70

Implementasi JST dan Wavelet pada FPGA

Data masukan berupa data fuzzy

Sebelum data input siap untuk diproses kedalam FLVQ, terlebih


dahulu perlu dilakukan proses fuzzyfication pada data input. Proses
fuzzyfication ini akan mengubah data input yang tadinya berupa
data crisp menjadi vektor fuzzy. Berikut merupakan tahapan dalam
proses fuzzyfication data:
1. Data input dikelompokkan berdasarkan target kelasnya
sebanyak grup fuzzy, grup fuzzy disini adalah banyaknya data
yang dikelompokan. Misalnya data input dikelompokkan
menjadi 5 untuk setiap vektor masukan (vektor fuzzy).

Gambar 28. Ilustrasi Segitiga Fuzzy (Rochmatullah 2009)

2. Untuk setiap 5 data input, pada masing-masing fitur dihitung


nilai maksimum, minimum dan mean (nilai rata-rata) sehingga
terbentuk vektor fuzzy.
Bentuk vektor masukan ini dinamakan segitiga fuzzy. Gambar 28
memperlihatkan ilustrasi bentuk dari segitiga fuzzy. Segitiga fuzzy
ini merupakan pernyataan fungsi keanggotaan fuzzy untuk data
hasil pengukuran, dengan nilai mean (rata-rata) memiliki derajat
keanggotaan 1 sedangkan nilai maksimum dan minimum memiliki
derajat keanggotaan 0.

Proses Inisialisasi Vektor Pewakil Awal

FLVQ memerlukan inisialisasi nilai vektor pewakil awal dan juga


nilai laju pembelajaran untuk dapat memulai proses pembelajaran.
Inisialisasi nilai vektor pewakil dapat dilakukan dengan cara

Implementasi JST dan Wavelet pada FPGA

71

mengambil secara acak atau mengambil nilai vektor masukan yang


paling awal pada kumpulan vektor masukan dengan kelas-kelas
yang bersesuaian. Misalnya untuk mendapatkan nilai inisialisasi
awal pada vektor pewakil di kelompok kelas pertama pada lapisan
tersembunyi, ambil nilai secara acak/paling awal pada vektor
masukan yang mempunyai target kelas pertama. Selanjutnya untuk
laju pembelajaran rentang nilai yang digunakan adalah antara 0-1.
Sebelum pelatihan dimulai perlu dilakukan pengurutan data vektor
masukan secara zig-zag, hal ini agar pada setiap iterasi seluruh
kelas pada vektor masukan masuk kedalam proses pelatihan

Fungsi Aktivasi (Nilai Similiaritas)

Pada FLVQ penggunaan fungsi aktifasi digantikan oleh pencarian


nilai similiaritas. Nilai similaritas atau nilai kemiripan digunakan
untuk mencari vektor pewakil yang paling mirip (closest vector).
Nilai similaritas ini diperoleh dengan melakukan operasi fuzzy
intersection, yaitu dengan mencari nilai maksimum dari irisan
antara vektor masukkan dengan vektor pewakil. Nilai similaritas
dapat diperoleh dengan langkah berikut (Matul 2010) :

Misalkan x adalah vektor input dari n buah fitur dan wi adalah


vektor pewakil untuk kategori i maka dapat dinyatakan bahwa
x = ( x1, x2, x3, , xn)
dengan fungsi keanggotaan untuk vektor fuzzy x adalah:
hx = (hx1, hx2, hx3, , hxn)
dan untuk vektor pewakil i dapat dinyatakan:
wi = (wi1, wi2, wi3, , win)
dengan fungsi keanggotaan untuk wi adalah:
hwi = (hwi1, hwi2, hwi3, , hwin)

Maka nilai similaritas (ij) antara vektor pewakil dengan vektor


masukan dapat dijelaskan pada gambar di bawah ini:

72

Implementasi JST dan Wavelet pada FPGA

hxi

ij

wi

hwij

Gambar 29. Ilustrasi pencarian nilai similaritas antar 2 vektor fuzzy

Berdasarkan Gambar 29 nilai similaritas dapat diperoleh dengan


rumus berikut :
ij = max( hxj hwij).

Algoritma Pembelajaran

Setelah diperoleh nilai similaritas untuk setiap vektor pewakil,


kemudian untuk tiap kelompok kelas keluaran pada lapisan
tersembunyi dicari nilai rata-rata (mean) similaritasnya Pencarian
nilai rata-rata similaritas dapat diperoleh dengan rumus
=

=0

.. (2.3)

dimana i merupakan kelompok kelas keluaran, dan j adalah jenis


fitur yang menjadi masukan FLVQ.
Untuk memperoleh vektor pewakil pemenang, dilakukan dengan
cara mencari nilai maksimum dari nilai rata-rata similaritas pada
setiap kelompok kelas keluaran diatas. Setelah didapatkan vektor
pewakil pemenang, langkah selanjutnya adalah melakukan update
nilai vektor pewakil pemenang tersebut. Pada FLVQ terdapat 2
langkah untuk melakukan update nilai vektor pewakil pemenang
yaitu :

Melakukan pergeseran vektor pewakil pemenang, menjauhi


atau mendekati vektor masukan berdasarkan kasus yang
muncul.

Implementasi JST dan Wavelet pada FPGA

73

Melakukan perlebaran/penyempitan nilai fuzziness vektor


pewakil pemenang berdasarkan kasus yang muncul.

Terdapat 3 kasus yang muncul pada saat proses pembelajaran


FLVQ yaitu :
1. Bila lapisan keluaran menyatakan bahwa target output
kelas dari suatu vektor input sesuai dengan kelas vektor
pewakil pemenang, maka vektor pewakil pemenang akan
digeser posisinya mendekati vektor masukan. Kemudian
nilai fuzziness vektor pewakil pemenang diperlebar.
Pergeseran vektor pewakil pemenang dilakukan dengan
rumus berikut :
= ( 1 ( () ))
+ 1 = +
+ 1 = () +
+ 1 = () +
dimana,

: laju pembelajaran yang bernilai antara 0-1.


i
: nilai similaritas kelompok kelas keluaran kei.
dij
: nilai bobot perubahan vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j.
xj
: nilai rata-rata vektor masukan pada fitur
ke-j.
wij(t)
: nilai rata-rata vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
sebelum pergeseran.
wij(t+1)
: nilai rata-rata vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
setelah pergeseran.
w(l)ij(t)
: nilai minimum vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
sebelum pergeseran.

74

Implementasi JST dan Wavelet pada FPGA

w(l)ij(t+1)

: nilai minimum vektor pewakil pada


kelompok kelas keluaran ke-i dan fitur ke-j
setelah pergeseran.
w(r)ij(t)
: nilai maksimum vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
sebelum pergeseran.
w(r)ij(t+1)
: nilai maksimum vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
setelah pergeseran.
Sedangkan untuk melakukan perlebaran fuziness-nya
dilakukan dengan menggunakan rumus berikut :
+ 2 = () + 1 + ( ( + 1 () + 1 ))
+ 2 = () + 1 ( (() + 1 + 1 ))

dimana,

w(l)ij(t+2)

w(r)ij(t+2)

: konstanta penyempitan dan pelebaran


yang bernilai antara 0-1.
: nilai maksimum vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
setelah pergeseran.
: nilai maksimum vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
setelah penyempitan.
x

ij

hxi

wi

hwij

Gambar 30. Vektor Pewakil Awal sebelum dilakukan pergeseran

Implementasi JST dan Wavelet pada FPGA

75

wi

hxi

hwij

Gambar 31. Vektor Pewakil didekatkan ke Vektor Masukan


wi

hwij

Vektor Pewakil Baru


Vektor Pewakil Lama

Gambar 32. Vektor pewakil diperlebar fuzzinessnya

2. Bila lapisan keluaran menyatakan bahwa target output


kelas dari suatu vektor input tidak sesuai dengan kelas
vektor pewakil pemenang, maka vektor pewakil pemenang
akan digeser posisinya menjauhi vektor masukan.
Kemudian nilai fuzziness vektor pewakil pemenang
dipersempit. Pergeseran vektor pewakil pemenang
menjauhi vektor pewakil dilakukan dengan rumus berikut :
= ( 1 ( () ))
+ 1 =
+ 1 = ()
+ 1 = ()

76

Implementasi JST dan Wavelet pada FPGA

dimana :

: laju pembelajaran yang bernilai antara 0-1.


: nilai similaritas kelompok kelas keluaran kei.
dij
: nilai bobot perubahan vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j.
xj
: nilai rata-rata vektor masukan pada fitur ke
j.
wij(t)
: nilai rata-rata vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
sebelum pergeseran.
wij(t+1)
: nilai rata-rata vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
setelah pergeseran.
w(l)ij(t)
: nilai minimum vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
sebelum pergeseran.
w(l)ij(t+1)
: nilai minimum vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
setelah pergeseran.
w(r)ij(t)
: nilai maksimum vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
sebelum pergeseran.
w(r)ij(t+1)
: nilai maksimum vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
setelah pergeseran.
Sedangkan untuk melakukan penyempitan fuzziness-nya
dilakukan dengan menggunakan rumus berikut :
+ 2 = () + 1 ( ( + 1 () + 1 ))
+ 2 = () + 1 + ( (() + 1 + 1 ))

Dimana,

: konstanta penyempitan dan pelebaran


yang bernilai antara 0-1.

Implementasi JST dan Wavelet pada FPGA

77

w(l)ij(t+2)

: nilai maksimum vektor pewakil pada


kelompok kelas keluaran ke-i dan fitur ke-j
setelah pergeseran.
: nilai maksimum vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
setelah penyempitan.

w(r)ij(t+2)

wi

hwij

hxi

ij

Gambar 33. Vektor pewakil sebelum dilakukan pergeseran


x

hxi

wi

hwij

Gambar 34. Vektor pewakil menjauhi vektor masukan.

78

Implementasi JST dan Wavelet pada FPGA

wi

hwij

Vektor Pewakil Baru


Vektor Pewakil Lama

Gambar 35. Vektor pewakil dipersempit fuzzinessnya

3. Bila lapisan keluaran menyatakan bahwa target output


kelas dari suatu vektor masukan sesuai dengan kelas vektor
pewakil pemenang akan tetapi nilai similaritas antara
vektor masukan dengan vektor pewakil bernilai 0, maka
nilai fuzziness vektor pewakil pemenang diperlebar.
Pelebaran
nilai
fuzziness-nya
dilakukan
dengan
menggunakan rumus berikut :
+ 2 = () ( ( () ))
+ 2 = () + ( ( + ))
dimana :

: konstanta penyempitan dan pelebaran


yang bernilai antara 0-1.
wij(t)
: nilai rata-rata vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
sebelum pergeseran. fitur ke-j setelah
pergeseran.
w(l)ij(t)
: nilai minimum vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
sebelum pergeseran.
w(l)ij(t+2)
: nilai maksimum vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
setelah pergeseran.

Implementasi JST dan Wavelet pada FPGA

79

w(r)ij(t)

w(r)ij(t+2)

: nilai maksimum vektor pewakil pada


kelompok kelas keluaran ke-i dan fitur ke-j
sebelum pergeseran.
: nilai maksimum vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
setelah penyempitan.
x

wi

hwij

hxi

Gambar 36. Irisan memiliki nilai similaritas 0


wi

hwij

Vektor Pewakil Baru


Vektor Pewakil Lama

Gambar 37. Vektor pewakil diperlebar fuzzinessnya

Algoritma Pengujian

Untuk pengujian FLVQ hal yang dilakukan tidak jauh berbeda


dengan yang dilakukan saat pembelajaran FLVQ, hanya saja pada
saat pengujian FLVQ tidak melakukan update vektor pewakil
pemenang. Hasil keluaran dari tahap pengujian ini akan
dibandingkan dengan target awal dari setiap vektor masukan. Hal

80

Implementasi JST dan Wavelet pada FPGA

ini dilakukan untuk semua vektor masukan agar dapat diketahui


tingkat pengenalan dari algoritma FLVQ.

FLVQ dengan Matriks Similarity Analisis (MSA)

Dalam proses pembelajarannya, FLVQ akan dihentikan ketika telah


mencapai epoch yang ditentukan. Akan tetapi, tingkat pengenalan
FLVQ belum tentu optimal saat telah mencapai batasan epoch atau
tingkat pengenalan FLVQ sudah optimal saat belum mencapai
batasan epoch. Oleh karena itu diperlukan sebuah metode analisis
yang dapat menentukan batasan kapankah suatu proses
pembelajaran pada FLVQ bisa dihentikan. MSA merupakan suatu
analisis terhadap matriks yang menggambarkan rata-rata vektor
pewakil pada sebuah epoch. Dengan matriks analisis tersebut
dapat ditentukan kapan suatu pembelajaran akan berhenti,
caranya adalah dengan menentukan batasan nilai similaritas vektor
pewakil.
MSA dibentuk dengan cara menjumlahkan kedalam matriks yang
berukuran n x n setiap nilai similaritas hasil keluaran dari FLVQ
untuk setiap kelas tertentu. Setelah epoch selesai maka nilai MSA
dapat dihitung dengan rumus sebagai berikut :

1
=

max
(( )())
=1

dengan :
i

= banyak vektor masukan (jumlah sensor)

= vektor pewakil dalam suatu cluster FLVQ

= banyak vektor masukan = i

= semua vektor pelatihan per-kelas

= 1,2,3,...N

Berikut adalah gambar dari matriks similaritas pada FLVQ:

Implementasi JST dan Wavelet pada FPGA

81

11

=
1

dimana,
M = matriks similaritas dengan dimensi n x n
n = banyaknya kelas keluaran
Kondisi ideal yang ingin dicapai bila nilai MSA sudah menyerupai
matriks identitas. Bilamana jaringan FLVQ-MSA sudah mencapai
kondisi matriks identitas, maka proses pelatihan dapat dihentikan,
demikian pula jika nilai diagonal MSA sudah mencapai nilai batasan
(threshold) yang ditentukan maka pelatihan dapat dihentikan.
Penyesuaian FLVQ dengan MSA dilakukan dengan tahapan sebagai
berikut :

Pada pelatihan awal cari nilai MSA awal.


Pada pelatihan selanjutnya nilai dari MSA awal
dibandingkan dengan nilai MSA pada pelatihan sekarang
Jika nilai MSA awal lebih besar maka, nilai dari vektor
pewakil yang memiliki nilai MSA awal akan menggantikan
nilai dari vekor pewakil pada cluster yang baru .

Berikut merupakan tabel ilustrasi dari penyesuaian FLVQ dengan


MSA
Tabel 1. Ilustrasi FLVQ MSA pada epoch ke-1

Similaritas
Cluster I
Cluster 2
Cluster 3
Total

82

Kategori Output
I
0.6
0.1
0.5

II

III
0.22

0.2
0.2

0.45
0.23

Implementasi JST dan Wavelet pada FPGA

Tabel 2. Ilustrasi FLVQ MSA pada epoch ke-2

Similaritas
Cluster I
Cluster 2
Cluster 3
Total

Kategori Output
I

II

0.4
0.1

0.5

0.3

0.5

III
0.22
0.65
0.43

Dari Tabel 1 dan


Tabel 2 terlihat bahwa nilai fitness pada kategori output ke I pada
epoch ke-1 lebih tinggi dibandingkan nilai fitness pada kategori
output ke I pada epoch ke-2. Sehingga nilai vektor pewakil sekarang
pada kategori output ke i akan digantikan dengan nilai vektor
pewakil dengan kategori output ke i pada epoch ke-1.
2.1.7 Particle Swarm Optimization (PSO)
Particle Swarm Optimization (PSO) pertama kali diperkenalkan oleh
R.C. Eberhart dan J. Kennedy pada tahun 1995. PSO adalah
algoritma untuk pencarian solusi optimum dari suatu
permasalahan. Ide ini muncul dari pengamatan terhadap tingkah
laku kelompok burung dalam mencari makan. Setiap individu
burung yang mencari makan pada daerah pencariannya masingmasing lalu saling memberikan informasi mengenai pencariannya
kepada kelompoknya sehinga diperoleh informasi bersama
mengenai sumber makanan terbanyak. Setiap individu burung
dianggap sebagai partikel pada PSO. Pada implementasi FLVQ
untuk pencarian nilai vektor pewakil optimum lapisan-lapisan
tersembunyilah yang mewakilkan partikel dan nilai vektor pewakil
yang dianggap sebagai solusi.
Dalam pencarian solusi, PSO akan melakukan update perubahan
nilai vektor pewakil dengan menggunakan persamaan berikut:
Dalam pencarian solusi, PSO akan melakukan update perubahan
nilai vektor pewakil dengan menggunakan persamaan berikut:

Implementasi JST dan Wavelet pada FPGA

83

+ 1 = + ( + 1)
Notasi + 1 merupakan vektor posisi dari partikel ke-i pada
iterasi ke-i, notasi ( + 1) merupakan vektor kecepatan partikel
ke-i pada iterasi ke-i. Adapun nilai dari vektor kecepatan ( + 1)
dapat diperoleh dengan persamaan berikut:
+ 1 = ( + 1
2

dimana ;

merupakan faktor kontriksi yang mempunyai rentang nilai


sebesar (0,1).
masing-masing merupakan vektor kecepatan ke-i (i=
1,2,3,...) pada waktu iterasi ke-t (t = 1,2,3,...).
vektor posisi partikel ke-i (i= 1,2,3,...) pada waktu iterasi
ke-t (t = 1,2,3,...).
1 merupakan faktor akselerasi yang mengatur distribusi dari
pengaruh komponen kognitif.
2 merupakan faktor akselerasi yang mengatur distribusi dari
pengaruh komponen sosial.
merupakan nilai vektor posisi optimum yang berhasil
ditemukan oleh suatu partikel (local best)
merupakan nilai vektor posisi optimum yang berhasil
ditemukan oleh sekumpulan partikel (global best).
Rand() merupakan fungsi acak yang menghasilkan nilai antara
0 dan 1.

Pada parameter 1 dan 2 , jika nilai 1 lebih besar dari nilai 2 maka
faktor kognitif akan lebih besar pengaruhinya, sedangkan jika nilai
2 lebih besar dari nilai 1 maka faktor sosial akan lebih besar
pengaruhnya. Faktor kognitif yang lebih besar akan membuat
vektor pewakil akan semakin mendekati local best yang artinya
partikel akan semakin konvergen ke local best-nya. Faktor sosial
yang lebih besar membuat vektor pewakil akan semakin mendekati

84

Implementasi JST dan Wavelet pada FPGA

global best yang artinya semua partikel akan bergerak ke arah yang
konvergen. Untuk permasalahan dengan solusi tunggal, pengaruh
komponen sosial yang lebih besar akan memberikan hasil yang
lebih efisien. Sementara pengaruh komponen kognitif yang lebih
besar mungkin akan memberikan keuntungan pada permasalahan
dengan banyak solusi (Rochmatullah 2009).
Terdapat beberapa faktor yang dapat membuat PSO berhenti
yaitu:
1. Iterasi yang terjadi sudah melebihi batas waktu yang
ditentukan. Jika batas waktu terlalu singkat, pencarian akan
berhenti sebelum solusi ditemukan. Jika batas waktu terlalu
panjang, pada saat terjadi kegagalan dalam pencarian PSO akan
terus berjalan walaupun sudah mencapai titik konvergen
(pergerakan tidak signifikan).
2. Solusi yang bisa diterima sudah ditemukan. Jika dalam
pencarian ternyata ditemukan solusi yang dapat diterima,
maka pencarian akan dihentikan. Batas diterima di sini adalah
ambang batas dimana solusi yang ditemukan sudah sesuai
dengan apa yang diinginkan.
3. Tidak ada peningkatan dalam beberapa iterasi. Jika perubahan
posisi partikel cukup kecil, maka dapat dipastikan PSO sudah
menuju ke titik konvergen. Atau jika perhitungan kecepatan
pada PSO memberikan hasil yang mendekati nol maka partikel
hampir tidak bergerak, dan perhitungan PSO dapat dihentikan.
Pseudocode algoritma PSO
repeat
for each particle i
// set local best
if f(xi) is better than f(lbest) then
lbest = xi
end if
// set global best
if f(xi) is better than f(gbest) then
gbest = xi
end if

Implementasi JST dan Wavelet pada FPGA

85

end for
for each particle i
update velocity using equation (3.1)
update position using equation (3.2)
end for
until stopping condition is true

2.1.8 Fuzzy Learning Vector Quantization - Particle Swarm


Optimization (FLVQ-PSO)
FLVQ-PSO merupakan pengembangan dari metode FLVQ, metode
ini menggabungkan beberapa konsep yang telah dijelaskan
sebelumnya, seperti metode FLVQ, MSA, dan PSO. Metode FLVQPSO memiliki beberapa keunggulan dibandingkan dengan metode
JST lainnya, seperti kecepatan pada saat pelatihan yang
dikarenakan menerapkan metode FLVQ, penentuan nilai fitness
dengan MSA, dan penentuan posisi yang paling optimal dengan
metode PSO (Rochmatullah 2009).
Hal yang membedakan metode FLVQ-PSO dengan FLVQ adalah
saat melakukan pelatihan. Pada pelatihan vektor pewakil-vektor
pewakil terlebih dahulu akan diperbaharui posisinya dengan
melakukan metode FLVQ setelah itu vektor pewakil akan kembali
diperbaharui posisinya dengan rumus PSO. Setelah sekian epoch
vektor pewakil tersebut akan semakin merapat satu sama lain dan
pada akhirnya akan konvergen. Hal ini merupakan kelebihan dari
metode pelatihan PSO yang akan konvergen ke suatu titik solusi
permasalahan.
Karakterisitik

Proses Inisialisasi Vektor Pewakil Awal

Metode FLVQ-PSO dikembangkan atas dasar untuk mengurangi


ketergantungan FLVQ terhadap inisialisasi vektor pewakil awal
yang harus baik. Hal ini dilakukan dengan membentuk vektor
pewakil awal sebanyak partikel yang dikehendaki. Inisialisasi vektor
pewakil ini dilakukan secara acak berdasarkan kelas keluaran yang
diharapkan sehingga akan didapatkan vektor pewakil awal baik.

86

Implementasi JST dan Wavelet pada FPGA

Kumpulan lapisan cluster yang dibentuk


secara acak cluster ke 2

Lapisan
Lapisan
cluster ke 1 cluster ke 2

Lapisan
cluster ke n

Gambar 38. Ilustrasi Inisalisasi Vektor Pewakil Awal

Nilai Fitness

FLVQ-PSO menggunakan nilai fitness untuk menentukan nilai lokal


terbaik (local best) dan global terbaik (global best) dari partikel.
Nilai fitness ini diperoleh melalui fungsi fitness dari MSA, dimana
fungsi fitness pada FLVQ-PSO adalah jumlah nilai diagonal utama
pada MSA dikurangi jumlah nilai non diagonal utama pada MSA.
Misalkan MSA terdiri dari elemen mij dengan 1,2,3, . . ,
dan ordo matriks serta partikel ke-k, maka nilai fitness pada
parikel dapat dihitung dengan rumus,


=1


=1 =1

Global best dan Local best

Global best dan local best digunakan untuk memperbaharui nilai


dari vektor pewakil. Global best pada FLVQ-PSO adalah vektor
pewakil yang memiliki nilai fitness paling baik (vektor pewakil
terbaik). Jika untuk setiap iterasi vektor pewakil pada masing-

Implementasi JST dan Wavelet pada FPGA

87

masing partikel dibandingkan nilai fitness-nya. Setelah itu vektor


pewakil dengan nilai fitness terbaik dibandingkan dengan vektor
terbaik sebelumnya, jika nilai fitness hasil dari vektor pewakil
terbaik pada iterasi ke i lebih baik dari vektor pewakil terbaik pada
iterasi ke i-1, maka vektor pewakil terbaik pada iterasi ke i yang
akan dijadikan global best.
Local best pada FLVQ-PSO yaitu vektor pewakil terbaik untuk setiap
partikel, local best ini diperoleh dengan membandingkan nilai
fitness vektor pewakil setiap partikel pada iterasi ke-i dengan nilai
fitness vektor pewakil setiap partikel pada iterasi ke i-1. Jika nilai
fitness dari hasil dari vektor pewakil terbaik pada iterasi ke i lebih
baik dari vektor pewakil terbaik pada iterasi ke i-1, maka vektor
pewakil terbaik pada iterasi ke i yang akan dijadikan local best.
= max
( )
= max
( , 1 )
dimana,
= indeks lapisan cluster yang memiliki nilai fitness
tertinggi.
= vektor pewakil terbaik untuk masing masing lapisan
cluster.
Berdasarkan fungsi fitness ini dapat diketahui vektor pewakil yang
memiliki posisi paling representatif yaitu jika semakin besar selisih
antara nilai diagonal terhadap nilai non-diagonal pada matriks
similaritas atau dengan kata lain nilai pada MSA mendekati nilai
matriks identitas.

Perubahan Posisi Vektor Pewakil pada FLVQ-PSO

Seperti yang telah diutarakan sebelumnya, perubahan posisi vektor


pewakil dilakukan dengan 2 tahap yaitu dengan menggunakan
proses pergeseran pada FLVQ dan proses pergeseran pada PSO,
pada sub bab ini terdapat penjelasan mengenai perubahan posisi
vektor pewakil pada PSO.

88

Implementasi JST dan Wavelet pada FPGA

Kumpulan vektor
masukan untuk
pelatihan

Kumpulan lapisan
cluster yang berisi
vektor pewakil

vektor pewakil terbaik


untuk masing2 lapisan
cluster (local best)

Vektor pewakil
terbaik (global
best)

Gambar 39. Ilustrasi pencarian vektor kecepatan pada FLVQ-PSO

Pada Gambar 39 dapat dilihat proses perubahan vektor pewakil.


Kecepatan patikel didapat dengan menggunakan rumus (PSO)
dengan mencari nilai selisih antara nilai rata-rata local best dengan
vektor pewakil dan selisih antara nilai rata-rata global best dengan
vektor pewakil. Hal lain yang mempengaruhi nilai kecepatan adalah
faktor kognitif dan faktor sosial, jika faktor kognitif lebih besar
maka perubahan vektor pewakil akan cenderung mendekati local
best-nya, sedangkan jika faktor sosial lebih besar maka perubahan
vektor pewakil akan cenderung mendekati global best-nya. Setelah
nilai dari kecepatan diperoleh, maka perhitungan perubahan
vektor pewakil yaitu dengan menjumlahkan nilai tengah vektor
pewakil dengan nilai kecepatannya. Selanjutnya perubahan nilai
minimum dan nilai maksimum vektor pewakil didapat dengan
menghitung selisih nilai rata-rata vektor pewakil sebelum
perubahan dengan nilai rata-rata vektor pewakil setelah
perubahan, kemudian dijumlahkan dengan nilai minimum dan
maksimum-nya.

Algoritma Pelatihan

Pada Algoritma FLVQ PSO, seperti halnya FLVQ, sebelum memulai


pelatihan perlu dilakukan pengurutan vektor masukan secara zig-

Implementasi JST dan Wavelet pada FPGA

89

zag, hal ini agar pada setiap iterasi seluruh kelas pada vektor
masukan masuk kedalam proses pelatihan (Rocmatullah 2009).
Setelah dibentuk data yang terurut secara zig-zag tahapan-tahapan
yang harus dilakukan pada proses pelatihan FLVQ PSO adalah
sebagai berikut :
Langkah 1 :
Inisialisasi vektor pewakil sebanyak partikel yang dikehendaki.
Inisialisasi vektor pewakil ini dilakukan secara acak berdasarkan
kelas keluaran yang diharapkan sehingga akan didapatkan vektor
pewakil awal baik.
Langkah 2 :
Lakukan proses pelatihan dengan menggunakan FLVQ. Langkah ini
akan menghasilkan nilai similaritas antara vektor masukan dan
vektor pewakil pada masing masing lapisan cluster. Di akhir
langkah ini akan terbentuk vektor pewakil yang sudah diperbaharui
dengan proses pelatihan FLVQ.
Langkah 3 :
Bentuk MSA sebanyak jumlah partikel(lapisan cluster) berukuran n
x n dimana n adalah banyaknya kelas keluaran. Update nilai MSA
dari nilai similaritas pemenang untuk masing-masing lapisan
cluster.
Langkah 4 :
Proses pelatihan dengan PSO baru bisa dilakukan jika nilai MSA
untuk masing- masing kolom pada matriks sudah ter-update atau
sebuah kelompok data zig-zag sudah di proses.
4a. Hitung nilai fitness untuk masing MSA setiap lapisan cluster
seperti yang telah dijelaskan sebelumnya pada sub-bab tentang
FLVQ-PSO.
4b. Tentukan local best setiap cluster dengan membandingkan nilai
fitness dari MSA sebelum pelatihan dengan MSA setelah pelatihan
90

Implementasi JST dan Wavelet pada FPGA

4c. Tentukan global best dari local best.


4d. Lakukan perubahan vektor pewakil dengan rumus
+ 1 = + ( + 1)
+ 1 = ( + 1
2

4e. Setelah nilai rata-rata pada vektor pewakil ter-update, nilai


minimum dan nilai maksimum pada vektor pewakil bisa dihitung
yaitu dengan menjumlahkan nilai minimum dan nilai maksimum
tersebut dengan selisih perubahan antara vektor pewakil sebelum
perubahan dengan vektor pewakil setelah perubahan.

+ 1 = () +

+ 1 = () +

dimana,
wij(t)

: nilai rata-rata vektor pewakil pada kelompok kelas


keluaran ke-i dan fitur ke-j sebelum pergeseran.
wij(t+1) : nilai rata-rata vektor pewakil pada kelompok kelas
keluaran ke-i dan fitur ke-j setelah pergeseran.
w(l)ij(t)
: nilai minimum vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
sebelum pergeseran.
w(l)ij(t+1)
: nilai minimum vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
setelah pergeseran.
w(r)ij(t)
:nilai maksimum vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
sebelum pergeseran.
w(r)ij(t+1)
:nilai maksimum vektor pewakil pada
kelompok kelas keluaran ke-i dan fitur ke-j
setelah pergeseran.

Implementasi JST dan Wavelet pada FPGA

91

1
2

:merupakan
faktor
kontriksi
yang
mempunyai rentang nilai sebesar (0,1).
:masing-masing
merupakan
vektor
kecepatan ke-i (i = 1,2,3,...) pada waktu
iterasi ke-t (t = 1,2,3,...).
:merupakan faktor akselerasi yang mengatur
distribusi dari pengaruh komponen kognitif.
:merupakan faktor akselerasi yang mengatur
distribusi dari pengaruh komponen sosial.
:merupakan nilai vektor posisi optimum yang
berhasil ditemukan oleh suatu partikel (local
best)
:merupakan nilai vektor posisi optimum yang
berhasil ditemukan oleh sekumpulan partikel
(global best).

Rand() :merupakan bilangan acak yang bernilai antara 0 dan 1.


Langkah 5 :
Lakukan langkah 2 4 sampai seluruh data telah dilatihkan

Algoritma Pengujian

Setelah didapatkan vektor pewakil yang paling representatif, perlu


dilakukan pengujian terhadap vektor pewakil tersebut untuk
diketahui tingkat pengenalan oleh algoritma FLVQ PSO. Proses
pengujian FLVQ PSO serupa dengan proses pengujian FLVQ dengan
melakukan tahapan seperti saat pembelajaran FLVQ hanya saja
tidak dilakukan perubahan pada vektor pewakil.

2.2 Wavelet
Pada penelitian yang kami lakukan, kami tidak hanya menggunakan
algoritma jaringan saraf tiruan tetapi juga menggunakan beberapa
algoritma pemrosesan sinyal yakni wavelet. Pada subbab subbab

92

Implementasi JST dan Wavelet pada FPGA

berikutnya akan dijelaskan berbagai teori terkait algoritma


wavelet.
2.2.1 Fourier Transform
Fourier Transform adalah proses transformasi yang mendasari
algoritma wavelet. Sinyal yang biasa kita ketahui dan kenali pada
kehidupan sehari-hari adalah sinyal yang berada pada domain
waktu. Hal itu berarti sinyal tersebut adalah sebuah fungsi f(t)
dengan parameter t menunjukkan waktu dan keluaran dari fungsi
tersebut adalah nilai amplitudo sinyal tersebut pada waktu t.

Gambar 40. Contoh Sinyal Kosinus

Gambar 40 menunjukkan contoh sebuah sinyal. Sumbu x


menyatakan waktu dan sumbu y menyatakan amplitudo dari sinyal
tersebut. Sinyal seperti ini disebut raw signal atau sinyal mentah.
Akan tetapi, banyak aplikasi yang membutuhkan tidak sebatas
informasi waktu dan amplitudo saja dari sebuah sinyal. Salah satu
informasi penting yang biasa dicari dari sebuah sinyal adalah
informasi frekuensi atau komponen spektral dari sinyal tersebut.
Transformasi sinyal dilakukan untuk mendapatkan informasi
tambahan dari sebuah sinyal mentah yang sebelumnya belum
tersedia. Sinyal mentah yang diberikan transfomasi berubah
menjadi processed signal atau sinyal terproses.
Joseph Fourier memperkenalkan representasi sinyal kontinu
kedalam berbagai sinyal sinus dan kosinus pada tahun 1807 yang
disebut dengan transformasi Fourier (Fourier Transform). Hasil
transfomasi fourier tidak lagi merepresentasikan sinyal sebagai
sebuah fungsi yang nilainya berubah terhadap waktu (ruang waktu)
tetapi memperlihatkan semua informasi frekuensi sinyal di ruang
yang berbeda yaitu ruang frekuensi. Pengenalan ruang frekuensi ini

Implementasi JST dan Wavelet pada FPGA

93

memberikan aspek penelitian baru dalam mengenal sinyal. Jika


sebelumnya sinyal diartikan sebagai suatu fungsi yang nilainya
berubah terhadap waktu, maka representasi sinyal di ruang
frekuensi memperlihatkan kumpulan frekuensi-frekuensi yang
terdapat di sinyal.
Sinyal yang sudah ditransfomasi dapat ditransfomasi balik ke ruang
waktu. Proses ini disebut sebagai transfomasi balik fourier (inverse
fourier transform). Semua perubahan yang dilakukan di ruang
frekuensi juga mengambil efek yang sama terhadap frekuensi
sinyal tersebut di ruang waktu. Hal ini sangat bermanfaat dibidang
ilmu pengolahan sinyal dan pengolahan citra seperti proses
penghilangan derau yang dapat dilakukan dengan memangkas
semua frekuensi yang terlalu tinggi di ruang frekuensi dan
dikembalikan lagi ke ruang waktu.
Rumus dari Fourier Transform adalah

Gambar 41. Sinyal Asli Sebelum Diproses

94

Implementasi JST dan Wavelet pada FPGA

Gambar 42. Sinyal Setelah Diberi Fourier Transform

Gambar 41 menunjukkan gambar sinyal mentah sebelum diberikan


transformasi sedangkan Gambar 42 menunjukkan gambar sinyal
setelah diberikan Fourier Transform. Informasi frekuensi dari sinyal
awal menjadi terlihat jelas (4 buah frekuensi, yaitu 10 Hz, 25 Hz, 50
Hz, dan 100 Hz) setelah diberi transformasi.
Fourier Transform merupakan transformasi yang berguna jika ingin
mendapatkan komponen spektral dari sebuah sinyal. Akan tetapi,
Fourier Transform mempunyai kelemahan sehingga tidak bisa
digunakan untuk semua jenis sinyal.
Kelemahan dari Fourier Transform adalah informasi yang
didapatkan hanya sebatas informasi frekuensi yang terdapat di
dalam sebuah sinyal. Informasi waktu kapan frekuensi itu terjadi
pada sinyal tidak diberikan (Polikar 2011).
Hal ini tidak bermasalah untuk sinyal stasioner atau sinyal yang
frekuensinya tetap setiap saat. Akan tetapi, sinyal yang bertipe
non-stasioner atau sinyal yang frekuensi berubah terhadap waktu
tidak bisa diberikan Fourier Transform. Hal ini dikarenakan
informasi waktu yang dimiliki sinyal tersebut akan hilang setelah
diberi transformasi.

Implementasi JST dan Wavelet pada FPGA

95

Gambar 43. Contoh Sinyal Stasioner

Gambar 44. Contoh Sinyal Non-stasioner

Gambar 45. Fourier Transform pada Sinyal Non-stasioner

96

Implementasi JST dan Wavelet pada FPGA

Sinyal pada Gambar 44 diberikan transformasi Fourier sehingga


menghasilkan sinyal pada Gambar 45. Hasil transformasi pada
Gambar 45 menyerupai hasil transformasi pada Gambar 42
padahal kedua gambar tersebut berasal dari dua buah sinyal yang
berbeda. Interpretasi dari keduanya adalah sama, yaitu terdapat 4
buah komponen frekuensi pada sinyal(10 Hz, 25 Hz, 50 Hz, dan 100
Hz). Akan tetapi, pada sinyal Gambar 42 keempat frekuensi
tersebut terjadi sepanjang saat, sedangkan pada sinyal Gambar 45
keempat frekuensi tersebut terjadi pada interval waktu yang
spesifik.
Untuk itu diperlukan transformasi lain untuk mengatasi sinyal yang
bertipe non-stasioner. Salah satu cara yang ditemukan adalah
dengan menggunakan Short Time Fourier Transform.
2.2.2 Short Time Fourier Transform
Short Time Fourier Transform (STFT) dikembangkan untuk
mengatasi kelemahan Fourier Transform dalam menghadapi sinyal
non-stasioner. Idenya adalah memotong sinyal menjadi sinyalsinyal yang lebih kecil di mana masing-masing sinyal kecil tersebut
bersifat stasioner, sehingga Fourier Transform dapat bekerja
seperti biasa (Polikar 2011).
Rumus dari STFT adalah

, =

( ) 2

persamaan di atas menunjukkan bahwa STFT adalah Fourier


Transform yang dikalikan dengan sebuah window function, dimana
window function ini posisinya digeser berdasarkan waktu.

Implementasi JST dan Wavelet pada FPGA

97

Gambar 46. Contoh Hasil Transformasi STFT. Sumber: Polikar, Robi. The
Wavelet Tutorial Part 2.
http://users.rowan.edu/~polikar/WAVELETS/WTpart2.html

Akan tetapi, timbul masalah baru menyangkut resolusi. Ketika


window function yang dipakai ukurannya kecil, representasi waktu
yang didapat adalah akurat atau mempunyai resolusi waktu yang
bagus, namun resolusi frekuensi yang didapat buruk. Begitu pula
sebaliknya, jika window function yang dipakai ukurannya besar,
maka resolusi frekuensi yang didapat bagus namun resolusi waktu
yang didapat akan buruk.

98

Implementasi JST dan Wavelet pada FPGA

Gambar 47. Berbagai Macam Ukuran Window Function

Gambar 48. STFT dengan Window Function yang kecil. Sumber: Polikar,
Robi. The Wavelet Tutorial Part 2.
http://users.rowan.edu/~polikar/WAVELETS/WTpart2.html

Implementasi JST dan Wavelet pada FPGA

99

Gambar 49. STFT dengan window function Besar. Sumber: Polikar, Robi.
The Wavelet Tutorial Part 2.
http://users.rowan.edu/~polikar/WAVELETS/WTpart2.html

Gambar 48 menunjukkan jika window function yang dipakai


berukuran kecil, maka resolusi waktu yang didapat adalah baik dan
resolusi frekuensinya buruk. Gambar 49 menggambarkan jika
window function yang dipakai berukuran besar, maka resolusi
frekuensinya baik namun resolusi waktunya buruk. Diperlukan
pendekatan lainnya untuk mengatasi masalah ini.
2.2.3 Wavelet Transform
Alfred Haar pada tahun 1909 memperkenalkan representasi baru
sinyal kontinu kedalam sinyal yang berukuran lebih kecil yang
disebut wavelet dimana proses transformasi sinyalnya disebut
wavelet transform. Wavelet yang berasal dari kata wave yang
berarti gelombang dan akhiran -let yang berarti bagian kecil, lebih
unggul dibandingkan Fourier Transform karena mampu
merepresentasikan sinyal tidak hanya memperlihatkan informasi
frekuensinya di ruang frekuensi, tapi juga mampu memperlihatkan
perubahan frekuensinya terhadap waktu. Perbedaan ini bisa

100

Implementasi JST dan Wavelet pada FPGA

diibaratkan dengan kumpulan nada di musik, jika transformasi


Fourier hanya memperlihatkan nada-nada apa saja yang digunakan
dalam sebuah lagu maka transformasi wavelet tidak hanya dapat
memperlihatkan nada-nada apa saja yang digunakan, akan tetapi
juga memperlihatkan kapan nada itu digunakan (Resnikoff dan
Raymond 1998).
Bentuk dari wavelet sendiri terdiri dari sekelompok sinyal-sinyal
kecil sebagai sinyal basis yang digunakan dalam suatu fungsi untuk
membentuk sinyal. Seperti halnya transformasi Fourier yang
membentuk sinyal dari sekumpulan gelombang sinus dan kosinus
sebagai basis, wavelet terdiri dari berbagai macam gelombang kecil
yang dapat dijadikan basis pembentuk sinyal. Jenis-jenis
gelombang yang dapat digunakan sebagai basis sangat beragam
sehingga jenis transformasi wavelet yang digunakan juga banyak
sekali. Sebagai contoh, wavelet sinc menggunakan fungsi sinc
sebagai basis, sedangkan wavelet Haar menggunakan fungsi
berikut sebagai basis

1,
0,

0 < < 1

2.2.4 Continuous Wavelet Transform


Continuous Wavelet Transform (CWT) adalah transformasi wavelet
untuk sinyal yang kontinu. CWT dibuat sebagai salah satu cara
untuk mengatasi masalah resolusi pada STFT. Perbedaan utama
CWT dengan STFT adalah lebar dari window function yang dipakai
berubah-rubah karena CWT akan menghitung semua komponen
spektral yang ada dari sebuah sinyal (Polikar 2011). Perhatikan
rumus CWT di bawah ini :

, =

1
||

dimana CWT(,s) merupakan fungsi hasil transformasi sinyal


dengan fungsi wavelet yang ditranslasikan terhadap waktu
dan didilasikan terhadap skala s. Hasil transformasi CWT biasa
disebut sebagai koefisien wavelet. dengan penekanan lambang

Implementasi JST dan Wavelet pada FPGA

101

bintang (*) menunjukkan bahwa fungsi ini adalah fungsi wavelet


yang kompleks yang terdiri dari fungsi wavelet dengan perubahan
terhadap waktu dan skala s. Fungsi ini merupakan fungsi
umum untuk setiap jenis wavelet. Sedangkan nilai dari sendiri
1
tergantung dari jenis wavelet yang digunakan.
merupakan

normalisasi hasil transformasi agar besaran energi yang dimiliki


sinyal aslinya dapat dipertahankan karena telah dipengaruhi oleh
pengskalaan.
Bentuk fungsi wavelet kompleks merupakan suatu fungsi dari
mother wavelet yang ditranslasikan dan didilasikan. Hasil dari
fungsi wavelet ini adalah sekumpulan wavelet yang telah dibentuk
dengan proses translasi dan didilasi dari mother wavelet. Untuk
lebih jelasnya, fungsi wavelet diperlihatkan oleh rumus berikut
, =

1
||

Dengan s adalah skala, dan adalah waktu. Hubungan sinyal


dengan mother wavelet yang didilasikan dan ditranslasikan dapat
dilihat di gambar Gambar 50. Gambar tersebut memperlihatkan
sebuah mother wavelet yang didilasikan dan ditranslasikan ketika
digunakan dalam fungsi untuk setiap pecahan sinyal. Untuk setiap
fungsi wavelet yang dihasilkan dari translasi dan dilasi mother
wavelet mewakili suatu nilai representasi sinyal di ruang frekuensi.
Nilai ini disebut sebagai koefisien wavelet.
Sinyal asli yang telah diolah di ruang hasil transformasi dapat
ditransformasi balik untuk mengembalikan sinyal asli ke ruang
waktu. Untuk sinyal kontinu, proses transformasi balik
diperliihatkan oleh rumus berikut:

(, )

Dengan XWT adalah nama fungsi transformasi balik dari


transformasi wavelet, s adalah skala, dan adalah waktu.

102

Implementasi JST dan Wavelet pada FPGA

Gambar 50. Proses translasi dan dilasi mother wavelet terhadap sinyal

XWT merupakan hasil transformasi wavelet yang ditransformasi


balik. Setiap XWT merupakan hasil transformasi sinyal asli yang
berkorelasi dengan setiap fungsi wavelet (koefisien wavelet).
Fungsi transformasi balik merupakan fungsi yang mengintegralkan
ulang koefisien wavelet hasil transformasi dengan fungsi wavelet
yang berkaitan.
Perhatikan Gambar 51 di bawah ini. Tidak seperti STFT yang selalu
memiliki resolusi yang konstan untuk setiap waktu dan frekuensi,
CWT memiliki resolusi waktu yang bagus dan resolusi frekuensi

Implementasi JST dan Wavelet pada FPGA

103

yang buruk untuk komponen frekuensi tinggi dan resolusi waktu


yang buruk namun resolusi frekuensi yang bagus untuk komponen
frekuensi rendah. Pada Gambar 42, waktu berkorelasi dengan
translasi, dan frekuensi berkorelasi terhadap skala, walaupun
nilainya berbanding terbalik (skala tinggi, frekuensi rendah, dan
sebaliknya).

Gambar 51. Continuous Wavelet Transform. Sumber: Polikar, Rob. The


Wavelet Tutorial Part 2.
http://users.rowan.edu/~polikar/WAVELETS/WTpart2.html

Hubungan antara waktu dan frekuensi dapat diilustrasikan lebih


baik pada Gambar 52. Jika dilihat secara horizontal, jika interval
waktunya panjang, maka inteval frekuensi (dilihat secara vertikal)
akan pendek. Ini artinya jika resolusi waktu buruk, maka resolusi
frekuensi akan baik. Begitu pula sebaliknya. Namun, luas hasil
perkalian lebar waktu dan frekuensi tetap sama.
Namun, untuk menghitung semua komponen spektral butuh waktu
dan kemampuan komputasi serta kebutuhan memori yang tinggi,
sehingga diperlukan teknik untuk menghitung transformasi
wavelet dengan lebih cepat namun tetap tidak kehilangan
akurasinya. Teknik itu bernama Discrete Wavelet Transform.

104

Implementasi JST dan Wavelet pada FPGA

Gambar 52. Hubungan Frekuensi dan Waktu

2.2.5 Discrete Wavelet Transform


Discrete Wavelet Transform (DWT) adalah salah satu teknik
transformasi wavelet yang mengandalkan proses konvolusi untuk
menghitung hasil transformasi secara cepat (Mallat 1989). Untuk
sinyal diskrit, transformasi wavelet bisa dituliskan menggunakan
rumus sebagai berikut :

()
,

, =
=

sedangkan rumus untuk transformasi baliknya adalah sebagai


berikut :

, (, ),

DWT melakukan transformasi menggunakan filter sehingga teknik


ini juga disebut filter banks. Terdapat dua buah filter yang
digunakan oleh DWT, yaitu low-pass filter dan high-pass filter.
High-pass filter berguna untuk menyaring komponen frekuensi

Implementasi JST dan Wavelet pada FPGA

105

tinggi. Low-pass filter berguna untuk menyaring komponen


frekuensi rendah.
Keluaran dari masing-masing filter itu hanya diambil setengahnya
saja atau di-downsampling. Nilai keluaran dari low-pass filter
disebut sebagai aproksimasi dan keluaran dari high-pass filter
disebut detil atau derau. Bagian aproksimasi ini dapat dilewatkan
ke dalam low-pass filter sekali lagi untuk mendapatkan panjang
sinyal yang lebih pendek lagi dan cukup untuk kebutuhan. Proses
ini disebut dekomposisi. Perhatikan ilustrasi proses DWT pada
Gambar 53 di bawah ini :

Gambar 53. Discrete Wavelet Transform

Di dalam high-pass filter dan low-pass filter terjadi proses yang


disebut konvolusi. Konvolusi adalah perkalian antara input yang
masuk dengan konstanta masing-masing filter. Hasil perkalian
masing-masing bilangan tersebut kemudian dijumlahkan dan
dijadikan keluaran dari filter tersebut.
Jika sebuah sinyal memiliki panjang sebesar 2n, maka sinyal
tersebut dapat didekomposisi sebanyak n level di mana pada
setiap levelnya, sinyal tersebut panjangnya berkurang setengah
dari panjang sebelumnya.
2.2.6 Fungsi Pengskalaan (Scaling Function) dan Fungsi Wavelet
(Wavelet Function)
Dari definisi wavelet sebelumnya, dapat diketahui bahwa sebuah
sinyal dapat dibentuk dari perkalian koefisien wavelet dengan
sejumlah fungsi wavelet yang saling berkaitan. Sedangkan fungsi
106

Implementasi JST dan Wavelet pada FPGA

wavelet sendiri terdiri dari mother wavelet yang didilasikan dan


ditranslasikan. Setiap kali proses dekomposisi dilakukan, yang
dilakukan wavelet adalah mengkompresi suatu sinyal dari ruang
waktu ke ruang frekuensi. Teori fourier mengatakan kompresi
terhadap waktu sama dengan merenggangkan (dilasi) dan
menggeser (translasi) spektrum frekuensi di ruang frekuensi
(Clemens 2011). Sehingga proses dekomposisi sinyal terhadap
fungsi wavelet mempengaruhi spektrum frekuensi sebagai berikut :

Gambar 54. Perubahan spektrum frekuensi sinyal sebagai hasil translasi


dan dilasi mother wavelet di ruang frekuensi

Gambar 54 diatas juga memperlihatkan adanya kemungkinan


pemakaian sejumlah fungsi wavelet yang tak berhingga ketika
proses transformasi dilakukan. Semua spektrum frekuensi hanya
bisa dicapai apabila menggunakan sejumlah fungsi wavelet yang
tak berhingga. Disini dibutuhkan fungsi pengskalaan (scaling
function) yang merepresentasikan sejumlah fungsi wavelet lainnya
untuk membatasi jumlah fungsi wavelet yang digunakan. Jika
fungsi pengskalaan dianggap sebagai spektrum low-pass yang
menghasilkan aproksimasi sinyal asli, maka fungsi pengskalaan bisa
dibangun dengan transformasi wavelet sebagai berikut :

, , ()
,

Karena fungsi pengskalaan didefinisikan dengan cara unik di atas,


maka spektrum fungsi pengskalaan mewakili sejumlah spektrum
fungsi wavelet hingga tingkat pengskalaan s tertentu. Hal ini
diperlihatkan oleh Gambar 55 berikut :

Implementasi JST dan Wavelet pada FPGA

107

Gambar 55. Fungsi pengskalaan yang membatasi jumlah fungsi wavelet


yang digunakan. Sumber : Valens, Clemens. A Really Friendly Guide to
Wavelets. 26 Jan 2004. 15 Mei 2011. http://polyvalens.pagespersoorange.fr/clemens/wavelets/wavelets.html

Gambar 55 memperlihatkan, dengan mendefinisikan fungsi


pengskalaan sebagai perwakilan sejumlah tak berhingga fungsi
wavelet hingga batas tertentu maka jumlah fungsi wavelet dapat
dipotong dari ukuran tak berhingga menjadi berhingga.
Untuk gambar tersebut, spektrum dari sejumlah tak berhingga
fungsi wavelet dari indeks j = n+2 dan seterusnya diwakili oleh
suatu fungsi pengskalaan (scaling function) yang dilambangkan
dengan fungsi .
Hal ini juga memiliki efek samping, yaitu representasi sinyal yang
bisa dihasilkan oleh fungsi wavelet menjadi terbatas karena jumlah
fungsi wavelet yang digunakan telah dibatasi. Hal ini bisa
mengakibatkan adanya kehilangan informasi karena keterbatasan
representasi sinyal yang bisa ditampilkan oleh wavelet. Informasi
yang tidak bisa ditampilkan ini sebenarnya sama sekali tidak hilang
karena sinyal dapat ditransformasi balik kebentuk asalnya. Jika
dipandang dari sisi wavelet analysis maka penggunaan fungsi
pengskalaan ini dapat memangkas sejumlah informasi berguna
yang bisa direpresentasikan oleh fungsi wavelet. Sehingga, satusatunya cara untuk mengatasi hal ini adalah memilih fungsi
pengskalaan sependek mungkin sehingga jumlah fungsi wavelet
yang bisa digunakan semakin banyak. Semakin pendek fungsi
pengskalaan maka semakin banyak jumlah fungsi wavelet yang bisa
digunakan dan semakin luas representasi sinyal yang bisa

108

Implementasi JST dan Wavelet pada FPGA

diperlihatkan. Untuk transformasi wavelet kontinyu, batas


pemilihan pendeknya fungsi pengskalaan cukup sulit dilakukan,
akan tetapi untuk transformasi wavelet diskrit batas pendeknya
fungsi pengskalaan cukup mudah ditentukan. Pada umumnya,
permasalahan ini di transformasi wavelet diskrit telah dipecahkan
secara otomatis.
Pemilihan fungsi pengskalaan yang terlalu pendek juga memiliki
efek samping. Jika fungsi pengskalaan yang digunakan cukup
pendek, maka jumlah momen hilang yang dimiliki oleh wavelet
tersebut semakin sedikit. Banyaknya momen hilang dapat
mempengaruhi tingkat kehalusan aproksimasi hasil transfomasi
wavelet. Hal ini dapat terlihat di wavelet daubechies dimana jenis
wavelet daubechies dibedakan berdasarkan jumlah momen hilang
yang sebanding dengan panjang fungsi pengskalaan. Hal tersebut
dapat diperlihatkan oleh grafik regularitas Sobolev untuk wavelet
daubechies oleh Gambar 56 dibawah ini:

Gambar 56. Tingkat kehalusan wavelet daubechies terhadap jumlah


basis dengan Sobolev regularity. Sumber : Thielemann,Henning. Bounds
for smoothness of refinable functions. -. 15 Mei 2011.

Implementasi JST dan Wavelet pada FPGA

109

http://www.math.uni-bremen.de/zetem/DFGSchwerpunkt/preprints/orig/refinablesmoothest.pdf

Berdasarkan parameter kehalusan yang disampaikan oleh Sobolev


dari Gambar 56 diatas, tingkat kehalusan aproksimasi (regularity)
transformasi wavelet daubechies sebanding dengan panjang fungsi
pengskalaan yang digunakan oleh jenis wavelet daubechies
(Resnikoff dan Raymond 1998). Sedangkan perubahan tingkat
kehalusan yang paling besar terjadi di keluarga wavelet daubechies
dengan menggunakan basis 2 hingga basis 16 (Henning 2011).
2.2.7 Multi Resolution Analysis
Salah satu hal menarik dari transformsi wavelet adalah analisis
multiresolusi yang diperkenalkan oleh Stephanie Mallat. Analisis
multiresolusi merupakan suatu teknik transfomasi yang dilakukan
berulang-ulang untuk mendapatkan tingkat resolusi yang berbeda
dari aproksimasi hasil transformasi sinyal. Dengan analisis
multiresolusi, sebuah sinyal dapat direpresentasikan dengan
tingkat kedetilan yang berbeda. Misalkan, pada saat melihat
sebuah lukisan, lukisan dapat dilihat secara keseluruhan dari jarak
jauh tetapi informasi detail lukisan diabaikan. Ketika dilihat dengan
jarak yang dekat, detail lukisan dapat dilihat dengan jelas.
Pengaturan jarak mata dengan lukisan dapat mempengaruhi
tingkat resolusi lukisan yang dapat dilihat. Teknik melihat berbagai
resolusi lukisan dengan mengatur jarak pandang ini disebut sebagai
analisis multiresolusi.
Pendekatan MRA cocok untuk sinyal yang mempunyai karakteristik
komponen frekuensi tinggi untuk durasi yang singkat dan
komponen frekuensi rendah untuk durasi yang lama. Sinyal yang
ditemui pada aplikasi dunia nyata bersifat seperti ini, contohnya
sinyal ECG. Salah satu teknik MRA adalah transformasi wavelet
(wavelet transform) (Polikar 2011).

110

Implementasi JST dan Wavelet pada FPGA

Gambar 57. Contoh Sinyal yang Cocok Diberi MRA

Sebuah sinyal dapat dilihat dengan berbagai resolusi dengan


melakukan dekomposisi bertingkat yang diperlihatkan oleh gambar
berikut ini :

Gambar 58. Proses dekomposisi bertingkat dalam analisa multiresolusi

Gambar 59. proses rekonstruksi bertingkat dalam analisa multiresolusi

Implementasi JST dan Wavelet pada FPGA

111

Gambar 60. Posisi penempatan hasil dekomposisi dalam analisis


multiresolusi

proses dekomposisi bertingkat yang diperlihatkan oleh Gambar 58,


Gambar 59, dan Gambar 60, dimana proses dekomposisi dilakukan
secara berulang-ulang terhadap hasil aproksimasi. Sedangkan pada
proses rekonstruksi, sinyal aproksimasi yang didekomposisi
sebelumnnya dapat dikembalikan secara bertingkat pula. Pada
umumnya, aproksimasi hasil dekomposisi wavelet memiliki ukuran
setengah dari ukuran sinyal asal sehingga penempatan hasil
dekomposisi dapat dilakukan in-place atau ditempat yang sama
dengan lokasi memori sinyal asal.
Jika c0 sebagai aproksimasi merupakan hasil dekomposisi dengan
menggunakan fungsi pengskalaan dan d0 sebagai detail merupakan
hasil dekomposisi dengan menggunakan fungsi wavelet, maka
sebuah sinyal diskrit dapat dibentuk dengan rumus berikut
1

0 0 +

()
=0

dalam bentuk representasi sinyal,

112

Implementasi JST dan Wavelet pada FPGA

= 0 0 1 2 1
dimana VJ merupakan aproksimasi dengan resolusi terbesar (sinyal
asli), WJ-1 merupakan detail untuk resolusi tingkat J-1 dan V0
beserta W0 masing-masing merupakan representasi sinyal di
tingkat resolusi terkecil. Sedangkan untuk mencari aproksimasi di
tingkat resolusi j, dimana 0 < j < J diperlihatkan sebagai berikut :
1 1 =

1 1 =

0 0 = 1

Implementasi JST dan Wavelet pada FPGA

113

Bab 3 Field Programmable Gate Array


Bab ini berisi tiga subbab yang masing-masing akan menjelaskan
tiga hal krusial dalam pengembangan sistem berbasis chip atau
System on Chip (SoC). Subbab pertama menjelaskan mengenai
FPGA yang menjadi platform untuk pengembangan algoritma. Pada
sub bab ini terdapat penjelasan mengenai arsitektur umum sebuah
FPGA maupun arsitektur spesifik dari board pengembangan yang
dipakai. Subbab dua menjelaskan VHDL sebagai bahasa yang
dipakai untuk mendesain dan mengembangkan algoritma dalam
FPGA. Subbab ketiga menjelaskan tentang representasi angka yang
bisa dipilih untuk proses pengembangan FPGA.

3.1 FPGA
Field-programmable Gate Array (FPGA) adalah perangkat
pengembangan berupa chip yang terdiri dari ribuan atau jutaan
transistor yang terkoneksi dan dapat memiliki fungsi logika
tertentu. Fungsi-fungsi yang dapat dibentuk di dalam FPGA mulai
dari yang paling sederhana seperti penjumlahan dan pengurangan
sampai fungsi yang kompleks seperti pendeteksian error dan
penyaringan sinyal digital. Beberapa sistem yang dikembangkan
menggunakan FPGA antara lain seperti radar, pesawat udara, misil,
dan komputer.
FPGA adalah perangkat semikonduktor yang dapat diprogram/
dikonfigurasi ulang setelah proses manufaktur. FPGA
memungkinkan customer atau programmer untuk dapat membuat
fitur atau fungsi program, beradaptasi dengan standar baru,
dan mengkonfigurasi ulang hardware untuk aplikasi tertentu
bahkan setelah program telah terinstal pada board. FPGA juga bisa
digunakan untuk mengimplementasikan berbagai logic function.
FPGA mengandung komponen yang disebut "logic cell" dan
programmable switch. Logic cell dapat dikonfigurasikan atau
diprogram untuk menjalankan fungsi kompleks, atau gerbang

114

Implementasi JST dan Wavelet pada FPGA

logika sederhana seperti AND dan OR. Setiap logic cell terdiri atas
satu look up table dan satu D-flip flop. Gambar 61 menggambarkan
isi dari logic cell. Setiap logic cell juga saling terkait antar satu sama
lain dan dihubungkan dengan programmable switch.
Programmable switch dapat dikonfigurasi untuk menentukan
keterkaitan antar setiap logic cell.

Gambar 61. Logic Cell

Konfigurasi FPGA biasanya ditentukan dengan menggunakan


hardware description language (HDL). Terdapat dua HDL yang
umum digunakan yaitu Verilog dan Very High-Speed Integrated
Circuit
(VHSIC)
HDL.
Pada pertengahan
tahun
1980an Departemen Pertahanan
AS
dan IEEE mensponsori
perkembangan hardware description language dengan tujuan
untuk mengembangkan high-speed integrated circuit. Sekarang
bahasa VHDL ini telah menjadi salah satu bahasa standar industri
yang digunakan untuk merancang dan menjelaskan sistem digital.

Implementasi JST dan Wavelet pada FPGA

115

Gambar 62. Struktur konseptual dari FPGA

Pada board FPGA keluaran Xilinx, terutama generasi Spartan-3,


Configurable Logic Block (CLB) merupakan resource utama untuk
membentuk semua rangkaian logika baik yang bersifat
kombinatorial maupun yang sekuensial. Sebuah CLB terdiri dari 4
buah slice. Satu slice sendiri mengandung komponen-komponen
berikut, antara lain: 2 buah 4-input-Look-Up Table (LUT), 2 buah
register penyimpanan, 2 buah multiplexer, 1 buah carry serta
arithmetic logic. Masing-masing LUT tersebut sendiri dapat diubah
menjadi 16 bit distributed RAM atau 16 bit shift register.

116

Implementasi JST dan Wavelet pada FPGA

Gambar 63. Configurable Logic Block pada FPGA Xilinx Spartan 3N

Gambar 63 menggambarkan penyusunan CLB di dalam


board FPGA. CLB disusun menjadi grid dua dimensi, m x n. Antar
model board yang satu dengan board lainnya mempunyai jumlah
CLB yang berbeda pada baris maupun kolomnya.

Gambar 64. Slice di dalam CLB

Implementasi JST dan Wavelet pada FPGA

117

Gambar 64 menggambarkan isi dan konfigurasi slice di dalam


sebuah CLB. Sebuah CLB pada FPGA Xilinx biasanya mempunyai 4
buah slice yang disusun seperti tampak pada gambar.

Gambar 65. Ilustrasi komponen di dalam Slice

Gambar 65 memperlihatkan isi dari sebuah slice yang merupakan


building block terkecil dari sebuah FPGA. Sebuah Look-Up Table
(LUT) dan sebuah elemen penyimpanan biasa disebut dengan
Logic Cell. Tambahan komponen-komponen seperti multiplexer,
carry logic, dan arithmetic logic menambah kemampuan dari slice
sehingga melampaui kapabilitas dari sebuah logic cell biasa.
Benchmark menemukan bahwa sebuah slice setara dengan 2.25
logic cell biasa.

118

Implementasi JST dan Wavelet pada FPGA

3.1.1 Diagram Alur Pengembangan


Perangkat Keras FPGA

Implementasi

pada

Gambar 66. Alur Pengembangan FPGA

Pada Gambar 66 di atas, terlihat alur pengembangan yang telah


disederhanakan. Terdapat 4 langkah yang dilakukan untuk
mengembangkan implementasi pada FPGA. Berikut penjelasan
singkat dari 4 langkah tersebut (Chu 2008):

Mendesain sistem dan menurunkannya ke Hardware


Description Language (HDL) file. Pada buku ini HDL yang
digunakan adalah Very High-Speed Integrated Circuit HDL.
Kita juga sebaiknya memisahkan constraint file untuk
menspesifikasikan beberapa constraint atau batasan pada
saat implementasi.
Mengembangkan testbench dengan HDL dan membuat
simulasi pada Register Transfer Level (RTL).

Implementasi JST dan Wavelet pada FPGA

119

Men-synthesis dan mengimplementasi HDL menjadi


gerbang-gerbang logika. Proses implementasi terdiri dari 3
proses yang lebih kecil yakni, translate, map, dan place and
route. Translate akan menggabungkan seluruh file desain
menjadi netlist tunggal. Proses map atau technology
mapping akan melakukan pemetaan netlist menjadi sel
logika FPGA dan IOB (Input Output Box). Proses place and
route akan menurunkan physical layout ke dalam chip
FPGA. Proses ini akan meletakan sel pada lokasi fisik dan
menentukan berbagai sinyal yang menghubungkan sel-sel
tersebut.
Terakhir adalah men-generate dan men-download
programming file. File ini berisi konfigurasi FPGA yang bisa
di-download ke perangkat FPGA untuk diujicobakan.

3.1.2 Hardware Xilinx Spartan 3A


Buku ini menggunakan perangkat keras Xilinx Spartan-3 family
FPGA. Spartan-3 family dibagi berdasarkan beberapa subfamily
berdasarkan jumlah logic cell dan I/O count. Xilink yang digunakan
dalam penelitian adalah tergolong ke dalam subfamily Xilinx
Spartan 3A (lihat Gambar 67).

120

Implementasi JST dan Wavelet pada FPGA

Gambar 67. Spartan-3AN XC3S700AN

Elemen yang menjadi dasar dalam Spartan-3 family adalah logic


cell, yang mengandung 4-input LUT dan D Flip-Flop. Pada Xilinx
Spartan-3 family, setiap 2 logic cell akan membentuk slice, dan
setiap 4 slice akan membentuk Configurable Logic Block (CLB).
Spartan-3 family juga terdapat dari empat macam macro block
atau macro cell antara lain, combinational multiplier, block Random
Access Memory (RAM), Digital Clock Manager (DCM) dan Input
/Output Block (IOB) (Chu 2008).
Berikut merupakan spesifikasi dari Xilinx Spartan-3 family
XC3S700AN
Komponen

XC3S700AN

System gates

700K

Sel logika

13.248

Dedicated multiplier

20

Block RAM blocks

20

Implementasi JST dan Wavelet pada FPGA

121

Komponen

Ukuran bit block RAM

XC3S700AN
360K

Ukuran bit distributed 92K


RAM
Ukuran bit flash

8M

Ukuran bit user flash

5M

DCM

I/O standards

26

Maks. Differential I/O

165

Maks. Single Ended I/O

372

Tabel 3. Spesifikasi Xilinx Spartan-3 Family XC3S700AN

3.1.3 Software Xilinx Core Generator


Xilinx Integrated Software Environment (ISE) merupakan sebuah
software yang memfasilitasi proses pengembangan dalam
membangun sistem berbasis FPGA. Project Navigator adalah
Integrated Development Environtment (IDE) yang digunakan
pengguna untuk mengakses tool dan file yang terkait dalam
proyek. Default windows pada Project Navigator dapat dilihat pada
Gambar 68. Ada beberapa Windows dalam Project Navigator,
yaitu:
1. Source windows : menampilkan berbagai file yang terkait
dalam proyek
2. Process windows : menampilkan process yang available
terhadap file yang dipilih.
3. Workplace windows : terdiri dari berbagai macam
document windows seperti HDL code, schematic, dan
report.

122

Implementasi JST dan Wavelet pada FPGA

4. Transcript windows : windows untuk menampilkan pesan/


info seperti status, warning dan error.

Gambar 68. Project Navigator Xilinx ISE Design Suit

3.1.4 Xilinx Core Generator


Core Generator mempercepat waktu desain sistem dengan
menyediakan akses untuk menggunakan berbagai Intelectual
Properties (IP) untuk Xilinx FPGA yang terdapat pada ISE Design
Suite. Core Generator menyediakan katalog dari architecture
specific, domain specific, atau market specific. Core Generator
memungkinkan designer FPGA untuk dapat membangun design
yang lebih cepat dengan menggunakan Xilinx Intelectual Properties.
Fungsi-fungsi yang digunakan dalam penelitian ini diantaranya:

Komponen untuk mentransformasi bilangan fixed point 12


bit menjadi bilangan floating point 12 bit.
Komponen untuk mentransformasi bilangan floating point
12 bit menjadi bilangan fixed point 12 bit, dan
Komponen untuk melakukan fungsi pembagian floating

Implementasi JST dan Wavelet pada FPGA

123

point 12 bit.

Gambar 69. Core Generator

3.2 Pengantar VHDL


Pada sub bab sub bab berikutnya akan membahas secara garis
besar tentang bahasa pemrograman Very High Speed Integrated
Circuit Hardware Description Language (VHSIC- HDL/ VHDL). Isi dari
bab ini merupakan adaptasi dari isi buku elektronika Evita VHDL
yang diterbitkan oleh ALDEC, sebuah perusahaan verifikasi desain
digital yang berkantor pusat di Henderson, Nevada.
Bahasa yang digunakan untuk memprogram dan mengkonfigurasi
FPGA adalah Hardware Definition Language (HDL). Terdapat
beberapa jenis bahasa HDL digunakan diantaranya Verilog, Abel
dan VHDL, atau VHSIC (Very High Speed Integrated Circuit)
Hardware Definition Language (HDL). VHDL adalah bahasa yang
paling sering digunakan.
VHDL merupakan bahasa pemrograman yang banyak digunakan
dalam desain elektronik untuk mendeskripsikan sistem digital dan
sinyal proses. Desain dari VHDL minimal terdiri dari 2 jenis bagian
yaitu :
124

Implementasi JST dan Wavelet pada FPGA

1. Entity, mendeskripsikan interface dari desain elektronik


2. Architecture, mendeskripsikan bagaimana implementasi
secara langsung desain elektronik
Selain itu, hampir sebagian besar desain menggunakan library yang
sudah tersedia di dalam modul. Beberapa desain juga mengandung
banyak arsitektur lainnya dan berbagai macam konfigurasi.
Pengembangan VHDL pertama kali adalah untuk memenuhi
kebutuhan Departemen Pertahanan Amerika Serikat sebagai
pengganti manual desain Application Specific Integrated Circuit
(ASIC) yang berisi detail dari implementasi chip tersebut. Ide itu
terus berkembang dan para ilmuwan membuat logic simulator
untuk membaca file VHDL dan melakukan simulasi. Logic synthesis
software pun dikembangkan oleh para ilmuwan untuk melakukan
implementasi sirkuit secara fisik menggunakan file VHDL. Terdapat
tiga pendekatan untuk mendesain program dengan VHDL, yaitu
pendekatan struktural, pendekatan data flow, dan pendekatan
behavioral.
Pendekatan struktural menganggap sebuah sistem/blok terdiri dari
blok-blok lainnya yang ukurannya lebih kecil. Antar blok ini
kemudian dihubungkan dengan sinyal sehingga akhirnya semua
komponen tersambung dan dapat memenuhi suatu desain
tertentu.
Pendekatan data flow mendeskripsikan output dari sebuah sistem
dengan cara memanipulasi input dengan menggunakan komponen
logika boolean primitif, biasanya disimbolkan dengan AND, OR, dan
NAND. Dengan kata lain, pendekatan ini mendeskripsikan
bagaimana sinyal mengalir di dalam sirkuit.
Pendekatan behavioral berbeda dengan dua pendekatan
sebelumnya. Pendekatan behavioral menganggap komponen yang
kita kerjakan sebagai sebuah black box. Pendekatan behavioral
cocok untuk memodelkan sistem yang kompleks seperti
microprocessor. Kunci dari pendekatan behavioral adalah
statement process di mana semua baris di dalam process
dikerjakan secara sekuensial. Hal ini tentunya lebih memudahkan
programmer jika dibandingkan dengan dua pendekatan

Implementasi JST dan Wavelet pada FPGA

125

sebelumnya yang mengharuskan programmer untuk menuliskan


kode dengan paradigma concurrent.
3.2.1 Metode Desain Rangkaian Digital
Terdapat tiga cara untuk mendeskripsikan desain rangkaian digital.
Berikut penjelasan mengenai beberapa cara merepresentasikan
desain rangkaian digital.
Persamaan Boolean
Rangkaian elektronika pada awalnya digambarkan dengan
deskripsi informal. Deskripsi informal ini kemudian dibakukan
dengan adanya persamaan Boolean atau fungsi Boolean. Teknik ini
dianggap cukup efektik dalam menggambarkan sebuah deskripsi
dari rangkaian logika. Banyak pula teknik yang berkembang untuk
meminimalisir penggunaan sumber daya, salah satunya adalah
penyederhanaan persamaan Boolean sehingga gerbang logika yang
digunakan lebih sedikit.
Pembuatan persamaan Boolean menuntut kita untuk menulis satu
persamaan untuk setiap keluaran yang ada pada rangkaian. Hal ini
akan menjadi kerumitan tersendiri ketika kita akan mendesain
rangkaian yang besar. Persamaan Boolean secara teori mungkin
dapat merepresentasikan berbagai desain rangkaian, tetapi hal ini
sulit dipraktikan karena sekarang tidak jarang desain sebuah
rangkaian terdiri dari ribuan gerbang logika.
Desain Berbasis Skematik
Cara yang lain untuk mendesain rangkaian logika adalah dengan
membuat diagram skematik. Pembuatan diagram skematik
biasanya dilakukan dengan berbagai perangkat lunak yang ada
seperti ActiveCAD, Electronic Workbench (EWB) ataupun Multisim.
Perangkat lunak ini mampu membantu pengguna membuat desain
dan bahkan ada yang mampu untuk melakukan simulasi kerja
desain rangkaian tersebut.

126

Implementasi JST dan Wavelet pada FPGA

Pembuatan desain rangkaian dengan cara seperti ini menjadi


cukup populer karena lebih fleksibel dibandingkan dengan
menuliskan fungsi Boolean. Kita bisa melakukan penambahan
gerbang logika untuk menambahkan fungsi-fungsi tertentu
tanpa harus memikirkan secara langsung bagaimana fungsi
atau persamaan Boolean harus diubah.
Deskripsi Informal
Sebuah rangkaian
memiliki dua masukan A
dan B, serta memiliki tiga
keluaran Y1 dan Y2. Y1
adalah hasil logical
product (AND) dari A dan
B. Y2 adalah hasil dari
logical sum (OR) A dan B.
HDL

Persamaan Boolean

module Contoh_HDL_Abel
title tambah dan kali
US1 device p16l8;
A, B, pin 2,3;
Y1, Y2 pin 14,15;
L,H = 0,1;
equations
Y1 = A # B;
Y2 = A & B;
test_vectors ([A,B] ->
Y1)
[0,0] -> 0;
[0,1] -> 1;
end Contoh_HDL_Abel

Y1 = A B
Y2 = A + B

Diagram Skematik
A

Y1

Y2

Synthesis Tools

Gambar 70. Diagram Pembuatan Rangkaian Digital

Pembuatan desain seperti ini mungkin mempermudah


pembelajaran, tetapi coba bayangkan jika kita harus membuat
desain rangkaian dengan lebih dari enam ribu gerbang logika.
Permasalahan seperti ini pun tidak terpecahkan jika kita
menggunakan diagram skematik.

Implementasi JST dan Wavelet pada FPGA

127

Hardware Description Language


Cara merubah deskripsi informal menjadi satu set persamaan
Boolean biasanya dilakukan dengan cara manual. Langkah ini bisa
kita gantikan dengan menggunakan Hardware Description
Language (HDL). HDL dapat menggambarkan sebuah finite state
machine suatu sistem sekuensial dan truth table dari sebuah
rangkaian atau modul kombinatorial.
HDL ini kemudian dapat diimplementasikan dengan synthesize
tools. Hasil dari synthesis tools dapat ditanamkan pada
Programmable Logic Device dengan berbagai tingkat kompleksitas,
seperti simple PLD, Complex PLD (CPLD) dan Field Programmable
Gate Array (FPGA). Ada beberapa macam HDL yang digunakan dan
yang terpopuler adalah VHDL. Verilog dan Abel.
3.2.2 Very High Speed Integrated Circuit Hardware Description
Language Overview
Ada berbagai tingkatan deskripsi dalam merepresentasikan
rangkaian digital. Deskripsi tentang rangkaian digital tersebut pun
terbagi menjadi dua sisi. Sisi pertama adalah struktur dari
rangkaian digital. Sisi ini menggambarkan secara strutural
komponen yang terdapat pada rangkaian digital tersebut. Sisi yang
kedua adalah perilaku. Sisi ini menggambarkan bagaimana sebuah
rangkaian digital menghasilkan keluaran dari suatu masukan
tertentu. Berikut adalah diagram ilustrasi dari tingkatan-tingkatan
deskripsi tersebut.

128

Implementasi JST dan Wavelet pada FPGA

Struktur
Processing cores,
komponen non-digital dan
komponen non-elektronik
Mikroprosesor, memori,
perangkat I/O
Register, Multiplexer,
ALU

Perilaku
System
Chip
Register

Spesifikasi Peforma

Micro-operation, algoritma,
respon I/O
Truth Table, State
Transition Table

Gerbang, flip-flop

Gate

Transistor, R, L, C

Circuit

Persamaan Diferensial

Objek Geometri

Silicon

Tidak ada

Persamaan Boolean

Gambar 71. Tingkatan deskripsi rangkaian digital

Pada Gambar 71 terlihat bahwa terdapat berbagai tingkat dari


tingkatan terendah yakni gerbang logika dari suatu rangkaian
digital sampai dengan tingkatan menjadi sebuah sistem digital.
Secara struktur (structural) dan perilaku (behaviorial) berbagai
tingkatan tersebut direpresentasikan dengan hal yang berbedabeda. Proses mendesain berusaha untuk dilakukan pada setiap
tingkatan deskripsi/ abstraksi. Berbagai metode desain pun
diciptakan untuk mempermudah proses deskripsi rangkaian
digital. Berikut adalah ilustrasi dari setiap metode desain yang
ada dan cakupannya dalam tingkatan deskripsi rangkaian
digital.

Implementasi JST dan Wavelet pada FPGA

129

Struktur
Skematik

Perilaku
Ideal

System
Chip
Register
Gate

Design Tools
HDL
Persamaan
Boolean

Circuit
Silicon

Gambar 72. Metode desain untuk menangani berbagai tingkatan


deskripsi

Terlihat bahwa diagram skematik dalam mendeskripsikan struktur


dari rangkaian mencakup paling banyak hal. Perilaku rangkaian
digital pun terdeskripsikan paling banyak oleh design tools yang
banyak tersedia berupa perangkat lunak untuk mendesain perlaku
suatu rangkaian. Namun tetap saja sebuah alat yang ideal
diharapkan mampu mencakup keseluruhan tingkatan deskripsi dan
mencakup dua sisi yakni secara struktur maupun perilaku.
Very High Speed Integrated Circuit (VHSIC) Hardware Description
Language (HDL) atau VHDL mencoba mencakup kedua sisi
deskripsi dan tingkatan-tingkatan deskripsi yang penting. Jika
digambarkan dalam sebuah diagram, maka terlihat seperti pada
Gambar 73.

130

Implementasi JST dan Wavelet pada FPGA

Struktur
Skematik

Perilaku
Ideal

System

VHDL

Chip
Register
Gate

Design Tools
HDL
Persamaan
Boolean

Circuit
Gate
Gambar 73. Cakupan VHDL dalam mendeskripsikan rangkaian digital

Salah satu tools untuk mengembangkan desain rangkaian digital


menggunakan VHDL adalah Xilinx Integrated Software
Environtment (ISE). Perangkat lunak ini bisa membantu kita untuk
membuat desain rangkaian digital sampai dengan menjadi bit file
yang bisa ditanamkan ke Field Programmable Gate Array (FPGA)
seri Xilinx.
Terdapat 2 macam pendekatan yang ada pada VHDL dalam
mendeskripsikan atau memodelkan suatu komponen digital, yakni
model structural dan behaviorial. Pada bagian selanjutnya akan
dijelaskan mengenai dua pendekatan tersebut dalam memodelkan
suatu komponen digital.
Model Structural
Model yang pertama adalah model structural (struktural). Model
struktural merupakan pemodelan suatu komponen digital dengan
mendeskripsikan sub komponen apa saja yang terdapat dalam
komponen tersebut. Salah satu contohnya dibawah ini adalah
gambaran skematik dari komponen full adder.

Implementasi JST dan Wavelet pada FPGA

131

X
Cout
Y
S

Ci

Gambar 74. Diagram skematik full adder

Secara struktural komponen di atas bisa dituliskan menjadi baris


kode VHDL di bawah ini.
library ieee;
use ieee.std_logic_1164.all;
entity FAdd1bit is
Port ( X, Y, Ci : in
Cout, S : out
end FAdd1bit;

STD_LOGIC;
STD_LOGIC);

architecture Structural of FAdd1bit is


begin
Cout <= (X and Y) or (Ci and (X xor Y));
S <= (X xor Y) xor Ci;
end Structural;

Gambar 75. Kode VHDL dari komponen full adder

Terlihat bahwa setiap gerbang logika yang digunakan dituliskan


secara struktural pada kode di atas. Keunggulan dari pendekatan
seperti ini adalah dapat mempermudah proses sintesis kode
menjadi komponen-komponen yang dibutuhkan.
Model Behaviorial
Pendekatan berikutnya adalah dengan pendekatan behaviorial
atau pendekatan perilaku. Pendekatan ini mempermudah
pengembangan karena kita bisa mendeskripsikan suatu komponen
dengan menuliskan proses atau algoritma yang terjadi di dalam
komponen tersebut. Pada Gambar 76 terdapat contoh pendekatan
behaviorial untuk mendeskripsikan sebuah D flip flop.

132

Implementasi JST dan Wavelet pada FPGA

library ieee;
use ieee.std_logic_1164.all;
entity dflipflop is
port(C, D : in std_logic;
Q
: out std_logic);
end dflipflop;
architecture Behaviorial of dflipflop is
begin
process (C, D)
begin
if (C'event and C='1') then
Q <= D;
end if;
end process;
end Behaviorial;

Gambar 76. Kode VHDL dari komponen D flip flop

3.2.3 Tipe data pada VHDL


Tipe Data Logikal
Terdapat 2 tipe data logikal (logical type) pada VHDL, yakni bit dan
bit_vector. Tipe data bit bernilai 0 atau 1 sedangkan bit_vector
adalah array of bit. Tipe lain yang merupakan subtitusi dari tipe
data bit dan sering digunakan dalam pembuatan desain sirkuit atau
komponen digital adalah std_logic dan std_logic_vector. std_logic
adalah salah satu tipe data yang terdefinisikan pada library
std_logic_1164. Untuk menggunakan tipe data ini kita harus
mendeklarasikan penggunaan library tambahan seperti pada dua
baris pertama pada Gambar 76.
Perbedaan dari kedua tipe data ini adalah bit hanya memiliki dua
kemungkinan nilai yakni 0 atau 1, sedangkan std_logic memiliki
sembilan kemungkinan nilai. Nilai-nilai tersebut antara lain,

U: nilai belum terinisialisasi


X: nilai tidak diketahui (biasanya terjadi jika dalam suatu
signal terdapat aliran data yang saling berlawanan arah
atau sama-sama sedang menulis data ke signal tersebut)
0: logika 0

Implementasi JST dan Wavelet pada FPGA

133

1: logika 1
Z: Impedansi tinggi
W: sinyal lemah, tidak bisa diketahui seharusnya 0 atau 1
L: sinyal lemah, kemungkinan bernilai 0
H: sinyal lemah, kemungkinan bernilai 1

Jika Anda menggunakan Xilinx ISE dalam mengembangkan desain


sirkuit digital maka tipe data yang tepat adalah std_logic dan
std_logic_vector karena dalam Xilinx ISE dua tipe data inilah yang
lebih dapat digunakan dalam berbagai fungsi yang tersedia, semisal
fungsi rising_edge. Fungsi rising_edge akan mengembalikan nilai
true ketika terjadi perubahan nilai pada suatu signal dari 0 ke 1.
Tipe Data Skalar
Tipe data logikal adalah subset (himpunan bagian) dari tipe data
skalar (scalar type). Tipe data skalar adalah nama umum dari
semua jenis objek (tipe data) yang hanya menyimpan satu macam
nilai dalam suatu waktu tertentu. Beberapa tipe data skalar antara
lain,

Boolean: bernilai true atau false,


Character: bernilai null, , a, b, , dst. Sesuai dengan
standar karakter 8 bit ISO 8859-1 atau sering disebut juga
Latin-1.
Integer: bernilai -2147483647 sampai dengan 2147483647
Real: -1.0x10308 sampai dengan 1.0x10308 disebut juga
floating point, memiliki presisi 6 angka dibelakang koma.
Bit: bernilai 0 atau 1

Tipe Data Enumerasi


User atau pengguna juga bisa mendefinisikan tipe enumerasi
(enumeration type). Salah satu contoh penggunaannya adalah
membuat Finite State Machine (FSM). Semua nama state yang ada
dienumerasi (enumerated) atau didaftarkan ketika tipe enumerasi
baru dideklarasikan seperti pada Gambar 77.

134

Implementasi JST dan Wavelet pada FPGA

type FSMState is (Idle, Fetch, Decode, Execute);

Gambar 77. Contoh kode VHDL untuk data tipe enumerasi

Tipe Data Physical


Tipe berikutnya adalah physical types. Tipe ini unik karena selain
menyatakan suatu kuantitas juga menyatakan satuan dari
kuantitas tersebut. Contoh dari tipe ini adalah time (waktu),
distance (jarak), temperature dan besaran lainnya yang dapat
dinyatakan dalam kuantitas. Tipe ini terdiri dari satuan utama
(primary unit) yang dideklarasikan pada awal deklarasi dan satuan
sekunder (secondary unit) yang dideklarasikan setelahnya. Perlu
diketahui bahwa tipe ini tidak bisa disintesis. Contoh dari tipe ini
ada pada
type time is range -2147483647 to 2147483647
units
fs;
ps = 1000 fs;
ns = 1000 ps;
us = 1000 ns;
ms = 1000 us;
sec = 1000 ms;
min = 60 sec;
hr = 60 min;
end units;

Gambar 78. Contoh kode VHDL untuk data physical type

Tipe Data Array


Terdapat pula tipe data Array yang ada pada VHDL, salah satu
array yang sudah didefinisikan adalah bit_vector. Tipe data
bit_vector adalah array dari bit. Tipe data std_logic pun memiliki
bentuk array yakni std_logic_vector. Biasanya dideklarasikan
dengan cara seperti pada Gambar 79.
signal DataBus : std_logic_vector(7 downto 0);

Gambar 79. Contoh deklarasi signal bertipe std_logic_vector

Selain itu kita juga bisa mendefinisikan array sendiri seperti


pada Gambar 80.

Implementasi JST dan Wavelet pada FPGA

135

signal Mem1kx4 : array(0 to 1024) of


std_logic_vector(3 downto 0);

Gambar 80. Contoh deklarasi signal berupa array yang didefinisikan


sendiri

Tipe Data Records


Records adalah tipe data kompleks. Elemen dari records bisa terdiri
dari tipe data yang berbeda-beda. Elemen dari records diakses
dengan cara menyebutkan nama records disambungkan dengan
titik dan nama elemennya. Pada Gambar 81 terdapat contoh cara
mendeklarasikan records dan pada Gambar 82 adalah contoh nilainilai yang dapat disimpian pada records Instr_T.
type Instr_T is record

Code
: bit_vector(3 downto 0);
ExeCycles
: Integer;
end record;
signal Instr1, Instr2, Instr3 : Insrt_T;
Gambar 81. Contoh deklarasi records
Instr1.Code
: 0010
Instr1.ExeCycles : 2
Instr2.Code
: 0001
Instr2.ExeCycles : 1
Instr3.Code
: 0001
Instr3.ExeCycles : 8

Gambar 82. Contoh ilustrasi nilai yang dapat disimpan dalam


records Insrt_T

Penggunaan records akan memudahkan kita dalam proses


abstraksi dari data yang kita gunakan. Records
3.2.4 Ekspresi dan Operator pada VHDL
Ada beberapa macam operator yang bisa digunakan pada VHDL,
antara lain operator logikal (logical), numerikal (numerical), dan
relasional (relational). Operator logikal yang bisa digunakan antara

136

Implementasi JST dan Wavelet pada FPGA

lain adalah and, or, nand, nor, xor, xnor, not. Operator logikal bisa
digunakan untuk mengambarkan isi dari suatu komponen.
Operator numerikal yang bisa disintesis adalah penjumlahan dan
perkalian. Selain itu, terdapat operator relasional untuk
membandingkan antara dua variable yakni sama dengan =, tidak
sama dengan /=, kurang dari <, kurang dari sama dengan <=,
lebih dari >, dan lebih dari sama dengan >=. Operator-operator
ini berlaku untuk tipe data integer. Kita juga dapat merangkai
(concate) data binary dengan menunjuk langsung bit-bit yang
diperlukan dan menggunakan simbol dan (&) untuk
menyambungkannya. Misalkan terdapat dua std_logic_vector yang
panjangnya sama-sama delapan bit. Kita bisa membuat gabungan
dari kedua bilangan tersebut. Pada Gambar 83 terlihat bahwa data
tiga yang bertipe std_logic_vector diperoleh dari menggabungkan
bit ke-tujuh sampai dengan bit ke-empat dari data dua dan bit ketiga sampai dengan bit ke-nol.
data3 <= data2(7 downto 4) & data1(3 downto 0);

Gambar 83. Contoh operasi concate

Simbol <= menandakan assignment suatu nilai yang berada


disebelah kanan tanda tersebut ke sebelah kiri tanda tersebut.
Seperti juga yang terjadi pada Gambar 83.

Implementasi JST dan Wavelet pada FPGA

137

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity MultiGate is
Port ( Input0 : in STD_LOGIC;
Input1 : in STD_LOGIC;
GateMode : in STD_LOGIC_VECTOR (2 downto 0);
Output : out STD_LOGIC);
end MultiGate;
architecture Behavioral of MultiGate is
begin
process(Input0, Input1, GateMode)
begin
case GateMode is
when "000" =>
Output <= Input0 and Input1;
when "001" =>
Output <= Input0 or Input1;
when "010" =>
Output <= Input0 nand Input1;
when "011" =>
Output <= Input0 nor Input1;
when "100" =>
Output <= Input0 xor Input1;
when "101" =>
Output <= Input0 xnor Input1;
when "110" =>
Output <= not Input0;
when "111" =>
Output <= '0';
when others =>
null;
end case;
end process;
end Behavioral;

Gambar 84. Kode untuk komponen gerbang logika serbaguna

3.2.5 Terminologi pada VHDL


Terdapat beberapa terminologi atau klausa yang digunakan pada
VHDL antara lain,

138

Comments
Entity,
Port,

Implementasi JST dan Wavelet pada FPGA

Signal,
Constant,
Process,
Variable,
Generic,
Component,

Terminologi diatas akan dijelaskan pada subbab ini dan juga pada
beberapa subbab berikutnya. Terminologi pertama yang akan kita
bahas adalah comments. Pada VHDL karakter yang menandakan
suatu baris tertentu sebagai catatan atau comments adalah strip
dua kali --. Karakter setelah strip dua kali akan dianggap sebagai
comments dan tidak akan disintesis. Terminologi lainnya adalah
entity. Entity adalah representasi dari sebuah komponen
elektronika. Nama dari sebuah entity disebut dengan identifier.
Sebuah identifier haruslah mengikuti beberapa aturan, antara lain,

Hanya terdiri dari satu baris,


Dimulai dengan sebuah huruf,
Hanya bisa terdiri dari huruf, angka dan undersocre (garis
bawah),
Tidak bisa dimulai atau diakhiri dengan garis bawah dan
tidak boleh terdapat dua garis bawah yang ditulis secara
berturut-turut di dalamnya,
Tidak boleh terdapat spasi,
Huruf kapital dan huruf kecil tidak berpengaruh,
Kata-kata yang sudah terdefinisikan (reserved) tidak bisa
digunakan sebagai identifier. Contoh: port, entity, generic
dll.

Sebuah entity terdiri dari port. Pada VHDL Language Reference


Manual port didefinisikan sebagai saluran untuk komunikasi
dinamis antar blok (entity) dengan lingkungannya. Secara
sederhana dapat didefinisikan saluran ini berupa signal yang
membentuk sebuah interface (antarmuka) sistem.
Signal itu sendiri adalah tipe data untuk merepresentasikan sinyal
elektronik yang menjadi cara bagi setiap komponen elektronika
untuk saling berkomunikasi (mengirimkan data). Secara fisik (di

Implementasi JST dan Wavelet pada FPGA

139

dunia nyata) sinyal adalah aliran elektron yang mengalir mengikuti


salah satu hukum fisika. Namun, dalam VHDL kita tidak perlu
mengkhawatirkan implementasinya secara fisik, karena hal ini akan
ditangani oleh logic synthesis dan berbagai tools lainnya. Hal yang
perlu kita pikirkan adalah fungsionalitas dan kinerja dari desain
komponen yang kita buat. Setiap port dispesifikasikan dalam klausa
port masing-masing secara tepat dan presisi. Klausa port terdiri
dari beberapa bagian antara lain,

Kata signal (opsional),


Nama dari port diikuti oleh simbol titik dua,
Mode dari port (in, out atau inout),
Tipe dari port (bit, bit_vector, std_logic, std_logic_vector),
Opsional; nilai inisialisasi dengan menambahkan simbol :=
dan nilai inisialisasinya,
Opsional; comment yang mendeskripsikan tentang port
tersebut.

Pada Gambar 76 terdapat contoh penulisan untuk entity dflipflop.


Beberapa mode port antara lain,

in: port yang hanya untuk menerima data, diperbolehkan untuk


membaca (read) signal seperti ini, tetapi tidak boleh
dipergunakan untuk menulis (write).
out: port yang hanya dipergunakan untuk mengirim data,
diperbolehkan untuk menulis tetapi tidak diperbolehkan untuk
membaca.
inout: port dua arah (bi-directional), diperbolehkan untuk
menulis dan membaca data.
buffer: sama seperti inout, dapat menerima dan mengirimkan
data tetapi hanya memperbolehkan penulisan di dalam entity.
linkage: port bi-directional tetapi memiliki peraturan yang ketat
dalam proses pembacaan dan penulisan data, hampir tidak
pernah dipakai dalam proses desain sirkuit digital.

Hanya empat mode port teratas yang bisa disintesis. Sebuah port
sendiri merupakan sebuah signal yang dapat dihubungkan dengan
signal lainnya. Signal dapat menghubungkan dua buah port yang

140

Implementasi JST dan Wavelet pada FPGA

berbeda arah. Sebagai contoh port in dengan port out , port inout
dengan port in atau port out, dan buffer dengan port in atau port
out. Berdasarkan scope (ruang lingkupnya), signal dibagi menjadi
dua jenis, yakni, internal signal dan external signal.
External signal adalah signal yang menghubungkan suatu
komponen dengan dunia di luarnya. Internal Signal adalah signal
yang tidak dapat dilihat dari luar komponen dan merupakan bagian
dari arsitektur internal suatu komponen, seperti signal antar sub
komponen di dalam suatu komponen.
Generic pada Language Reference Manual didefinisikan sebagai
saluran informasi statis yang digunakan untuk komunikasi antara
suatu blok dengan lingkungannya. Generic menyediakan suatu
konstanta yang terlihat dari luar sistem atau komponen untuk
suatu parameter tertentu.
Deklarasi dari generic terdiri dari beberapa elemen, antara lain,

Nama dari generic diikuti oleh simbol titik dua :


Tipe dari generic
Opsional: nilai dari generic yang diawali dengan simbol :=
dan nilai ini bisa tergantikan oleh nilai yang dideklarasikan
pada lingkup component (dibahas lebih lanjut pada subbab
Component).
Optional: comment untuk menerangkap tentang generic
tersebut.
entity MyProcessor is
generic (BusWidth : Integer := 3);
port (
DataBus : inout std_logic_vector (BusWidth-1
downto 0);

);
end entity MyProcessor;

Gambar 85. Contoh penggunaan generic.

Selain generic terdapat pula terminologi constant atau konstanta.


Berbeda dengan generic, constant dideklarasikan di dalam sebuah

Implementasi JST dan Wavelet pada FPGA

141

arsitektur entity. Deklarasi dari sebuah constant terdiri dari


beberapa elemen, antara lain,

Kata constant,
Nama dari constant atau constant identifier
Karakter titik dua :
Tipe constant,
Nilai dari constant yang dituliskan setelah simbol :=,
Karakter titik koma ; untuk mengakhiri deklarasi.

Ada beberapa tipe constant antara lain, positive, time, dan integer.
Pada Gambar 86, Gambar 87, dan Gambar 88 adalah contoh
deklarasi dari berbagai tipe constant.
entity Ent1 is
generic ();
port ();
constant LoopNumber : positive := 4;
begin

end entity Ent1;

Gambar 86. Contoh constant bertipe positive.


architecture Ent1_Arch of Ent1 is
constant t_propagation : time := 10 ns;
begin

end architecture Ent1_Arch;

Gambar 87. Contoh constant bertipe time.


p1 : process(A, B)
constant N : integer := 123;
begin

end process p1;

Gambar 88. Contoh constant bertipe integer.

Terdapat tiga perbedaan antara generic dengan constant.


Perbedaan pertama adalah lokasi deklarasi, generic dideklarasikan
pada sebuah entity sedangkan constant dideklarasikan di dalam

142

Implementasi JST dan Wavelet pada FPGA

sebuah architecture atau package. Perbedaan kedua adalah cara


mendeklarasikan, generic dideklarasikan dalam sebuah daftar (list)
sedangkan constant dideklarasikan perbaris atau satu deklarasi
untuk satu constant. Ilustrasinya terdapat pada Gambar 89 dan
Gambar 90. Perbedaan terakhir adalah dari tingkat keterlihatan,
cakupan atau scope. Generic berlaku di tingkat entity dan
architecture di dalamnya, sedangkan constant berlaku pada entity
(jika dideklarasikan dalam sebuah entity) atau pada package
tertentu (jika dideklarasikan dalam sebuah package), termasuk
semua entity dan architecture yang menggunakan package
tersebut.
generic list:
generic(
generic_name : generic_type := optional_value;

generic_name : generic_type := optional_value;


);

Gambar 89. Struktur deklarasi generic


constants:
satu deklarasi per satu constant
constant constant_name : constant_type := value;
constant constant_name : constant_type := value;

Gambar 90. Struktur deklarasi constant

3.2.6 Process
Salah satu konsep yang ada pada VHDL adalah adanya process.
Pada Gambar 76 juga terdapat process yang mendeskripsikan
perilaku D flip flop. Process menggambarkan secara sekuensial
langkah-langkah yang dilakukan dalam suatu komponen. Setiap
statement yang ada pada process dieksekusi secara sekuensial.
Sebuah process juga bisa dikaitkan dengan sensitivity list.
Sensitivity list berisi port yang berkaitan dengan process tersebut.
Pada Gambar 76 terdapat port C yang disambungkan ke process di
dalam komponen dflipflop. Setiap perubahan nilai pada port yang
ada pada sensitivity list akan memicu berjalannya sebuah process.
Pada VHDL, setiap process yang ada pada kode program dianggap

Implementasi JST dan Wavelet pada FPGA

143

berjalan secara paralel. Pada Gambar 91 terdapat struktur umum


dari process.
nama proses: process(sensitivity_list)
declarations
begin
sequential statements
end nama process;

Gambar 91. Struktur Process

Setiap signal yang terlibat pada sensitivity_list nilainya akan diupdate sesuai dengan sequential statement yang ada di dalam
process pada saat keseluruhan process telah selesai dieksekusi
(mencapai statement end). Sensitivity_list juga mempengaruhi
berjalannya process. Jika ada satu signal saja yang nilainya berubah
maka process akan terpicu untuk dijalankan atau dieksekusi.
Misalkan terdapat lima signal bertipe integer yakni, A, B, C, D, E.
Masing-masing bernilai satu sebelum memasuki process yang
terdapat pada Gambar 92. Ketika nilai C berubah dari satu menjadi
dua, maka process akan terpicu untuk dieksekusi. Baris pertama
adalah meng-update nilai A menjadi lima. Baris kedua mengupdate nilai B menjadi A + C, karena update nilai baru terjadi pada
saat process berakhir, maka nilai A yang digunakan adalah nilai
sebelum process terjadi yakni satu. Nilai C sama dengan dua
sehingga B bernilai satu ditambah dua sama dengan tiga. Lalu baris
ketiga dieksekusi A sama dengan nilai D ditambah satu. Nilai D
sendiri adalah satu sehingga nilai A menjadi dua.
Pada baris terakhir E di-update nilainya sama dengan A ditambah
dua, nilai A yang digunakan adalah nilai sebelum process terjadi
(satu), sehingga nilai E sama dengan tiga. Pada akhir process
barulah semua nilai di-update. Pada akhir process nilai A sama
dengan dua, B sama dengan tiga, C sama dengan dua, dan E sama
dengan tiga.

144

Implementasi JST dan Wavelet pada FPGA

process(C, D)
begin
A <= 5;
B <= A + C;
A <= D + 1;
E <= A + 2;
end process;

Gambar 92. Contoh process yang melibatkan perubahan nilai signal.

Selain penggunaan signal pada process kita juga bisa menggunakan


variable. Perbedaan terbesarnya adalah nilai variable pada process
di-update tepat setelah baris kode menyangkut proses update
tersebut dieksekusi. Pada contoh dari process yang menggunakan
variable.
process(C, D)
variable Av, Bv, Ev : integer := 0;
begin
Av := 5;
Bv <= Av + C;
Av <= D + 1;
Ev <= Av + 2;
A <= Av;
B <= Bv;
E <= Ev;
end process;

Gambar 93. Contoh process yang melibatkan perubahan nilai


variable.

Misalkan terdapat lima signal bertipe integer yakni, A, B, C, D, E


dan tiga variable Av, Bv, dan Ev. A, B, C, D, dan E sebelum
memasuki process masing-masing bernilai satu. D mengalami
perubahan nilai dari satu menjadi dua. Process terpicu dan
dieksekusi. Baris pertama dieksekusi, Av di-update nilainya dengan
nilai lima, maka pada saat itu juga nilai Av menjadi lima. Baris
kedua meng-update nilai Bv dengan nilai Av ditambah C yakni lima
ditambah satu, sehingga nilai Bv adalah enam. Kemudian pada
baris ketiga nilai Av di-update lagi dengan nilai D (satu) ditambah
satu menjadi dua. Pada baris keempat nilai Ev di-update dengan
nilai Av (dua) ditambah dua menjadi empat. Pada tiga baris
terakhir nilai variable Av, Bv, dan Ev di-assign ke signal A, B, dan E,

Implementasi JST dan Wavelet pada FPGA

145

sehingga pada akhir process nilai masing-masing signal tersebut


secara berurut menjadi, dua, enam dan empat.
library ieee;
use ieee.std_logic_1164.all;
entity dflipflop is
port(C, D, reset : in std_logic;
Q
: out std_logic);
end dflipflop;
architecture Behaviorial of dflipflop is
begin
process (C, D, reset)
begin
if (reset = '1') then
Q <= '0';
elsif (C'event and C='1') then
Q <= D;
end if;
end process;
end Behaviorial;
Gambar 94. Kode VHDL komponen D flip flop dengan input reset.

Setidaknya terdapat dua perbedaan antara signal dan variable.


Perbedaan pertama adalah tempat deklarasi, signal harus
dideklarasikan di luar process sedangkan variable harus
dideklarasikan di dalam sebuah process. Perbedaan kedua adalah
pada signal, update nilai terjadi setelah keseluruhan baris process
dieksekusi sehingga self assignment seperti B <= B + 1 tidak bisa
dan tidak diperbolehkan. Sedangkan pada variable hal seperti ini
diperbolehkan bahkan sering digunakan.

146

Implementasi JST dan Wavelet pada FPGA

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.NUMERIC_STD.ALL;
entity LoopComponent is
Port ( Input : in std_logic_vector(7 downto 0);
Output : out std_logic_vector(7 downto 0);
Clock : in std_logic);
end LoopComponent;
architecture Behavioral of LoopComponent is
begin
process(Input)
variable count : integer := to_integer(
UNSIGNED(Input) );
begin
count := 0;
while count < 16 loop
count := count + 1;
end loop;
Output <= Input + count;
end process;
end Behavioral;
Gambar 95. Contoh penggunaan loop

Pada bagian sequential statements juga bisa diletakan perintah


berbagai statement pengatur alur process. Pengatur alur process
yang pertama adalah conditional statement atau if then. Hal ini
sudah dipraktikan pada contoh implementasi D-flip flop (Gambar
76). Modifikasi dengan memberikan pilihan alternatif pada alur ini
juga dapat dilakukan dengan cara menambah pilihan elsif seperti
pada Gambar 94. Cara lainnya untuk mengatur alur kode adalah
menggunakan multiple choice seperti pada Gambar 84.
Kita juga bisa menggunakan conditional loop seperti pada Gambar
95. Tetapi penggunaan loop hanya bisa digunakan pada komponen
kombinatorial (tanpa clock) saja dan tidak bisa diterapkan pada
komponen dengan clock. Komponen test bench sendiri akan
dijelaskan pada bagian berikutnya. Kita juga bisa menggunakan

Implementasi JST dan Wavelet pada FPGA

147

counter pada loop seperti pada Gambar 97. Kita juga bisa
melewatkan sebuah loop dengan menggunakan kata next seperti
yang tertera pada
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;
entity BitOneCounter is
Port ( Input : in STD_LOGIC_VECTOR (3 downto 0);
Output : out STD_LOGIC_VECTOR (2 downto 0));
end BitOneCounter;
architecture Behavioral of BitOneCounter is
begin
CountOnes: process(Input)
variable NumOfOnes : STD_LOGIC_VECTOR (2 downto 0);
begin
for Cntr in 3 downto 0 loop
next when Input(Cntr) = '0';
NumOfOnes := NumOfOnes + 1;
end loop;
Output <= NumOfOnes;
end process CountOnes;
end Behavioral;

Gambar 96. Contoh penggunaan melewatkan loop menggunakan next


when

3.2.7 Component
Spesifikasi struktural desain sirkuit digital pada VHDL terdiri
dari component yang saling terhubung satu sama lain
menggunakan signal. Component dideklarasi terlebih di sebuah
entity jika entity tersebut menggunakannya. Kemudian
melakukan port map pada setiap signal yang tersambung.
Sambungan antar port juga bisa langsung dilakukan apabila
port yang disambungkan merupakan port antara entity dan
component yang saling berbeda jenis. Apabila kita ingin
menyambungkan port antar component maka kita harus
terlebih dahulu membuat signal untuk menjembatani kedua
port tersebut.

148

Implementasi JST dan Wavelet pada FPGA

library ieee;
use ieee.std_logic_1164.all;
entity ReverseComponent is
Port ( Input : in std_logic_vector (3 downto 0);
Output : out std_logic_vector (3 downto 0));
end ReverseComponent;
architecture Behavioral of ReverseComponent is
constant MSB : natural := 3;
subtype BusRange is natural range MSB downto 0;
signal SourceBus : std_logic_vector(BusRange);
begin
ReverseBus: process(Input)
variable ResultBus : std_logic_vector(BusRange);
begin
SourceBus <= Input;
for Cntr in BusRange loop
ResultBus(MSB - Cntr) := SourceBus(Cntr);
end loop;
Output <= ResultBus;
end process;
end Behavioral;
Gambar 97. Contoh penggunaan loop dengan counter

Pada Gambar 98 terdapat contoh dari penggunaan


compoonent full adder 1 bit pada entity full adder 2 bit.
FAdd1bit memiliki nama instance F0 dan F1 dan dideklarasikan
terlebih dahulu sebagai component. Pada port map semua port
yang berkaitan disambungkan.
3.2.8 Komponen Test Bench
Test bench adalah suatu entity yang menggunakan komponen
lain untuk diuji kebenaran fungsinya. Salah satu perintah yang
unik dan hanya bisa digunakan pada komponen test bench
(tidak bisa disentesis menjadi komponen logika) adalah
perintah wait. Perintah wait berfungsi memberikan delay atau
penundaan pada suatu proses sampai pada waktu tertentu
atau sampai pada kondisi tertentu. Namun perintah wait tidak
bisa melalui proses sintesis sehingga lebih sering digunakan

Implementasi JST dan Wavelet pada FPGA

149

untuk membuat komponen test bench. Terdapat tiga macam


bentuk dasar dari statement wait.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity FAdd2Bit is
Port ( InputA : in STD_LOGIC_VECTOR (1 downto 0);
InputB : in STD_LOGIC_VECTOR (1 downto 0);
CarryIn : in STD_LOGIC;
CarryOut : out STD_LOGIC;
OutputSum : out STD_LOGIC_VECTOR (1 downto 0));
end FAdd2Bit;
architecture Behavioral of FAdd2Bit is
component FAdd1bit is
Port ( X, Y, Ci : in STD_LOGIC;
Cout, S : out STD_LOGIC);
end component;
signal Co0toCi1: STD_LOGIC;
begin
F0 : FAdd1bit port map (
X=>InputA(0), Y=>InputB(0),
Ci=>CarryIn, Cout=>Co0toCi1,
S=>OutputSum(0));
F1 : FAdd1bit port map (
X=>InputA(1), Y=>InputB(1),
Ci=>Co0toCi1, Cout=>CarryOut,
S=>OutputSum(1));
end Behavioral;

Gambar 98. Contoh component dan port map.

Bentuk wait yang pertama adalah wait for type_expression.


Perintah wait ini berfungsi menunda suatu process selama
interval waktu tertentu. Interval waktu tersebut bisa
disebutkan secara eksplisit ataupun sedangn suatu ekspresi
atau konstanta tertentu. Perintah ini amat sering digunakan
dalam proses pembuatan komponen test bench.
Bentuk wait yang kedua adalah wait until condition. Perintah
ini kan menunda sebuah proses sampai kondisi dari suatu
sinyal tertentu tercapai. Bentuk wait yang ketiga adalah wait

150

Implementasi JST dan Wavelet pada FPGA

on sensitivity list. Wait ini akan menunda keseluruhan proses


sampai ada suatu perubahan nilai terjadi terhadap sinyal yang
didaftarkan di dalam deklarasi wait. Terdapat satu bentuk wait
tambahan yang merupakan gabungan dari beberapa bentuk
wait. Bentuk tersebut adalah complex wait. Pada Gambar 99
terdapat contoh dari deklarasi berbagai bentuk wait
-- wait for type_expression
wait for 10 ns;
wait for clockPeriod*4;
-- wait until condition
wait until clock = 1;
-- wait on sensitivity list
wait on enable, input;
-- complex wait
Wait on input until clock = 1;

Gambar 99. Contoh berbagai bentuk wait

Pada Gambar 100 terdapat contoh test bench untuk komponen full
adder 2 bit.

Implementasi JST dan Wavelet pada FPGA

151

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY FAdd2Bit_TB IS
END FAdd2Bit_TB;
ARCHITECTURE behavior OF FAdd2Bit_TB IS
-- Component Declaration for the Unit Under Test
(UUT)
COMPONENT FAdd2Bit
PORT(
InputA : IN std_logic_vector(1 downto 0);
InputB : IN std_logic_vector(1 downto 0);
CarryIn : IN std_logic;
CarryOut : OUT std_logic;
OutputSum : OUT std_logic_vector(1 downto 0)
);
END COMPONENT;

--Inputs
signal InputA : std_logic_vector(1 downto 0) :=
(others => '0');
signal InputB : std_logic_vector(1 downto 0) :=
(others => '0');
signal CarryIn : std_logic := '0';
--Clock
signal clock : std_logic := '0';
--Outputs
signal CarryOut : std_logic;
signal OutputSum : std_logic_vector(1 downto 0);
constant clock_period : time := 10 ns;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: FAdd2Bit PORT MAP (
InputA => InputA,
InputB => InputB,
CarryIn => CarryIn,
CarryOut => CarryOut,
OutputSum => OutputSum
);

152

Implementasi JST dan Wavelet pada FPGA

-- Clock process definitions


clock_process :process
begin
clock <= '0';
wait for clock_period/2;
clock <= '1';
wait for clock_period/2;
end process;
-- Stimulus process
stim_proc: process
begin
InputA <= "01";
InputB <= "10";
end process;
END;

Gambar 100. Contoh komponen test bench

3.3 Representasi Angka


3.3.1 Fixed Point
Fixed point adalah format angka yang di-support secara default
pada bahasa VHDL. Fungsi operasi matematika untuk tipe bilangan
ini sudah ada tanpa perlu membuat implementasi komponen
tambahan. Suatu bilangan fixed point terdiri dari dua bagian, yaitu
bagian integer (angka di depan koma) dan bagian fraction (angka di
belakang koma). Contoh beberapa bilangan dalam representasi
fixed point dengan spesifikasi 4 bit integer dan 4 bit fraction.
Desimal Fixed Point
1

0001 0000

0.5

0000 1000

0.25

0000 0100

2.75

0010 1100

Tabel 4. Representasi fixed point

Implementasi JST dan Wavelet pada FPGA

153

Konversi Desimal ke Fixed Point


Langkah-langkah untuk melakukan konversi adalah sebagai berikut:
1. Tentukan format fixed point yang akan dipakai. Misalkan 4
bit integer dan 4 bit fraction. Sebaiknya angka
direpresetasikan
dalam
kelipatan
4,
sehingga
mempermudah untuk penulisan angka dalam notasi
heksadesimal.
2. Konversi dilakukan terpisah antara bagian integer dan
bagian fraction. Untuk bagian integer atau angka di depan
koma, konversi dilakukan seperti konversi bilangan biner
2s complement.
3. Untuk angka di belakang koma, lakukan seperti konversi
angka depan koma, namun dengan nilai bilangan selalu
positif. Gunakan angka 2-x dengan x mulai 1,...,n dengan n
adalah jumlah bit fraction.
Contoh:
Konversi bilangan 6.625 ke dalam fixed point 8 bit
dengan 4 bit integer dan 4 bit fraction.
2
1
0
a. Konversi 610 = 1x2 + 1x2 + 0x2 = 0110
-1
-2
-3
b. Konversi 0.625 = 1x2 + 0x2 + 1x2 = 1010
Maka hasil akhirnya adalah 0110 1010 atau dalam
heksadesimal 6A16

Penjumlahan Fixed Point


Penjumlahan pada fixed point dilakukan sama persis ketika kita
melakukan penjumlahan terhadap bilangan biner 2s complement.
Syarat dari operasi penjumlahan dua bilangan fixed point adalah
kedua bilangan yang dijumlahkan harus memiliki format bilangan
yang sama (panjang bit integer dan bit fraction yang sama).

154

Implementasi JST dan Wavelet pada FPGA

Contoh:
Jumlahkan bilangan 1.25 dengan 3.625 dengan format fixed
point 4 bit integer dan 4 bit fraction.
1.25 = 00010100
3.625 = 00111010
00010100
00111010
--------------+
01001110 = 4.875

Perkalian Fixed Point


Perkalian pada bilangan fixed point dilakukan sama persis ketika
kita mengalikan bilangan biner 2s complement. Hal yang
membedakan adalah ketika akan mengambil hasilnya. Perkalian
dua buah bilangan biner dengan panjang n menghasilkan bilangan
dengan panjang 2*n.
Contoh:
Kalikan bilangan 1.25 dengan 3.625 dengan format fixed
point 4 bit integer dan 4 bit fraction.
1.25 = 00010100
3.625 = 00111010
00010100*00111010 = 0000100.10001000
Ambil 4 titik di depan koma dan 4 titik di belakang koma
0100.1000 = 4.5 (hasil akhir seharusnya 4.53125)

3.3.2 Floating Point


Representasi bilangan riil yang sering dipakai di komputer adalah
floating point. Secara matematika, bilangan floating point dapat
ditulis sebagai berikut:
1 1. 2 2
Sebuah bilangan floating point dalam representasi binernya terdiri
dari 3 bagian. Bagian pertama panjangnya 1 bit dan terletak paling
depan digunakan untuk menandakan nilai positif atau negatif
sehingga disebut signed bit. Bagian kedua adalah bit-bit yang
merepresentasikan nilai eksponen. Bagian ketiga adalah bit-bit

Implementasi JST dan Wavelet pada FPGA

155

yang merepresentasikan nilai mantissa. Gambar berikut


mengilustrasikan representasi standar bilangan floating point
dengan single precision seperti yang diklasifikasikan oleh IEEE 754.
exponent (8)
mantissa (23)
sign bit
(1)

float = (-1)sign x 1.mantissa(exponent - 127)

Gambar 101 Spesifikasi Floating point Single Precision

IEEE 754 menspesifikasikan 2 buah standar bilangan floating point.


Sebuah floating point single precision terdiri dari 1 signed bit, 8
exponent bit, dan 23 mantissa bit. Sedangkan floating point double
precision terdiri dari 1 signed bit, 11 exponent bit, dan 52 mantissa
bit.
Suatu bilangan floating point biasanya dinormalisasi. Normalisasi
mempunyai dua buah keuntungan. Keuntungan pertama masalah
konsistensi nilai. Sebuah bilangan direpresentasikan oleh tepat
satu bilangan floating point yang sudah dinormalisasi. Hal ini tidak
berlaku untuk bilangan floating point yang tidak dinormalisasi.
Suatu bilangan riil biasa dapat direpresentasikan oleh banyak
bilangan sehingga sulit untuk menjaga konsistensinya.
Keuntungan kedua adalah mendapat tingkat akurasi ekstra.
Bilangan floating point dengan 4 bit mantissa sebenarnya bisa
menampung bilangan sebanyak 5 bit karena bit paling depan selalu
diasumsikan 1.
Nilai eksponen pada bilangan floating point biasanya ditambahkan
dengan sebuah nilai yang bernama bias. Bias ditambahkan ke nilai
eksponen agar nilai eksponen selalu positif. Bias dihitung dengan
menggunakan rumus:
= 21 1
Dimana E adalah panjang bit eksponen.
Jika digambarkan persebaran bilangan floating point pada sebuah
garis bilangan, maka akan kita temui bahwa persebaran bilangan
156

Implementasi JST dan Wavelet pada FPGA

floating point tidaklah merata untuk setiap bagian pada garis


bilangan. Persebaran floating point lebih rapat ketika mendekati
nilai 0 dan semakin renggang jika menjauhi titik 0. Hal ini berbeda
dengan fixed point yang sebarannya merata pada garis bilangan.
Hal ini mengakibatkan perhitungan dengan nilai dekat dengan 0
mempunyai presisi lebih baik dibandingkan perhitungan angka
yang sangat besar.
Sesuai dengan standar yang diterapkan IEEE 754, beberapa
bilangan floating point sengaja disimpan untuk merepresentasikan
beberapa bilangan spesial seperti berikut:
1. Nol (Zero)
Angka 0 tidak bisa direpresentasikan secara biasa karena
setiap bilangan floating point diasumsikan mempunyai
angka 1 di depan akibat normalisasi. Oleh karena itu, angka
0 direpresentasikan dengan bit eksponen yang berisi 0
semua dan bit mantissa yang 0 semua juga. Perhatikan
bahwa ini berarti terdapat dua buah angka 0, yaitu +0 dan 0 walaupun keduanya dianggap sama.
2. Tak hingga (Infinity)
Bilangan tak hingga (infinity) dilambangkan dengan bit
eksponen nilainya 1 semua dan bit mantissa yang bernilai 0
semua.
3. NaN (Not a Number)
Nan (Not a Number) adalah bilangan yang terjadi apabila
terdapat nilai yang tidak bisa direpresentasikan dengan
bilangan riil. Simbol ini diwakilkan dengan bit eksponen
yang bernilai 1 semua dan bit mantissa yang nilainya tidak
0.
Tabel 5 menampilkan standar operasi matematika ketika terdapat
operand yang berupa angka spesial sesuai standar IEEE 754.
Tabel 5. Standar IEEE 754

Implementasi JST dan Wavelet pada FPGA

157

Operation

Result

N : +- infinity

+- Infinity x +- Infinity

+- Infinity

+- nonzero : 0

+- Infinity

Infinity + Infinity

Infinity

+- 0 : +- 0

NaN

Infinity Infinity

NaN

+- Infinity : +- Infinity

NaN

+- Infinity x 0

NaN

Contoh beberapa bilangan dalam representasi floating point 3 bit


eksponen dan 4 bit mantissa.
Tabel 6. floating point 8 bit
Desimal Floating point
2.5

01000100

3.25

01001010

5.75

01010111

Konversi Desimal ke Floating Point


Aturan untuk melakukan konversi dari bilangan desimal ke floating
point adalah sebagai berikut:
1. Konversi nilai absolut dari bilangan desimal tersebut ke
bilangan biner. Hal ini bisa dilakukan dengan cara
mengkonversi bilangan di depan koma (integral part) dan
bilangan di belakang koma (fractional part) secara terpisah.
Bilangan di depan koma dapat dikonversi seperti
mengkonversi bilangan basis 10 ke basis 2. Sedangkan

158

Implementasi JST dan Wavelet pada FPGA

2.

3.

4.
5.

bilangan di belakang koma dikonversi dengan cara berbeda.


Kita kalikan bilangan tersebut dengan 2 berkali-kali dan
setiap perkalian kita ambil nilai di depan komanya (1 atau 0)
sampai hasil di belakang komanya bernilai 0.
Normalisasi bilangan sehingga angka di depan koma hanya
angka 1, Perbarui eksponen agar nilai bilangan tidak
berubah.
Ambil significand dari bilangan tersebut, buang angka 1 di
depan kemudian masukkan sisanya ke dalam slot mantissa.
Tambahkan angka 0 dibelakangnya jika perlu.
Jumlahkan nilai bias kepada eksponen. Masukkan eksponen
ke dalam slot eksponen.
Set signed bit dengan 1 jika bilangan asli negatif, dan 0 jika
bilangan awal adalah positif.

Contoh:
Konversi bilangan 2.625 ke dalam floating point 8 bit
dengan 1 bit signed,
a. 210 dikonversi menjadi 102, Kemudian bilangan di
belakang koma dikonversi seperti berikut:
> 0.625 x 2 = 1.25 [1] (ambil satu dan lanjutkan)
> 0.25 x 2 = 0.5
[0] (ambil nol dan lanjutkan)
> 0.5 x 2 = 1.0 [1] (ambil satu dan tidak ada
sisa)
Jadi, 0.62510 = 1012, dan 2.62610 = 10.1012
0
b. Tambahkan bagian eksponen 2
c. Normalisasi, 10.101 = 1.0101
d. Tambahkan bias pada eksponen
e. Set signed bit
Hasilnya adalah 0 100 0101 atau dalam heksadesimal 4516

Penjumlahan Floating Point


Aturan penjumlahan untuk floating point adalah berikut:
1. Samakan eksponen dari kedua bilangan yang akan
dijumlahkan
2. Jumlahkan significand seperti biasa

Implementasi JST dan Wavelet pada FPGA

159

3. Normalisasi hasilnya jika perlu


Contoh:
Jumlahkan 2.5 dengan 3.25 dalam representasi floating
point 8 bit, 3 bit eksponen dan 4 bit mantissa.
2.5 = 01000100
3.5 = 01001010
Karena kedua bilangan sudah memiliki eksponen yang sama
kita tinggal menjumlahkan significand-nya.
1.0100 + 1.1010 = 10.1110
Normalisasi
1.01110, eksponen ditambah 1 menjadi 101
Hasil akhir
01010111 = 5.75

Perkalian Floating Point


Perkalian antar bilangan floating point memiliki aturan seperti
berikut
1. Tentukan hasil akhir perkalian apakah positif atau negatif
dengan cara meng-XOR signed bit kedua operand
2. Kalikan significand antara kedua bilangan (bilangan
significand dari floating point adalah 1 disambung
mantissa-nya) secara biasa
3. Jumlahkan eksponen dari kedua bilangan (kurangi dulu
kedua eksponen dengan bias-nya, jumlahkan, lalu tambah
kembali bias-nya)
4. Normalisasi kembali

Contoh:

160

Implementasi JST dan Wavelet pada FPGA

Kalikan 2.5 dengan 3.25 dalam representasi floating


point 8 bit, 3 bit eksponen dan 4 bit mantissa.
2.5 = 01000100
3.25 = 01001010
Pertama, tentukan signed bit hasil perkalian. Karena
kedua bilangan ini positif, maka hasil akhirnya positif
juga. Signed bit = 0.
Kalikan significand-nya,
2.5 = 10100
3.25 = 11010
Perkalian dua buah bilangan biner dengan panjang n
menghasilkan bilangan dengan panjang 2*n.
1.0100 * 1.1010 = 10.00001000
Tambahkan eksponen
(4-3)+(4-3)+3 = 5 => 101
Normalisasi
1.000001000, eksponen ditambah 1 menjadi 110
Hasil akhir
0110000 = 8 (hasil aslinya 8.125)

3.3.3 Perbandingan dan Format Lainnya


Perbandingan Fixed Point dan Floating Point
Antara fixed point dan floating point masing-masing mempunyai
kelebihan dan kekurangan masing-masing. Tabel berikut akan
meringkas kelebihan dan kekurangan dari kedua format tersebut
sehingga pembaca bisa mencocokkan kebutuhan dan bisa memilih
format yang sesuai.
Floating Point
(+) Range angka yang sangat
panjang ( )
(-) Operasi matematika yang
melibatkan floating point butuh
komponen dengan implementasi
yang tidak sederhana

Fixed Point
(-) Range angka terbatas
(+) Operasi matematika simpel dan
sederhana untuk diimplementasikan.

Implementasi JST dan Wavelet pada FPGA

161

(-) jarak selisih antar bilangan (+) Selisih tiap angka sama
berubah-rubah. (selisih kecil jika
nilai dekat dengan 0, selisih besar
jika nilai semakin besar)
(+) Terdapat representasi untuk (-) Tidak ada representasi nilai
berbagai nilai tak wajar, seperti tak error
hingga ataupun overflow.

Logarithmic Number System


Logarithmic Number System (LNS) merupakan salah satu alternatif
format angka lainnya. LNS memiliki keunggulan memiliki range
nilai yang luas seperti floating point, namun beberapa operasi
matematikanya mempunyai kemudahan dalam menghitung seperti
fixed point. Operasi perkalian pada LNS sama seperti operasi
penjumlahan pada fixed point. Kelemahannya adalah pada operasi
penjumlahan antar LNS yang tidak semudah operasi penjumlahan
fixed point.
LNS dapat dilihat sebagai kasus khusus dari floating point dimana
mantissa selalu bernilai 1, dan eksponennya memiliki nilai pecahan
(fractional).
= 1 2
LNS memiliki format sebagai berikut
SA

EA

Flags

Sign

Integer

Fraction

2 bit

1 bit

K bit

L bit

Gambar 102. Format LNS

Berbeda dengan floating point, LNS tidak bisa merepresentasikan


nilai-nilai khusus seperti 0, tak hingga, dan NaN sehingga nilai-nilai
tersebut harus direpresentasikan ke dalam 2 bit flag.

162

Implementasi JST dan Wavelet pada FPGA

Perkalian pada LNS dilakukan dengan cara menambahkan kedua


nilai eksponen. Hal ini berdasarkan terhadap sifat logaritmik
berikut.
2 + = 2 + 2 ()
Signed bit cukup di XOR antara bilangan pengali dan bilangan yang
dikali, sedangkan kasus-kasus spesial seperti tak hingga dan lainnya
dilakukan seperti standar yang sudah ditetapkan di IEEE 754.

Implementasi JST dan Wavelet pada FPGA

163

Bab 4 Implementasi Algoritma Jaringan


Saraf Tiruan Backpropagation Pada
FPGA
4.1 Backpropagation pada FPGA
Pada FPGA, setiap algoritma yang diimplementasikan diubah
menjadi sebuah rangkaian digital yang melakukan proses yang
sama dengan setiap bagian algoritma tersebut. Hingga saat buku
ini diterbitkan, penulis belum menemukan karya ilmiah ataupun
penelitian yang dipublikasikan dan menjelaskan dengan baik cara
mengimplementasi fase Backpropagation of error pada FPGA.
Algoritma jaringan saraf tiruan Backpropagation yang
diimplementasikan pada penelitian ini menggunakan desain yang
telah dibuat oleh Aydoan Savran dan Serkan nsal (2007). Desain
tersebut mengimplementasikan hanya fase feedforward dari
algoritma Backpropagation dan hal yang sama juga dilakukan pada
buku ini. Perbedaan implementasi dengan penelitian tersebut
adalah pada penelitian ini menggunakan bias dan algoritma
diimplementasikan untuk pengenalan data yang telah diestraksi
dari suatu dataset. Adapun data yang digunakan dalam bab ini
adalah data ECG yang sudah diproses dengan suatu metode
ekstraksi ciri.

4.2 Implementasi dan Adaptasi Desain


Implementasi dilakukan dengan menggunakan perangkat lunak
Xilinx ISE Design Suite versi 12.3. Representasi data yang digunakan
berbeda dengan penelitian yang dilakukan oleh Aydoan Savran
dan Serkan nsal (2007). Pada paper tersebut implementasi pada
FPGA hanya dilakukan untuk proses feedforward dan representasi
data menggunakan 8 bit twos complement fixed point. Pada buku
ini representasi yang digunakan adalah 12 bit twos complement
fixed point.

164

Implementasi JST dan Wavelet pada FPGA

Perbedaan
lainnya
adalah
pada
penelitian
tersebut
diimplementasikan jaringan saraf tiruan dengan tiga neuron input,
lima neuron tersembunyi dan satu neuron output dan tanpa
menggunakan bias, sedangkan pada buku ini terdapat sebelas
neuron input, tiga neuron tersembunyi dan dua neuron output dan
terdapat bias untuk setiap neuron pada lapisan tersembunyi dan
lapisan output.

4.3 Representasi Data


Representasi data yang digunakan adalah bilangan twos
complement fixed point menggunakan dua belas bit dengan satu
sign bit, tiga bit integer, dan delapan bit fraction. Presisi dari
representasi bilangan ini adalah 1/256 dengan rentang nilai [-8, 8).
Tabel 7. Representasi Data
Nilai

Representasi Fixed Point

-8
-3
-0.5
0.00390625
0.5
0.75
1
7
7,99609375

1000 0000 0000


1101 0000 0000
1111 1000 0000
0000 0000 0001
0000 1000 0000
0000 1100 0000
0001 0000 0000
0111 0000 0000
0111 1111 1111

4.4 Desain Neuron dan Input ROM


Input Read Only Memory (ROM) berisi seratus baris input data
pengujian dengan satu data pengujian berisi sebelas nilai yang
merepresentasikan sebelas fitur data ECG. Data tersebut
diimplementasikan dengan menggunakan ROM berukuran 11 x 12
bit memori per-data input sehingga ukuran ROM adalah 1100 data
x 12 bit. Neuron yang di desain pada FPGA mencakup setiap
synapse atau weight yang tersambung dengan neuron tersebut

Implementasi JST dan Wavelet pada FPGA

165

dan nilai output pada neuron itu sendiri yang tersimpan dalam
sebuah accumulator.
Port address yang ditunjukan oleh Gambar 103 merupakan port
dari sebuah Random Access Memory (RAM) yang menerima
masukan empat bit. Bit tersebut menunjukan alamat dari bobot
untuk masing-masing input. Input didapatkan dari input ROM
untuk kemudian dikalikan dengan menggunakan multiplier dan
hasilnya diakumulasi pada accumulator. Terdapat sebelas input
fitur hasil ekstraksi data ECG sehingga terdapat sebelas bobot pula
yang terletak pada sebelas address pertama. Pada address terakhir
tersimpan nilai bobot untuk bias, sedangkan nilai bias sendiri
didapatkan dengan menggunakan multiplexer 2-to-1 untuk
menukar nilai input yang masuk dengan nilai bias yang statis
bernilai satu. Proses yang dilakukan di dalam neuron memakan
waktu sebagai dua clock cycle untuk setiap fitur data input. Jika
pada kasus data ECG maka neuron membutuhkan waktu 22 clock
cycle ditambah dua clock cycle untuk memproses nilai bias. Total
waktu yang dibutuhkan untuk memproses satu data ECG adalah 24
clock cycle.

Gambar 103. Desain neuron pada FPGA

166

Implementasi JST dan Wavelet pada FPGA

Pada desain komponen ini sudah dipersiapkan berbagai port yang


diperlukan untuk mengembangkan fase Backpropagation of error
antara lain port WeightInput, WeightOutput, dan port WriteEnable
pada Weight ROM. Port ini belum digunakan namun berpeluang
besar akan digunakan pada penelitian selanjutnya, terutama untuk
implementasi algoritma pelatihan pada FPGA. Desain keseluruhan
komponen ini akan mencakup konsep yang tergambarkan pada
Gambar 104.

Gambar 104. Cakupan desain neuron FPGA

4.5 Multiplier
Multiplier berfungsi untuk mengalikan dua input dengan panjang
dua belas bit. Komponen ini akan menghasilkan hasil kali sebesar
23 bit fixed point dengan satu bit sign, enam bit integer, dan enam
belas bit fraction. Proses perkalian yang terjadi menggunakan
aturan sign extension dengan cara bit MSB pada setiap baris hasil
kali diperpanjang ke kiri.

4.6 Activation Function Unit


Fungsi aktivasi dibuat terpisah dan diimplementasikan
menggunakan look-up table berukuran 212 x 12 bit. Isi dari look-up
table merupakan pemetaan Input langsung ke output-nya berupa
matriks, selayaknya kita memetakan/mendaftar setiap hasil dari
f(x) untuk setiap masukan nilai x. Isi dari look-up table dipersiapkan
menggunakan MATLAB. Isi di-generate dan di-truncate dengan
MATLAB untuk kemudian dikonversi menggunakan program Java
menjadi kode VHDL yang sudah berupa isi ROM dan berisi data

Implementasi JST dan Wavelet pada FPGA

167

dengan representasi twos complement fixed point 12 bit. Sebelum


masuk menjadi input bagi activation function unit, data hasil
perkalian di-truncate dari 23 bit kembali menjadi 12 bit dengan
cara hanya mengambil bit ke-23 dan bit dari bit ke-18 sampai
dengan bit-8. Bit ke 0 sampai ke 7 dan bit 19 sampai ke bit 22 tidak
diikutsertakan.

4.7 Desain Layer

OutEnable
Load

WeightInput

Komponen Layer adalah gabungan dari beberapa komponen


neuron. Pada penelitian yang dilakukan dan dibahas dalam buku
ini, digunakan tiga neuron pada satu buah Layer (lapisan) dan
terdapat dua lapisan, yakni lapisan tersembunyi dan lapisan
output. Lapisan masukan tidak dimodelkan karena memang lapisan
ini hanya mengirimkan data masukan sehingga cukup terwakilkan
dengan input ROM.

WriteEnable
Demultiplexer
Address (3:2)
Address (1:0)
Neuron

Address (3:0)
Clock
Input

Address (1:0)
Neuron

Multiplexer
4to1

Output

Neuron

Gambar 105. Desain Layer

Pada masing-masing Layer terdapat port address sebesar empat


bit. Most Significant Bit (MSB) yang berada paling kiri dan bit kedua

168

Implementasi JST dan Wavelet pada FPGA

dari kiri menunjukan neuron mana yang bobotnya dapat di-update


ataupun output-nya dapat keluar melalui port output seperti pada
Gambar 105. Bit address yang ketiga dari kiri dan pada bit terkanan
atau Least Significant Bit (LSB) digunakan sebagai masukan bagi
port address neuron untuk menunjuk bobot yang akan digunakan
pada perhitungan.

4.8 Classifier Unit


Komponen ini berfungsi untuk menampung hasil output dari setiap
neuron pada lapisan output menggunakan accumulator untuk
dibandingkan dan dicari nilai terbesarnya. Nilai terbesar tersebut
akan dicocokkan dengan asal neuron nilai tersebut berasal. Indeks
neuron yang memberikan nilai output terbesar pada lapisan
keluaran menunjukan kode kelas dari data input yang dimasukan.
Contoh pada arsitektur JST Backpropagation untuk data ECG,
terdapat dua neuron di lapisan output, yakni neuron 0 dan neuron
1. Jika neuron 0 memiliki nilai maksimum maka data input akan
dikenali sebagai menit ketika pasien tidak menderita Sleep Apnea
atau dalam keadaan normal. Jika neuron 1 yang memiliki nilai
output maksimum maka data input akan dikenali sebagai menit
ketika pasien menderita Sleep Apnea. Hasil klasifikasi kemudian
dibuat menjadi 2 bit kode keluaran, pada data ECG kode keluaran
normal adalah 00 dan Apnea adalah 01. Kode ini akan dikirim ke
LCD display unit dan accuracy check unit.

4.9 Waktu Pemrosesan Feedforward


Pada keseluruhan proses untuk menjalankan algoritma pengujian
terhadap setiap data ECG dibutuhkan waktu tertentu yang dihitung
dalam satuan clock cycle. Setiap layer membutuhkan dua clock
cycle untuk memproses satu fitur input dari input ROM menuju
masing-masing neuron dan terdapat sebelas fitur (data ECG)
sehingga dibutuhkan total clock cycle 22 clock cycle untuk satu
layer satu input. Bobot bias diproses selama 2 clock cycle sehingga
total waktu yang dibutuhkan oleh lapisan tersembunyi untuk
memproses ada adalah sebanyak 24 clock cycle. Pemrosesan data
dari lapisan tersembunyi menuju lapisan output membutuhkan
waktu 2 clock cycle per-neuron tersembunyi sehingga dibutuhkan

Implementasi JST dan Wavelet pada FPGA

169

6 clock cycle untuk memproses nilai dari neuron tersmbunyi ke


neuron output dan 2 clock cycle untuk memproses bias pada
neuron ouput sehingga total waktu yang dibutuhkan sebesar 8
clock cycle.
clock

Input RAM

State Machine

load0
load1
reset

Hidden
Layer

out_enable0

out_enable1

Activation
Function
Output
Layer
Activation
Function

output

Gambar 106. Desain keseluruhan feedforward

170

Implementasi JST dan Wavelet pada FPGA

Pemrosesan data dari lapisan output menuju classifier


membutuhkan waktu sebanyak 4 clock cycle (2 clock cycle perneuron). Proses untuk membandingkan nilai pada classifier
membutuhkan waktu 2 clock cycle, sehingga total waktu yang
dibutuhkan mulai dari lapisan output sampai classifier adalah 6
clock cycle. Total waktu yang dibutuhkan untuk satu kali algoritma
pengujian hingga memperoleh output dan mengirimkannya ke
komponen classifier yaitu 38 clock cycle.

4.10 Komponen Interface


Proses implementasi algoritma Backpropagation membutuhkan
beberapa komponen untuk pengaturan interface. Komponenkomponen tersebut harus dapat menyajikan data yang readable
ketika dilakukan uji coba langsung pada perangkat FPGA. Berikut
penjelasan singkat tentang komponen interface yang digunakan
penulis.
4.10.1 Expected Value ROM
Komponen ini berfungsi untuk menyimpan nilai expected value dari
sebuah data. Pada implementasi Backpropagation untuk data ECG
komponen ini menyimpan 11 fitur x 12 bit x 100 data atau total
sebanyak 1100 x 12 bit data. Komponen ini akan mengirimkan
expected value dengan kode 2 bit ke accuracy check unit. Kode
tersebut merupakan yang sejenis dengan kode yang dikeluarkan
oleh classifier unit.
4.10.2 Accuracy Check Unit
Komponen ini berfungsi untuk mencatat dan menghitung hasil
klasifikasi yang benar dan jumlah total tebakan klasifikasi algoritma
Backpropagation. Komponen ini akan menerima 2 bit kode hasil
klasifikasi dari classifier unit dan mengirimkan 2x12 bit yang
merepresentasikan jumlah klasifikasi yang benar dan jumlah
klasifikasi yang telah dilakukan dalam bilangan unsigned untuk
dikirimkan ke Binary to BCD Unit.

Implementasi JST dan Wavelet pada FPGA

171

4.10.3 Binary to BCD Unit


Komponen ini berfungsi merubah representasi unsigned menjadi
representasi Binary Code Decimal (BCD). BCD adalah representasi
bilangan biner dimana setiap 4 bit angka biner akan mewakili satu
digit angka desimal (bilangan basis 10). Contoh sederhananya
adalah 0001 0001 merepresentasikan angka 11 pada bilangan basis
10. Setiap satu komponen ini akan mengirimkan 4x4 bit BCD ke
BCD to LCD Unit. Terdapat dua komponen yang masing-masing
mengirimkan data ke empat komponen BCD to LCD Unit. Satu
komponen menerjemahkan jumlah hasil klasifikasi yang benar dan
lainnya menerjemahkan jumlah hasil klasifikasi keseluruhan.
4.10.4 BCD to LCD Unit
Komponen ini akan menerima BCD dan mengubahnya menjadi
kode ASCII karakater BCD yang diterima lalu mengirimkannya ke
LCD Display Unit. Pada Gambar 57 diagram komponen
disederhanakan sehingga hanya terdapat 2 unit BCD to LCD Unit
yang sebenarnya merepresentasikan 8 komponen BCD to LCD Unit.
Empat buah komponen yang menerjemahkan jumlah hasil
klasifikasi yang benar dan empat buah lainnya menerjemahkan
jumlah hasil klasifikasi keseluruhan.
4.10.5 LCD Display Unit
LCD Display Unit berfungsi untuk membungkus LCD Driver yang
menerjemahkan hasil klasifikasi classifier dari kode ke array of
character. Pada data ECG tampilan karakternya adalah Apnea
atau Normal. LCD display unit juga menerima masukan dari
accuracy counter, yakni jumlah banyaknya tebakan yang benar dan
jumlah banyaknya tebakan total. Pada LCD Display Unit terdapat
LCD Driver 4 bit yang tidak penulis implementasikan sendiri
melainkan menggunakan implementasi LCD Driver 4 bit yang
dikembangkan oleh salah seorang asisten riset di Fakultas Ilmu
Komputer UI, yaitu saudara Ferdian Jovan.

172

Implementasi JST dan Wavelet pada FPGA

Gambar 107. Gambar desain keseluruhan & komponen interface

Implementasi JST dan Wavelet pada FPGA

173

4.11 State Machine


Gambar 108 adalah diagram state machine yang didesain dan
diimplementasikan pada tugas akhir ini. Terdapat 29 state yang
digunakan, berikut penjelasan singkat dari state-state tersebut.
preinitialize
Pada state ini akan diset nilai satu untuk sinyal yang me-reset
keadaan accumulator pada setiap neuron dan pada binary to
bcd conventer (Bin_to_BCD). State selanjutnya adalah
initialize.
initialize
State ini akan me-reset keseluruhan komponen termasuk LCD
Display Unit dan diset default value nol pada setiap sinyal.
reset_off
Pada state ini akan diberikan sinyal 0 untuk semua sinyal
reset yang diaktifkan pada state initialize (state
sebelumnya). State selanjutnya adalah load_on.
load_on
Pada state ini port input dibuka dan neuron mengambil nilai
input dari Input ROM. State selanjutnya adalah load_off.
load_off
Pada state ini port input akan ditutup dan nilai input dari
Input
ROM
diolah.
State
selanjutnya
adalah
increment_address.
increment_address
Pada state ini address ke input ROM akan ditambahkan lalu
kembali ke state load_on. Apabila sudah 11 address terbaca
(11 fitur terbaca), maka sistem akan masuk ke state
init_output_layer.
init_output_Layer
Pada state ini address ke Layer akan di-reset dan port
output Layer 0 akan di-enable sehingga nilai dari layer 0

174

Implementasi JST dan Wavelet pada FPGA

(hidden layer) bisa menuju activation function unit lalu


menuju ke layer 1 (output layer) untuk diolah.
load1_on
Pada state ini port input pada layer 1 di-enable agar nilai
dari salah satu neuron di layer 0 berpindah ke Layer 1 untuk
diolah. State selanjutnya adalah load1_off.
load1_off
Pada state ini port input pada layer 1 di-disable. State
selanjutnya adalah increment_layer0_address.
increment_Layer0_address
Pada state ini address yang menunjuk neuron pada layer 0
di-increment agar nilai setiap nilai pada neuron yang ada
bisa berpindah ke layer 1. State selanjutnya adalah
load1_on jika belum semua neuron sudah dipindahkan nilai
di dalamnya ke layer 1 dan init_comp jika seluruh neuron
sudah dipindahkan nilainya ke Layer selanjutnya
(tergambarkan dari address-nya).
init_comp
Pada state ini komponen comparator pada classifier direset dengan memberikan nilai satu pada sinyal reset
comparator. State selanjutnya adalah resetcomp_off.
resetcomp_off
Pada state ini sinyal reset comparator diberikan nilai 0.
State selanjutnya adalah neuron0_out.
neuron0_out
Pada state ini nilai dari neuron 0 pada layer 1 akan dikirim
ke comparator dan port input pada comparator di-enable.
State selanjutnya adalah neuron0_off.
neuron0_off
Pada state ini port input pada comparator di-disable. State
selanjutnya adalah neuron1_out.

Implementasi JST dan Wavelet pada FPGA

175

neuron1_out
Pada state ini nilai dari neuron 1 pada layer 1 akan dikirim
ke comparator dan port input pada comparator di-enable.
State selanjutnya adalah neuron1_off.
neuron1_off
Pada state ini port input pada comparator di-disable. State
selanjutnya adalah comparing.
comparing
Pada state ini nilai output pada setiap kelas mulai
dibandingkan untuk menentukan kelas yang merupakan
kelas output dengan cara mengambil nilai paling maksimum
dari kedua output neuron. State selanjutnya adalah
clear_display_on.
clear_display_on
Sinyal untuk membersihkan tampilan LCD di-enable. State
selanjutnya adalah clear_display_off.
clear_display_off
Sinyal untuk membersihkan tampilan LCD di-disable lalu
mulai menjumlahkan hasil klasifikasi yang benar dengan
meng-enable accumulator. State selanjutnya adalah
accuStop.
accuStop
Input accumulator di-disable dan komponen konversi dari
binary ke BCD (Binary Code Decimal) di-enable untuk mulai
mengkonversi. State selanjutnya adalah sigbin2bcd_stop.
sigbin2bcd_stop
Komponen konversi dari binary ke BCD (Binary Code
Decimal) di-disable. State selanjutnya adalah done.
done
State ini menandakan bahwa klasifikasi satu data telah
selesai. Sinyal selesai akan dikirimkan ke LCD Display Unit
dan akan diberikan delay untuk membiarkan LCD membaca
sinyal tersebut. State selanjutnya adalah some_delay.

176

Implementasi JST dan Wavelet pada FPGA

some_delay
Delay selama 2 clock cycle. State selanjutnya adalah
wait_state.
wait_state
Keadaan menunggu sampai LCD kembali siap menulis hasil
keluaran. State selanjutnya adalah display_delay.
display_delay
Delay sebanyak 32 clock cycle ketika menampilkan hasil
klasifikasi di LCD. State berikutnya adalah new_data.
new_data
Jika address ke input ROM masih kurang dari 1099 (address
dari 0 sampai 1099) maka address tersebut di-increment,
sinyal reset untuk accumulator pada setiap neuron akan
diaktifkan (diberi nilai 1), dan state akan kembali ke
reset_off. Jika address ke input ROM sama dengan 1099,
maka state selanjutnya adalah all_data_read.
all_data_read
Jika address ke input ROM sama dengan 1099, maka akan
terjadi infinite loop pada state ini sampai pengguna
menggunakan tombol reset untuk mengulang kembali
operasi klasifikasi data keseluruhan.
reset_state
State ini hanya akan dicapai jika pengguna menggunakan
tombol reset untuk mengulang kembali operasi klasifikasi
data keseluruhan.
others
State others adalah state yang wajib dicantumkan dalam
setiap pembuatan state pada VHDL untuk meng-handle
kondisi yang tidak diduga oleh pembuat desain.

Implementasi JST dan Wavelet pada FPGA

177

preinitialize

reset_state

if resetButton = 1

all_data_
readed

load_off

Increment_
address

init_comp

load_on

resetcomp_
off

initialize

neuron0
_out

If counter < 11

neuron0_off

clear_
display_on

some_delay

comparing

wait_state

neuron1_off

display
_delay

neuron1
_out

new_data

If address < 1099

else
reset counter

init_output_
layer

If counter < 3
else
reset counter increment_
layer0_
address

clear_
display_off

done

load1_on

load1_off

accuStop

sigbin2bcd_
stop

others

Implementasi JST dan Wavelet pada FPGA

178

If address = 1100

reset_off

Gambar 108. Diagram state machine.

4.12 Hasil Synthesis pada Xilinx ISE Design Suite versi


12.3
Salah satu alur pengembangan FPGA adalah men-synthesis kode
VHDL yang sudah ada menjadi rangkaian-rangkaian elektronik yang
digunakan untuk memfasilitasi fungsi yang dideskripsikan pada
kode VHDL. Proses synthesis akan menghasilkan report seperti
pada Gambar 109.
===========================================================
HDL Synthesis Report
# RAMs
12x12-bit single-port RAM
4x12-bit single-port RAM
# ROMs
100x2-bit ROM
1100x12-bit ROM
16x8-bit ROM
4096x12-bit ROM
# Multipliers
12x12-bit multiplier
# Adders/Subtractors
10-bit adder
12-bit adder
20-bit adder
32-bit adder
4-bit adder
4-bit subtractor
6-bit adder
8-bit adder
# Counters
24-bit up counter
32-bit up counter
6-bit up counter
# Accumulators
12-bit up accumulator
24-bit up accumulator
# Registers
1-bit register
10-bit register
12-bit register
13-bit register
2-bit register
20-bit register

Implementasi JST dan Wavelet pada FPGA

:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:

5
3
2
12
1
1
8
2
5
5
16
1
1
1
1
8
2
1
1
3
1
1
1
9
4
5
58
26
1
7
2
3
1

179

32-bit register
4-bit register
5-bit register
6-bit register
8-bit register
# Latches
1-bit latch
# Comparators
12-bit comparator equal
12-bit comparator greatequal
12-bit comparator not equal
2-bit comparator equal
32-bit comparator greatequal
32-bit comparator less
4-bit comparator greater
# Multiplexers
1-bit 4-to-1 multiplexer
12-bit 4-to-1 multiplexer
24-bit 4-to-1 multiplexer

:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:

1
12
1
1
3
1
1
19
2
2
2
1
1
3
8
13
9
2
2

Gambar 109. Report hasil synthesis

4.13 Sumber Daya yang Terpakai Pada Xilinx Spartan


3AN XC3S700AN
Gambar 110 adalah laporan yang mendeskripsikan sumber daya
FPGA yang terpakai pada proses synthesis.
Design Summary Report:
Number of External IOBs
Number of External Input IOBs
Number of External Input IBUFs
Number of LOCed External Input IBUFs
Number of External Output IOBs
Number of External Output IOBs
Number of LOCed External Output IOBs
Number of External Bidir IOBs
Number of BUFGMUXs
3
Number of MULT18X18SIOs
5
Number of RAMB16BWEs
2
Number of Slices
1257
Number of SLICEMs
70

68 out of 372
28
28
2 out of 28
40
40
15 out of 40
0
out of 24
12%
out of 20
25%
out of 20
10%
out of 5888
21%
out of 2944
2%

18%

7%

37%

Gambar 110. Sumber daya yang digunakan (hasil synthesis)

180

Implementasi JST dan Wavelet pada FPGA

Proses pengujian pada perangkat FPGA menggunakan konfigurasi


file JST yang di-truncate ke bilangan dengan presisi 1/256 sesuai
dengan presisi representasi bilangan fixed point 12 bit dan
dikonversi ke dalam bilangan biner yang merepresentasikan nilainilai tersebut. Nilai data uji juga diperlakukan sama dan dihardcode ke dalam input ROM pada FPGA.
Hasil truncate dengan presisi 1/256

Hasil konversi ke fixed point 12 bit

Neural Network Information


Layer number,3.0
Input number,11.0
0.57421875,-0.7265625,-0.6713852489923974
0.85546875,-0.0859375,-0.5773001083510341
0.5390625,0.26171875,-0.6254275274595553
-0.390625,-0.3203125,0.22092682993241633
1.05078125,0.12890625,-0.8314779879989463
0.36328125,0.1015625,-0.4585603874335413
0.3984375,-0.03515625,-0.535452282821712
0.4609375,-0.37890625,0.20597527248334802
0.08984375,0.6015625,0.012894670739586975
0.42578125,-0.5625,-0.8114812912493885
0.73828125,-0.83984375,-0.6753631470689578
First Layer unit,3.0
-1.6875,1.37890625,0.5061186433648737
1.421875,-0.9921875,-0.709800415859634
1.0546875,-1.515625,-0.22308732158909958
Output Layer unit,2.0
-0.9646466748615836
0.9726712011162153

Neural Network Information


Layer number,001100000000
Input number,0101100000000
000010010011,111101000110,111101010101
000011011011,111111101010,111101101101
000010001010,000001000011,111101100000
111110011100,111110101110,000000111000
000100001101,000000100001,111100101100
000001011101,000000011010,111110001011
000001100110,111111110111,111101110111
000001110110,111110011111,000000110100
000000010111,000010011010,000000000011
000001101101,111101110000,111100110001
000010111101,111100101001,111101010100
First Layer unit,001100000000
111001010000,000101100001,000010000001
000101101100,111100000010,111101001011
000100001110,111001111100,111111000111
Output Layer unit,001000000000
111100001010
000011111001

Implementasi JST dan Wavelet pada FPGA

181

Bab 5 Implementasi FLVQ dan FLVQ


PSO Pada FPGA
5.1 Implementasi FLVQ
5.1.1 Rancangan Modul FLVQ
Reference
Vector
(RAM)

Clock

Input
(RAM)

Fuzzifikasi

State
Machine

Input
Fuzzy
(RAM)

Input
Layer

Hidden
Layer

Output
Layer

Output

Learning
Rate
Update
Weigth

Gambar 111. Skema komponen-komponen Implementasi FLVQ di FPGA

Secara umum implementasi FLVQ terdiri dari beberapa komponen.


Komponen tersebut antara lain, komponen input (RAM),
komponen fuzzification, komponen Input Fuzzy (RAM), Reference
Vector (RAM), komponen Input Layer, komponen Hidden Layer,
komponen Output Layer, komponen Update Weight, dan
komponen State Machine. Skema dapat dilihat pada Gambar 111.
Komponen Fuzzification digunakan untuk melakukan fuzzification
dari data input untuk menghasilkan vektor input yang nilainya
sudah di-fuzzify. Modul ini terhubung dengan modul Input (RAM)
yang digunakan sebagai tempat penyimpanan sementara nilai
input dari luar dan modul Input Fuzzy (RAM) yang digunakan untuk
menyimpan nilai input yang sudah di-fuzzify.

182

Implementasi JST dan Wavelet pada FPGA

Komponen Input Layer, Hidden Layer, dan Output Layer digunakan


sebagai satu kesatuan atau bisa disebut komponen FLVQ layer.
Komponen ini digunakan untuk melakukan pelatihan data, yaitu
mencari nilai similaritas dan menentukan target keluaran dari data
yang diberikan. Komponen FLVQ layer ini terhubung dengan
komponen Reference Vector (RAM) yang digunakan untuk
menyimpan nilai dari vektor pewakil dan hasil perhitungan
komponen UpdateWeight Unit yang digunakan untuk meng-update
nilai dari vektor pewakil di dalam komponen Reference Vector
(RAM).
Hasil dari komponen FLVQ layer ini akan digunakan untuk modul
UpdateWeight Unit sebagai penentu vektor pewakil mana yang
akan di-update dan kategori klasifikasi dari fuzzification yang akan
dilakukan untuk perhitungan update learning dari vektor pewakil.
Tahap selanjutnya tergantung dari jumlah epoch yang ditentukan
oleh pengguna, biasanya pelatihan ini dilakukan berkisar 50, 100,
150 dan 200 epoch.
Komponen kontrol unit berfungsi mengatur berapa kali data
tersebut digunakan sebagai data pelatihan dan mengatur agar data
tersebut juga digunakan pada algoritma pengujian. Selain itu,
kontrol unit juga digunakan untuk mengatur alur dari proses FLVQ
di FPGA sehingga berjalan sesuai dengan semestinya.
5.1.2 Random Access Memory (RAM)

Gambar 112. Skema komponen input RAM

Komponen RAM dibutuhkan untuk menyimpan nilai-nilai data yang


akan digunakan dalam proses FLVQ. Adapun besar ukuran RAM
yang digunakan dalam proses FLVQ ini tergantung dari banyaknya

Implementasi JST dan Wavelet pada FPGA

183

input data dan fitur data. Terdapat 2 komponen utama yang


mengimplementasikan RAM yaitu Input RAM dan References
Vector (Vektor Referensi) RAM. Skema input RAM terdapat pada
Gambar 112. Ada enam buah port antara lain address (ADDR)
sepanjang sepuluh bit, port clock (clk) satu bit, port enabler (en),
dan port data out (DO) sepanjang dua belas bit sebanyak tiga port
(DO_1, DO_2, DO_3). Tiga port data out terdiri dari nilai minimum,
rata-rata (mean), dan maksimum dari input yang sudah berbentuk
segitiga fuzzy.
Komponen Input RAM digunakan untuk menyimpan data input
yang masuk ke dalam jaringan FLVQ. Data yang digunakan oleh
Penulis berupa data offline sehingga nilai-nilai input sejak awal
sudah di-hardcoded pada komponen input RAM untuk digunakan
dalam proses pelatihan FLVQ. Besar ukuran dari komponen input
RAM ini adalah array berukuran 34 dimana 3 data yang berukuran
11 fitur dan array terakhir menyimpan kelas target yang diinginkan
dari data input tersebut.

Gambar 113. Skema komponen References Vector RAM

References Vector RAM (RAM Vektor Referensi) digunakan untuk


menyimpan nilai-nilai bobot dari vektor pewakil saat proses
pelatihan berlangsung. Pada saat pelatihan pertama kali
berlangsung, nilai vektor referensi awal terlebih dahulu
diinisialisasi yang selanjutnya akan di-update nilai tersebut di

184

Implementasi JST dan Wavelet pada FPGA

dalam RAM Vektor Referensi. Besar ukuran dari komponen input


RAM ini merupakan array yang berukuran 66 di mana terddapat
dua data yang berukuran sebelas fitur, dan setiap data tersebut
memiliki tiga buah komponen yaitu vektor referensi max, mean,
dan min. Skema input RAM terdapat pada Gambar 113. Ada
sepuluh buah port yang terdiri dari port address (ADDR) sepanjang
sembilan bit, port clock (clk) satu bit, port enabler (en), port data in
(DI) berupa fixed point dua belas bit sebanyak tiga port (DI_1,
DI_2, DI_3), dan port data out (DO) berupa fixed point dua belas
bit sebanyak tiga port (DO_1, DO_2, DO_3). Tiga port data in dan
data out terdiri dari nilai minimum, rata-rata (mean), dan
maksimum dari input dan output yang berbentuk segitiga fuzzy.
5.1.3 Cluster Layer

Gambar 114. Skema komponen Cluster Layer

Komponen Cluster Layer digunakan untuk memasukkan nilai input


dari RAM untuk diberi pelatihan secara FLVQ. Hasil keluaran dari
komponen ini berupa cases (klasifikasi FLVQ yang keluar), class
output (target keluaran yang dihasil dari pelatihan FLVQ), similarity
max (nilai similaritas pemenang dari pelatihan FLVQ), dan
winneraddr (alamat dari bobot vektor referensi yang akan diupdate nilainya sesuai dengan klasifikasi FLVQ yang keluar).
Terdapat enam buah port yang terdapat pada komponen ini,
antara lain port input address (addr_input) sepanjang sepuluh bit,
port clock (clk) satu bit, port cases tiga bit, port class output
(class_output) sepanjang dua bit, port nilai kesamaan maksimum
(similarity_max) berupa fixed point dua belas bit, dan port address

Implementasi JST dan Wavelet pada FPGA

185

dari cluster pemenang (winneraddr) sepanjang sembilan bit. Skema


dapat dilihat pada Gambar 114. Berikut penjelasan mengenai
subkomponen yang berada pada Cluster Layer.
5.1.4 Intersec Calculation

Gambar 115. Skema komponen Intersec Calculation

Komponen ini digunakan untuk menghitung nilai similaritas antara


vektor masukan (input) dengan vektor referensi yang nantinya
akan dikeluarkan nilainya melalui port result.
Perhitungan similaritas di dalam komponen ini memanfaatkan tiga
jenis unit komponen aritmatik, antara lain,
1. Subtractor, komponen yang digunakan untuk mengurangi 2
variabel tipe fixed point 12 bit
2. Adder, komponen yang digunakan untuk menjumlahkan 2
variabel tipe fixed point 12 bit
3. fp div 12bit, komponen yang digunakan untuk membagi 2
variabel tipe floating point 12 bit.
Sebelum terjadi proses pembagian terlebih dahulu nilai yang akan
dibagi diubah menjadi nilai floating point. Setelah proses
pembagian selesai nilai diubah kembali menjadi fixed point. Hal ini
harus dilakukan agar proses pembagian memiliki akurasi cukup
baik. Proses ini membutuhkan dua komponen tambahan sebagai
converter yaitu komponen fix to float dan komponen float to fix.

186

Implementasi JST dan Wavelet pada FPGA

Kedua komponen ini dibuat dengan menggunakan fitur Core


Generator yang terdapat dalam software Xilinx ISE.

Gambar 116. Skema internal komponen Intersec Calculation

Implementasi JST dan Wavelet pada FPGA

187

Skema komponen intersect calculation dapat dilihat pada Gambar


115 dan Gambar 116. Terdapat delapan port antara lain, port input
berlabel A, B, C, D, E, F yang merupakan fixed point dua belas bit.
A, B, dan C adalah nilai minimum, rata-rata, dan maksimum dari
segitiga fuzzy satu dan D, E, dan F adalah nilai minimum, rata-rata,
dan maksimum dari segitiga fuzzy dua. Dua nilai segitiga fuzzy ini
akan dicari nilai perpotongannya dan dikeluarkan melalui port
result berupa fixed point dua belas bit. Terdapat pula port clock
(clk).
5.1.5 Neuron Intersec Calculation

Gambar 117. Skema komponen Neuron

Komponen ini merupakan gabungan dari komponen RAM Vektor


Referensi dan Intersec Calculation. Pada desain FPGA untuk
algoritma pelatihan terdapat tiga neuron untuk setiap cluster pada
Cluster Layer. Setiap neuron akan digunakan untuk mendapatkan
nilai rata-rata dari similaritas untuk setiap cluster tersebut. Nilai
rata-rata dari similaritas setiap cluster akan dibandingkan satu
sama lain untuk mendapatkan cluster pemenang (cluster dengan
nilai similaritas maksimum).

188

Implementasi JST dan Wavelet pada FPGA

5.1.6 UpdateCluster

Gambar 118. Skema komponen UpdateCluster

Komponen UpdateCluster berfungsi meng-update bobot dari


vektor referensi setelah diketahui cluster pemenang dan target
kelas dari cluster pemenang tersebut. Skema dapat dilihat pada
Gambar 118. Terdapat dua subkomponen yang terhubung dengan
komponen ini yaitu Update dan RAM vektor referensi. Terdapat
enam buah port yakni port clock (clk), port result, port input
address (addr_input) sepanjang sepuluh bit, port reference address
(addr_ref) sepanjang sembilan bit, port cases sepanjang dua bit,
dan port maximum similiarity (similiarity_max).

Gambar 119. Skema komponen Update

Implementasi JST dan Wavelet pada FPGA

189

Komponen Update berfungsi meng-update bobot vektor referensi


dengan cara terhubung ke vektor referensi RAM dan melakukan
write sehingga data sebelumnya tertimpa dan diganti dengan nilai
bobot yang baru. Pada proses update bobot vektor referensi.
Terdapat tiga jenis komponen aritmatik yang digunakan, antara
lain,
1. Subtractor, komponen yang digunakan untuk mengurangi 2
variabel tipe fixed point 12 bit
2. Adder, komponen yang digunakan untuk menjumlahkan 2
variabel tipe fixed point 12 bit
3. Multiplier, komponen yang digunakan untuk mengalikan 2
variabel tipe fixed point 12 bit
Penggunaan serangkaian operasi matematika menggunakan tiga
komponen di atas memungkinkan rumus-rumus update bobot
vektor referensi sesuai dengan target klasifikasi di output layer
yang dapat diimplementasikan pada FPGA. Skema dapat dilihat
pada Gambar 119. Terdapat delapan buah port yakni port clock
(clk), port input address (addr_in) sepanjang sepuluh bit, port
reference address (addr_ref) sepanjang sembilan bit, port cases
sepanjang dua bit, port similiarity berupa fixed point dua belas bit,
dan tiga port yang akan mengeluarkan nilai baru untuk references
vector berupa nilai minimum (ref_min), rata-rata (ref_mean), dan
maksimum (ref_max) dalam representasi fixed point dua belas bit.

5.2 Desain FLVQ PSO pada FPGA


Pada subbab ini terdapat penjelasan mengenai implementasi
proses
pelatihan dengan algoritma FLVQ PSO dan proses
pengujian dengan menggunakan algoritma FLVQ. Untuk
implementasi proses pelatihan dengan algoritma FLVQ PSO
sepenuhnya dilakukan oleh penulis. Implementasi dilakukan
terhadap data sleep apnea dilakukan proses truncate terlebih
dahulu pada data sehingga direpresentasikan dalam bilangan 12 bit
fixed point. Pada algoritma FLVQ PSO, proses yang
diimplementasikan hanya sebatas proses pelatihan dan pengujian,
sedangkan untuk data pre-processing atau proses fuzzification
190

Implementasi JST dan Wavelet pada FPGA

tidak diimplementasikan langsung pada FPGA. Proses preprocessing dilakukan pada Desktop Personal Computer (PC)
menggunakan bahasa pemrograman Java. Proses inisialisasi vektor
pewakil juga dilakukan dengan cara meng-hardcode pada VHDL,
dengan meyimpan nilai inisialisasi hasil program Java ke dalam
kode komponen RAM yang nantinya digunakan untuk menyimpan
nilai vektor pewakil.
5.2.1 Desain Proses Training
Proses Training terdiri dari 2 proses besar yaitu proses untuk
pencarian nilai vektor pemenang dan proses untuk meng-update
nilai dari vektor pemenang. Komponen yang berperan dalam
penentuan vektor pemenang adalah ClusterLayer, Cluster,
InputRAM, ReferenceRAM, Neuron, Intersection, Intersection_calc,
dan komponen dasar untuk operasi pengurangan, penjumlahan,
dan perkalian, untuk operasi pembagian dilakukan dengan
membuat komponen dari Core Generator yaitu komponen
fix_to_float, fp_div_12bit, dan float_to_fix. Komponen yang
penulis buat adalah komponen ClusterLayer, Cluster, InputRAM,
ReferenceRAM, Neuron, Intersection, dan state machine yang
mengaturnya.
ClusterLayer dan Cluster

Gambar 120. Skema komponen Cluster Layer

Implementasi JST dan Wavelet pada FPGA

191

ClusterLayer adalah komponen yang merepresentasikan lapisan


tersembunyi dalam FLVQ. ClusterLayer memiliki enam port input
dan empat port output seperti yang terlihat pada Gambar 120. Port
addr_input berguna untuk mengakses input(RAM), port addr_ref
berguna untuk mengakses reference(RAM), port indeks_layer dan
indeks_msa untuk meng-update nilai pada MSA(RAM). Cluster
layer terdiri komponen cluster, MSA dan state machine. State
machine pada cluster layer berguna untuk mengatur cluster yang
akan diproses dan mengatur proses update pada MSA. Komponen
ini akan menghasilkan keluaran berupa nilai similaritas vektor
pemenang, alamat dari vektor pemenang, keluaran kelas dari
proses, dan cases untuk update vektor pemenang.
Cluster adalah komponen yang merepresentasikan cluster pada
arsitektur FLVQ. Cluster terdiri dari komponen Neuron,
Input(RAM), float_to_fix, fp_div_12bit, fix_to_float, dan state
machine yang mengatur penggunaan dari setiap komponen.
Cluster terdiri dari lima port, antara lain empat masukan dan satu
keluaran seperti yang tertera pada Error! Reference source not
ound.. Keluaran dari komponen ini adalah sebuah nilai similaritias
rata-rata dari penjumlahan similaritas antar neuron pada cluster.

Gambar 121. Skema komponen Cluster

192

Implementasi JST dan Wavelet pada FPGA

Input (ROM) dan Reference (RAM)


Input adalah komponen yang fungsinya hanya sebagai ROM yang
menyimpan input yang nantinya akan diproses. Nilai-nilai yang ada
pada Input(ROM) diperoleh dengan cara hardcode, dengan
memasukkan secara manual nilai-nilai yang didapatkan dari
program Java. Input berisikan data-data input yang sudah di
lakukan proses fuzzification dan proses zig-zag. Input akan
menerima sebuah address dan akan mengeluarkan 3 nilai yaitu
nilai minimum, rata-rata, dan maksimum.

Gambar 122. Skema komponen Input


(ROM)
Gambar 123. Skema
komponen Referensi (RAM)

Reference(RAM) adalah komponen yang berfungsi untuk


menyimpan nilai vektor pewakil. Untuk inisialisasi nilai awal pada
komponen ini dilakukan dengan cara hardcode, dengan
memasukkan secara manual nilai inisialisasi vektor pewakil awal
yang diperoleh dari program java. Tidak seperti komponen
input_ram komponen ini bisa di-update dengan cara mengatur
nilai EN dan WE menjadi 1, selanjutnya elemen pada address akan
di-update berdasarkan nilai DI_1, DI_2 dan DI_3.
Neuron
Neuron adalah komponen yang merepresentasikan fitur pada
algorima FLVQ. Komponen neuron terdiri dari komponen
reference_vec_ram dan komponen intersection. Komponen ini
menerima 3 input keluaran dari komponen input_ram dan address

Implementasi JST dan Wavelet pada FPGA

193

untuk komponen reference_vec_ram. Hasil keluaran yang


diperoleh dari komponen ini adalah nilai similaritas antara vektor
pewakil yang merepresentasikan fiture ke-i dengan vektor
masukan.

Gambar 124. Skema komponen Neuron

Intersection
Intersection adalah komponen yang berfungsi untuk menentukan
nilai similaritas antara vektor masukan dengan vektor pewakil
untuk masing-masing fitur. Komponen ini terdiri dari komponen
intersection_calculation dan sebuah state machine. State machine
berfungsi mengatur penggunaan dari intersection_calculation dan
menentukan nilai similaritas. Hasil keluaran dari komponen ini
adalah nilai similaritas. Komponen ini merupakan komponen yang
berfungsi untuk mencari perpotongan antara dua buah garis.
Komponen ini terdiri dari beberapa komponen dasar seperti
komponen adder dan subtractor. Komponen ini juga terdiri dari
komponen hasil Core Generator yaitu, fix_to_float, fp_div_12bit,
float_to_fix, yang berfungsi sebagai pembagian. Berikut
merupakan
operasi
yang
ada
pada
komponen
intersection_calculation,
OP1_1 : Subtractor port map(A, B, tmp0);
OP1_2 : Subtractor port map(C, D, tmp1);
OP1_3 : Subtractor port map(tmp1, E, tmp2);

194

Implementasi JST dan Wavelet pada FPGA

OP1_4 :
OP1_5 :
OP1_6 :
OP1_7 :
tmp6);
OP1_8 :

Adder port map(tmp2, F, tmp3);


fix_to_float port map (tmp0, clk, tmp4);
fix_to_float port map (tmp3, clk, tmp5);
fp_div_12bit port map(tmp4, tmp5, '1', clk,
float_to_fix port map (tmp6, clk, result);

Gambar 125. Cuplikan kode untuk menghitung titik potong

Gambar 126. Skema komponen Intersection

float_to_fix, fix_to_float dan fp_div_12bit


Pada penelitian ini fungsi pembagian bilangan fixed point 12bit di
implementasikan degan menggunakan 3 komponen yaitu floating
point to fixed point conventer (float_to_fix), fixed point to floating
point conventer (fix_to_float), dan floating point divider
(fp_div_12bit). Bilangan fixed point terlebih dahulu di konversi
menjadi bilangan floating point 12 bit dengan menggunakan
komponen fix_to_float. Bilangan hasil konversi siap untuk
dimasukkan kedalam komponen fp_divider_12bit untuk melakukan
pembagian bilangan floating point 12 bit.
Operasi pembagian dilakukan dalam bentuk floating point 12 bit
dikarenakan implementasi komponen untuk melakukan operasi
pembagian dengan fixed point membutuhkan alokasi resource
yang cukup besar, yaitu setiap kali kita menginisiasi komponen

Implementasi JST dan Wavelet pada FPGA

195

tersebut membutuhkan resource hingga 9% dari resource yang


dialokasikan Xilinx.
Hasil dari operasi pembagian bilangan floating point akan
dikonversikan kembali menjadi bilangan fixed point 12 bit dengan
menggunakan komponen float_to_fix. Penggunaan komponen
yang di-generate menggunakan Core Generator ini dikarenakan
Xilinx tidak mendukung operasi pembagian secara langsung.
Penulis lebih memilih penggunaan Core Generator dikarenakan
implementasi fungsi pembagian fixed point yang dilakukan
membutuhkan resource alokasi dan clock yang besar.

Gambar 127. Skema komponen


fp_div_12bit.

Gambar 128. Skema komponen


float_to_fix.

Gambar 129. Skema komponen fix_to_float.

Adder, Subtractor, Multiplier


Komponen dasar lainnya adalah komponen Adder, Subtractor, dan
Multiplier. Komponen Adder berfungsi untuk menjumlahkan 2
bilangan signed fixed point, Subtractor berfungsi untuk

196

Implementasi JST dan Wavelet pada FPGA

mengurangkan 2 bilangan signed fixed point. Perlakuan khusus


dilakukan pada komponen Multiplier, komponen ini akan
mengalikan 2 bilangan fixed point 12 bit sehingga akan
menghasilkan bilangan hasil perkalian menjadi 24 bit. Oleh karena
itu pada komponen ini dilakukan proses pemotongan atau truncate
pada bilangan 24 bit tersebut dengan cara, mengambil 1 bit MSB
yaitu bit ke-23, 3 bit terbelakang dari 6 bit integer hasil perkalian
yaitu bit ke-18 sampai dengan bit ke-16, dan 8 bit terdepan dari 16
bit fraction hasil perkalian yaitu dari bit ke-15 sampai dengan bit-8.

Gambar 130.
Komponen
penjumlahan

Gambar 131.
Komponen
pengurangan

Gambar 132. Komponen


perkalian

Update Cluster dan Update


Kedua komponen ini berfungsi dalam proses update nilai dari
vektor pemenang. Komponen Update cluster terdiri dari Update
dan reference_vector_ram serta state machine yang mengatur
penggunaan komponen Update tiap fitur. Komponen Update
merupakan komponen yang menghitung nilai update untuk setiap
fitur. Berikut merupakan operasi-operasi yang digunakan dalam
komponen update:
--cari value1 untuk merubah bobot
get_inram : input_ram port map (clk, '1', addr_in,
feat_min, feat_mean, feat_max);
get_refram : reference_vec_ram port map(clk, '0', '1',
addr_ref, nothing, nothing, nothing, out_min, out_mean,
out_max);
distance : Subtractor port map(feat_mean, out_mean,

Implementasi JST dan Wavelet pada FPGA

197

delta);
minus_sim : Subtractor port map(x"100", similarity,
minsin);
multiplier1 : Multiplier port map(delta, minsin,
tmp_mul);
multiplier2 : Multiplier port map(alpha, tmp_mul,
value1);
--cari value2
subtractor1 :
tmp1);
subtractor2 :
tmp2);
multiplier3 :
multiplier4 :

Subtractor port map(out_mean, out_min,


Subtractor port map(out_max, out_mean,
Multiplier port map(tmp1, beta, value2);
Multiplier port map(tmp2, beta, value3);

--update bobot kasus 1


update_min_c1 : Adder port map(out_min, value1,
min_updated_c1);
update_mean_c1 : Adder port map(out_mean, value1,
mean_updated_c1);
update_max_c1: Adder port map(out_max, value1,
max_updated_c1);
--update bobot kasus 2
update_min_c2 : Subtractor port map(out_min, value2,
min_updated_c2);
update_mean_c2 : Subtractor port map(out_mean, value2,
mean_updated_c2);
update_max_c2: Subtractor port map(out_max, value2,
max_updated_c2);
--update bobot kasus 3
update_min_c3 : Subtractor port map(out_min, value2,
min_updated_c3);
update_max_c3 : Adder port map (out_max, value3,
max_updated_c3);

Gambar 133. Proses update vektor pewakil

198

Implementasi JST dan Wavelet pada FPGA

Gambar 134. Skema komponen UpdateCluster

Gambar 135. Skema komponen Update

5.2.2 Desain Proses Testing


Desain proses testing tidak berbeda jauh dengan desain pada
proses training, hanya saja pada proses testing tidak menggunakan
komponen Update Cluster dan Update, input_ram yang digunakan
juga berbeda. Pada proses testing digunakan input_ram yang berisi
data-data yang ingin diuji coba. Hasil keluaran dari desain testing
ini adalah keluaran kelas data dari setiap data uji yang masuk.
Setelah semua data diproses lalu dilakukan penghitungan akurasi.

Implementasi JST dan Wavelet pada FPGA

199

5.2.3 Desain Umum


Pada pembahasan sebelumnya telah dibahas bahwa rangkaian set
eksperimen FLVQ ini dibagi menjadi 2 proses, yaitu proses training
dan proses testing. Gambar 136 menjelaskan alur dari proses
training. Proses training dimulai dari komponen Process Training
yang memberikan input alamat untuk mengakses Input(ROM),
MSA(RAM), dan Reference(RAM) kepada komponen Process FLVQ
yang mengatur banyaknya jumlah cluster layer yang ingin dibentuk,
lalu alamat tersebut diteruskan dari komponen Process FLVQ ke
komponen Cluster Layer. Komponen Cluster Layer akan
meneruskan alamat tersebut ke komponen Neuron yang nantinya
akan diproses dan menghasilkan nilai similaritas antara vektor
pewakil dan vektor masukan. Komponen Neuron ini akan
menentukan banyaknya neuron yang akan dibentuk.

Gambar 136. Alur untuk proses training pada FLVQ

Gambar 137 menjelaskan mengenai alur untuk proses testing pada


FLVQ. Alur selama proses testing tidak jauh berbeda dengan alur
yang ada pada proses training, hanya saja Input(ROM) yang diakses
adalah input untuk data testing dan tidak ada proses update nilai
dari Reference(RAM).

200

Implementasi JST dan Wavelet pada FPGA

Gambar 137. Alur pada proses Testing

Implementasi JST dan Wavelet pada FPGA

201

Bab 6 Implementasi Wavelet Pada


FPGA
Bab ini menjelaskan mengenai implementasi algoritma
dekomposisi wavelet di FPGA. Terdapat dua buah tipe
implementasi yang akan dijelaskan. Pada sub bab pertama
terdapat penjelasan mengenai implementasi dengan teknik filter
banks dimana koefisien wavelet yang dipilih digunakan sebagai
impulse response seperti pada teknik pembuatan digital filter.
Subbab kedua akan menjelaskan wavelet yang diimplementasi
dengan teknik lifting scheme yang sering juga disebut wavelet
generasi kedua.

6.1 Implementasi Wavelet Filter Banks pada FPGA


Wavelet daubechies merupakan sekelompok wavelet yang
diperkenalkan oleh Ingrid Daubechies yang dipisahkan dari jumlah
derajat polinomial yang membentuk wavelet, jumlah momen
hilang, atau panjang koefisien filter yang digunakan. Jumlah derajat
polinomial, jumlah momen hilang, dan panjang koefisien filter
memiliki nilai yang saling berkaitan satu sama lain. Jumlah derajat
polinomial dan jumlah momen hilang memiliki nilai yang sama
besarnya, sedangkan panjang koefisien filter berukuran dua kali
lipat dari nilai tersebut. Misalkan, derajat polinomial yang
membentuk suatu wavelet daubehies bernilai 4 maka jumlah
momen hilang yang dimiliki juga 4 sedangkan jumlah koefisien
filter yang digunakan adalah 8.
Penamaan jenis wavelet daubechies juga mengambil nilai-nilai
tersebut. Ada beberapa referensi yang menggunakan jumlah
derajat polinomial atau momen hilang sebagai penamaan wavelet
daubechies, misalnya daubechies-1, daubechies-2, ...., daubechiesN. Ada juga yang menggunakan jumlah koefisien filter yang
digunakan sebagai penamaan wavelet daubechies, misalnya
daubechies-2, daubechies-4, daubechies-6, ..., daubechies-2N.
Walaupun penamaan wavelet daubechies mengalami keambiguan,
sebenarnya wavelet yang direpresentasikannya adalah sama,

202

Implementasi JST dan Wavelet pada FPGA

misalkan wavelet daubechies-N di derajat polinomial merupakan


jenis wavelet yang sama dengan wavelet daubechies yang
dinamakan wavelet daubechies-2N. Disini penulis menggunakan
penamaan wavelet daubechies dengan menggunakan panjang
koefisien filter yang dimiliki oleh wavelet daubechies. Sehingga
kelompok wavelet daubechies yang digunakan adalah Daubechiesx, dimana x = 2,4, 2N.
Ingrid Daubechies memperkenalkan koefisien baru yang disebut
sebagai koefisien filter vektor pengskalaan. Koefisien filter terdiri
dari sekumpulan angka real diskrit yang digunakan sebagai
pengganti fungsi pengskalaan dan fungsi wavelet. Penggunaan
koefisien filter sebagai proses transformasi dapat mengubah
paradigma hasil transformasi wavelet dari bentukan sinyal yang
didekomposisi dari sejumlah wavelet yang didilasikan dan
ditranslasikan menjadi hasil filterisasi dengan sebuah sinyal yang
terbentuk dari koefisien filter.

Gambar 138. Proses dekomposisi bertingkat dalam di metode filter


banks

Transformasi wavelet sebagai filter di metode filter bank dapat


diperlihatkan oleh Gambar 138 dimana H(Z) digunakan sebagai
filter frekuensi tinggi (detail) dan L(Z) digunakan sebagai filter
frekuensi rendah (aproksimasi). Sedangkan 2 merupakan proses
downsampling yang mengambil sinyal berindeks genap saja untuk
menghasilkan ukuran hasil setengah dari ukuran sebenarnya.
Sedangkan proses rekonstruksinya adalah proses kebalikan dari
proses dekomposisi dimana sinyal dikonvolusi dengan filter
kebalikan (inverse filter) baik untuk filter H(Z) maupun L(Z).

Implementasi JST dan Wavelet pada FPGA

203

Sedangkan proses downsampling digantikan dengan proses


upsampling (2) dimana sinyal asal disisipkan suatu nilai baru
disetiap indeks ganjil.
Walaupun wavelet daubechies memperkenalkan koefisien baru,
nilai ini dapat diturunkan dari fungsi pengskalaan dengan fungsi
sebagai berikut,
2N1

= 2

(2 )
n=0

dengan 2 merupakan normalisasi energi koefisien wavelet yang


digunakan. Nilai h(n) sebagai koefisien filter dipilih sedemikian rupa
untuk mendapatkan nilai h(n) yang orthogonal dengan h(n) di
fungsi wavelet. Hal ini dikarenakan fungsi pengskalaan dan fungsi
wavelet milik wavelet daubechies saling orthogonal satu sama lain
(Teme 1991) yang diperlihatkan oleh rumus berikut :
= 0
Adapun h(n) di fungsi wavelet diperlihatkan oleh rumus berikut :
1

1 1 (2 )

2
=22

sehingga didapatkan sebuah koefisien filter h(n) yang saling


orthogonal satu sama lain baik sebagai fungsi pengskalaan (lowpass filter) maupun sebagai fungsi wavelet (high-pass filter).
Sebagai contoh, misalkan koefisien filter h(n) = h(0),h(1),h(2),h(3).
Maka koefisien filter yang menggantikan fungsi pengskalaan
menjadi c(n) = h(n) = h(0),h(1),h(2),h(3). Sedangkan koefisien filter
yang menggantikan fungsi wavelet menjadi d(n) = (-1)nh(1-n) =
h(3),-h(2),h(1),-h(0).
Berikut ini adalah contoh koefisien filter milik wavelet daubechies
untuk daubechies-2 hingga daubechies-10:

204

Implementasi JST dan Wavelet pada FPGA

Tabel 8. Koefisien filter untuk daubechies-2 hingga daubechies 10


(normalisasi = akar 2)

Berikut ini adalah gambar contoh fungsi pengskalaan, fungsi


wavelet dan koefisien filter sebagai low-pass filter dan high-pass
filter yang digunakan pada proses dekomposisi dan rekonstruksi
sinyal dengan menggunakan daubechies-4,

Gambar 139. Fungsi pengskalaan, fungsi wavelet, dan koefisien filter


yang digunakan di daubechies-4 (normalisasi = 2)

Implementasi JST dan Wavelet pada FPGA

205

Koefisien filter di Gambar 139 sedikit berbeda dengan koefisien


filter di Tabel 8. Hal ini dikarenakan normalisasi koefisien wavelet
yang digunakan berbeda. Koefisien filter digunakan dalam proses
transformasi dengan menggunakan teknik konvolusi yang
mengalikan setiap sinyal dengan koefisien filter. Proses perkalian
dapat memperbesar atau memperkecil kandungan energi yang
sebenarnya dimiliki oleh sinyal. Oleh karena itu, digunakanlah
proses normalisasi. Nilai normalisasi yang sering digunakan antara
lain:
21

21

= 2

=2

atau

=0

=0

6.1.1 Implementasi Filter Banks di Java


Penulis melakukan implementasi algoritma dekomposisi wavelet
menggunakan Java sebelum implementasi ke FPGA. Tujuan dari
implementasi ini adalah untuk menguji pemahaman dan untuk
melakukan tes apakah implementasi di FPGA sudah benar atau
tidak dengan membandingkan hasilnya dengan hasil keluaran
program Java.
Untuk implementasi ini, hanya terdapat satu kelas saja yaitu kelas
Daubechies yang mempunyai dua method static yaitu db4_dec()
untuk melakukan dekomposisi dan db4_rec() untuk melakukan
rekonstruksi.

Gambar 140 Konstanta Daubechies 4

206

Implementasi JST dan Wavelet pada FPGA

Kode di atas menunjukkan empat konstanta Daubechies orde


empat yang dideklarasikan sebagai static dan final. Ada empat
bagian penting dari proses dekomposisi. Tahap pertama adalah
melakukan padding pada input, tahap kedua adalah proses
konvolusi, tahap ketiga adalah memotong padding kembali, dan
tahap keempat melakukan downsampling. Keempat tahap tersebut
direpresentasikan oleh potongan-potongan kode berikut:

Gambar 141 Kode padding

Gambar 142 Kode konvolusi

Implementasi JST dan Wavelet pada FPGA

207

Gambar 143 Kode truncate

Gambar 144 Kode downsampling

6.1.2 Arsitektur di FPGA


Gambar 145 menunjukkan arsitektur sistem untuk implementasi
algoritma dekomposisi wavelet di FPGA.

208

Implementasi JST dan Wavelet pada FPGA

Gambar 145. Arsitektur keseluruhan

Terdapat enam komponen mendasar yang membentuk sistem ini


secara keseluruhan. Komponen pertama adalah komponen
InputRAM yang berfungsi sebagai tempat untuk menyimpan input
yang akan didekomposisi. Komponen kedua adalah komponen
InputPadder berfungsi untuk melakukan padding terhadap input
yang disimpan di InputRAM. Komponen ketiga adalah Convolution
yang bertugas melakukan proses konvolusi terhadap input yang
dikeluarkan oleh InputPadder. Komponen keempat adalah
DownSampling yang bertugas melakukan downsampling terhadap
hasil keluaran dari Convolution. Komponen kelima adalah
OutputRAM yang berfungsi untuk menyimpan keluaran dari proses
downsampling. Komponen terakhir adalah LCDDriver yang
bertugas mempersiapkan atau menginisialisasi LCD display
sehingga nilai yang disimpan pada OutputRAM dapat ditampilkan
pada layar LCD.
InputRAM
InputRAM adalah komponen tempat meletakkan input sebelum
proses dekomposisi dimulai.

Implementasi JST dan Wavelet pada FPGA

209

Gambar 146. Skema RAM

Definisi komponen InputRAM dalam VHDL adalah sebagai berikut:

Gambar 147. Desain entity InputRAM dalam bahasa VHDL

InputPadder
Komponen InputPadder bertugas untuk mem-padding input atau
memberi tambahan angka di depan dan di belakang input. Jumlah
angka yang di-padding adalah sebanyak N-1 dengan N adalah
jumlah konstanta Daubechies yang dipakai.

210

Implementasi JST dan Wavelet pada FPGA

Gambar 148. Skema InputPadder

Definisi komponen InputPadder dalam VHDL adalah sebagai


berikut:

Gambar 149. Desain entity InputPadder dalam bahasa VHDL

Convolution
Gambar 150 menunjukkan arsitektur dari komponen Convolution.

Implementasi JST dan Wavelet pada FPGA

211

Gambar 150. Arsitektur Konvolusi

Gambar 151 menunjukkan gambar skema dari komponen


Convolution setelah di program di VHDL.

Gambar 151. Skema Convolution

Definisi komponen Convolution dalam VHDL adalah sebagai


berikut:

212

Implementasi JST dan Wavelet pada FPGA

Gambar 152. Desain entity InputRAM dalam bahasa VHDL

Komponen Convolution memiliki 4 buah komponen 16 bit floating


point multiplier yang disusun secara pararel dan 3 buah komponen
16 bit floating point adder/subtractor. Kedua komponen ini digenerate menggunakan Core Generator.
Komponen yang dipakai dari Core Generator untuk proses
konvolusi adalah multiplier dan adder/subtractor. Komponen 16 bit
multiplier ini langsung dipasangkan dengan masing-masing nilai
pada Shift Register dan empat konstanta Daubechies orde 4. Tiga
buah adder/subtractor juga langsung disambungkan dengan output
dari komponen multiplier.

Gambar 153. Kode hasil Generate dari Core Generator

Komponen Convolution memiliki sebuah Shift Register. Shift


Register direpresentasikan dengan 4 buah sinyal temporer dan
sebuah proses yang menggeser nilai masing-masing sinyal tersebut

Implementasi JST dan Wavelet pada FPGA

213

begitu port shift berganti nilai dari 0 ke 1. Hal tersebut


diimplementasikan oleh potongan kode berikut:

Gambar 154. Sinyal pada Shift Register

Gambar 155. Proses Shifting pada Shift Register

214

Implementasi JST dan Wavelet pada FPGA

DownSampling
Komponen DownSampling digunakan untuk memotong output dari
komponen Convolution. Output yang dibiarkan keluar hanya output
yang berindeks genap saja.

Gambar 156. Skema DownSampling

Definisi komponen DownSampling dalam VHDL adalah sebagai


berikut:

Gambar 157. Desain entity DownSampling dalam VDHL

LCD_Driver
LCD_Driver adalah komponen yang bertanggung jawab untuk
mempersiapkan dan menginisialisasi LCD. Gambar 158
menampilkan gambar skematik dari komponen LCD_Driver.

Implementasi JST dan Wavelet pada FPGA

215

Gambar 158. Skema LCD Driver

Definisi komponen LCD_Driver dalam VHDL adalah sebagai berikut:

Gambar 159. Desain entity LCD_Driver dalam VDHL

6.2 Implementasi Wavelet Lifting Scheme pada FPGA


Ingrid Daubechies memperkenalkan cara baru dalam melakukan
transformasi sinyal. Teknik transformasi wavelet diskrit tidak lagi
menggunakan fungsi pengskalaan dan fungsi wavelet yang

216

Implementasi JST dan Wavelet pada FPGA

diperkenalkan oleh Mallat. Disini Daubechies menggunakan


koefisien baru yang disebut sebagai koefisien filter yang berfungsi
sebagai filter terhadap sinyal. Penggunaan filter disini sama dengan
filter yang diperkenalkan di bidang ilmu pemrosesan sinyal digital
dimana filter dianggap sebagai impulse response yang dikonvolusi
dengan sinyal asli. Teknik transformasi yang diperkenalkan oleh
Daubechies ini menggunakan dua jenis filter, low-pass filter dan
high-pass filter yang masing-masing langsung menghasilkan bentuk
aproksimasi dan detail dari sebuah sinyal. Teknik transformasi
wavelet dengan menggunakan filter ini disebut sebagai filterbanks.

Gambar 160. Proses dekomposisi dan rekonstruksi di metode filter


bank

Gambar 160 memperlihatkan bentuk dekomposisi wavelet


daubechies dengan menggunakan metode filter bank. Sinyal asli
x(k) didekomposisi dengan menggunakan teknik konvolusi yang
diperkenalkan di bidang Digital Signal Processing (DSP)
menghasilkan dua sinyal yang berbeda yaitu low-pass sinyal
(aproksimasi) dan high-pass sinyal (detail). Koefisien filter yang
digunakan merupakan H(Z) sebagai high-pass filter dan L(Z) sebagai
low-pass filter yang saling orthogonal satu sama lain. Sedangkan
proses rekonstruksi menggunakan koefisien filter dengan nilai
kebalikan dari nilai koefisien filter pada waktu dekomposisi.
Sinyal aproksimasi hasil dekomposisi low-pass filter bisa didekomposisi berkali-kali untuk mendapatkan representasi analisis
multiresolusi. Jumlah dekomposisi yang dilakukan disebut sebagai
level dekomposisi. Dengan menggunakan analisis multiresolusi

Implementasi JST dan Wavelet pada FPGA

217

yang telah dibicarakan di bab sebelumnya, sebuah sinyal dapat


dilihat dengan tingkat pengskalaan yang berbeda. Gambar 161
memperlihatkan proses dekomposisi bertingkat untuk metode
filter bank:

Gambar 161. Proses dekomposisi bertingkat dalam di metode filter


bank

Metode dekomposisi lifting scheme juga menghasilkan aproksimasi


(low-pass filter) dan detail (high-pass filter) yang sama dengan
metode filter bank sebagai hasil dekomposisi. Bedanya, metode
lifting scheme tidak menggunakan koefisien filter sebagai impuls
respon terhadap proses konvolusi dengan sinyal asli untuk
menghasilkan aproksimasi dan detail. Akan tetapi, metode lifting
scheme menggunakan suatu fungsi linear terhadap setengah
bagian sinyal, sinyal dengan indeks ganjil dan genap, untuk
menghasilkan aproksimasi dan detail. Untuk lebih jelasnya, gambar
berikut memperlihatkan proses transformasi sinyal dengan metode
lifting scheme.

218

Implementasi JST dan Wavelet pada FPGA

Gambar 162. Proses dekomposisi dengan metode lifting scheme

Gambar 163. Proses rekonstruksi dengan metode lifting scheme

Gambar di atas memperlihatkan bahwa proses transformasi sinyal


asli dengan metode lifting scheme dilakukan dalam beberapa
tahap:
1. Sinyal asli x, dipecah menjadi dua bagian terhadap indeks
nilainya, sinyal sebagai sinyal dengan indeks ganjil (odd)
dan sinyal sebagai sinyal dengan indeks genap (even).
Proses pemecahan bagian sinyal ini disebut sebagai Lazy
Wavelet Transform (LWT).
2. Sinyal ganjil merupakan cikal bakal aproksimasi dimana
nilainya diprediksi oleh fungsi P (predict) dengan
menggunakan nilai-nilai di sinyal genap . Hal ini dapat
diperlihatkan sebagai proses komputasi berikut ini:

= +

Implementasi JST dan Wavelet pada FPGA

219

3. Sedangkan nilai sinyal genap merupakan cikal bakal


detail yang diperbaharui oleh fungsi U (update atau
pembaharuan) yang menggunakan nilai sebagai input.
Proses ini diperlihatkan sebagai berikut:

= +
4. Proses memprediksi nilai aproksimasi dengan fungsi P dan
memperbaharui nilai detail dengan fungsi U ini dilakukan
berkali-kali tergantung jenis wavelet yang digunakan.
5. Terakhir, sebelum hasil dekomposisi dikeluarkan sebagai
keluaran, nilai xo sebagai detail dinormalisasi dengan
mengalikannya terhadap suatu nilai K dan nilai xe sebagai
aproksimasi dinormalisasi dengan mengalikannya terhadap
nilai 1/K.
6. Sedangkan untuk proses rekonstruksi, tahap-tahap yang
dilakukan merupakan kebalikan dari tahap dekomposisi
yang bertujuan untuk meng-undo setiap proses
sebelumnya.
Rangkuman proses dekomposisi diatas adalah sebagai berikut:
Misalkan sebuah sinyal = 0 , 0 , 1 , 1 , , , dipecah
menjadi sinyal = 0 , 1 , , dan = 0 , 1 , , maka
proses prediksi dilakukan dengan menggunakan rumus sebagai
berikut:
= 1 +

[1,2, , ]

sedangkan proses pembaharuan dapat dirumuskan sebagai:


= 1 +

[1,2, , ]

dimana dan masing-masing merupakan koefisien prediksi


dan pembaharuan untuk setiap iterasi ke n dari sejumlah M
perulangan antara prediksi dan pembaharuan dalam proses

220

Implementasi JST dan Wavelet pada FPGA

transformasi wavelet. Sedangkan dan masing-masing


merupakan hasil pembaharuan dan prediksi.
Proses perubahan setiap nilai sinyal diperlihatkan oleh Gambar 164
berikut ini:

Gambar 164. Perubahan nilai pada proses dekomposisi lifting scheme

Proses prediksi dan pembaharuan untuk setiap jenis wavelet


memiliki nilai koefisien dan jumlah iterasi perulangan prediksi dan
pembaharuan yang berbeda. Sedangkan nilai koefisien untuk
setiap prediksi maupun pembaharuan untuk setiap perulangan
juga berbeda. Nilai koefisien lifting scheme dapat diangkat dari
koefisien filter filter bank dengan memfaktorkan matriks polyphase
dari representasi laurent polinomial milik koefisien filter di filter
bank (Daubechies dan Sweldens 1997).
Terdapat dua jenis koefisien lifting scheme yang didapatkan pada
saat memfaktorkan matriks polyphase tersebut. Yaitu, lifting
scheme klasik yang menggunakan proses prediksi untuk
mendapatkan aproksimasi dan pembaharuan untuk mendapatkan
detail, dan dual lifting scheme yang menggunakan proses prediksi
(disini dinamakan dual) untuk mendapatkan detail dan
pembaharuan (disini dinamakan primal) untuk mendapatkan
aproksimasi. Sehingga proses prediksi dan pembaharuan untuk

Implementasi JST dan Wavelet pada FPGA

221

dual lifting scheme merupakan kebalikan dari lifting scheme klasik


begitu baik untuk proses dekomposisi maupun rekonstruksi. Sama
dengan lifting scheme klasik, proses rekonstruksi dual lifting
scheme hanya meng-undo setiap proses yang dilakukan pada saat
dekomposisi. Gambar 165 memperlihatkan proses dekomposisi
untuk dual lifting scheme:

Gambar 165. Proses dekomposisi dual lifting scheme dimana prediksi


(dual) dan pembaharuan (update) kebalikan dari lifting scheme klasik.

Berikut ini adalah tabel yang memperlihatkan koefisien dual lifting


scheme untuk wavelet daubechies-2 hingga 10 yang didapatkan
dari Matlab:

222

Implementasi JST dan Wavelet pada FPGA

Tabel 9. Koefisien lifting scheme untuk daubechies-2 hingga


daubechies-8

Kelebihan yang didapat dari metode lifting scheme dibandingkan


metode filter bank antara lain (Daubechies dan Sweldens 1997):
1. Implementasi transformasi wavelet yang jauh lebih cepat.
Hal ini dikarenakan proses lifting scheme memanfaatkan
kesamaan komputasi yang dimiliki oleh filter bank.
2. Metode lifting scheme tidak membutuhkan memori
tambahan dalam menghitung hasil transformasi wavelet.

Implementasi JST dan Wavelet pada FPGA

223

Semua hasil komputasi dapat ditempatkan in-place


menggunakan memori hasil komputasi sinyal awal.
3. Perfect reconstruction mudah dilihat. Dikasus-kasus
tertentu, sangat tidak mudah untuk menentukan
tranformasi balik. Inverse transform adalah kebalikan dari
tranformasi sebelumnya forward transform. Hal ini sangat
penting untuk menentukan apakah wavelet yang dibangun
memiliki ciri-ciri sebagai wavelet yang bisa direkonstruksi
balik secara sempurna (perfect reconstruction). Sedangkan
lifting scheme, proses transformasi balik adalah proses
kebalikan dari komputasi sebelumnya. Dengan kata lain,
yang dilakukan di transformasi balik adalah mengembalikan
kembali (undo) setiap tahap-tahap komputasi yang dimiliki
oleh forward transform.
4. Lifting scheme sebagai paradigma wavelet generasi kedua.
Wavelet generasi pertama didefinisikan sebagai pemetaan
suatu fungsi dengan fungsi wavelet yang didilasikan dan
ditranslasikan. Definisi wavelet sebagai fungsi wavelet yang
didilasikan dan ditranslasikan sangat bergantung kepada
fourier transform. Sedangkan lifting scheme sama sekali
tidak bergantung terhadap fourier transform. Representasi
wavelet di ruang yang tidak bisa direpresentasikan oleh
fourier transform bisa dipenuhi oleh lifting scheme.
Contohnya adalah ruang Euclidean tidak bisa menerima
proses translasi dan dilasi dari wavelet. Sebagai contohnya
adalah aplikasi segmentasi gambar (image segmentation)
dan solusi numerik untuk persamaan partial differential.
Contoh nyata bisa dilihat dari proses transformasi wavelet
di suatu interval gambar dapat merusak gambar disetiap
tepi gambar, sedangkan lifting scheme sangat mudah
bekerja untuk data interval.

224

Implementasi JST dan Wavelet pada FPGA

6.2.1 Pemilihan Jenis Wavelet Daubechies


Terdapat beberapa pilihan wavelet daubechies yang bisa
digunakan, antara lain wavelet daubechies-2 (haar) hingga wavelet
daubechies-40.
Tahap-tahap pemilihan jenis wavelet daubechies yang penulis
lakukan antara lain sebagai berikut:
1. Lakukan proses dekomposisi dengan menggunakan wavelet
daubechies dengan berbagai pilihan parameter basis dan
level untuk mendapatkan fitur dengan ukuran yang kecil.
2. Menggunakan algoritma pembelajaran terhadap sebagian
fitur hasil dekomposisi yang dilakukan sebagai proses
pelatihan atau pembelajaran dalam pengenalan pola.
3. Kenali tingkat akurasi pengenalan pola dengan melakukan
testing terhadap sisa fitur yang tidak digunakan dalam
proses pengenalan pola sebelumnya untuk setiap level dan
basis yang digunakan.
4. Lakukan proses analisa dengan memperhatikan tingkat
akurasi yang diberikan dengan mempertimbangkan cost
sumber daya dan waktu yang dibutuhkan.
Di dalam buku ini, penulis memilih jenis wavelet daubechies 4.
6.2.2 Implementasi Algoritma Wavelet Daubechies 4 di Java
Implementasi algoritma wavelet daubechies 4 di Java digunakan
sebagai tolak ukur untuk memeriksa kebenaran algoritma lifting
scheme yang dipelajari. Sebelum proses perancangan desain
komponen dekomposisi wavelet daubechies 4 ke FPGA, Penulis
memeriksa terlebih dahulu kebenaran implementasi wavelet
daubechies yang Penulis pelajari dengan membandingkan hasil
implementasi di Java dengan hasil implementasi yang telah dimiliki
di Matlab. Proses ini digunakan sebagai simulasi awal kebenaran
algoritma sebelum menerapkan rancangan implementasi ke FPGA.

Implementasi JST dan Wavelet pada FPGA

225

Gambar 166. Algoritma dekomposisi di Java

Gambar 166 memperlihatkan algoritma dekomposisi wavelet


daubechies 4 dengan menggunakan metode lifting scheme di Java.
Gambar 166 juga memperlihatkan jumlah proses prediksi dan
pembaharuan yang dimiliki oleh wavelet daubechies 4 ada tiga
macam, yaitu prediksi 1 (dual 1), pembaharuan (update atau
primal), dan prediksi 2 (dual 2). Berikut ini adalah koefisienkoefisien yang digunakan oleh wavelet daubechies 4 metode lifting
scheme:

226

Implementasi JST dan Wavelet pada FPGA

Tabel 10. Koefisien lifting scheme untuk daubechies-4

Tabel 10 memperlihatkan koefisien yang digunakan di algoritma


wavelet daubechies-4 untuk metode dual lifting scheme yang
didapatkan dari Matlab. Koefisien ini diturunkan dari laurent
polynomial. Kolom Derajat polinomial untuk setiap koefisien
menunjukan derajat polinomial tertinggi di representasi laurent
polynomial yang menurunkan koefisien-koefisien lifting scheme
tersebut. Derajat polinomal ini dimanfaatkan sebagai penentu nilai
tetangga untuk setiap sample point manakah yang terlibat di
proses komputasi untuk masing-masing proses dual dan primal.
Sebagai contoh, nilai 0 di derajat polinomial di koefisien dual 1
menunjukkan nilai ganjil dan genap dijumlahkan untuk indeks yang
sama. Nilai 1 di derajat polinomial milik koefisien primal
menunjukkan koefisien kedua (0.43301270) melibatkan nilai
tetangga berikutnya dalam proses komputasi. Sedangkan untuk
nilai -1 di derajat polinomial dual 2 menunjukkan nilai tetangga
sebelumnya yang terlibat dalam proses komputasi.
Untuk lebih jelasnya, algoritma dekomposisi wavelet daubechies-4
seperti yang diperlihatkan oleh Gambar 166 adalah sebagai
berikut:
1. Pisahkan masukan atas nilai yang berindeks genap dan
ganjil.
Misalkan input terdiri dari = 1 , 2 , , (8),
dipisahkan menjadi untuk Ganjil dan () untuk
Genap
= 1 , 3 , 5 , 7 dan = 2 , 4 , 6 , 8
dimana , 1,2,3,4

Implementasi JST dan Wavelet pada FPGA

227

2. Predict1 atau (Dual 1)


Karena derajat polinomial = 0, maka:
= + 1 () dimana i=j dan d1 adalah
koefisien dual 1
3. Update atau primal
Karena derajat polinomial = 1 dan koefisiennya ada dua,
maka:
= + 1 + 2 + 1 dimana p1 dan
p2 adalah dua koefisien primal
4. Predict2 atau (Dual 2)
Karena derajat polinomial = -1 , maka:
= + 2 ( 1) dimana d2 adalah koefisien
dual 2
5. Normalize
= 1 (1) dimana n1 adalah koefisien normalisasi

aproksimasi
= 2 () dimana n2 adalah koefisien normalisasi
detail
Gambar 167 dibawah ini memperlihatkan perubahan nilai-nilai
yang terjadi di proses prediksi dan pembaharuan yang dijelaskan
oleh tahap-tahap diatas:

228

Implementasi JST dan Wavelet pada FPGA

Gambar 167. Perubahan nilai di wavelet daubechies-4 untuk metode


lifting scheme

Gambar 167 di atas memperlihatkan keterlibatan tetangga indeks


lawannya baik untuk update maupun predict2. Untuk update nilai
ganjil dijumlahkan dengan dua tetangga nilai genap berikutnya,
akibatnya nilai terakhir hanya melibatkan satu tetangga daripada
dua tetangga. Sedangkan untuk predict2 melibatkan tetangga
sebelumnya, sehingga untuk nilai genap pertama sama sekali tidak
dipengaruhi oleh tetangganya. Walaupun begitu, seperti inilah
tahap-tahap perhitungan untuk lifting scheme wavelet daubechies4.
6.2.3 Arsitektur Wavelet Lifting Scheme di FPGA
Berikut ini adalah gambar rancangan implementasi secara
sederhana yang Penulis terapkan

Implementasi JST dan Wavelet pada FPGA

229

Gambar 168. Rancangan implementasi wavelet daubechies-4 di FPGA

Rancangan Gambar 168 hanyalah gambaran sederhana dari


rancangan yang Penulis terapkan. Secara umum, rancangan ini
terdiri dari komponen ClkDiv, Input didalam ROM, Dekomposisi,
Output didalam RAM dan LCD_Driver. Fungsi setiap komponen
tersebut antara lain:

ClkDiv, sebagai definisi waktu untuk mengelola semua


proses yang berjalan di FPGA.
Input (ROM), sebagai tempat menyimpan data
masukan yang diasumsikan telah berada di FPGA. Data
masukan ditanamkan secara langsung di FPGA yang
disimpan didalam ROM. Satu persatu data masukan ini
dipanggil dengan jarak sample rate tertentu, dalam
percobaan ini selama 10 clock cycle untuk dibawa ke
komponen dekomposisi.
Dekomposisi, merupakan komponen tempat proses
dekomposisi wavelet daubechies-4 berada. Komponen
ini menerima masukan berupa 16-bit data masukan
yang di-sample dengan sample rate 10 clock cycle, 1-bit
penanda bahwa input baru telah masuk, dan 1 bit
penanda perubahan nilai data masukan terjadi.

Gambar 169. Data masukan untuk rancangan yang diimplementasikan

230

Implementasi JST dan Wavelet pada FPGA

Gambar 169 diatas memperlihatkan masukan yang


diperlukan untuk rancangan yang diimplementasikan.
Masukan terdiri dari 16-bit input yang di-sample rate
untuk setiap 10 clock cycle, 1-bit ready yang
menandakan sinyal masukan baru telah masuk, dan 1bit invalid atau INput VALID yang menandakan
perubahan data masukan untuk setiap sample point
sinyal data masukan.

Output (RAM), hasil keluaran kemudian disimpan di


RAM agar bisa dipanggil oleh LCD Driver untuk
ditampilkan. Hasil keluaran yang dapat dikeluarkan
adalah 16-bit aproksimasi dan detail berserta
OutValid untuk masing-masingnya yang menandakan
setiap perubahan nilai terjadi.
LCD_Driver, merupakan sekumpulan komponen yang
berhubungan dengan proses menampilkan hasil
keluaran yang telah disimpan di RAM untuk
ditampilkan di LCD yang dimiliki oleh FPGA.

Rancangan yang digambarkan diatas hanyalah gambaran


sederhana dari rancangan sebenarnya yang diimplementasikan.
Begitu juga dengan pemakaian paradigma campuran antara
behavioral dan structural dalam pemrograman VHDL menghasilkan
sejumlah komponen lainnya yang apabila di-screenshot, skema
yang terimplementasikan terlihat sangat rumit dibaca. Penulis
hanya menampilkan gambaran sederhana implementasi dengan
tujuan agar mudah dibaca dan memiliki ukuran yang bisa
ditempatkan di buku ini. Sebagai contoh, LCD_Driver sebenarnya
terdiri dari sejumlah komponen Tick_Gen, LCD_DRV_4bit, dan
LCD_Machine.
Adapun komponen dekomposisi
kali proses dekomposisinya
dekomposisi bertingkat. Hal ini
hasil dekomposisi sebelumnya

dipasang berangkai untuk setiap


dalam mengimplementasikan
berarti, setiap hasil aproksimasi
langsung dibawa sebagai data

Implementasi JST dan Wavelet pada FPGA

231

masukan ke proses dekomposisi berikutnya. Hal ini diperlihatkan


oleh gambar berikut ini:

Gambar 170. Rancangan komponen dekomposisi bertingkat

Gambar 170 diatas menggunakan komponen dekomposisi yang


sama ketika melakukan proses dekomposisi untuk setiap tingkat.
Komponen dekomposisi untuk tingkat berikutnya mengambil
masukan dari tingkat sebelumnya.
Rancangan dekomposisi bertingkat ini dibuat serial atau berangkai
dengan mengimplementasikan komponen yang sama di FPGA
untuk setiap tingkat dekomposisi di FPGA. Hal ini dapat memakan
jumlah LUB yang cukup besar dibandingkan menggunakan satu
komponen saja yang dipakai berulang-ulang. Jika menggunakan
satu komponen dekomposisi saja, jumlah delay yang diberikan
cukup besar karena masukan berikutnya harus menunggu proses
sebelumnya selesai dilakukan.
Selain membutuhkan delay, jika menggunakan satu komponen
saja, masukan harus disimpan terlebih dahulu di memori sambil
menunggu giliran berikutnya tiba. Menimbang perangkat
Arrhythmia yang dikembangkan membutuhkan proses dekomposisi
yang cepat, dan berjalan dalam waktu nyata, maka Penulis disini
merancang implementasi wavelet daubechies secara berangkai
untuk mendapatkan hasil yang cepat. Lagipula, proses dekomposisi
wavelet daubechies disini baru salah satu algoritma praproses dari
sejumlah algoritma yang perlu dilalui oleh perangkat yang
dikembangkan.
Disini Penulis mengasumsikan masukan terdiri dari 16 bit data
sebagai bilangan floating point. Floating point yang digunakan
232

Implementasi JST dan Wavelet pada FPGA

terdiri dari 1 bit sebagai sign bit, 5 bit sebagai eksponen, dan 10 bit
sebagai mantissa. Representasi masukan dengan floating point ini
mencakup nilai dengan rentang -131008 hingga 131008.
Sedangkan nilai positif terkecil yang mampu ditampilkan oleh
representasi bilangan floating point 16-bit ini antara lain
3,05175x10-5 dengan semua angka binernya bernilai 0. Menurut
standar yang berlaku, representasi bilangan floating point yang
semua angka binernya bernilai 0 digunakan untuk representasi
angka 0.
Disini Penulis mengasumsikan representasi bilangan floating point
digunakan adalah 16-bit floating point dengan 5-bit eksponen, 10bit mantissa, dan 1-bit sign bit. Pemilihan 16-bit floating point ini
adalah untuk mendapatkan rentang nilai dengan presisi yang masih
cukup besar dibandingkan bilangan 64-bit floating point di Matlab.
Data masukan merupakan bilangan riil sejumlah angka dibelakang
koma yang bisa hilang apabila menggunakan representasi bilangan
floating point yang lebih kecil. Semakin kecil representasi bilangan
floating point yang digunakan maka baik kebutuhan sumber daya
maupun waktu komputasi di FPGA semakin sedikit. Hal ini
dikarenakan setiap proses komputasi yang meliputi perkalian
floating point dan penjumlahan floating point membutuhkan
sejumlah komponen multiplier atau full adder yang sebanding
dengan jumlah bit floating point yang digunakan. Dengan
menggunakan 16-bit floating point, Penulis bisa mendapatkan
rentang bilangan real yang masih besar hingga 4 angka 0 di
belakang koma (nx10-5) seperti yang diperlihatkan oleh bilangan
positif terkecilnya yaitu, 2-15 = 0,0000305175 = 3,05175x10-5.
Sedangkan presisi bilangan floating point cukup fleksibel. Rentang
nilai floating point 16-bit masih memiliki presisi (total jumlah angka
dibelakang koma) yang cukup besar. Total jumlah angka dibelakang
koma bergantung dari perkalian eksponen dengan 1+mantissa.
Disini Penulis mengasumsikan presisi yang hilang oleh representasi
bilangan 16-bit floating point tidak terlalu besar dibandingkan
dengan presisi ganda 64-bit yang digunakan oleh Matlab.
Berikut ini adalah gambar rancangan komponen-komponen yang
digunakan untuk proses dekomposisi:

Implementasi JST dan Wavelet pada FPGA

233

Gambar 171. Rancangan komponen implementasi dekomposisi wavelet


daubechies-4 di FPGA

Gambar 171 memperlihatkan komponen-komponen utama secara


sederhana yang dibutuhkan dalam proses dekomposisi wavelet
daubechies-4 dengan metode lifting scheme. Seperti halnya
proses-proses Lazy Wavelet Transform, prediksi 1 dan prediksi 2,
pembaharuan (Update), hingga normalisasi (Normalize) untuk
setiap aproksimasi dan detail yang dibutuhkan oleh wavelet
daubechies-4 metode lifting scheme, maka setiap proses tersebut
diwakili satu persatu sebagai komponen struktural di rancangan
yang dikembangkan. Pemasangan komponen tersebut dapat
terlihat di Gambar 172 dibawah ini yang di-generate langsung dari
Xilinx IDE Design Suite 12.3:

234

Implementasi JST dan Wavelet pada FPGA

Gambar 172. Skema implementasi komponen dekomposisi wavelet


daubechies-4 di FPGA

Penjelasan terhadap setiap komponen utama proses dekomposisi


wavelet daubechies-4 dengan metode lifting scheme adalah
sebagai berikut:
1. Splitting atau Lazy Wavelet Transform (LZW)
Lazy wavelet transform berfungsi sebagai komponen yang
memisahkan antara masukan yang berindeks ganjil dan
masukan yang berindeks genap. Hasil pemisahan ini
menghasilkan dua keluaran yaitu, sinyal dengan masukan
berindeks ganjil atau odd dan sinyal dengan masukan
berindeks genap atau even. Sinyal berindeks ganjil nantinya
digunakan sebagai aproksimasi dan sinyal berindeks genap
digunakan sebagai detail setelah proses komputasi prediksi,
pembaharuan, dan normalisasi selesai. Gambar 173

Implementasi JST dan Wavelet pada FPGA

235

dibawah ini merupakan


diimplementasikan:

skema

Splitting

yang

Gambar 173. Rancangan komponen Splitting

Gambar 173 memperlihatkan masukan dan keluaran yang


dibutuhkan oleh komponen Splitting di rancangan yang
diimplementasikan ini. Komponen Splitting ini diprogram
dengan menggunakan paradigma behavioral dengan
bahasa pemograman VHDL. Setiap masukan dengan indeks
genap dan ganjil dapat dipisahkan dengan bantuan
masukan control sebagai penanda kapan indeks genap atau
ganjil terjadi.
2. Predict1 atau dual1
Komponen predict1 hanya terdiri dari satu kali perkalian
dan 1 kali penjumlahan.
Setiap komponen perkalian dan penjumlahan floating point
di-generate dengan menggunakan Core Generator yang
terdapat di perangkat lunak Xilinx IDE Design Suite 12.3
yang digunakan. Komponen perkalian dan penjumlahan
floating point ini telah ada dan siap digunakan. Sehingga
langkah yang tersisa dalam membangun komponen
predict1 ini adalah proses pemasangan dan pengaturan
waktu (timing) yang dihasilkan oleh setiap masukan.

236

Implementasi JST dan Wavelet pada FPGA

Gambar 174. Rancangan komponen predict 1

Gambar 174 diatas memperlihatkan rancangan komponen


predict1. Jika masukan di-sample dengan sample rate 10
clock cycle, maka hasil perkalian bisa langsung ditambahkan
tanpa delay. Hal ini dikarenakan, sample rate 10 clock cycle
masih memiliki jangkauan waktu yang cukup lama ketika
mengatur kapan kedua masukan yang ditambahkan berada
diwaktu yang bersamaan. Asalkan kedua masukan bisa
berada diwaktu yang bersamaan dengan nilai yang valid
maka penjumlahan bisa dilakukan dan menghasilkan nilai
yang valid juga.
3. Update atau primal
Proses update atau pembaharuan cukup rumit karena
terdapat dua perkalian dan melibatkan 2 nilai tetangga
berikutnya. Secara umum komponen pembaharuan ini
diperlihatkan oleh Gambar 175 berikut ini:

Implementasi JST dan Wavelet pada FPGA

237

Gambar 175. Rancangan komponen update

Gambar 175 memperlihatkan gambaran sederhana


komponen pembaharuan yang diimplementasikan. Karena
proses pembaharuan ini memiliki dua kali proses perkalian
dan perkalian kedua melibatkan nilai tetangga berikutnya,
maka dibutuhkan satu delay untuk mendapatkan 2 nilai
tetangga yang berbeda dari nilai Detail. Kemudian hasil
perkalian dua nilai tersebut ditangkap dan dijumlahkan.
Karena proses sebelumnya cukup lama karena
membutuhkan proses perkalian dan penjumlahan, maka
nilai aproksimasi yang dijumlahkan diproses penjumlahan
berikutnya bisa terlambat dan membutuhkan sejumlah
delay yang setara.
4. Predict2 atau dual2
Predict2 membutuhkan masukan aproksimasi yang didapat
dari hasil predict1 dan detail yang didapat dari hasil update.
Proses update cukup lama karena memiliki jumlah
komputasi perkalian dan penjumlahan yang cukup banyak.
Sedangkan nilai aproksimasi yang ditambahkan dengan
detail adalah nilai aproksimasi tetangga sebelumnya seperti

238

Implementasi JST dan Wavelet pada FPGA

yang dijelaskan di subbab Implementasi algoritma wavelet


daubechies-4 di Java. Sehingga proses penjumlahan di
komponen predict2 membutuhkan delay yang lebih banyak
lagi. Hal ini diperlihatkan oleh Gambar 176 berikut ini:

Gambar 176. Rancangan komponen predict2

5. Normalisasi
Normalisasi hanyalah proses perkalian floating point biasa
untuk setiap hasil keluaran aproksimasi dan detail sehingga
proses ini tidak membutuhkan komponen tersendiri untuk
menampung dan mengatur setiap prosesnya.
6. Control
Komponen Control merupakan komponen yang mengontrol
setiap proses dan komponen yang terdapat di komponen
dekomposisi. Rancangan yang diimplementasikan dibuat
sedemikian rupa sehingga proses komputasi masukan dapat
berjalan sesuai dengan apa yang diharapkan. Gambar 177
adalah gambaran masukan dan keluaran yang digunakan di
komponen Control.

Implementasi JST dan Wavelet pada FPGA

239

Gambar 177. Rancangan komponen control

Komponen dekomposisi ini tidak menggunakan Finite State


Machine (FSM) karena Penulis kesulitan mengakses
komponen RAM yang berada di komponen bagian terluar
yang harus melalui beberapa komponen lainnya secara
bertingkat keluar karena menggunakan paradigma
struktural. Selain itu, rancangan yang mengalir seperti ini
bisa mengurangi jumlah delay yang dibutuhkan karena
delay hanya terpakai pada saat proses komputasi terakhir
di setiap proses prediksi dan pembaharuan, yaitu
penjumlahan hasil perkalian ganjil dengan nilai genap asli
dan sebaliknya. Jika menggunakan FSM, delay yang
dibutuhkan adalah total komputasi perkalian dan
penjumlahan yang dibutuhkan oleh setiap proses prediksi
dan pembaharuan, bukan penjumlahan akhir saja. Akan
tetapi, rancangan seperti ini sangat rentan terhadap
masalah pengaturan waktu (timing), sedikit perubahan
yang terjadi dapat mengacaukan semua proses lainnya.
Karena itu, Penulis mengatur semua proses yang ada disini
dengan komponen control yang akan memeriksa kebenaran

240

Implementasi JST dan Wavelet pada FPGA

(valid atau tidaknya) setiap nilai yang dihitung dan hasil


perhitungan. Proses control disini dapat membutuhkan 1bit penanda untuk perubahan masukan dan keluaran yang
dinamakan INVALID (INput VALID) dan OUTVALID (Output
VALID) di komponen dekomposisi. Untuk menjaga
kesalahan timing yang bisa terjadi, setiap 1-bit penanda
perubahan masukan dan keluaran tersebut membutuhkan
3 clock cycle untuk setiap penandaan. Tiga clock cycle
penanda cukup mampu menerima kesalahan pergeseran
hingga 2 clock cycle karena Control hanya memiliki 1 clock
cycle sebagai penanda.
7. Delay
Komponen delay merupakan salah satu komponen yang
paling sering digunakan untuk mengatur masalah waktu.
Komponen ini hanya berisikan proses shift register yang
menyimpan masukan sekarang dan mengeluarkannya
beberapa saat berikutnya (first in first out atau FIFO).

Implementasi JST dan Wavelet pada FPGA

241

Daftar Pustaka
Cedar Valley Business : Monthly Online. Obstructive Sleep Apnea
Has Deadly Consequences.
http://wcfcourier.com/business/columns/article_a0f19aaa-33b311e0-878c-001cc4c002e0.html diakses 20 Juni 2011.
I Made Agus Setiawan, Elly Matul I., Nulad W.P., P. Mursanto, dan
Wisnu Jatmiko. Heart Beat Classification using Wavelet Feature.
Universitas Indonesia, 2010.
Indonesian Society On Computer & Information Sciences (ICIS).
Modul Workshop Jaringan Saraf Buatan. Universitas Indonesia,
2002.
National Center on Sleep Disorder Research. Sleep Apnea. National
Institutes of Health National Heart, Lung, and Blood Institute, 1995
http://www.smbs.buffalo.edu/pccm/sleep/osanih.pdf diakses pada
1 Juni 2010
Tim Riset Sleep Apnea. Development Of Sleep-Awakening Timing
Controller For Occupational Safety And Health Based-On
Computational Intelligent Algorithm. Universitas Indonesia, 2010.
A Brief History of VHDL.
http://www.doulos.com/knowhow/vhdl_designers_guide/a_brief_
history_of_vhdl/ diakses 4 Juni 2011
PhysioBank ATM. http://www.physionet.org/cgi-bin/atm/ATM
diakses 22 April 2011
Wikipedia.
http://en.wikipedia.org/wiki/Electrocardiography
diakses 6 Juni 2011
Medical University of Gdansk, Department of Histology and
Immunology; Kmied Z.
http://www.ncbi.nlm.nih.gov/pubmed/11729749 diakses 7 April
2012

242

Implementasi JST dan Wavelet pada FPGA

The Electrocardiogram. http://www.tveatch.org/ekgs/pqrst.html


(diakses pada 1 Maret 2011)
A. Febrian, Elly Matul I., I Md. Agus S., M. Fajar, W. Jatmiko, D.H.
Ramdani, A. Bowolekso, dan P. Mursanto. Building Automation
Tools to Calculate Trichloroethylene Level in Human Liver Using
Case Study: Images of White Mouse Liver. International Conference
on Advance Computer Science and Information System (ICACSIS)
2011.
Robi Polikar. The engineers ultimate guide to wavelet analysis.
Retrieved May 20, 2011,
http://users.rowan.edu/~polikar/WAVELETS/WTtutorial.html
diakses pada 1 Maret 2011
Resnikoff, Howard L., Raymond Wells O.,Jr. Wavelet Analysis The
Scalable Structure of Information. New York: Springer, 1998
Stephane G. Mallat. A theory for multiresolution signal
decomposition: The wavelet representation. IEEE Transaction on
Pattern Analysis and Machine Intelligence, 1989.
Clemens Valens. A Really Friendly Guide to Wavelets. 26 Jan 2004.
15
Mei
2011.
http://polyvalens.pagespersoorange.fr/clemens/wavelets/wavelets.html
Henning Thielemann. Bounds for smoothness of refinable
functions. - . 15 Mei 2011. http://www.math.unibremen.de/zetem/DFGSchwerpunkt/preprints/orig/refinablesmoothest.pdf
Pong P. Chu. FPGA Prototyping by VHDL example : Xilinx
SpartanTM 3-version. New Jersey : John Wiley & Sons, 2008.
VHDL, http://en.wikipedia.org/wiki/VHDL diakses tanggal 4 Juni
2011.
Aydoan Savran dan Serkan nsal. Hardware Implementation Of A
Feedforward Neural Network Using FPGAs. Department of
Electrical and Electronics Engineering, Ege University, 2007.

Implementasi JST dan Wavelet pada FPGA

243

Roland, Aji. Skripsi : Implementasi Algoritma Neural Network


feedforward pada FPGA. Universitas Indonesia, 2011.
Rochmatullah, Modifikasi Fuzzy Neuro Learning Vector
Quantization menggunakan Particle Swarm Optimization untuk
Sistem Penciuman Electornik, Universitas Indonesia 2009.
Xilinx. Core Generator Guide.
Sani M. Isa, Mohamad Ivan Fanany, Wisnu Jatmiko, Aniati Murni
Arymurthy. Feature and Model Selection on Automatic Sleep Apnea
Detection using ECG. Universitas Indonesia, 2010.
Elly Matul I , Klasifikasi Beat Aritmia pada Sinyal ECG mengunakan
Fuzzy Wavelet Learning Vector Quantization (FWLVQ), Technical
Report TD Robotika. Universitas Indonesia 2010
Temme, Nico M. Asymptotics and Numerics of Zeros of
Polynomials That Are Related to Daubechies Wavelets.
Mathematics Subject Classification (1991).
Chazal P, Penzel T, and Heneghan C, " Automated detection of
obstructive sleep apnea at different time scales useing the
electrocardiogram". Physiological Measurement. 2004 July;
25:967-983.
Daubechies, Ingrid,Wim Sweldens. FactoringWavelet Transform
into Lifting Steps. Sep 1996. Nov 1997 (revised)
Aldec, Evita VHDL.
http://www.aldec.com/Products/Product.aspx?productid=1c8980a
5-b675-47ce-ac62-5a8a0dcf19b1 diakses tanggal 13 Januari 2011.
Pengertian Obstetri dan Ginekologi.
http://drprima.com/kehamilan/pengertian-obstetri-danginekologi.html
Agus Setiawan, I Made. Fuzzy-Based Preprocessing
Electrocardiogram Signal. Universitas Indonesia, 2009.

244

of

Implementasi JST dan Wavelet pada FPGA

M. Elsayad, Alaa. Classification of ECG arrhythmia Using Learning


Vector Quantization Neural Network. IEEE, 2009.
Elly Matul Imah, M. Ivan Fanany, Wisnu Jatmiko, and T.Basaruddin.
A Comparative Study on Daubachies Wavelet transformation,
Kernel PCA and PCA as Feature Extractors for Arrhythmia Detection
Using SVM. Universitas Indonesia, 2010.
Rajesh Ghongade and Dr, A.A. Ghatol. A Brief Performance
Evaluation of ECG Feature Extraction Techniques for Artificial
Neural Network Based Classification. Vishwakarma Institute of
Information Technology, India, 2007.
Spartan-3AN FPGA Family Data Sheet.
http://www.xilinx.com/support/documentation/datasheets/ds557.
pdf diakses 18 Juni 2011
R.Smith, Gina. FPGAs 101 : Everything you need to know to get
started. Oxford, UK : Elsevier, 2010.
Teinbuch, Prof. Dr. Ir. M., Dr. Ir. Eindhoven van de Molengraft
M.J.G. Wavelet Theory and Applications A literature study.
Eindhoven University of Technology, Department of Mechanical
Engineering. Control Systems Technology Group. 2005
Valens, Clemens. A Really Friendly Guide to Wavelets.
http://polyvalens.pagespersoorange.fr/clemens/wavelets/wavelets.html diakses 15 Mei 2011
Resnikoff, Howard L., Raymond Wells O.,Jr. Wavelet Analysis The
Scalable Structure of Information. New York: Springer, 1998
Temme, Nico M. Asymptotics and Numerics of Zeros of Polynomials
That Are Related to Daubechies Wavelets. Mathematics Subject
Classification (1991).
http://arxiv.org/pdf/math/9610225.pdf diakses 25 mei 2012
Thielemann,Henning.
functions.

Bounds

for

smoothness

Implementasi JST dan Wavelet pada FPGA

of

refinable

245

http://www.math.uni-bremen.de/zetem/DFGSchwerpunkt/preprints/orig/refinablesmoothest.pdf
Mei 2011

diakses

15

Daubechies, Ingrid,Wim Sweldens. Factoring Wavelet Transform


into Lifting Steps. Sep 1996. Nov 1997 (revised)
Altium Designer. FPGA Design Basics. Altium Limited (February
2008).
http://www.altium.com/files/training/Module5FPGADesign.pdf
diakses 25 mei 2012

246

Implementasi JST dan Wavelet pada FPGA

Glosarium
FPGA

Merupakan board pengembangan


untuk sirkuit digital yang bisa
diprogram
berkali-kali,
memungkinkan
kita
untuk
membangun desain sirkuit dengan
cepat

VHDL

Bahasa pemrograman yang digunakan


untuk mendesain rancangan sirkuit
digital yang nantinya bisa dicoba pada
board FPGA

Fitness function

Fungsi untuk menghitung nilai sebagai


ukurang seberapa bagus keadaan
sekarang dari sebuah optimisasi yang
kita cari

Trichloroethylene

Zat kimia yang biasa digunakan pada


berbagai produksi dalam kehidupan
sehari-hari. Berbahaya bagi tubuh dan
bisa berakibat kerusakan organ hati

Electrocardiogram

Alat untuk mendeteksi sinyal elektrik


tubuh yang mengendalikan jantung

Ultrasonography

Alat untuk mengetahui keadaan


didalam
tubuh,
memanfaatkan
gelombang suara ultrasonik

Beagleboard

Board kecil yang diotaki oleh prosesor


ARM,
berkemampuan
untuk
melakukan
komputasi
layaknya
komputer biasa.

Implementasi JST dan Wavelet pada FPGA

247

Polysomnograph

Alat yang berisi gabungan dari banyak


alat lainnya, yang mengukur berbagai
aktivitas elektrik tubuh seperti otak,
mata, otot, dan jantung.

Electroencephalograph

Alat untuk mengukur aktivitas elektrik


otak

Electrooculograph

Alat untuk mengukur aktivitas elektrik


mata

Electromiograph

Alat untuk mengukur aktivitas elektrik


otot

Arrhythmia

Kondisi kelainan pada jantung dimana


jantung berdetak lebih lambat, lebih
cepat, atau tidak beraturan sama
sekali. Pertanda untuk penyakit yang
lebih fatal.

Analog
to
Converter (ADC)

Digital Alat untuk mengkonversi sinyal analog


menjadi sinyal digital

Android

Operating System open source untuk


telepon selular dan gadget milik
Google

Patient Simulator

Alat yang bisa me-generate dan


mensimulasikan sinyal elektrik dari
jantung, baik keadaan sehat maupun
sakit

Sleep Apnea

Kondisi penyakit ketika tidur

Rapid
(REM)

248

Eye

Movement Kondisi ketika manusia tidur dimana


diperkirakan manusia bermimpi

Implementasi JST dan Wavelet pada FPGA

Jaringan Saraf Tiruan

Model kecerdasan buatan


meniru cara kerja sistem
manusia bekerja

Synapse

Sambungan antar sel saraf

Fungsi aktivasi

Fungsi yang dipanggil dengan


parameter jumlahan hasil kali input
dengan bobot-bobotnya masingmasing, nilainya menjadi output dari

Bias

Nilai tambahan yang menjadi input


dari suatu neuron yang nilainya selalu
1

Sigmoid

Fungsi yang bentuknya menyerupai


hurus S

Vektor

Elemen ruang vektor

Fuzzy

Suatu konsep dimana nilai kebenaran


sebuah bukan hanya 0 dan 1 tetapi
rentang antara [0...1]

Fungsi keanggotaan

Fungsi untuk menghitung nilai


similaritas suatu variabel terhadap
sebuah kelas fuzzy

Nilai similaritas

Nilai seberapa besar suatu variabel


terhadap keanggotaannya terhadap
sebuah kelas fuzzy

Matriks

Representasi data dalam bentuk grid


angka, bisa dalam bentuk 2 dimensi
maupun 3 dimensi

Amplitudo

Jarak antar suatu titik pada sinyal


dengan sumbu X

Frekuensi

Banyaknya suatu kejadian terjadi

Implementasi JST dan Wavelet pada FPGA

yang
saraf

249

First In, First Out (FIFO)

250

Salah
satu
metode
untuk
penyimpanan
dan
pengaksesan
memori dimana data yang masuk
terlebih dahulu akan diakses lebih
dahulu

Implementasi JST dan Wavelet pada FPGA

Index
B
Backpropagation 54, 55, 56, 59, 66, 164, 167, 171

F
Fixed Point 6, 153, 154
Floating Point 6, 155, 156, 158, 159, 160
FLVQ 3, 6, 32, 69, 70, 71, 73, 74, 80, 81, 82, 83, 86, 87, 88, 89, 90, 92, 182, 183, 184,
185, 190, 192, 193, 200
FLVQ-PSO 3, 6, 86, 87
FPGA 2, 3, 5, 6, 7, 114, 115, 116, 117, 118, 119, 120, 122, 123, 124, 164, 165, 166, 167,
171, 179, 180, 181, 182, 183, 190, 202, 206, 208, 216, 225, 229, 230, 231, 232, 233,
234, 235, 243

J
JST 3, 5, 7, 45, 46, 47, 48, 49, 50, 52, 57, 86, 181

V
VHDL 3, 5, 115, 119, 124, 125, 128, 130, 131, 132, 133, 135, 136, 138, 139, 140, 143,
146, 148, 153, 167, 177, 179, 191, 210, 211, 212, 215, 216, 231, 236, 243, 244, 254,
255

W
Wavelet 3, 5, 7, 100, 101, 104, 105, 106, 202, 219, 224, 234, 235, 243, 244

Implementasi JST dan Wavelet pada FPGA

251

Profil Singkat Penulis


Nama
Dr. Eng. Wisnu Jatmiko, S.T., M.Kom.
TTL
Surabaya, 16 Desember 1973
Profesi
Pengajar / Staf Akademis
Tempat Kerja
Fakultas Ilmu Komputer UI
Email
wisnuj@cs.ui.ac.id
Interest Robotic, Computational Intelligence
Quote Tidak ada tanggal merah dalam
kalendar saya

Nama
Dr. Petrus Mursanto, M.Sc.
TTL
Surakarta, 25 Juni 1967
Profesi
Pengajar / Staf Akademis
Tempat Kerja
Fakultas Ilmu Komputer UI
Email
santo@cs.ui.ac.id
Interest Embedded
System,
Computer
Architecture and Infrastructure

252

Implementasi JST dan Wavelet pada FPGA

Nama
Muhamad Fajar, S.Kom
TTL
Depok, 22 Mei 1989
Profesi
Asisten Riset
Tempat Kerja
Fakultas Ilmu Komputer UI
fajar_today_89@yahoo.com
Interest Ubiquotuous
Compoting,
Mobile
Technology
Quote Lebih baik menyesal karena belum
berhasil daripada menyesal karena tidak
pernah mencoba

Nama
M Iqbal Tawakal, S.Kom
TTL
Semarang, 1 Maret 1990
Profesi
Asisten Riset / Asisten Dosen
Tempat Kerja
Fakultas Ilmu Komputer UI
mit.iqi@gmail.com
Interest Digital Signal Processing, Computer
Vision, and Robotic
Quote Lebih baik mati bertabur bunga,
daripada hidup bercermin bangkai
(Lebih baik mati dalam kemuliaan
daripada hidup dalam kemunafikan)

Implementasi JST dan Wavelet pada FPGA

253

Nama
Wahyu Trianggoro
TTL
Bogor, 9 Oktober 1989
Profesi
Asisten Riset
Tempat Kerja
Fakultas Ilmu Komputer UI
Email
wahyoe_89@yahoo.com
Interest Java & VHDL Programming
Quote Banyaklah berdoa karena permainan
strategi seperti catur sekalipun masih
dipengaruhi oleh faktor keberuntungan

Nama
Ruliantyo Syafadillah Rambe
TTL
Tarakan, 21 September 1989
Profesi
Asisten Riset
Tempat Kerja
Fakultas Ilmu Komputer UI
Email
fadil_reverse@yahoo.co.id
Interest Java & VHDL Programming
Quote Jangan sampai belajar mengganggu
waktu bermain kalian, karena bermain
adalah bagian dari pembelajaran

254

Implementasi JST dan Wavelet pada FPGA

Nama
Fauzi
Tempat Lahir
Padang Panjang
Profesi
Asisten Riset
Tempat Kerja
Fakultas Ilmu Komputer UI
Email
fauzi.lucky1@gmail.com
Interest VHDL Programming, Image Processing
Quote Percaya itu baik, tetapi mengecek itu
lebih baik

Nama
Arief Ramadhan
Profesi
Asisten Riset/ Mahasiswa Doktoral
Tempat Kerja
Fakultas Ilmu Komputer UI
Email
arieframahadan@yahoo.com
Interest Jaringan Syaraf Tiruan

Implementasi JST dan Wavelet pada FPGA

255

256

Implementasi JST dan Wavelet pada FPGA