BAB IV: HASIL DAN PEMBAHASAN
4.2 Implementasi GUI Matlab dan Program Pengenalan Ucapan
4.2.3 Tombol ucap
Tombol “UCAP” digunakan ketika pengguna akan menjalankan program
pengenalan ucapan. Tombol tersebut berisi seluruh program untuk mengolah ucapan masukan agar dapat dikenali, kemudian data pengenalan langsung dikirimkan ke robot mobil. Sub-program yang terdapat pada tombol tersebut yaitu inisialisasi, perekaman, preprocessing, ekstraksi ciri, pengenalan pola, dan penentuan aksi.
Program inisialisasi dilakukan untuk menginisialisasi nilai data variabel yang telah dipilih pengguna pada kolom inisialisasi dan menentukan basis data yang akan dipakai. Program inisialisasi dituliskan sebagai berikut :
%Proses inisialisasi
batas=handles.batas; alfa=handles.alfa; dsamp=handles.dsamp;
%Penentuan Basis Data switch batas case 0.1 a='1'; case 0.2 a='2'; case 0.3 a='3'; case 0.4 a='4'; end switch alfa case 0.4 b='4'; case 0.5 b='5'; case 0.6 b='6'; case 0.7 b='7'; case 0.8 b='8'; end switch dsamp case 1 c='1'; case 2 c='2'; case 4 c='4'; end
z=strcat('dbsbp0',a,'a0',b,'ds',c);
Proses inisialisasi dilakukan dengan mendeklarasikan nilai data dari hasil pemilihan radiobutton pada kolom inisialisasi.Inisialisasi terbagi menjadi 3 bagian yaitu pada batas potong, nilai alfa, dan faktor downsampling. Setelah semua data dideklarasikan, maka dilakukanlah penentuan basis data yang akan digunakan dengan bantuan fungsi switch- case. Nilai data pada variabel dijadikan sebagai acuan dalam switch. Apabila dideteksi (case) suatu nilai pada variabel tersebut, maka variabel baru akan dideklarasikan. Variabel
tersebut yaitu “a” untuk batas potong, “b” untuk nilai alfa, “c” untuk faktor downsampling. Data dari variabel tersebut berbentuk karakter, kemudian digabungkan dengan beberapa kata dengan bantuan fungsi “strcat” agar membentuk nama file basis data.Pembentukan basis data dilihat pada lampiran halaman L15. Hasil data dari fungsi “strcat” berupa karakter.
Program perekaman dilakukan untuk merekam data sinyal ucapan sebagai data masukan. Program tersebut dituliskan sebagai berikut :
rekam=wavrecord(6800,6800); axes(handles.axes1);
plot(rekam); ucapan=rekam;
xlabel('Time(s)'); ylabel('Amplitude'),...
title('INPUT UCAPAN');
Proses perekaman mengunakan bantuan fungsi Matlab yaitu “wavrecord”. Struktur
penulisan fungsi ini yaitu “wavrecord(n,fs)”. Nilai “n” merupakan jumlah data yang ingin
dicuplik sedangkan “fs” merupakan frekuensi sampling. Nilai frekuensi sampling yang
digunakan yaitu 6800 Hz, maka agar pencuplikan terjadi selama 1 detik nilai data tercuplik sebesar 6800. Data hasil rekaman tersebut kemudian ditampilkan dalam bentuk grafik
dengan menggunakan fungsi “plot”. Fungsi “axes(handles.axes1)” digunakan untuk
memilih axis pada kolom plot ucapan sebagai tempat penampil grafik, maka dituliskan
sebelum fungsi “plot(rekam)”. Fungsi “xlabel”, “ylabel”, dan “title” digunakan untuk
memberikan keterangan pada grafik sumbu x dan y, serta memberi judul grafik.
Program preprocessing dilakukan agar masukan data sinyal ucapan dapat diolah terlebih dahulu sebelum dilakukan proses ekstraksi. Program preprocessing terdiri dari 4 bagian yaitu normalisasi, pemotongan sinyal, windowing, dan zeropadding. Program preprocessing dituliskan sebagai berikut :
%NORMALISASI norm=ucapan/max(abs(ucapan)); %PEMOTONGAN SINYAL pot=norm; %---potong kiri kiri=find(pot>batas | pot<-batas); pot(1:(kiri(1)-1))=[]; %---potong kanan pot=fliplr(pot'); kanan=find(pot>batas | pot<-batas); pot(1:(kanan(1)-1))=[]; pot=fliplr(pot); %WINDOWING pola=tukeywin(length(pot),alfa); windowing=pot.*pola'; %ZEROPADDING zp=windowing; usig=2048; zp(usig)=0;
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
bernilai positif.
Proses pemotongan sinyal dimulai dengan mencari data yang akan dihilangkan
dengan bantuan fungsi “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 hasil 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”.
Proses windowing menggunakan jendela Tukey, sehingga perlu mencari deretan data pembentuk pola jendela Tukey. Pada Matlab terdapat fungsi untuk menggunakan
jendela tukey dengan formula “tukeywin(L,r)”. variabel “L” merupakan banyaknya deretan
data yang akan diproses sedangkan variabel “r” merupakan nilai alfa pembentukan pola jendela tukey. Penulisan program yang dipakai untuk menentukan pola jendela tukey
ditulis “tukeywin(length(pot),alfa)”. Fungsi “length” merupakan fungsi untuk mencari
banyaknya deretan data, sehingga fungsi “length(pot)” akan mencari banyaknya deretan data pada variabel “pot”. Variabel “pot” merupakan hasil data setelah proses pemotongan sinyal. Setelah pola jendela tukey terbentuk dilakukan perkalian skalar terhadap deretan
data pada variabel “pot”.
Proses zero padding dilakukan dengan menambahkan deretan nilai data “0” setelah data hasil windowing. Terdapat pendeklarasia variabel “usig” yang merupakan ukuran deretan data dengan nilainya sebanyal 2048 sesuai perancangan. Program penambahan
deretan data “0” hingga data ke 2048 dituliskan “zp(usig)=0”. Variabel “zp” merupakan
data hasil windowing yang sebelumnya telah dideklarasikan, maka “zp(usig)=0” yaitu data ke 2048 pada deretan nilai variabel “zp” diberi nilai 0.
Program ekstraksi ciri terdapat 2 langkah yaitu downsampling dan transformasi menggunakan DCT. Program ekstraksi ciri dituliskan sebagai berikut :
%EKSTRAKSI CIRI %---downsampling downsamp=zp(1:dsamp:usig); %---Transformasi DCT ekstrak=abs(dct(downsamp)); ekstrak=abs(log(ekstrak)); ekstrak=ekstrak(:); axes(handles.axes2); plot(ekstrak);
xlabel('Time(s)'); ylabel('Amplitude'),...
Proses downsampling dilakukan dengan mengambil atau mencuplik ulang data hasil preprocessing tersebut dengan rentang tertentu. Dari program diatas terlihat data akan diambil dari data ke-1 hingga nilai variabel “usig” yaitu 2048 dengan rentang sebanyak
nilai variabel “dsamp”. Proses tranformasi dilakukan menggunakan fungsi Matlab “dct”,
kemudian nilai datanya diabsolutkan dengan bantuan fungsi Matlab “abs”. Proses
transformasi tersebut dilanjutkan dengan pemberian fungsi “log”, kemudian nilai datanya diabsolutkan kembali dengan fungsi “abs”. Program “ekstrak(:)” digunakan agar nilai data
tersebut terbentuk secara berurutan dalam matriks 1 kolom.
Program pengenalan pola dilakukan dengan cara perhitungan nilai similaritas data masukan terhadap basis data. Pendekatan terbaik adalah data yang mempunyai nilai similaritas terbesar. Program similaritas kosinus yang dipakai dalam sistem ini dituliskan sebagai berikut :
%PENGENALAN POLA
%---Perhitungan Similaritas Kosinus
load(z); x=ekstrak; y=dbase; for i=1:50 simkos(i)=(sum(x.*(y(:,i))))/(sqrt(sum(x.^2))*sqrt(sum((y(:,i)).^2))); end simkos=reshape(simkos,10,[]); simkos=max(simkos); kategori=find(simkos==max(simkos));
aksi={'maju';'mundur';'kiri';'kanan';'stop'}; hasil=aksi{kategori};
Basis data yang dibuat berjumlah 50 data ucapan yang sudah diolah terlebih dahulu. Satu data ucapan pada basis data memiliki 2048 nilai data, sehingga 1 data ucapan akan disusun dalam 1 kolom. Hasil keseluruhan basis data tersusun dalam matriks 2048 baris dan 50 kolom. Proses perhitungan similaritas terhadap basis data dilakukan secara
bertahap pada tiap data ucapan dari kolom ke-1 hingga ke-50. Pengelompokan data ucapan pada basis data ditunjukkan pada tabel berikut:
Tabel 4.5 Pengelompokan Data Ucapan Berdasarkan Kolom
Kolom Keterangan 1-10 Maju 11-20 Mundur 21-30 Kiri 31-40 Kanan 41-50 Stop
Penulisan program perhitungan algoritma similaritas diatas menggunakan “for
i=1:50”, sehingga program perhitungan akan terus diulangi dari data pada kolom ke-1 hingga data ke-50. Hasil perhitungan akan diurutkan dari kolom 1 hingga 50, dimana niali tersebut merupakan hasil dari tiap kolom. Secara keseluruhan Hasil dari program tersebut yaitu 50 nilai data hasil perhitungan similaritas yang disusun dalam matriks 1 baris dan 50 kolom.
Setelah mendapat nilai similaritas dari tiap kolom, maka data tersebut harus dikelompokkan kembali berdasarkan kategori ucapannya sesuai pada Tabel 4.1. Pengelompokan disusun dalam 1 kolom, sehingga dalam 1 kolom berisi 1 kategori ucapan. Data hasil perhitungan similaritas dikelompokkan dengan fungsi Matlab yaitu “reshape”. Matriks diubah dalam bentuk 10 baris dan 5 kolom dimana tiap 1 kolom berisi 1 kelompok
ucapan seperti berikut , kemudian dicari nilai
terbesar dari tiap kolom sehingga hanya tersisa 1 nilai pada tiap kolom. Proses pencarian nilai terbesar tiap kolom dilakukan dengan bantuan fungsi “max”. Fungsi tersebut akan mencari nilai terbesar dalam 1 kolomnya, sehingga hasilnya berubah menjadi matriks 1 baris dan 5 kolom. Nilai tiap kolom tersebut merupakan nilai similaritas terbesar dari keseluruhan basis data yangmewakili kategori ucapan. Pencarian hasil pengenalan ucapan yang ditangkap dilakukan dengan mencari nilai yang terbesarnya. Pada kolom 1 sampai 5 secara beurutan memiliki kategori maju, mundur, kiri, kanan, dan stop. Fungsi
“find(simkos==max(simkos))” dipakai untuk menentukan kolom mana yang menjadi hasil pengenalan dengan melihat nilai similaritas terbesar.
Program penentuan aksi digunakan untuk menampilkan hasil pengenalan pada pengguna dan mengirimkan perintah aksi atau pergerakan pada robot mobil. Program tersebut dituliskan sebagai berikut:
%PENENTUAN AKSI
fset(handles.hasil,'string',hasil);
switch kategori
case 1%>>kondisi MAJU
fprintf(s,'%s','1');
case 2 %>>kondisi Mundur
fprintf(s,'%s','2');
case 3 %>>kondisi KIRI
fprintf(s,'%s','3');
case 4 %>>kondisi KANAN
fprintf(s,'%s','4');
case 5 %>>kondisi STOP
fprintf(s,'%s','5');
end
Fungsi “fset” pada program ini digunakan untuk memberi pengaturan dikolom hasil pengenalan pada GUI Matlab agar menampilkan hasil ucapan yang dikenali. Proses pemilihan aksi robot mobil ditentukan menggunakan fungsi “switch-case” dengan melihat
hasil pada variabel “katagori”. Fungsi “fprintf” digunakan untuk melakukan perintah
pengiriman data menggunakan Matlab.