Pop Up Menu Tombol Rekam

Gambar 4.5. Tampilan GUI Program Pengenalan Pada tampilan GUI digunakan tools pada Matlab seperti axes, pop_upmenu, text, dan pushbutton.User dapat menjalankan program pengenalan ucapan dengan mengisi pengaturan user, lebar segmentaveragingdan nilai k pada KNN pada pop_upmenu yang akan diproses untuk pengenalan ucapan. Setelah memilih pengaturan yang diinginkan, program bisa dijalankan dengan menekan tombolREKAM apabila user tidak melakukan pengaturan pada variasi nilai yang terdapat pada aplikasi GUI maka program tidak bisa dijalankan. Hasil rekama n suara akan ditampilan pada “PLOT INPUT UCAPAN” dan hasil ektraksi rekaman suara akan ditampilkan di “PLOT EKSTRAKSI CIRI” seperti pada gambar 4.5. Tombolpushbutton “RESET” berfungsi jika user ingin merestart program pengenalan ucapan. Tombol pushbuttonKELUAR digunakan jika user ingin menyelesaikan program dan keluar dari tampilan utama program pengenalan ucapan.

4.2.1. Pop Up Menu

Pada aplikasi pengenalai ini terdapat 2 variasi nilai yang digunakan untuk melakukan pengenalan ucapan yaitu nilai k pada knn dan nilai segmentaveraging. Variasi user menggunakan popupmenu 1 dengan nilai variasi 1;2;3. Variasi nilai segmentaveraging menggunakan popupmenu2 dengan nilai variasi 8;16;32;62. Variasi nilai k pada knn menggunakan popupmenu3 dengan nilai variasi 1;3;5;7. Program variasi pada popupmenu 1 akan dituliskan seperti berikut: indeks=gethandles.popupmenu1,Value; switch indeks case 1 user=1; case 2 user=2; case 3 user=3; end handles.xuser=user; guidatahObject,handles; Pada program pop up menu 1 diguanakan untuk variasi user dengan variasi 1;2;3. Inisialisasi tiap nilai dengan variabel “user” kebudian diubah menjadi “xuser” menggunakan fungsi “handles”. Proses ini sama dengan program popupmenu sebelumnya. segav=gethandles.popupmenu2,Value; switch segav case 1 frame=8; case 2 frame=16; case 3 frame=32; case 4 frame=64; end handles.varse=frame; guidatahObject,handles; Pada program pop up menu 2 diguanakan untuk variasi nilai segmentaveraging dengan nilai 8;16;32;64. Inisialisasi tiap nilai dengan variabel “frame” kemudian diubah menjadi “varse” menggunakan fungsi “handles”. Proses ini sama dengan program popupmenu sebelumnya. nknn=gethandles.popupmenu3,Value; switch nknn case 1 knn=1; case 2 knn=3; case 3 knn=5; case 4 knn=7; end handles.varknn=knn; guidatahObject,handles; Pada program pop up menu 3 digunakan untuk variasi nilai k pada knn dengan nilai 1;3;5;7 . Inisialisasi tiap nilai dengan variabel “knn” kemudian diubah menjadi “varknn” menggunakan fungsi “handles”. Proses ini sama dengan program popupmenu sebelumnya.

4.2.2. Tombol Rekam

Tombol “REKAM” merupakan tombol yang berfungsi melakukan pengenalan ucapan mulai dari inisialisasi perekamansampling, preemphasis, normalisasi, pemotongan sinyal,zeropadding, framingwindowing, ektraksi ciri, korelasi, penentuan hasil keluaran pada GUI dan pengiriman data serial menuju mikrokontroler. Program perekaman pengenalan ucapan dibuat sesuai perancangan diagram blok pada gambar 3.17. Penulisan program untuk melakukan perekaman sebagai berikut. sample_length=2; sample_freq=6000; sample_time=sample_lengthsample_freq; x=wavrecordsample_time, sample_freq; Program perekaman ucapan angka memakai frekuensi sampling 6000 Hz dan durasi perekaman 2 detik. Program sample_time berfungsi untuk menampilkan gambar perekaman sebesar 12000 Hz. Ucapan angka yang telah direkam ditampilkan dalam “Plot input ucapan ”. Program untuk menampilkan gambar sinyal hasil perekaman ucapan angka adalah sebagai berikut : axeshandles.axes1; plotx; Program preprocessing dilakukan agar masukan data sinyal ucapan dapat diolah terlebih dahulu. Program preprocessing terdiri dari 4 bagian yaitu preemphasis, normalisasi , pemotongan sinyal dan zeropadding. Program dituliskan sebagai berikut: varuser=handles.xuser; varse=handles.varse; vark=handles.varknn; Preemphasis b0=0.3; x0=x; usig=4096; alpha=0.95; for k=2:lengthx0 x0k=x0k-alphax0k-1; end Normalisasi x1=x0maxabsx0; PEMOTONGAN SINYAL: Potong kiri b1=findx1b0 | x1-b0; x11:b11=[]; Potong kanan x2=fliplrx1; b2=findx2b0 | x2-b0; x21:b21=[]; x2=fliplrx2; ZERO PADDING x2usig=0; x3=x21:usig; Proses preemphasis merupakan proses awal dimana sinyal masukan akan diupdate nilainya dari sebelumnya. Nilai preemphasis menggunakan fungsi for dan dimulai dari 2 dimana jika dimulai dari 1 tidak terdapat nilai sebelumnya. Proses perhitungan preemphasis sesuai pada perancangan dengan nilai alpha 0.95. Proses preemphasis mengacu pada flowchart yang telah dibuat pada gambar 3.18 Proses normalisasi melakukan perubahan 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 flowchart yang telah dibuat pada gambar 3.19. Prosesselanjutnya adalah pemotongan sinyal proses dimana nilai data yang berada pada kondisi lebih besar dari batas potong atau lebih kecil dari negatif batas potong akan diambil datanya. Hasil dari tersebut tidak menampilkan nilai datanya melainkan menampilkan nomor urutan datanya. Data urutan pertama menjadi batas akhir pemotongan data, sehingga data hasil normalisasi akan dihilangkan dari awal hingga data tersebut. Proses zeropadding 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 4096 sesuai perancangan. Program penambahan deretan “0” hingga data ke 4096. Setelah proses preprocessing dilanjutkan dengan proses framing dan windowing sebelum masuk pada tahap proses ektraksi ciri. Program framing dan windowing dituliskan sebagai berikut: pjseg=512; ovlseg=128; h=hammingpjseg; n=1;k=1; while n==1 pjx0=lengthx3; if pjx0=pjseg xseg=x31:pjseg; xseg=xseg.h; segmtx:,k=xseg; x31:pjseg-ovlseg=[]; k=k+1; elseif pjx0==0 n=0; else x3pjseg=0; xseg=x3.h; segmtx:,k=xseg; n=0; end end Pada tahap proses framing dan windowing dibutuhkan pendeklarasian nilai panjang frame [15]dan nilai overlap[20]. Proses framing menggunakan program while dimana mencari kesamaan data dengan panjang frame. Didalam proses framing terdapat proses windowing dmana berfungsi untuk membuat pola pada sinyal. Hasil dari proses sebelumnya dibandingan panjang sinyal data dengan panjang frame. Jika data lebih besar dari panjang framemenuju proseswindowing, lalu akan di kurangi dengan nilai overlap pada pendeklarasian sebesar 128. Jika data lebih kecil dari panjang frame akan ditambahkan data 0 sesuai panjang frame. Pada proses windowing yang terdapat pada framing menggunakan jendela hamming. Proses Matlab terdapat fungsi untuk menggunakan jendela hamming dengan formula”hammingL”. Variabel “L” merupakan banyaknya deretan data yang akan diproses. Penulisan program yang dipakai untuk menentukan pola hamming ditulis “hammingpjseg”. Proses framing dan windowing mengacu pada flowchart yang ditulis pada gambar 3.21. Program ektraksi ciri terdapat 2 proses yaitu DFT dan segmentaveraging. Program ektraksi ciri dituliskan sebagai berikut: Ektraksi ciri menggunakan DFT [baris,kolom]=size segmtx; for k=1:kolom hdft=absdftxsegmtx:,k; x4:,k=hdft:; end x4=x4:; x4=x41:lengthx42,:; Segment averaging x5=reshapex4,varse,[]; x5=meanx5; x=x5:; axeshandles.axes2 barx; Pada ektraksi ciri pemanggilan fungsi DFT digunakan fungsi ekternal dimana program dibuat terpisah dari program inti. Fungsi ekternal dibuat mengacu pada rumus 2.15. Program fungsi ekternal untuk ektraksi ciri DFT dituliskan sebagai berikut : Perhitungan DFT function y=dftx N=lengthx; y=zeros1,N; for k=1:N for n=1:N w=exp-1i2pik-1n-1N; a=xnw; yk=yk+a; end end Proses dilakukan dengan memanggil fungsi yang sudah dibuat pada M-file dengan nama fungsi “dft”, kemudian nilai datanya diabsolutkan dengan bantuan fungsi Matlab “abs”. Pada fungsi mengacu pada persamaan 2.15 dengan indeks n dimulai dari 1 karena proses pada Matlab tidak mengenal indeks 0[27]. Proses transformasi tersebut dilanjutkan dengan mengambil setengah bagian 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 flowchart perancangan gambar 3.22. Proses segmentaveraging dilakukan dengan menggunakan fungsi pada Matlab yaitu “reshapex5,varsegment,[ ]”. Nilai “x5” merupakan data hasil ektraksi ciri segment averaging , sedangkan nilai “varse” merupakan lebar segment averaging data. Data hasil segment averaging tersebut akan ditampilkan dengan bentuk grafik dengan menggunakan fungsi “bar”. Fungsi “bar” merupakan grafik dengan gambar berbentuk batang sesuai panjang data . Fungsi “axeshandles.axes2” digunakan untuk memilih axis pada kolom plot ekstraksi sebagai tempat menampilkan grafiik. Program pengenalan pola dilakukan dengan cara perhitungan nilai koeralasi data masukan terhadap basis data. Pendekatan terbaik adalah data yang mempunyai nilai korelasi terbesar. Proses selanjutnya setelah penggambaran sinyal ucapan adalah proses pemanggilan database yang telah disesuaiakn dengan variasi segmentaveraging. Program database menggunakan logika “ifelse” agar database mempunyai kesamaan dengan nilai variasi yang telah dipilih sebelumnya oleh user. Program pembuatan database mengacu pada lampiran L31. Program pemanggilan database dapat ditulis sebagai berikut: if varse==8 varuser==1 load db01dseg8; elseif varse==16 varuser==1 load db01dseg16; elseif varse==32 varuser==1 load db01dseg32; elseif varse==64 varuser==1 load db01dseg64; Program diatas untuk memanggil database yang akan dibandingkan dengan ucapan yang telah terekam. Data base yang dipanggil sesuai dengan masukan user mana yang dipilh dan variasi segment averaging yang dipilih oleh usertersebut pada pop_upmenu sebelumnya. Kondisi pemanggilan fungsi harus sesuai dengan variasi dan pemanggilan database . Proses selanjutnya adalah membandingkan database dengan data masukan dari user secara real time. Perbandingan database dan masukan sinyal tersebut menggunakan perhitungan korelasi. Program perhitungan korelasi sebagai berikut : for n=1:100 jarakn=korelasix,z:,n; end Pada perhitungan korelasi menggunakan pemanggilan fungsi ekternal dimana program perhitungan berada diluar program utama. Pemanggilan fungsi dengan memanggil fungsi “korelasi”. Program pembuatan fungsi ekternal sebagai berikut: function k=korelasix,z mx=meanx; my=meanz; k1=x-mx.z-my; k2=sumk1; k3=sumx-mx.2; k4=sumz-my.2; k5=sqrtk3.k4; k=k2k5; Pada program penghitungan nilai korelasi digunakan dua variabel yaitu „x‟ dan „z‟. „x‟ adalah hasil penghitungan ekstraksi ciri secara real time dan „z‟ adalah database. Setelah didapatkan penghitungan nilai korelasi selanjutnya masuk dalam program penentuan keluaran. Program penentuan keluaran berfungsi untuk menentukan apakah ucapan terdeteksi sebagai ucapan atau dikenali secara “error”. Program penentuan keluaran sebagai berikut : knn kk=vark; m=10; [s1,s2]=sortjarak,descend; kj=s11:kk; kn=s21:kk; hk=ceilknm; kout=modehk idx=findhk==kout; lokth=idx1; nilai=kjidx; th=s1lokth; jarakk=th if kout == 1 varuser==1 th 0.7207 korout = {ERROR} hasilout=korout; sethandles.edit1,string,hasilout elseif kout == 1 varuser==1 th 0.7207 korout = {satu} hasilout=korout; sethandles.edit1,string,hasilout s=serialCOM15,BaudRate,9600,DataBits,8,parity,none,Sto pBits,1,FlowControl,none; fopens; fprintfs,c,a fcloses; deletes; clear s; elseif kout == 2 varuser==1 th 0.7539 korout = {ERROR} hasilout=korout; sethandles.edit1,string,hasilout elseif kout == 2 varuser==1 th 0.7539 korout = {dua} hasilout=korout; sethandles.edit1,string,hasilout s=serialCOM15,BaudRate,9600,DataBits,8,parity,none,Sto pBits,1,FlowControl,none; fopens; fprintfs,c,b fcloses; deletes; clear s; elseif kout == 3 varuser==1 th 0.6230 korout = {ERROR} hasilout=korout; sethandles.edit1,string,hasilout elseif kout == 3 varuser==1 th 0.6230 korout = {tiga} hasilout=korout; sethandles.edit1,string,hasilout s=serialCOM15,BaudRate,9600,DataBits,8,parity,none,Sto pBits,1,FlowControl,none; fopens; fprintfs,c,c fcloses; deletes; clear s; elseif kout == 4 varuser==1 th 0.7306 korout = {ERROR} hasilout=korout; sethandles.edit1,string,hasilout elseif kout == 4 varuser==1 th 0.7306 korout = {empat} kirim = d; hasilout=korout; sethandles.edit1,string,hasilout s=serialCOM15,BaudRate,9600,DataBits,8,parity,none,Sto pBits,1,FlowControl,none; fopens; fprintfs,c,d fcloses; deletes; clear s; elseif kout == 5 varuser==1 th 0.7005 korout = {ERROR} hasilout=korout; sethandles.edit1,string,hasilout elseif kout == 5 varuser==1 th 0.7005 korout = {lima} hasilout=korout; sethandles.edit1,string,hasilout s=serialCOM15,BaudRate,9600,DataBits,8,parity,none,Sto pBits,1,FlowControl,none; fopens; fprintfs,c,e fcloses; deletes; clear s; elseif kout == 6 varuser==1 th 0.6100 korout = {ERROR} hasilout=korout; sethandles.edit1,string,hasilout elseif kout == 6 varuser==1 th 0.6100 korout = {enam} hasilout=korout; sethandles.edit1,string,hasilout s=serialCOM15,BaudRate,9600,DataBits,8,parity,none,Sto pBits,1,FlowControl,none; fopens; fprintfs,c,f fcloses; deletes; clear s; elseif kout == 7 varuser==1 th 0.7002 korout = {ERROR} hasilout=korout; sethandles.edit1,string,hasilout elseif kout == 7 varuser==1 th 0.7002 korout = {tujuh} hasilout=korout; sethandles.edit1,string,hasilout s=serialCOM15,BaudRate,9600,DataBits,8,parity,none,Sto pBits,1,FlowControl,none; fopens; fprintfs,c,g fcloses; deletes; clear s; elseif kout == 8 varuser==1 th 0.7510 korout = {ERROR} hasilout=korout; sethandles.edit1,string,hasilout elseif kout == 8 varuser==1 th 0.7510 korout = {delapan} hasilout=korout; sethandles.edit1,string,hasilout s=serialCOM15,BaudRate,9600,DataBits,8,parity,none,Sto pBits,1,FlowControl,none; fopens; fprintfs,c,h fcloses; deletes; clear s; elseif kout == 9 varuser==1 th 0.7903 korout = {ERROR} hasilout=korout; sethandles.edit1,string,hasilout elseif kout == 9 varuser==1 th 0.7903 korout = {sembilan} kirim = i; hasilout=korout; sethandles.edit1,string,hasilout s=serialCOM15,BaudRate,9600,DataBits,8,parity,none,Sto pBits,1,FlowControl,none; fopens; fprintfs,c,i fcloses; deletes; clear s; elseif kout == 10 varuser==1 th 0.7340 korout = {ERROR} hasilout=korout; sethandles.edit1,string,hasilout elseif kout == 10 varuser==1 th 0.7340 korout = {nol} hasilout=korout; sethandles.edit1,string,hasilout s=serialCOM15,BaudRate,9600,DataBits,8,parity,none,Sto pBits,1,FlowControl,none; fopens; fprintfs,c,j fcloses; deletes; clear s; Pada program penentuan keluaran diatas menggunakan metode k-Nearest Neighbor dan untuk menentukan bukan ucapan menggunakan metode thersholding. Variasi KNN menggunakan variabel “vark. Pada metode k-NearestNeigbor bertujuan untuk mengambil kelas terdekat dari perhitungan korelasi . Fungsi “descend” pada program berfungsi untuk mengurutkan nilai korelasi dari yang terbesar sampai yang terkecil. Metode thresholding bertujuan untuk menentukan hasil keluaran yang tidak sesuai dengan ucapan pada database dengan penamaan “ ERROR”.

4.2.3. Tombol Reset