Jumat, 21 Juni 2013

PENERAPAN MIKROKONTROLER SEBAGAI DATA LOGGER SINYAL SUARA (I)


Halloo teman-teman!! Pada kesempatan ini saya akan berbagi pengetahuan mengenai mikrokontroler untuk logger sinyal suara. Nah, hal yang unik dalam penanganan sinyal suara adalah membutuhkan kecepatan sampling yang tinggi dan sistem penyimpanan yang tepat. Nah tulisan berikut saya ambil dari makalah saya pada seminar ASTECHNOVA 2012 Jurusan Teknik Fisika UGM, dan terpilih menjadi paper terbaik :)


STUDI PENERAPAN MIKROKONTROLER SEBAGAI
DATA LOGGER SINYAL SUARA

ABSTRAK
Tidak seperti Digital Signal Processor (DSP), mikrokontroler tidak didedikasikan untuk melakukan pengolahan sinyal suara yang bersifat rumit. Namun, mikrokontroler dapat digunakan sebagai pencatat data (data logger) sinyal suara dengan kecepatan sampling yang relatif tinggi. Pada penelitian ini, 8-bit Analog-to-digital converter (ADC) pada mikrokontroler dijalankan pada kondisi free-running mode dengan kecepatan sampling 19,2 kSa/s. Dengan menerapkan prinsip dual-buffer, pengaturan proses sampling dan penulisan data ke SD card dapat dijalankan dengan baik. Untuk keperluan kalibrasi yang melibatkan dua sensor yang hampir secara simultan mencatat data, kecepatan ADC dapat ditingkatkan sampai 38,5 kSa/s tanpa merusak data. Studi juga dilakukan dengan kecepatan ADC sampai 76,9 kSa/s, namun terjadi beberapa kerusakan dalam merekonstruksi data input. Hasil dari penelitian ini selanjutnya dapat diterapkan sebagai studi awal pembuatan alat yang bersifat portabel untuk identifikasi kekacauan suara (voice disorder).

Kata Kunci: mikrokontroler, ADC, sampling rate, dual-buffer, voice disorder

1. PENDAHULUAN
1.1 Latar Belakang

Kekacauan suara (voice disorder) dapat didefinisikan sebagai kelainan yang melibatkan nada, tingkat kekerasan atau kualitas suara yang diproduksi oleh laring (Camilleri, 2012), dan fenomena ini erat kaitannya dengan kerusakan yang dialami oleh pola dinamik vocal folds (Lohscheller, 2009). Selanjutnya, Camilleri (2009) mengatakan bahwa gejala timbulnya voice disorder meliputi timbulnya suara serak, suara yang berdesah, sesak napas, menurunnya rentang nada, menurunnya tingkat kekerasan suara, kehilangan suara, meningkatnya usaha untuk dapat memproduksi suara normal, atau terjadinya ketegangan pada otot leher.
Dalam publikasinya mengenai voice disorder, Greater Baltimore Medical Center (2012) menyatakan bahwa sekitar 3% sampai 10% dari populasi manusia di dunia pernah mengalami voice disorder sepanjang hidupnya, namun tingkat resiko yang lebih tinggi dialami oleh orang-orang yang memanfaatkan suara sebagai profesinya (guru, dosen, penyanyi, pelatih olahraga, pengacara, dan lain-lain), perokok aktif, orang yang pernah menjalani operasi kepala atau leher, dan orang yang mengalami kelainan fungsi neurologis (stroke, spasmodic dysphonia, penyakit parkinson). Terganggunya kualitas suara dapat berakibat pada menurunnya kemampuan bicara normal yang selanjutnya dapat memengaruhi hubungan sosial, profesional dan kepentingan pribadi (Carullo et.al, 2012). Berdasarkan uraian di atas, keberadaan alat untuk memantau aktifitas vokal dapat disarankan untuk dikembangkan, sehingga parameter suara yang berpengaruh pada gejala munculnya voice disorder dapat dideteksi.

1.2 Mikrokontroler Sebagai Data Logger
Tidak seperti Digital Signal Processor (DSP), pada umumnya mikrokontroler tidak didedikasikan untuk melakukan pengolahan sinyal suara yang bersifat rumit. Namun demikian, advance hybrid microcontroller dan  field programmable gate arrays (FPGAs) telah mengikutkan fungsi DSP di dalamnya (Banerjee, 2009). Terlepas dari kemampuan teknologi yang dimiliki oleh advance microcontroller, FPGA atau DSP, pertimbangan ekonomi (harga dari alat tersebut) menjadi masalah tersendiri yang harus disikapi.

Penelitian ini dapat digunakan sebagai studi awal untuk mengembangkan alat yang bersifat portabel untuk memonitor aktivitas vokal. Penulis mencoba menyisihkan proses yang bersifat rumit dan kompleks yang harus dibebankan kepada mikrokontroler ketika harus melakukan pengolahan sinyal suara. Mikrokontroler hanya akan didedikasikan untuk logger sinyal suara dan selanjutnya proses pengolahan sinyal suara dapat dilakukan secara off-line menggunakan komputer. Namun demikian, pengolahan sinyal secara off-line tidak dibahas pada makalah ini.

Skema yang mendedikasikan mikrokontroler hanya sebagai data logger dapat menjadi solusi yang menjanjikan untuk alat yang bersifat portabel. Pengguna (user) dapat memakai alat untuk merekam aktivitas vokalnya sepanjang hari, dan selanjutnya data tersebut dapat sekali diolah pada waktu kegiatan telah selesai dilakukan tanpa harus melakukan pengolahan sinyal suara setiap saat. Namun demikian, persoalan mengenai kemampuan mikrokontroler untuk menyediakan kecepatan sampling yang tepat sesuai dengan bandwith dari sensor yang dipakai menjadi tantangan untuk dipelajari.

2. DESAIN PENELITIAN
2.1 Rancangan Umum Penelitian

Penelitian diawali dengan studi literatur mengenai bandwidth dan nilai kecepatan sampling yang tepat untuk suara manusia. Penelitian kemudian dilanjutkan dengan mencari informasi mengenai jenis sensor yang sesuai, ketersediaan jenis mikrokontroler beserta ADC dan storing system yang sesuai.

Setelah informasi terkumpul, kegiatan dilanjutkan pada tahap pemrograman firmware mikrokontroler, baik untuk ADC maupun sistem loger. Pemrograman dilakukan untuk operasi normal dan untuk proses kalibrasi.

2.2 Bandwidth dan Kecepatan Sampling untuk Sensor  dan ADC
Sesuai dengan teori Nyquist, frekuensi sampling untuk suatu sinyal paling tidak dua kali lipat dari frekuensi tertinggi yang terdapat dalam sinyal tersebut. Secara matematis, ungkapan ini dapat ditulis sebagai berikut: 

Dalam bukunya, Van der Puije (1992) mengatakan bahwa suara manusia normal dapat mengandung frekuensi sekitar 100 Hz sampai 5 kHz. Penjelasan lain menyebutkan bahwa komunikasi telepon saat ini menyediakan lebar pita (bandwidth) yang lebih kecil, yaitu sebesar 300 Hz sampai 3.4 kHz (Liu et.al, 2009). Kedua informasi ini dapat memberikan ide awal mengenai rentang frekuensi suara manusia yang selanjutnya dapat menjadi referensi untuk desain data logger yang tepat.
Desain alat portabel pada penelitian ini tentunya sengat terkait respon frekuensi dari sensor yang digunakan. Pada penelitian ini, beberapa sensor telah dipelajari. Sebagai contoh, ADC pada digital accelerometer ADXL345 dari Analog Device mampu menghasilkan kecepatan sampling sampai 3,2 kHz sehingga mampu menyediakan lebar pita sebesar 1,6 kHz (setengah dari kecepatan sampling, sesuai dengan teori Nyquist).  Sensor lain seperti mikrofon Behringer ECM8000 menghasilkan respon frekuensi datar sampai sekitar 2 kHz.

 Asumsi bahwa maksimum frekuensi sinyal suara yang dapat dideteksi oleh sensor berkisar 3,5 kHz, maka ADC harus memiliki kecepatan sampling minimal 7 kHz. Kecepatan ini adalah kecepatan minimal yang secara praktis tidak diterapkan. Kecepatan sampling harus lebih besar lagi untuk mengurangi sampling noise. Kecepatan sampling pada kisaran 20kHz dapat dijadikan pilihan.

 Dengan mempertimbangkan lebar pita suara manusia dan kemampuan sensor yang digunakan, langkah selanjutnya adalah memperhatikan kemampuan kecepatan sampling dari ADC pada mikrokontroler yang digunakan. Seperti yang telah diuraikan pada sesi pendahuluan, mikrokontroler yang digunakan pada penelitian ini adalah ATmega328P dari Atmel. Seperti yang disebutkan pada datasheet, jenis mikrokontroler ini mampu menyediakan kecepatan sampling sampai 15 kSa/s (kilo sample per second) pada resolusi maksimum (10-bit), sehingga mampu menyediakan bandwidth sebesar 7,5 kHz. Informasi ini hanya sesuai jika ADC difungsikan untuk satu channel. Untuk keperluan kalibrasi, sebagai contoh menggunakan dua sensor, kecepatan ini akan terbagi lagi separuhnya karena ADC difungsikan untuk dua channel.

Tipe successive approximation pada ADC jenis ini mampu menghasilkan kecepatan sampling yang lebih tinggi jika resolusi ADC dikurangi. Mikrokontroler dapat difungsikan sampai 76,9 kSa/s. Pada penelitian ini, digunakan resolusi ADC sebesar 8-bit sehingga keluaran diskrit dari mikrokontroler bernilai antara 0 sampai 255. Dengan kecepatan 76,9 kSa/s, ADC mampu menyediakan lebar pita sebesar 38.4 kHz untuk satu channel dan 19,2 kHz untuk kepentingan kalibrasi yang melibatkan dua channel. Tentunya informasi ini menjadi sebuah kenyataan yang sangat menjanjikan untuk menerapkan mikrokontroler ini sebagai data logger sinyal suara. Namun demikian, kemampuan mikrokontroler ini tentunya harus dipelajari lebih lanjut, terutama mengenai aspek kehandalan sistem.

Arduino board tipe ethernet menyediakan kristal detak (clock crystal) sebesar 16 MHz untuk mikrokontroler. Kristal ini juga digunakan sebagai detak untuk ADC. Secara default, rangkaian ADC ini bekerja pada detak sebesar 50 kHz sampai 200 kHz pada resolusi maksimum. Dalam melaksanakan tugasnya, ADC memerlukan 13 detak, sehingga kecepatan sampling yang dapat disediakan ADC adalah sebesar 3,8 kHz sampai 15.3 kHz.

Terdapat prescaler pada modul ADC yang dapat digunakan untuk menyediakan detak yang sesuai untuk kebutuhan ADC. Prescaler ini bertindak sebagai pembagi detak dari detak maksimum yang disediakan oleh kristal. Pilihan precaler yaitu 2, 4, 8, 16, 32, 64 dan 128. Oleh karena itu, dengan menggunakan kristal sebesar 16 MHz, detak maksimum untuk ADC dapat mencapai 8 MHz (untuk prescaler sebesar 2). Penggunaan detak sebesar ini tidak direkomendasikan pada datasheet. Pada datasheet, dijelaskan bahwa rekomendasi detak maksimum dibatasi oleh rangkaian digital-to-analog converter (DAC). Untuk operasi yang optimum, disarankan untuk tidak menggunakan detak melebihi 200 kHz (untuk prescaler sebesar 128). Namun demikian, penggunaan detak sampai 1 MHz tidak akan mengurangi akurasi ADC secara signifikan. Mengoperasikan ADC dengan menggunakan detak lebih dari 1 MHz tidak dipertimbangkan oleh datasheet.

Setelah mengetahui informasi bahwa maksimum detak untuk ADC adalah sebesar 1 MHz, maka dapat diambil kesimpulan bahwa prescaler yang lebih kecil dari 16 tidak akan digunakan (prescaler 8,4 dan 2 akan menghasilkan kecepatan ADC melebihi 1 MHz). Dengan mempertimbangkan pilihan yang memungkinkan untuk prescaler adalah sebesar 16, 32, 64 dan 128, serta pertimbangan bahwa dalam melaksanakan tugasnya ADC memerlukan 13 detak, maka peluang kecepatan sampling yang dihasilkan oleh ADC masing-masing adalah sebesar 76,9 kHz, 38,5 kHz, 19,2 kHz, dan 9,2 kHz (16 Mhz dibagi 13 dan selanjutnya dibagi lagi oleh prescaler). Tabel 1 merangkum informasi ini.

Tabel 1. Informasi tentang prescaler dan ketersediaan bandwidth untuk 
kristal mikrokontroler sebesar 16 MHz

2.3 Pemilihan Mikrokontroler
Dengan harga yang cukup terjangkau, 8-bit mikrokontroler ATmega328P dari Atmel dimanfaatkan sebagai data logger. Mikrokontroler ini dilengkapi dengan 10-bit ADC untuk mengubah sinyal kontinyu menjadi sinyal diskrit. Kecepatan sampling ADC ditetapkan sebesar 19,2 kSa/s. Untuk keperluan kalibrasi, kecepatan dinaikkan dua kali lipat menjadi sebesar 38,5 kSa/s. ADC dioperasikan dengan resolusi sebesar 8-bit.


Untuk penyimpanan data, sebuah SDcard dijadikan pilihan untuk merekam data hasil konversi ADC. Arduino board jenis ethernet menjadi solusi yang tepat karena board ini telah dilengkapi dengan built-in slot untuk menempatkan miniSD card tanpa harus menyediakannya slot secara eksternal, seperti yang ditunjukkan pada Gambar 1.



2.4 Teknik Dual-buffer
Secara umum, terdapat dua sistem kerja pada ADC, yaitu mode single-conversion dan mode free-running. Pada mode single-conversion, ADC akan berhenti bekerja ketika satu konversi telah selesai dilakukan. ADC harus diaktifkan lagi jika ingin dilakukan proses konversi berikutnya. Ketika ADC bekerja pada mode free-running, konversi pada ADC akan dilakukan secara terus-menerus. Data pada register mikrokontroler yang digunakan untuk menyimpan hasil konversi juga akan ter-update secara terus-menerus.

Karena sinyal suara harus disampling dengan kecepatan yang cukup cepat (pada penelitian ini sampai 38,5 kHz), mode kerja ADC yang sesuai dengan penelitian ini adalah free-running. Jika digunakan single-conversion, maka akan terjadi kehilangan beberapa sampel sinyal suara. Hal ini dikarenakan ketika mikrokontroler bekerja pada mode single-conversion, ADC akan berhenti bekerja setelah sekali konversi selesai. Jika ADC akan dioperasikan lagi, maka akan diperlukan beberapa waktu sampai ADC kembali aktif bekerja. Dalam rentang waktu ini akan terjadi kehilangan beberapa sampel suara. Kehilangan beberapa sampel akan memengaruhi hasil akhir proses pemantauan sinyal suara.


Data digital hasil konversi ADC selanjutnya akan disimpan pada sebuah SDcard. Proses penulisan data ke SDcard juga memerlukan waktu. Oleh karena itu, perlu dilakukan organisasi terhadap ADC yang melakukan konversi secara terus-menerus (free-running) dengan proses penulisan ke SD card.

Untuk mengatasi hal tersebut, diterapkan sebuah teknik yang dikenal sebagai metode dual-buffer. Dua buah bufer dengan kapasitas tertentu telah disiapkan. Pada langkah awal, data hasil konversi ADC akan memenuhi bufer pertama. Segera setelah bufer pertama penuh, data hasil konversi ADC akan ditempatkan pada bufer kedua. Pengalihan pengisian bufer ini akan diikuti pdengan roses penulisan sekumpulan data pada bufer pertama ke SDcard. Demikian seterusnya dilakukan secara bergantian, seperti yang diilustrasikan pada Gambar 2.     

Syarat utama kesuksesan metode ini adalah waktu untuk memenuhi bufer harus lebih lama daripada waktu penulisan ke SDcard (Wardana, 2012). Perlu dicatat bahwa bufer pada proses ini harus disimpan pada memori SRAM. Bufer tidak bisa dibuat sebesar-besarnya, karena dalam pembuatan firmware untuk mikrokontroler terdapat berbagai variabel yang juga akan menempati SRAM pada mikrokontroler. Oleh karena itu, pemilihan kapasitas bufer juga harus disesuaikan dengan kapasitas yang dimiliki oleh mikrokontroler.

Pada penelitian ini, disediakan dua buah bufer dengan panjang masing-masing sebesar 400. Jika setiap data memiliki kapasitas sebesar 1 Byte, maka untuk dua buah bufer akan mengambil total memori sebesar 800 Bytes. Hal ini masih memungkinkan karena mikrokontroler ATmega328P memiliki kapasitas SRAM sebesar 2K Bytes. Sisa memori ini dapat digunakan untuk berbagai variabel yang terlibat dalam pembuatan firmware mikrokontroler.

2.5 Kalibrasi
Suatu instrumen harus dikalibrasi terhadap instrumen standar agar pengukuran dapat terlacak (traceable). Hal ini sangat penting untuk menjamin data hasil pengukuran dari suatu instrumen valid dengan tingkat kepercayaan tertentu jika dibandingkan dengan instrumen standar.

Gambar 3 memperlihatkan blok diagram sistem pengukuran untuk single input single output (SISO). Input M (measurand) adalah besaran yang belum diketahui nilainya, sedangkan I (indication) adalah indikasi yang diperlihatkan oleh instrumen terhadap input M. Suatu keadaan yang merepresentasikan pengetahuan mengenai hubungan antara input-output selanjutnya dikenal sebagai calibration relation, yaitu hubungan yang memungkinkan diperolehnya nilai prediksi measurand M ̂  (M hat) dari nilai indication I (Wardana, 2012).

Contoh penerapan kalibrasi yang terkait dengan penelitian ini misalnya, ketika dua jenis sensor yang mengukur besaran yang berbeda harus diterapkan. Laryngophone dan mikrofon adalah dua jenis sensor yang digunakan untuk mendeteksi suara manusia. Namun demikian, laryngophone ditempelkan pada daerah sekitar leher pengguna untuk mendeteksi getaran pada kulit yang ditimbulkan ketika pengguna mengeluarkan suara, dan hal ini dikenal dengan istilah Skin Acceleration Level (SAL). Sensor lainnya yaitu mikrofon ditempatkan di depan bibir pengguna untuk mendeteksi tekanan udara ketika pengguna mengeluarkan suara, dan hal ini dikenal sebagai Sound Pressure Level (SPL). Untuk penerapan yang lebih praktis (user friendly), sistem SAL lebih diminati daripada SPL karena pengguna cukup menempelkan mikrofon di leher dan selanjutnya beraktivitas seperti biasa. Namun demikian, mikrofon yang telah terstandarkan saat ini menggunakan sistem SPL. Dengan demikian, mikrofon yang mendeteksi SAL harus dikalibrasi terhadap SPL.


Pada kasus dimana prosedur kalibrasi terhadap sensor harus dilakukan, pencatatan data secara simultan untuk sensor referensi dan sensor yang akan dikalibrasi harus dilakukan. Walaupun proses sampling secara simultan tidak mungkin untuk dilakukan karena adanya proses multiplexing pada ADC, kedua sensor terkondisikan untuk mendeteksi sinyal input hampir bersifat simultan. Pada proses ini,  kecepatan ADC harus dinaikkan dua kali lipat dari kecepatan normal untuk satu sensor sehingga masing-masing sensor pada proses kalibrasi disampling dengan kecepatan yang sama seperti kecepatan normal yang digunakan oleh satu sensor.

(Bersambung)








 








Sabtu, 01 Juni 2013

JST untuk Pengenalan Karakter (II)

Halooo teman-teman. Tulisan ini adalah sambungan dari posting sebelumnya yaitu JST untuk Pengenalan Karakter (I).

Nah, pada pembahasan terakhir kita sudah membahas bahwa resolusi webcam kita masih tetap yaitu 240x340 piksel. Namun, dengan block processing, kita membuat semua warna seragam di setiap 40x40 piksel dari webcam tersebut, sehingga seolah-olah kita hanya mempunyai matriks berukuran 6x8 piksel. Hasilnya adalah citra hitam dan putih saja, Pada citra tersebut, telah kita tentukan bahwa hitam bernilai nol sedangkan putih bernilai satu.


Langkah selanjutnya adalah mengolah data ini agar sesuai dengan format untuk inputan JST. Caranya adalah dengan membuat citra tersebut menjadi matriks baris (dari berukuran 6x8 menjadi 48x1). Berikut ilustrasinya:

Ada cara yang sangat mudah sekali untuk menentukan nilai 0 atau 1 dari matriks 6x8, yaitu dengan menghitungnya satu persatu. Kita tahu bahwa nilai setiap 40x40 piksel adalah seragam, bukan? jadi, ambil saja satu angka dari matriks tersebut. Sebagai contoh, piksel ke (1,1) akan mewakili 40x40 matiks pertama, kemudian piksel ke (1,41) mewakili matriks kedua, dst. Memang agak repot, namun hanya sebagai ilustrasi saja. Nanti teman-teman bisa membuat program yang lebih sederhana.
Setelah mendapatkan nilai-nilai tersebut (sebanyak 48), ubahlah dari matriks 6x8 ke 48x1. Berikut contohnya (anggap nama variabel gambar saya adalah b):

%cari data2 piksel secara manual saja
%baris 1

piksel(1)=b(1,1);piksel(2)=b(1,41);piksel(3)=b(1,81);
piksel(4)=b(1,121);piksel(5)=b(1,161);piksel(6)=b(1,201);
%baris 2
piksel(7)=b(41,1);piksel(8)=b(81,41);piksel(9)=b(81,81);...
piksel(10)=b(41,121);piksel(11)=b(41,161);piksel(12)=b(41,201);
%baris 3
piksel(13)=b(81,1);piksel(14)=b(81,41);piksel(15)=b(81,81);
piksel(16)=b(81,121);piksel(17)=b(81,161);piksel(18)=b(81,201);
%baris 4
piksel(19)=b(121,1);piksel(20)=b(121,41);piksel(21)=b(121,81);
piksel(22)=b(121,121);piksel(23)=b(121,161);piksel(24)=b(121,201);
%baris 5
piksel(25)=b(161,1);piksel(26)=b(161,41);piksel(27)=b(161,81);
piksel(28)=b(161,121);piksel(29)=b(161,161);piksel(30)=b(161,201);
%baris 6
piksel(31)=b(201,1);piksel(32)=b(201,41);piksel(33)=b(201,81);
piksel(34)=b(201,121);piksel(35)=b(201,161);piksel(36)=b(201,201);
%baris 7
piksel(37)=b(241,1);piksel(38)=b(241,41);piksel(39)=b(241,81);
piksel(40)=b(241,121);piksel(41)=b(241,161);piksel(42)=b(241,201);
%baris 8
piksel(43)=b(281,1);piksel(44)=b(281,41);piksel(45)=b(281,81);
piksel(46)=b(281,121);piksel(47)=b(281,161);piksel(48)=b(281,201);

piksel=piksel(1:48)';

Nah, selanjutnya, bagaimana untuk melatih JST kita? Tentunya kita butuh banyak input untuk melatih JST kita. Jadi, kita lakukan beberapa variasi bentuk angka. Misal agak bulat, agak lonjong, dsb.


Lakukan langkah-langkah yang sama, dan simpan hasilnya (matriks 48x1 tersebut). 
Tentunya kita harus mempunyadi data tidak hanya angka 2 saja, bukan? Karena project kita adalah membedakan dan mengenali karakter. Sekarang asumsi saya akan membedakan antara angka 1, 2 dan 3. Bagaimana caranya? Nah, hal langkah yang harus kita lakukan adalah sama, yaitu mengumpulkan data dan menyimpannya, kemudian latih angka-angka tersebut sesuai target. Misal, kumpulan angka 1 maka targetnya adalah satu, angka 2 targetnya adalah 2, dst.

Sekarang asumsi saya telah melakukan variasi angka 1, 2 dan 3 masing-masing sebanyak 5 variasi (total 15 data). Maka saya mendapatkan data berikut:
Maka hubungan input dan target dapat diilustrasikan sebagai berikut:


Nah, berikut listing program sederhana dari topik yang telah kita bahas dari awal (asumsi saya simpan listing ini dengan nama pengenalan.m).

% Buat objek dr video
clear all;close all;clc;
vid = videoinput('winvideo');
% ambil 1 frame dari video
I = getsnapshot(vid);
% rotasikan image
y=imrotate(I,-90);
% ubah menjadi hitam dan putih
bw=im2bw(y,0.45);
% lakukan block processing pertama
fun = @(x) std2(x)*ones(size(x));
a = blockproc(bw,[10 10],fun);
% lakukan block processing pertama
a2 = blockproc(a,[40 40],fun);
% selanjutnya kita ubah lagi
% menjadi hitam dan putih

b=im2bw(a2,0.05);

% ubah dulu citra menjadi agar
% bertipe data double

b=im2double(b);

%cari data2 piksel secara manual saja
%baris 1

piksel(1)=b(1,1);piksel(2)=b(1,41);piksel(3)=b(1,81);
piksel(4)=b(1,121);piksel(5)=b(1,161);piksel(6)=b(1,201);
%baris 2
piksel(7)=b(41,1);piksel(8)=b(81,41);piksel(9)=b(81,81);...
piksel(10)=b(41,121);piksel(11)=b(41,161);piksel(12)=b(41,201);
%baris 3
piksel(13)=b(81,1);piksel(14)=b(81,41);piksel(15)=b(81,81);
piksel(16)=b(81,121);piksel(17)=b(81,161);piksel(18)=b(81,201);
%baris 4
piksel(19)=b(121,1);piksel(20)=b(121,41);piksel(21)=b(121,81);
piksel(22)=b(121,121);piksel(23)=b(121,161);piksel(24)=b(121,201);
%baris 5
piksel(25)=b(161,1);piksel(26)=b(161,41);piksel(27)=b(161,81);
piksel(28)=b(161,121);piksel(29)=b(161,161);piksel(30)=b(161,201);
%baris 6
piksel(31)=b(201,1);piksel(32)=b(201,41);piksel(33)=b(201,81);
piksel(34)=b(201,121);piksel(35)=b(201,161);piksel(36)=b(201,201);
%baris 7
piksel(37)=b(241,1);piksel(38)=b(241,41);piksel(39)=b(241,81);
piksel(40)=b(241,121);piksel(41)=b(241,161);piksel(42)=b(241,201);
%baris 8
piksel(43)=b(281,1);piksel(44)=b(281,41);piksel(45)=b(281,81);
piksel(46)=b(281,121);piksel(47)=b(281,161);piksel(48)=b(281,201);

piksel=piksel(1:48)';
input=piksel;


Okay.. sampai disini kita telah mengumpukan semua data. Sekarang, asumsikan saya menyimpannya dengan nama data_gabung.mat. Seperti yang telah kita bahas, bahwa data_gabung.mat berisi 15 data (masing-masing karakter 5 variasi).

Selanjutnya kita latih JST kita. Sebagai catatan, saya menggunakan MATLAB 7.8. Bagi teman-teman yang mempunyai versi lebih baru, akan ada sedikit perubahan sintaks untuk membangun JST.
Bagi yang ingin me-review pembahasan JST bisa ikuti topik ini.

%input
P = data_gabung;   
%target
T = [1 1 1 1 1 2 2 2 2 2 3 3 3 3 3];
%bangun jaringan
net = newff(P,T,[10 5 1],{'logsig' 'logsig' 'purelin'});
%latih jaringan
net.trainParam.epochs=5;
net = train(net,P,T);
%simulasikan jaringan
Y=sim(net,P);


Setelah mendapatkan JST yang menurut kita bagus, selanjutnya simpanlah arsitektur JST ini. Inilah yang akan kita gunakan seterusnya tanpa harus melatih lagi JST tersebut.

Sekarang asumsi bahwa arsitektur JST telah saya simpan dengan nama data_lengkap.mat pada Drive E (E:\data_lengkap.mat). Selanjutnya kita lanjutkan listing pengenalan.m sebagai berikut:

load('E:\data_lengkap.mat');
JST1=sim(net,input);
% untuk menghindari angka koma, ambil ke angka terdekat
JST2=round(JST1);
pengenalan_akhir =JST2;


Pada topik selanjutnya, saya akan membahas pembuatan GUI (user interface) untuk pengenalan karakter ini agar lebih menarik, tinggal 'klik' maka karakter akan dikenali. Berikut review-nya:


Semoga topik ini dapat membantu teman-teman. Makasih ^_^