` COVER BELUM
Implementasi JST dan Wavelet pada FPGA
1
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.
2
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
3
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
4
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
5
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.
6
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
7
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
8
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
9
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
1
W
2
...
Y
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)
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)
1
0 θ
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
θ
x
-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
x
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
2
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
x
-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
k
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
n
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
1
mean
2 3
Feature ke 1
Keluaran ke 1 1
1 1
Feature ke 2
2
mean
2
max
Keluaran ke 2
3
Feature ke i
2
3
3
Keluaran ke j
1
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
x
1
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 𝜇𝑖 =
1 𝑗
𝑗 𝑗 =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
1
µij
hxi
wi
hwij
Gambar 30. Vektor Pewakil Awal sebelum dilakukan pergeseran
Implementasi JST dan Wavelet pada FPGA
75
wi
x
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 : α µi
: 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)
x
1
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)
j
= vektor pewakil dalam suatu cluster FLVQ
m
= banyak vektor masukan = i
N
= semua vektor pelatihan per-kelas
k
= 1,2,3,...N
Berikut adalah gambar dari matriks similaritas pada FLVQ:
Implementasi JST dan Wavelet pada FPGA
81
𝑚11 ⋮ 𝑀 = 𝑚1𝑛
⋯ 𝑚𝑛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
1
1
1
2
2
2
i
i
i
1
1
1
2
2
2
i
i
i
1
1
1
2
2
2
i
i
i
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
1
1
1
1
1
1
1
2
2
2
2
2
2
2
i
i
i
i
i
i
i
1
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
2
i
i
i
i
i
i
i
i
i
1
1
1
1
1
1
1
2
2
2
2
2
2
2
i
i
i
i
i
i
i
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 ∞
𝑥 𝑡 𝑒 −2𝜋𝑓𝑡
𝑋 𝑓 = −∞
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: ∞
∞
𝑥 𝑡 =
𝑋𝑊𝑇 (𝜏, 𝑠) −∞ −∞
1 𝑡−𝜏 𝜓 𝑑𝜏𝑑𝑠 𝑠2 𝑠
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
8
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
B
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 2’s 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 2’s 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 2’s 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: 𝐵𝑖𝑎𝑠 = 2𝐸−1 − 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
0
+- 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 Aydoğan 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 Aydoğan Savran dan Serkan Ünsal (2007). Pada paper tersebut implementasi pada FPGA hanya dilakukan untuk proses feedforward dan representasi data menggunakan 8 bit two’s complement fixed point. Pada buku ini representasi yang digunakan adalah 12 bit two’s 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 two’s 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 two’s 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, 2N−1
𝜑 𝑥 = 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 𝑛=2−2𝑁
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: 2𝑁−1
2𝑁−1
𝑛 = 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 engineer’s 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. Aydoğan 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
[email protected] 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
[email protected] 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
[email protected] 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
[email protected] 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
[email protected] 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
[email protected] 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
[email protected] 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
[email protected] Interest Jaringan Syaraf Tiruan
Implementasi JST dan Wavelet pada FPGA
255
256
Implementasi JST dan Wavelet pada FPGA