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