Tombol UCAP Implementasi Program Pengenalan Ucapan Menggunakan GUI Matlab

case 6 handles.PORT=COM6; case 7 handles.PORT=COM7; case 8 handles.PORT=COM8; case 9 handles.PORT=COM9; case 10 handles.PORT=COM10; case 11 handles.PORT=COM11; case 12 handles.PORT=COM12; case 13 handles.PORT=COM13; case 14 handles.PORT=COM14; case 15 handles.PORT=COM15; end guidatahObject,handles; Proses inisialisasi dilakukan dengan mendeklarasikan nilai data dari hasil pemilihan pop-up menu pada panel inisialisasi, yang dibagi menjadi 4 bagian yaitu pemilihan pengguna, nilai k pada kNN , nilai segment averaging, dan COM PORT untuk jalur komunikasi. Setelah data inisialisasi dideklarasikan, lalu dilakukan proses untuk menentukan nilai basis data mana yang akan digunakan dengan fungsi switch-case, lalu nilai data pada variabel dijadikan sebagai acuan dalam switch.

4.1.2 Tombol UCAP

Tombol UCAP merupakan tombol yang berfungsi melakukan pengenalan ucapan mulai dari inisialisasi perekaman sampling, preemphasis, normalisasi, pemotongan sinyal, zero padding, framing windowing, ektraksi ciri, perhitungan similaritas, penentuan hasil keluaran pada GUI dan pengiriman data serial menuju mikrokontroler. Tombol rekam pada tampilan GUI menggunakan push button yang digunakan untuk memulai program pengenalan ucapan. Keluaran dari perintah yang dilaksanakan ditampilkan melalui plot ekstraksi ciri dan edit text yang menampilkan kata yang dikenali oleh program. Program untuk proses sampling pengenalan ucapan dibuat sesuai perancangan diagram alur pada gambar 3.4. Penulisan program untuk melakukan perekaman sebagai berikut. sampling real time panjang_sampel=1; frekuensi_sampel=6000; waktu_sampel=panjang_sampelfrekuensi_sampel; x=wavrecordwaktu_sampel, frekuensi_sampel; wavwritex, waktu_sampel, sementara.wav; axeshandles.axes1 plotx; xlabelTimes; ylabelAmplitude,... titleINPUT UCAPAN; x=wavreadsementara.wav; sample disimpan sementara Durasi waktu yang digunakan pada proses rekam suara adalah 1 detik dengan frekuensi sampling 6000 Hz L1. Proses perekaman menggunakan bantuan fungsi yaitu “wavrecord”. Struktur penulisan untuk fungsi ini yaitu “wavrecordn,fs”. Nilai “n” merupakan jumlah data yang ingin dicuplik sedangkan “fs” merupakan frekuensi sampling. Nilai frekuensi sampling yang digunakan yaitu 6000 Hz, maka agar pencuplikan terjadi selama 1 detik nilai data tercuplik sebanyak 6000. Data hasil rekaman tersebut kemudian ditampilkan dalam bentuk grafik dengan menggunakan fungsi “plot”. Fungsi “axeshandles.axes1” digunakan untuk memilih axis yang akan digunakan sebagai tempat penampil grafik sinyal ucapan , maka dituliskan sebelum fungsi “plotx”. Fungsi “xlabel”, “ylabel”, dan “title” digunakan untuk memberikan keterangan pada grafik sumbu x dan y, serta memberi judul grafik. Program untuk tahap preprocessing dilakukan agar masukan data sinyal ucapan dapat diolah terlebih dahulu sebelum dilakukan proses ekstraksi. Program preprocessing terdiri dari 4 bagian yaitu pre emphasis, normalisasi, pemotongan sinyal dan zero padding. Program preprocessing dituliskan sebagai berikut: preprocessing 1.pre emphasis varsegave=handles.seg; varknn=handles.nilk; varpgn=handles.pgn; btsptg=0.3; x0=x; ukrsin=2048; alpha=0.95; for k=2:lengthx0 x0k=x0k-alphax0k-1; end 2.normalisasi x1=x0maxabsx0; 3.peomotngan sinyal 3a.potong kiri sinyal b1=findx1btsptg | x1-btsptg; x11:b11=[]; 3b.potong kanan sinyal x2=fliplrx1; b2=findx2btsptg | x2-btsptg; x21:b21=[]; x2=fliplrx2; 4. zerro padding x2ukrsin=0; x3=x21:ukrsin; Proses pre emphasis merupakan proses awal dimana sinyal masukan akan diperbaruai nilainya dari sebelumnya. Nilai pre emphasis menggunakan fungsi for dan dimulai dari 2 dimana jika dimulai dari 1 tidak terdapat nilai sebelumnya. Proses perhitungan pre emphasis sesuai pada perancangan dengan nilai alpha sebesar 0.95. Proses pre emphasis mengacu pada diagram alur yang telah dirancang pada gambar 3.5. Proses normalisasi melakukan perubahaan skala pada data dengan memasukan rumus sesuai pada perancangan. Terdapat fungsi Matlab untuk memudahkan program yakni “max” untuk mencari nilai tertinggi dan “abs” untuk mengubah semua data menjadi mutlak atau bernilai positif. Proses normalisasi mengacu pada perancangan diagram alur yang telah dirancang pada gambar 3.6. Proses pemotongan sinyal dimulai dengan mencari data yang akan dihilangkan dengan bantuan fungsi pada Matlab yaitu “find”. Nilai data yang dicari berada pada kondisi lebih besar dari batas potong atau lebih kecil dari negatif batas potong. Hasil dari fungsi “find” tidak menampilkan nilai datanya melainkan menampilkan nomor urutan datanya. Data urutan pertama dari fungsi “find” menjadi batas akhir pemotongan data, sehingga data hasil normalisasi akan dihilangkan dari awal hingga data tersebut. Pemotongan tersebut terjadi pada sisi awal, agar data sisi akhir dapat dihilangkan maka urutan data harus dibalik terlebih dahulu menggunakan fungsi “fliplr”. Langkah pemotongan sinyal tersebut sama seperti pemotongan sisi awal, setelah dihilangkan maka urutan dikembalikan seperti semula dengan fungsi “fliplr”. Fungsi “fliplr” merupakan membalikan sinyal dari sisi kiri menjadi kanan dan sebaliknya. Proses pemotongan sinyal mengacu pada perancangan diagram alur yang telah dirancang pada gambar 3.7. Proses zero padding dilakukan dengan menambahkan dengan deretan nilai data “0” setelah data hasil pemotongan sinyal. Terdapat pendeklarasian variabel “usig” yang merupakan ukuran deretan data dengan nilainya sebanyak 2048 sesuai perancangan. Program penambahan deretan “0” hingga data ke 2048 dituliskan “x2usig=0”. Variabel “x2” merupakan data hasil pemotongan sinyal yang sebelumnya telah dideklarasikan, maka “x2usig=0” yaitu data ke 2048 pada deretan nilai variabel „x2” diberi nilai 0. Proses zero padding mengacu pada perancangan diagram alur yang telah dirancang pada gambar 3.8. Setelah proses preprocessing dilanjutkan dengan proses framing dan windowing sebelum masuk pada tahap proses ektraksi ciri. Program framing dan windowing dituliskan sebagai berikut: segmentasi dan windowing memakai hamming pjgseg=512; overlapseg=128; hmm=hammingpjgseg; n=1;k=1; while n==1 pjgx0=lengthx3; if pjgx0=pjgseg xseg=x31:pjgseg; segmentasi xseg=xseg.hmm; proses windowing segmtx:,k=xseg; hasil windowing x31:pjgseg-overlapseg=[]; potong selisih windowing k=k+1; elseif pjgx0==0 n=0; else x3pjgseg=0; penyesuaian panjang segment xseg=x3.hmm; proses windowing segmtx:,k=xseg; hasil windowing n=0; end end Pada tahap proses framing dan windowing dibutuhkan pendeklarasian nilai panjang frame[10]dan nilai overlap[5]. Proses framing menggunakan perintah while, dimana mencari kesamaan data dengan panjang frame. Dalam proses framing terdapat proses windowing yang berfungsi untuk membuat pola pada sinyal. Hasil dari zero padding akan dibandingan antara panjang sinyal data dengan panjang frame. Jika data lebih besar dari panjang frame, proses windowing hamming akan dikurangi dengan nilai overlap pada pendeklarasian sebesar 128. Jika data lebih kecil dari panjang frame, akan ditambahkan 0 sesuai panjang frame. Pada proses windowing yang terdapat pada framing menggunakan jenis jendela hamming. Pada Matlab telah terdapat fungsi untuk menggunakan jendela hamming dengan formula penulisan ”hammingL”. Variabel “L” merupakan banyaknya deretan data yang akan diproses. Penulisan program yang dipakai untuk menentukan pola hamming ditulis “hammingpjseg”. Hasil windowing hamming ini akan digunakan di dalam proses framing. Proses framing dan windowing mengacu pada perancangan diagram alur yang telah dirancang pada gambar 3.9. Proses ektraksi ciri terdapat 2 bagian, yaitu transformasi menggunakan DFT dan segment averaging. Program ektraksi ciri dituliskan sebagai berikut: ektraksi ciri DFT [roww,columnn]=size segmtx; for k=1:columnn hsldft=absfx_dftsegmtx:,k; x4:,k=hsldft:; end x4=x4:; ubah ke matriks kolom x4=x41:lengthx42,:; segment averaging x5=reshapex4,varsegave,[]; x5=meanx5; x=x5:; axeshandles.axes2 plot hasil ekstraksi ciri barx; xlabelData; ylabelValue,... Pada ektraksi ciri, pemanggilan fungsi DFT menggunakan fungsi eksternal dimana program dibuat terpisah dari program inti. Hal ini dilakukan untuk menghindari pengulangan perhitungan DFT di dalam program inti agar respon program keseluruhan dapat lebih cepat. Fungsi untuk perhitungan DFT dibuat mengacu pada rumus 2.5. dan dituliskan sebagai berikut: function y=fx_dftx Perhitungan DFT Hitung panjang x N=lengthx; Hitung DFT y=zeros1,N; for k=1:N for n=1:N w=exp-1i2pik-1n-1N; a=xnw; yk=yk+a; end end Proses transformasi dilakukan dengan memanggil fungsi yang sudah dibuat pada M-file dengan nama fungsi fx_dft , kemudian nilai datanya diabsolutkan dengan bantuan fungsi “abs” pada Matlab. Pada fungsi ekternal DFT mengacu pada persamaan 2.5 dengan indeks n pada persamaan dimulai dari 1 dikarenakan pada Matlab tidak mengenal indeks 0 [28]. Proses transformasi tersebut dilanjutkan dengan mengambil setengan bagian kiri sinyal data dengan program yang ditulis “x4=x41:lengthx42,:”. Fungsi “length”merupakan fungsi untuk mencari banyaknnya deretan data, sehingga fungsi “lengthx4 akan mencari banyaknya deretan data pada variabel x4. Variabel “x4” merupakan hasil dari transformasi DFT. Program mengacu pada perancangan diagram alur yang telah dirancang pada gambar 3.10. Proses segment averaging dilakukan dengan menggunakan fungsi pada matlab yaitu “reshape x4,varsegment,[ ] ”. Nilai “x4” merupakan data hasil ektraksi ciri segment averaging . Sedangkan nilai “varse” merupakan lebar segment averaging data. Data hasil segment averaging tersebut akan ditampilkan dalam bentuk grafik dengan menggunakan fungsi “bar”. Fungsi “bar” merupakan fungsi untuk membentuk grafik dengan indikator berbentuk batang sesuai panjang data. Fungsi “axeshandles.axes2” digunakan untuk memilih axis pada kolom plot ekstraksi sebagai media untuk menampilkan informasi dalam grafik. Program mengacu pada perancangan diagram alur yang telah dirancang pada gambar 3.11. Proses selanjutnya adalah pengenalan pola yang dilakukan dengan cara membandingkan nilai similaritas data masukan terhadap database. Hasil proses pengenalan pola terbaik adalah data yang mempunyai nilai similaritas terbesar. Proses pembuatan database juga melalui pengolahan hingga tahap ini, namun berhenti pada perhitungan similaritas. Program pembuatan database mengacu pada lampiran L9. Proses setelah pengambaran sinyal ucapan adalah proses pemanggilan database yang telah disesuaiakan dengan variasi segment averaging. Program pemanggilan database menggunakan logika “if -else” agar database yang akan digunakan untuk membandingkan masukan secara realtime mempunyai kesamaan dengan nilai variasi yang telah dipilih sebelumnya oleh pengguna pada inisialisasi. Program pemanggilan database ditulis sebagai berikut: pemanggilan database if varpgn==1varsegave==8 load evandb1sa8; elseif varpgn==1varsegave==16 load evandb1sa16; elseif varpgn==1varsegave==32 load evandb1sa32; elseif varpgn==1varsegave==64 load evandb1sa64; elseif varpgn==2varsegave==8 load fiandb1sa8; elseif varpgn==2varsegave==16 load fiandb1sa16; elseif varpgn==2varsegave==32 load fiandb1sa32; elseif varpgn==2varsegave==64 load fiandb1sa64; elseif varpgn==3varsegave==8 load krisdb1sa8; elseif varpgn==3varsegave==16 load krisdb1sa16; elseif varpgn==3varsegave==32 load krisdb1sa32; elseif varpgn==3varsegave==64 load krisdb1sa64; end Proses selanjutnya adalah membandingkan database dengan data masukan dari pengguna secara real time. Perbandingan database dan masukan sinyal tersebut menggunakan perhitungan similaritas dice. Program perhitungan similaritas sebagai berikut : for n=1:4 similaritasn=similaritas_dicex,z:,n end Pada perhitungan similaritas dice, dilakukan pemanggilan fungsi ekternal dimana program perhitungan similaritas berada di luar program inti. Pemanggilan fungsi dengan memanggil fungsi “similaritas_dice”. Hal ini dilakukan untuk menghindari pengulangan perhitungan similaritas di dalam program inti agar respon program keseluruhan dapat lebih cepat. Fungsi untuk perhitungan similaritas dibuat mengacu pada rumus 2.5. serta diagram alur pada gambar 3.12. Program perhitungan similaritas dituliskan sebagai berikut : function z=similaritas_dicex,y sx=sizex; sy=sizey; z=2sumx.ysumx.2+sumy.2; Setelah didapatkan nilai perhitungan similaritas dice, tahap selanjutnya adalah proses penentuan keluaran. Program penentuan keluaran berfungsi untuk menentukan apakah ucapan terdeteksi sebagai ucapan atau dikenali secara “error”. Program penentuan keluaran mengacu pada gambar 3.13. Program penentuan keluaran sebagai berikut: knn k=varknn; k pada knn jmlsmpl=1; jumlah sampel per kelas [s1,s2]=sortsimilaritas,descend; shortir menurun fungsi similaritas similaritasdice=sortsimilaritas,descend; kelaskcl=s11:k; k jarak tekecilatausimilaritas terbesar kelasdkt=s21:k; k kelas terdekat tntkelas=ceilkelasdktjmlsmpl; penentuan kelas-kelas yang terpilih kelasout=modetntkelas; pilih kelas yang paling sering muncul idxklsout=findtntkelas==kelasout; kpilih=kelaskclidxklsout; fkpilih=fliplrkpilih; thrshld=fkpilih1 if varpgn==1kelasout == 1thrshld0.6041 keluarout = {KOPI}; datakom = 1; elseif varpgn==1kelasout == 1thrshld= 0.6041 keluarout = {ERROR}; datakom = 5; elseif varpgn==2kelasout == 1thrshld= 0.6063 keluarout = {KOPI}; datakom = 1; elseif varpgn==2kelasout == 1thrshld= 0.6063 keluarout = {ERROR}; datakom = 5; elseif varpgn==3kelasout == 1thrshld= 0.8310 keluarout = {KOPI}; datakom = 1; elseif varpgn==3kelasout == 1thrshld= 0.8310 keluarout = {ERROR}; datakom = 5; end if varpgn==1kelasout == 2thrshld0.5401 keluarout = {SUSU}; datakom = 2; elseif varpgn==1kelasout == 2thrshld= 0.5401 keluarout = {ERROR}; datakom = 5; elseif varpgn==2kelasout == 2thrshld= 0.5637 keluarout = {SUSU}; datakom = 2; elseif varpgn==2kelasout == 2thrshld= 0.5637 keluarout = {ERROR}; datakom = 5; elseif varpgn==3kelasout == 2thrshld= 0.5328 keluarout = {SUSU}; datakom = 2; elseif varpgn==3kelasout == 2thrshld= 0.5328 keluarout = {ERROR}; datakom = 5; end if varpgn==1kelasout == 3thrshld0.5401 keluarout = {KOPSUS}; datakom = 3; elseif varpgn==1kelasout == 3thrshld= 0.5401 keluarout = {ERROR}; datakom = 5; elseif varpgn==2kelasout == 3thrshld= 0.5637 keluarout = {KOPSUS}; datakom = 3; elseif varpgn==2kelasout == 3thrshld= 0.5637 keluarout = {ERROR}; datakom = 5; elseif varpgn==3kelasout == 3thrshld= 0.5328 keluarout = {KOPSUS}; datakom = 3; elseif varpgn==3kelasout == 3thrshld= 0.5328 keluarout = {ERROR}; datakom = 5; end if varpgn==1kelasout == 4thrshld0.5401 keluarout = {COKELAT}; datakom = 4; elseif varpgn==1kelasout == 4thrshld= 0.5401 keluarout = {ERROR}; datakom = 5; elseif varpgn==2kelasout == 4thrshld= 0.5637 keluarout = {COKELAT}; datakom = 4; elseif varpgn==2kelasout == 4thrshld= 0.5637 keluarout = {ERROR}; datakom = 5; elseif varpgn==3kelasout == 4thrshld= 0.5328 keluarout = {COKELAT}; datakom = 4; elseif varpgn==3kelasout == 4thrshld= 0.5328 keluarout = {ERROR}; datakom = 5; end hasilout=keluarout; sethandles.edit1,string,hasilout komunikasi=serialhandles.PORT; setkomunikasi,BaudRate,9600,DataBits,8,parity,none,StopB its,1,FlowControl,none; fopenkomunikasi; fprintfkomunikasi,c,datakom; fclosekomunikasi; deletekomunikasi; clear komunikasi; Pada program penentuan keluaran di atas menggunakan metode k-Nearest Neighbor dan untuk mengklasifikasikan ucapan selain yang dirancang untuk dikenali, menggunakan metode thresholding. Variasi kNN menggunakan variabel “varknn”. Pada metode k-Nearest Neigbor bertujuan untuk mengambil kelas terdekat atau tetangga terdekat dari perhitungan similaritasnya. Fungsi “descend” pada program berfungsi untuk mengurutkan nilai similaritas dari yang terbesar sampai yang terkecil. Metode thresholding bertujuan untuk menentukan hasil keluaran yang tidak sesuai dengan ucapan pada database dengan penamaan “ ERROR”. Nilai thersholding didapatkan dari nilai batas bawah pada setiap ucapan, dapat dilihat pada lampiran L30. Penentuan keluaran me nggunakan fungsi logika “if-else” dimana melihat beberapa syarat yaitu kelas dan nilai variabel “thrshld”, jika salah satu tidak terpenuhi maka program akan berlanjut ke proses else. Hasil keluaran yang sesuai dengan persyaratan kelas dan nilai thresholding akan di tampilkan dengan format “sethandles.edit1,’string’,hasilout” , dimana hasil keluaran akan ditampilan pada edit text. Hasil penentuan keluaran dibuat sekaligus sebagai pengiriman data untuk komunikasi serial. Pada proses pengiriman serial, pengguna dapat menentukan COM PORT melalui pop-up menu yang telah disediakan. Pengiriman serial menggunakan baudrate sebesar 9600. Pada proses ini, di gunakan fungsi “fopen” untuk membuka komunikasi serial antra komputer dengan mikrokontroler, fungsi “fprint” untuk mengirim karakter ke mikrokontroler dan fungsi “fclose” untuk menutup komunikasi serial dengan mikrokontroler. Setiap ucapan direpresentasikan dalam karakter masing masing sesuai perancangan pada tabel 3.1.

4.1.4 Tombol RESET