• Tidak ada hasil yang ditemukan

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.

Dokumen terkait