• Tidak ada hasil yang ditemukan

BAB III PERANCANGAN

3.6. Perancangan Subsistem Pengenalan Nada Saksofon Alto

Sistem pengenalan nada saksofon alto memiliki dua subsistem yang penting yaitu subsistem sampling dan subsistem pengenalan nada. Perancangan subsistem tersebut memerlukan variabel terikat. Pengujian awal untuk mencari variabel tersebut dilakukan agar proses pengenalan dapat berhasil dengan waktu yang optimal. Pengujian ini menggunakan Matlab, karena dalam program tersebut sudah memiliki fungsi-fungsi yang menunjang subsistem dari sistem program pengenalan nada.

3.6.1. Subsistem Sampling

Subsistem sampling terdiri dari dua variabel terikat yaitu frekuensi sampling dan durasi perekaman. Setelah melakukan pengujian awal, dapat disimpulkan:

a. Frekuensi sampling yang digunakan 4800Hz. Di ambil dari nilai dua kali dari frekuensi fundamental (Lampiran 1).

35

BAB IV

HASIL DAN PEMBAHASAN

Program yang telah dibuat perlu dilakukan sebuah pengujian. Pengujian berguna untuk mengetahui kinerja program tersebut dalam melakukan pengenalan nada. Pada pengujian akan diperoleh hasil pengujian berupa data-data. Data-data hasil pengujian menunjukan program yang telah dirancang dapat berjalan dengan baik atau tidak. Pada bab ini akan dilakukan analisa dan pembahasan pada data hasil pengujian yang telah diperoleh.

4.1. Pengujian Program Pengenalan Nada Saksofon Alto menggunakan

FFT dan Pengklasifikasian K-NN dan Fungsi Jarak Simetrik

Probabilitas

2

Perancangan program menggunakan software Matlab 7.6.0 (R2008a). Pada pengujian program menggunakan laptop dengan spesifikasi:

Prosesor : Intel® Pentium Inside CPU @ 2.40 GHz RAM : 2 GB

Tipe sistem : Sistem operasi 32 bit

Proses pengenalan nada saksofon alto dapat dilakukan dengan menjalankan langkah-langkah di bawah ini:

1. Mengklik dua kali ikon Matlab pada layar desktop dengan gambar ikon seperti Gambar 4.1.

Gambar 4.1. Ikon Matlab 7.6.0 (R2008a)

2. Setelah melakukan langkah 1, akan tampil tampilan utama software Matlab seperti Gambar 4.2.

Gambar 4.2. Tampilan Matlab

3. Sebelum membuka tampilan program, perlu memastikan terlebih dahulu pada

Current Directory sudah sesuai dengan tempat penyimpanan program yang telah dirancang.

4. Mengetikan perintah gui pada Command window untuk memunculkan tampilan program pengenalan nada. Setelah itu akan muncul tampilan program pengenalan nada seperti pada Gambar 4.3.

5. User memilih nilai variasi frame blocking, windowing koefisien dan nilai k pada K-NN yang akan digunakan terlebih dahulu sebelum melakukan pengenalan nada. Nilai variasi frame blocking yang disediakan adalah 16, 32, 64 dan 128. Nilai variasi windowing koefisisen yang disediakan adalah 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90%, 100%. Nilai variasi K-NN yang disediakan adalah 1, 3, 5 dan 7.

6. Apabila langkah 5 sudah dilakukan, user dapat memulai pengenalan nada dengan

menekan tombol “RECORD”. Hasil pengenalan nada saksofon alto terlihat seperti pada gambar 4.4.

Gambar 4.4 Tampilan Hasil Pengenalan

7. Userdapat mengulang kembali pengenalan nada dengan menekan tombol “RESET

dan mengulang kembali langkah 5 dan 6.

8. Userdapat mengakhiri pengenalan nada dengan menekan tombol “CLOSE”.

4.1.1. Pengenalan Nada

Pengenalan nada dapat dilakukan dengan melakukan berbagai langkah-langkah seperti yang telah dijelaskan di atas. Tampilan program pengenalan nada dapat dilihat pada Gambar 4.3. Pada tampilan pengenalan nada terdapat 3 pop up menu, 2 axes, 3 push button, dan 1 edit text. User dapat memulai pengenalan nada dengan melakukan

pengaturan terlebih dahulu pada program pengenalan nada. Pengaturan yang perlu dilakukan adalah dengan memilih nilai nilai variasi frame blocking, windowing koefisien dan nilai k pada k-NN yang terdapat pada pop up menu. Setelah menentukan nilai variasi yang akan digunakan, user dapat memulai pengenalan nada dengan menekan tombol tekan

RECORD”. Hasil pengenalan yang ditampilkan adalah plot perekaman, plot FFT, dan

nada yang berhasil dikenali. User dapat mengulang pengenalan nada dengan menekan

tombol “RESET” dan mengakhiri pengenalan dengan menekan tombol “CLOSE” seperti

yang telah dijelaskan di atas.

a. Pop Up Menu

Pada tampilan program pengenalan nada terdapat 3 pop up menu yaitu variasi

frame blocking, windowing koefisien dan nilai K-NN. Nilai variasi frame blocking yang ditampilkan pada pop up menu yaitu 16, 32, 64, 128. Nilai variasi windowing koefisien yang ditampilkan pada pop up menu yaitu 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90% dan 100%. Pada variasi frame blocking menampilkan menjalankan perintah program yang telah dirancang sebagai berikut:

indeks=get(handles.popupmenu1,'Value'); switch indeks case 1 framebl=128; case 2 framebl=64; case 3 framebl=32; case 4 framebl=16; end handles.frame=framebl; guidata(hObject,handles);

Pada program di atas, nilai frame blocking diinisialisai menggunakan nama frame yang dibagi dalam 4 kondisi sesuai dengan banyaknya variasi. Inisialisasi frame tersebut diproses menggunakan perintah handles. Perintah ini digunakan untuk data atau nilai frame blocking yangtelah diinisialisasi sebagai masukan apabila dilakukan callback. Pada pop up menu variasi windowing koefisien listing program sebagai berikut:

indeks=get(handles.popupmenu2,'Value'); switch indeks case 1 koef=100; case 2 koef=90; case 3 koef=80; case 4 koef=70; case 5 koef=60; case 6 koef=50; case 7 koef=40; case 8 koef=30; case 9 koef=20; case 10 koef=10; end handles.pct=koef; guidata(hObject,handles);

Proses yang dilalui oleh pop up menu pada variasi windowing koefisien sama dengan proses pada pop up menu variasi frame blocking. Nilai windowing koefisien diinisialisasikan dengan nama pct. Pada pop up menu variasi nilai K-NN listing program sebagai berikut : indeks=get(handles.popupmenu3,'Value'); switch indeks case 1 knn=7; case 2

knn=5; case 3 knn=3; case 4 knn=1; end handles.varn=knn; guidata(hObject,handles); b. Tombol “RECORD

Tombol “RECORD” adalah tombol yang berfungsi untuk melakukan pengenalan

nada saksofon alto. User dapat melakukan pengenalan nada saksofon alto dengan menekan

tombol tersebut. Tombol “RECORD” memulai pengenalan nada dengan menjalankan

beberapa subproses. Subproses yang dijalankan dimulai dari perekaman nada, ekstraksi ciri FFT, penghitungan jarak Simetrik Probabilitas 2

, dan penentuan hasil pengenalan nada berdasarkan kelas yang dipilih oleh user pada nilai k-NN. Program yang digunakan untuk perekaman nada sebagai berikut:

sample_length=3; sample_freq=4800;

sample_time=(sample_length*sample_freq); x=wavrecord(sample_time, sample_freq); wavwrite(x, sample_freq, 's.wav'); axes(handles.axes1)

plot(x);

x=wavread('s.wav');

Perekaman nada pada Matlab menggunakan perintah wavrecord dan wavwrite

untuk menyimpan nada yang telah direkam. Nada yang telah terekam tersebut diplot pada tampilan program pengenalan menggunakan perintah plot. Nada terekam diplot pada axes

yang telah tersedia di dalam tampilan program perekaman dan ekstraksi ciri FFT (Gambar 3.14).

%Ekstraksi ciri FFT x5=abs(fft(x4));

x6=x5(1:fb/2);

%Ambil sesuai persen koefisien

jumkoef=floor((pctkoef/100)*(fb/2)); x7=x6(1:jumkoef);

x7=x7(:)

axes(handles.axes2) bar (x7);

Nada terekam dan yang telah disimpan dipanggil kembali menggunakan perintah

wavread. Dilakukan penginisialisasian nilai frame blocking, batas potong, dan windowing

koefisien untuk memudahkan menjalankan proses ekstraksi ciri. Proses ekstraksi ciri memilki 3 masukan yaitu variabel b0, fb, dan pctkoef. bo adalah nilai batas potong. Fb dan pctkoef merupakan nilai masukan yang telah dipilih oleh user. Hasil dari ekstrasi ciri ditampilkan pada tampilan program seperti halnya hasil perekaman.

if (b0==0.3) && (fb==128) &&(pctkoef==100) load db1128100;

elseif (b0==0.3) && (fb==128) &&(pctkoef==90) load db112890; elseif (b0==0.3) && (fb==128) &&(pctkoef==80) load db112880;

elseif (b0==0.3) && (fb==128) &&(pctkoef==70) load db112870;

elseif (b0==0.3) && (fb==128) &&(pctkoef==60) load db112860;

elseif (b0==0.3) && (fb==128) &&(pctkoef==50) load db112850;

elseif (b0==0.3) && (fb==128) &&(pctkoef==40) load db112840;

elseif (b0==0.3) && (fb==128) &&(pctkoef==30) load db112830;

elseif (b0==0.3) && (fb==128) &&(pctkoef==20) load db112820;

elseif (b0==0.3) && (fb==128) &&(pctkoef==10) load db112810;

elseif (b0==0.3) && (fb==64) &&(pctkoef==100) load db164100;

elseif (b0==0.3) && (fb==64) &&(pctkoef==90) load db16490;

elseif (b0==0.3) && (fb==64) &&(pctkoef==80) load db16480;

elseif (b0==0.3) && (fb==64) &&(pctkoef==70) load db16470;

elseif (b0==0.3) && (fb==64) &&(pctkoef==60) load db16460;

elseif (b0==0.3) && (fb==64) &&(pctkoef==50) load db16450;

elseif (b0==0.3) && (fb==64) &&(pctkoef==30) load db16430;

elseif (b0==0.3) && (fb==64) &&(pctkoef==20) load db16420;

elseif (b0==0.3) && (fb==64) &&(pctkoef==10) load db16410;

elseif (b0==0.3) && (fb==32) &&(pctkoef==100) load db132100;

elseif (b0==0.3) && (fb==32) &&(pctkoef==90) load db13290;

elseif (b0==0.3) && (fb==32) &&(pctkoef==80) load db13280;

elseif (b0==0.3) && (fb==32) &&(pctkoef==70) load db13270; elseif (b0==0.3) && (fb==32) &&(pctkoef==60) load db13260;

elseif (b0==0.3) && (fb==32) &&(pctkoef==50) load db13250;

elseif (b0==0.3) && (fb==32) &&(pctkoef==40) load db13240;

elseif (b0==0.3) && (fb==32) &&(pctkoef==30) load db13230;

elseif (b0==0.3) && (fb==32) &&(pctkoef==20) load db13220;

elseif (b0==0.3) && (fb==32) &&(pctkoef==10) load db13210;

elseif (b0==0.3) && (fb==16) &&(pctkoef==100) load db116100;

elseif (b0==0.3) && (fb==16) &&(pctkoef==90) load db11690;

elseif (b0==0.3) && (fb==16) &&(pctkoef==80) load db11680;

elseif (b0==0.3) && (fb==16) &&(pctkoef==70) load db11670;

elseif (b0==0.3) && (fb==16) &&(pctkoef==60) load db11660;

elseif (b0==0.3) && (fb==16) &&(pctkoef==50) load db11650;

elseif (b0==0.3) && (fb==16) &&(pctkoef==40) load db11640;

elseif (b0==0.3) && (fb==16) &&(pctkoef==30) load db11630;

elseif (b0==0.3) && (fb==16) &&(pctkoef==20) load db11620;

elseif (b0==0.3) && (fb==16) &&(pctkoef==10) load db11610;

end

Ekstraksi database diperoleh dari proses dengan menggunakan program sebagai berikut:

function coba1 b0 = 0.3;

fb=128; %variasi frameblocking yang digunakan 16,32,64 dan 128 pctkoef=50; %variasi windowing koefisien yang digunakan 10%-100% z1=zciri ('Do',b0,fb,pctkoef); z2=zciri ('Re',b0,fb,pctkoef); z3=zciri ('Mi',b0,fb,pctkoef); z4=zciri ('Fa',b0,fb,pctkoef); z5=zciri ('Sol',b0,fb,pctkoef); z6=zciri ('La',b0,fb,pctkoef); z7=zciri ('Si',b0,fb,pctkoef); z8=zciri ('Do_',b0,fb,pctkoef); z=[z1 z2 z3 z4 z5 z6 z7 z8]; save db112850 z

Program di atas untuk memanggil database yang akan dibandingankan dengan nada yang telah terekam menggunakan perhitungan jarak. Database yang dipanggil sesuai dengan pilihan variasi frame blocking dan windowing koefisien yang telah dipilih user. Proses yang dilakukan selanjutnya adalah membandingkan database dengan nada terekam menggunakan perhitungan jarak. Nilai perhitungan jarak tersebut dimasukkan ke dalam metode penentuan keluaran yaitu k-Nearest Neighbor (k-NN), dimana k-Nearest Neighbor

(k-NN) akan mengurutkan dari kecil sampai besar nilai dari hasil perhitungan jarak. Setelah mendapatkan nilai yang paling minimum dari pengurutan nilai hasil penghitungan jarak akan diambil nilai minimum sebanyak k (nilai yang dipilih oleh user) pada k-Nearest Neighbor (k-NN), sesuai dengan urutan sampel dari database. Nilai kelas yang paling banyak muncul akan menjadi penentuan keluaran nada saksofon alto yang dikenal. Perintah program perhitungan jarak (Gambar 3.15) sebagai berikut:

for k=1:8

z2(k)=jarak(x7,z(:,k)); end

Setelah didapatkan proses perhitungan jarak selanjutnya masuk dalam penentuan pengeluan kelauran nada dalam tahap ini menggunakan metode k-NN. Kelas yang digunakan k-Nearest Neighbor (k-NN) adalah bilangan ganjil seperti 1, 3, 5, dan 7. Kelas

k=1 sama dengan tidak menggunakan k-Nearest Neighbor (k-NN) karena nilai minimumnya hanya mencari satu nilai sampel dari database dan juga kelasnya hanya ada

satu. k=1 tidak bisa mencari nilai yang paling minimum dari nada lain, sedangkan kelas

k=3, 5, 7 menggunakan k-Nearest Neighbor (k-NN) karena mencari nilai minimum dari sampel database disetiap variasi sesuai dengan nilai k nya. k-Nearest Neighbor (k-NN) yang diambil sebagai keluaran adalah kelas yang paling banyak muncul. Perhitungan pengurutan nilai minimum ini menggunakan jarak simetrik probabilisitik 2

yang digunakan sebagai perhitungan nilai jarak minimum yang didapatkan dari perbandingan nada masukan dengan database. Karena keterbatasan Matlab 7.6.0 perintah program ditambah modus (mode) yang digunakan untuk mencari nilai yang paling sering muncul, di dalam modus terdapat sampel sesuai dengan variasi dari database. Berikut perintah program k-NN (Gambar 3.16):

% Cari n tertangga terdekat

k=vark % k pada knn

m=1; % jumlah sampel per kelas [s1,s2]=sort(z2,'ascend'); % urut dari kecil terbesar jarakc=sort(z2,'ascend')

kj=s1(1:k) % k (jarak tekecil)atau(similaritas terbesar)

kn=s2(1:k) % k kelas terdekat

hk=ceil(kn/m) % penentuan kelas-kelas yang terpilih

zout=mode(hk) % pilih kelas yang paling sering muncul idxkout=find(hk==zout); jpilih=kj(idxkout); fjpilih=fliplr(jpilih); jmaks=fjpilih(1)

%Penentuan keluaran nada nadaout=kel(zout)

set(handles.edit2,'String',nadaout);

if (zout == 1)&&(jmaks<55.0487) korout = {'Do'};

elseif (zout == 1) && (jmaks>=55.0487) korout = {'ERROR'};

end

if (zout == 2) && (jmaks<81.5725) korout = {'Re'};

elseif (zout == 2) && (jmaks>=81.5725) korout = {'ERROR'};

end

if (zout == 3) && (jmaks<42.4711) korout = {'Mi'};

elseif (zout == 3) && (jmaks>=42.4711) korout = {'ERROR'};

end

if (zout == 4) && (jmaks<54.8266) korout = {'Fa'};

elseif (zout == 4) && (jmaks>=54.8266) korout = {'ERROR'};

end

if (zout == 5) && (jmaks<57.4214) korout = {'Sol'};

elseif (zout == 5) && (jmaks>=57.4214) korout = {'ERROR'};

end

if (zout == 6) && (jmaks<105.5574) korout = {'La'};

elseif (zout == 6) && (jmaks>=105.5574) korout = {'ERROR'};

end

if (zout == 7) && (jmaks<36.6529) korout = {'Si'};

elseif (zout == 7) && (jmaks>=36.6529) korout = {'ERROR'};

end

if (zout == 8) && (jmaks<62.7467) korout = {'Do_T'};

elseif (zout == 8) && (jmaks>=62.7467) korout = {'ERROR'};

end

hasilout=korout

set(handles.edit2,'string',hasilout)

Perintah program di atas adalah untuk menjalankan hasil penentuan keluaran nada apa yang dihasilkan dari penamaan keluaran teks dari 8 nada. Pada program tersebut penentuan keluaran metode k-Nearest Neighbour dan menentukan bukan nada yang dihasilkan menggunakan metode thresholding. Variasi k-NN menggunakan variabel

vark”. Pada metode k-NearestNeighbour bertujuan untuk mengambil kelas terdekat atau tetangga terdekat dari perhitungan nilai jaraknya. Fungsi “ascend” pada program berfungsi

untuk mengurutkan nilai jarak dari yang terkecil sampai yang terbesar. Metode

Thresholding bertujuan untuk menentukan hasil keluaran yang tidak sesuai dengan nada pada databasedengan penamaan “ ERROR”. Nilai thresholding didapatkan dari nilai batas optimal pada setiap nada (lampiran 6). Penentuan keluaran menggunakan fungsi logika “if dan else” dimana meliahat beberapa syarat yaitu kelas dan nilai thresholding, jika salah satu tidak terpenuhi maka program akan lanjut ke proses else. Hasil keluaran yang sesuai

dengan persyaratan kelas dan nilai thresholding akan di tampilkan dengan format

set(handles.edit2,’string’,hasilout)” dimana hasil keluaran akan ditampilan pada edit2

berupa text yakni delapan nada tersebut berdasarkan penamaan pada program hasil pengeluaran. Variabel kel adalah inisialisasi 8 nada. Nilai kelas yang paling banyak muncul akan dipanggil sebagai keluaran sesuai dengan nama yang telah diinisialisasi sebagai berikut:

%deskripsi string keluaran

kel={'Do';'Re';'Mi';'Fa';'Sol';'La';'Si';'Do_T'};

c. Tombol “RESET

Tombol “RESET” digunakan apabila user masih ingin melakukan pengenalan nada untuk nada lainnya. Tombol “RESET” berfungsi mengembalikan atau mengulang tampilan program ke tampilan awal. Program yang digunakan untuk tombol RESET adalah sebagai berikut: axes(handles.axes5); plot(0); axes(handles.axes6); plot(0); set(handles.edit3,'String',' ');

Program di atas berfungsi untuk mengembalikan atau mengosongkan axes plot dan kolom edit yang menampilkan hasil pengenalan nada.

d. Tombol “CLOSE”

Tombol “CLOSE” berfungsi untuk mengakhiri proses pengenalan nada. Program untuk tombol CLOSE yaitu:

delete(figure(gui));

Dokumen terkait