• Tidak ada hasil yang ditemukan

DCT dan Pembanding (Jarak Divergensi)

4.1.2 Pushbutton 1 Tombol “ REKAM ”

Gambar 4.8. Listing program “USER”

Program di atas berisi inisialisasi “USER” dengan masukan tiga user. Inisialisasi tersebut digunakan untuk memilih masing-masing user yang sudah ditentukan pada perancangan. Inisialisasi “Case” digunakan untuk menentukan user yang akan dikenali ucapannya di database sesuai dengan user yang dipilih.

4.1.2 Pushbutton 1 Tombol REKAM

Pushbutton 1 merupakan tombol “REKAM” dan merupakan tombol utama dalam proses perekaman ucapan user untuk mengatur kecepatan putar kipas AC. Tombol “REKAM” berisikan beberapa sub proses program untuk proses perekaman ucapan user. Sub proses tersebut terdiri dari perekaman ucapan user , Normalisasi, pemotongan Sinyal (potong kiri, potong kanan),windowing (Hamming), zero padding, ekstraksi ciri DCT, pengambilan variabel batas potong, Segment averaging, KNN dan pemilihan user. Listing program perekaman ucapan user diperlihatkan pada gambar 4.9.

Gambar 4.9. Listing program “REKAM”

Listing program “REKAM” di atas berisi perekaman ucapan user. Program sample_length merupakan durasi perekaman ucapan selama 1,5 detik dan program sample_freq merupakan frekuensi yang digunakan yaitu 6000 Hz. Pada program

sample_length=1,5; sample_freq=6000; sample_time=(sample_length*sample_freq); x=wavrecord(sample_time, sample_freq); axes(handles.axes1) plot(x);

function popupmenu7_Callback(hObject, eventdata, handles) indeks=get(handles.popupmenu6,'Value'); switch indeks case 1 user=1; case 2 user=2; case 3 user=3; end handles.xuser=user; guidata(hObject,handles);

sample_time didapat hasil perkalian antar durasi waktu dan frekuensi yang akan ditampilkan pada gambar hasil rekaman sebesar 2400 Hz. Program wavrecord digunakan untuk merekam ucapan user dan hasil perekaman akan ditampilkan dalam bentuk plot pada “HASIL REKAMAN”. Listing Program axes(handles.axes1) digunakan untuk menampilkan hasil perekaman. Handles digunakan untuk mengatur masukan dan keluaran program. Hasil rekaman ucapan user, diinisialisasi dengan “x”. Inisialisasi “x” ini yang di -plot-kan ke dalam axes.1”.

Setelah perekaman ucapan user dengan variabel batas potong, segment averaging, KNN, dan pemilihan user selesai dilakukan maka tampilan berupa plot pada “HASIL REKAMAN” maka proses selanjutnya yaitu proses ekstraksi ciri DCT dengan hasil keluarannya berupa plot yang akan ditampilkan pada “HASIL EKSTRAKSI DCT”. Pada proses eksraksi ciri DCT akan ada beberapa proses yang dijalankan yaitu preprocessing yang di dalamnya terdapat Normalisasi, pemotongan sinyal (potong kiri, potong kanan), windowing (Hamming), zero padding, DCT dan segment averaging (frame averaging) yang disimpan dalam variabel “y” . Listing program ditunjukkan pada gambar 4.10.

Gambar 4.10. Listing program ekstraksi ciri DCT b0=handles.bpotong; fram=handles.frame; suser=handles.xuser; knn=handles.nearest; %Normalisasi x1=x/max(abs(x)); %potong kiri b1=find(x1>b0 | x1<-b0); x1(1:b1(1))=[]; %potong kanan x2=fliplr(x1'); b2=find(x2>b0|x2<-b0); x2(1:b2(1))=[]; x2=fliplr(x2); %hamming h=hamming(length(x2)); x3=x2.*h'; %zero padding usig=2048; x3(usig)=0;

Gambar 4.10. (lanjutan) Listing program ekstraksi ciri DCT

Listing program di atas bertujuan untuk menampilkan keluaran plot pada “HASIL EKSTRAKSI DCT”. Setelah proses perekaman ucapan user dilanjutkan dengan Pre processing. Dari hasil ekstraksi ciri DCT di atas maka program axes(handles.axes2) akan digunakan untuk menampilkan hasil perekaman dengan plot variabel “y”. Hasil rekaman ucapan user yang diplotkan dalam axes2.

Proses selanjutnya setelah gambar plot hasil ekstraksi ciri adalah proses pemanggilan database yang disesuaikan dengan variasi nilai batas potong dan segment averaging yang telah dipilih sebelumnya. Listing program pemanggilan database ditunjukan pada gambar 4.11.

Gambar 4.11. Listing program pemanggilan database

if(b0==0.2) & (fram==4) & (suser==1) load db024

elseif(b0==0.3) & (fram==4) & (suser==1) load db034

elseif(b0==0.4) & (fram==4) & (suser==1) load db044

elseif(b0==0.5) & (fram==4) & (suser==1) load db054

elseif(b0==0.2) & (fram==8) & (suser==1) load db028

elseif(b0==0.3) & (fram==8) & (suser==1) load db038

elseif(b0==0.4) & (fram==8) & (suser==1) load db048 X4=x3(1:usig); %DCT x5=abs(dct(x4)); x5=log(x5); %reshape x6=reshape(x1,fram,[]); x7=mean(x6); y=x7(:); axes(handles.axes2) plot(y);

Gambar 4.11. (lanjutan) Listing program pemanggilan database

elseif(b0==0.5) & (fram==8) & (suser==1) load db058

elseif(b0==0.2) & (fram==16) & (suser==1) load db0216

elseif(b0==0.3) & (fram==16) & (suser==1) load db0316

elseif (b0==0.4) & (fram==16) & (suser==1) load db0416

elseif (b0==0.5) & (fram==16) & (suser==1) load db0516

elseif (b0==0.2) & (fram==32) & (suser==1) load db0232

elseif(b0==0.3) & (fram==32) & (suser==1) load db0332

elseif(b0==0.4) & (fram==32) & (suser==1) load db0432

elseif(b0==0.5) & (fram==32) & (suser==1) load db0532

elseif (b0==0.2) & (fram==64) & (suser==1) load db0264

elseif(b0==0.3) & (fram==64) & (suser==1) load db0364

elseif(b0==0.4) & (fram==64) & (suser==1) load db0464

elseif(b0==0.5) & (fram==64) & (suser==1) load db0564

elseif (b0==0.2) & (fram==128) & (suser==1) load db02128

elseif(b0==0.3) & (fram==128) & (suser==1) load db03128

elseif(b0==0.4) & (fram==128) & (suser==1) load db04128

elseif(b0==0.5) & (fram==128) & (suser==1) load db05128

Gambar 4.11. (lanjutan) Listing program pemanggilan database

elseif (b0==0.2) & (fram==256) & (suser==1) load db02256

elseif(b0==0.3) & (fram==256) & (suser==1) load db03256

elseif(b0==0.4) & (fram==256) & (suser==1) load db04256

elseif(b0==0.5) & (fram==256) & (suser==1) load db05256

elseif(b0==0.2) & (fram==4) & (suser==2) load db124

elseif(b0==0.3) & (fram==4) & (suser==2) load db134

elseif(b0==0.4) & (fram==4) & (suser==2) load db144

elseif(b0==0.5) & (fram==4) & (suser==2) load db154

elseif(b0==0.2) & (fram==8) & (suser==2) load db128

elseif(b0==0.3) & (fram==8) & (suser==2) load db138

elseif(b0==0.4) & (fram==8) & (suser==2) load db148

elseif(b0==0.5) & (fram==8) & (suser==2) load db158

elseif(b0==0.2) & (fram==16) & (suser==2) load db1216

elseif(b0==0.3) & (fram==16) & (suser==2) load db1316

elseif (b0==0.4) & (fram==16) & (suser==2) load db1416

elseif (b0==0.5) & (fram==16) & (suser==2) load db1516

elseif (b0==0.2) & (fram==32) & (suser==2) load db1232

Gambar 4.11. (lanjutan) Listing program pemanggilan database

elseif(b0==0.3) & (fram==32) & (suser==2) load db1332

elseif(b0==0.4) & (fram==32) & (suser==2) load db1432

elseif(b0==0.5) & (fram==32) & (suser==2) load db1532

elseif (b0==0.2) & (fram==64) & (suser==2) load db1264

elseif(b0==0.3) & (fram==64) & (suser==2) load db1364

elseif(b0==0.4) & (fram==64) & (suser==2) load db1464

elseif(b0==0.5) & (fram==64) & (suser==2) load db1564

elseif (b0==0.2) & (fram==128) & (suser==2) load db12128

elseif(b0==0.3) & (fram==128) & (suser==2) load db13128

elseif(b0==0.4) & (fram==128) & (suser==2) load db14128

elseif(b0==0.5) & (fram==128) & (suser==2) load db15128

elseif (b0==0.2) & (fram==256) & (suser==2) load db12256

elseif(b0==0.3) & (fram==256) & (suser==2) load db13256

elseif(b0==0.4) & (fram==256) & (suser==2) load db14256

elseif(b0==0.5) & (fram==256) & (suser==2) load db15256

elseif(b0==0.2) & (fram==4) & (suser==3) load db224

elseif(b0==0.3) & (fram==4) & (suser==3) load db234

Gambar 4.11. (lanjutan) Listing program pemanggilan database

elseif(b0==0.4) & (fram==4) & (suser==3) load db244

elseif(b0==0.5) & (fram==4) & (suser==3) load db254

elseif(b0==0.2) & (fram==8) & (suser==3) load db228

elseif(b0==0.3) & (fram==8) & (suser==3) load db238

elseif(b0==0.4) & (fram==8) & (suser==3) load db248

elseif(b0==0.5) & (fram==8) & (suser==3) load db258

elseif(b0==0.2) & (fram==16) & (suser==3) load db2216

elseif(b0==0.3) & (fram==16) & (suser==3) load db2316

elseif (b0==0.4) & (fram==16) & (suser==3) load db2416

elseif (b0==0.5) & (fram==16) & (suser==3) load db2516

elseif (b0==0.2) & (fram==32) & (suser==3) load db2232

elseif(b0==0.3) & (fram==32) & (suser==3) load db2332

elseif(b0==0.4) & (fram==32) & (suser==3) load db2432

elseif(b0==0.5) & (fram==32) & (suser==3) load db2532

elseif (b0==0.2) & (fram==64) & (suser==3) load db2264

elseif(b0==0.3) & (fram==64) & (suser==3) load db2364

elseif(b0==0.4) & (fram==64) & (suser==3) load db2464

Gambar 4.11. (lanjutan) Listing program pemanggilan database

Listing program di atas merupakan pemanggilan database yang di dalam database terdapat program variabel batas potong, program segment averaging dan program pemilihan user. Program tersebut digunakan untuk mencocokan data yang telah tersimpan dengan data ucapan user. Proses pemanggilan database menggunakan fungsi if else fungsi logika yang digunakan bertujuan agar dapat mencocokan variabel batas potong, segment averaging dan pemilihan user yang dipilih oleh user.

Proses pembuatan database berdasarkan masing-masing nilai variabel batas potong, segment averaging dan pemilihan user yang sudah ditentukan dan disimpan dalam bentuk file.mat di dalam satu directory dengan nama seperti contoh pada Gambar 4.11. Listing program database yaitu db25256. Tujuan pembuatan file.mat agar mudah dilakukan pemanggilan di dalam program database dan di dalam file.mat terdapat data ucapan hidup, cepat, lambat, dan mati yang sudah dimasukan variabel batas potong, segment averaging dan pemilihan user yang sudah ditentukan untuk pengenalan ucapan. Pada saat pembuatan database setiap nama file.wav sesuai dengan ucapan masing-masing user yaitu user 1 menggunakan nama file 1 sampai 10, user 2 menggunakan nama file 11 sampai 20 dan user 3 menggunakan nama file 21 sampai 30. Pembuatan database ini diperlihatkan pada program “function z=zciri(fwav,b0,fram)“. listing program pembuatan database diperlihatkan pada gambar 4.12.

elseif(b0==0.5) & (fram==64) & (suser==3) load db2564

elseif (b0==0.2) & (fram==256) & (suser==3) load db22256

elseif(b0==0.3) & (fram==256) & (suser==3) load db23256

elseif(b0==0.4) & (fram==256) & (suser==3) load db24256

elseif(b0==0.5) & (fram==256) & (suser==3) load db25256

Gambar 4.12. Listing program pembuatan database

function dbxciri b0=0.5;

fram=256;

z1=zciri ('hidup',b0,fram); z2=zciri ('cepat',b0,fram); z3=zciri ('lambat',b0,fram); z4=zciri ('mati',b0,fram);

z=[z1 z2 z3 z4]; save db25256z %=============================================================== %INTERNAL FUNCTION function z=zciri(fwav,b0,fram)

x1=wavread([fwav '21.wav']);y=potong(x1,b0);e1=xdct(y,fram); x2=wavread([fwav '22.wav']);y=potong(x2,b0);e2=xdct(y,fram); x3=wavread([fwav '23.wav']);y=potong(x3,b0);e3=xdct(y,fram); x4=wavread([fwav '24.wav']);y=potong(x4,b0);e4=xdct(y,fram); x5=wavread([fwav '25.wav']);y=potong(x5,b0);e5=xdct(y,fram); x6=wavread([fwav '26.wav']);y=potong(x6,b0);e6=xdct(y,fram); x7=wavread([fwav '27.wav']);y=potong(x7,b0);e7=xdct(y,fram); x8=wavread([fwav '28.wav']);y=potong(x8,b0);e8=xdct(y,fram); x9=wavread([fwav '29.wav']);y=potong(x9,b0);e9=xdct(y,fram); x10=wavread([fwav '30.wav']);y=potong(x10,b0);e10=xdct(y,fram); z=[e1 e2 e3 e4 e5 e6 e7 e8 e9 e10]; %=============================================================== function bp=potong(x0,b0); %Normalisasi x1=x0/max(abs(x0)); %potong kiri b1=find(x1>b0 | x1<-b0); x1(1:b1(1))=[]; %Potong kanan x2=fliplr(x1'); b2=find(x2>b0 | x2<-b0); x2(1:b2(1))=[]; x2=fliplr(x2); bp=x2; %===============================================================

Gambar 4.12. (lanjutan) Listing program pembuatan database

Listing program database di atas mirip dengan program pada Gambar 4.11. Pada inisialisasi Internal Function terdapat variabel x1 sampai x10 yang merupakan pemanggilan teradap file ucapan hidup, cepat, lambat dan mati yang sudah direkam dan disimpan dalam bentuk wav. Proses selanjutnya yaitu eksraksi ciri DCT dan beberapa proses yang dijalankan yaitu preprocessing yang di dalamnya terdapat Normalisasi, pemotongan sinyal (potong kiri, potong kanan), windowing (Hamming), zero padding, DCT dan segment averaging.

Proses selanjutnya setelah proses pemanggilan database yang sudah dibandingkan dengan ucapan user menggunakan fungsi jarak divergensi adalah proses k-nearest neighbor untuk penentuan keluarannya sesuai nilai KNN yang sudah di tentukan yaitu 1, 3, 5 dan 7. Listing program perhitungan pembanding (jarak divergensi) dan k-nearest neighbor dipelihatkan pada gambar 4.13.

Gambar 4.13. Listing program perhitungan fungsi K-Nearest Neighbor

function y=xdct(x0,fram); %windowing h=hamming(length(x0)); x0=x0.*h'; %zero padding usig=2048; x0(usig)=0; x0=x0(1:usig); %DCT x1=abs(dct(x0)); x1=log(x1); %reshape x2=reshape(x1,fram,[]); x2=mean(x2); y=x2(:); for n=1:40 divergensix(n)=divergensi(y,z(:,n)); end divergensimin=find(min(divergensix)==divergensix); mindivergensix=min(divergensix) [x1,x2]=sort(divergensix,'ascend')

Gambar 4.13. (lanjutan) Listing program perhitungan fungsi K-Nearest Neighbor Listing program pada Gambar 4.13. digunakan untuk perhitungan fungsi jarak dan K-Nearest Neighbor. Program “ascend” digunakan untuk menentukan nilai jarak minimal dan dari hasil nilai jarak digunakan untuk menentukan ucapan user yang berhasil dikenali dan akan ditampikan dalam bentuk teks seperti pada program “diveout={'hidup','cepat','lambat','mati'}. Program “k=knn” digunakan untuk menentukan banyaknya nilai sampel terdekat yang sering muncul dengan menggunakan variasi nilai KNN yaitu 1, 3, 5 dan 7. Setelah beberapa proses pada Gambar 4.13. dilakukan maka proses selanjutnya adalah pengiriman data “string” ke mikrokontroler. Listing program pengiriman serial diperlihatkan pada gambar 4.14.

Gambar 4.14. Listing program pengiriman data serial ke mikrokontroler

Listing program di atas digunakan untuk mengirim data secara serial ke mikrokontroler. Program “fprintf(s,'%c','H')” digunakan untuk mengirim data ucapan user yang berhasil dikenali berupa karakter kode ascii ke mikrokontroler melalui K 125 R. Tabel 4.1. memperlihatkan data ucapan hasil pengenalan yang akan dikirim.

k=knn kj=x1(1:k); kn=x2(1:k) hk=ceil(kn/10) z=modus(hk)

diveout={'hidup','cepat','lambat','mati'}; hasilout=diveout(z);

set(handles.edit1,'string',hasilout);

srl=strcmp('hidup',hasilout);

if srl==1

delete(instrfind); pause (0.1);

s=serial('COM1','BaudRate',9600,'DataBits',8,'parity','none','StopBits',1,'FlowControl','n one'); fopen(s); fprintf(s,'%c','H') fclose(s); delete(s); clear s; end

Tabel 4.1. Tabel Pengenalan Pada Mikrokontroler

Dokumen terkait