Pada program perekaman suara, panjang sampel yang digunakan adalah 1,5 detik dengan frekuensi sampling sebesar 10kHz. Waktu sampelnya didapatkan dari panjang
sampel dikalikan dengan frekuensi sampel. Untuk menyimpan nada yang direkam, perintah yang digunakan adalah wavrecord dan wavwrite, hasil plot perekaman tersebut
ditampilkan pada kotak axes 1. Listing program untuk menampilkan plot spektrum :
sample_length=1.5; sample_freq=10000;
sample_time=sample_lengthsample_freq; x=wavrecordsample_time, sample_freq;
wavwritex, sample_freq, s.wav
; axeshandles.axes1
plotx; xlabel
Data Tercuplik ylabel
Amplitudo
b0=0.3; fb=handles.frame;
Normalisasi x1=xmaxabsx;
Pemotongan Awal 1. Potong kiri
b1=findx1b0 | x1-b0; x11:b11=[];
2. Potong kiri 2 bts=floor0.25lengthx1;
x11:bts=[]; frame blocking
x2=x11:fb; Normalisasi 2
x3=x2maxabsx2;
Dalam program untuk menampilkan plot spektrum, proses pertama yang dilakukan adalah normalisasi awal untuk sinyal nada terekam yang ditampilkan pada kotak axes 1.
Normalisasi dilakukan dengan cara membagi data masukan data sinyal nada terekam dengan nilai absolut data tersebut. Proses selanjutnya adalah pemotongan sinyal yang
dilakukan sebanyak dua kali. Pemotongan yang pertama pada bagian silence atau bagian awal sinyal yang tidak termasuk sinyal nada dan pemotongan kedua pada bagian transisi.
Tujuan dari proses pemotongan adalah untuk menghilangkan sinyal yang tidak termasuk sinyal nada belira dan untuk mengurangi cacat sinyal akibat derau ruangan yang ikut
terekam. Pada pemotongan sinyal silence, data yang tingginya lebih besar dari 0,3 dan lebih kecil dari -0,3 diinisialisasikan sebagai b1. Data yang tidak memenuhi syarat b1
merupakan sinyal silence sehingga sinyal tersebut dihilangkan. Pada pemotongan sinyal transisi, ¼ bagian sinyal yang terdapat di bagian awal diinisialisasikan sebagai bts. Sinyal
tersebut dihilangkan untuk mendapatkan sinyal yang benar-benar sinyal suara nada belira. Proses selanjutnya adalah frame blocking yang tujuannya untuk mengambil sebagian data
sesuai panjang nilai frame blocking yang dipilih oleh user. Data yang diambil tersebut untuk mewakili seluruh data yang terekam. Sinyal hasil frame blocking kemudian melalui
proses normalisasi akhir yang bertujuan untuk menyetarakan amplitudo hasil frame blocking
. Proses normalisasi akhir sama dengan normalisasi awal yaitu membagi data
Windowing Hamming h=hammingfb;
x4=x3.h; Spektrum frekuensi
px4=lengthx4; x4=[x4; zerosfs-px4,1];
Y1=dftxx4; Y2=Y1.conjY1;
f=fs0:12fsfs; Sumbu mendatar pada spektrum spek=Y21:12sample_freq+1;
Sumbu tegak pada spektrum spek1:100=0;
Frek 0-20 Hz dinolkan axeshandles.axes2
barspek;
masukan yaitu hasil frame blocking dengan nilai absolut data tersebut. Selanjutnya akan melalui proses windowing untuk menghilangkan diskontinuitas yang diakibatkan oleh
proses frame blocking. Proses windowing ini menggunakan Hamming Window. Dalam prosesnya, hasil normalisasi akhir dikalikan dengan hamming. Setelah proses windowing,
selanjutnya adalah perhitungan dengan DFT, perhitungan ini untuk membangkitkan spektrum yang kemudian akan dianalisis untuk mengetahui nada yang dimainkan oleh
user .
Listing program untuk menampilkan hasil teks nada keluaran :
Pencarian maksimum lokal pspek=lengthspek;
makslok=zeros1,pspek; for
k=2:pspek-1 if
spekkspekk-1 spekkspekk+1 makslok1,k=spekk;
end end
Sorting turun [smakslok,idx]=sortmakslok,
descend ;
urutmakslok_1sd5=smakslok1:5 urutfrek_1sd5=idx1:5
Perbandingan maksimum lokal urutan 2 dengan 1 permakslok=smakslok2smakslok1
Penentuan hasil if
permakslok0.07 hasil=belira
Frekuensi belira frekb=idx1-1
Penentuan keluaran text if
frekb=776 frekb=796 nadaout=
sol rendah ;
elseif frekb=871 frekb=891
nadaout= la rendah
;
elseif frekb=979 frekb=999
nadaout= si rendah
; elseif
frekb=1038 frekb=1058 nadaout=
do ;
elseif frekb=1165 frekb=1185
nadaout= re
; elseif
frekb=1310 frekb=1330 nadaout=
mi ;
elseif frekb=1391 frekb=1411
nadaout= fa
; elseif
frekb=1561 frekb=1581 nadaout=
sol ;
elseif frekb=1752 frekb=1772
nadaout= la
; elseif
frekb=1971 frekb=1991 nadaout=
si ;
elseif frekb=2044 frekb=2064
nadaout= do tinggi
; elseif
frekb=2323 frekb=2343 nadaout=
re tinggi ;
elseif frekb=2594 frekb=2614
nadaout= mi tinggi
; elseif
frekb=2767 frekb=2787 nadaout=
fa tinggi ;
elseif frekb=3070 frekb=3090
nadaout= sol tinggi
; elseif
frekb=3535 frekb=3555 nadaout=
la tinggi ;
else nadaout=
nada belira error ;
end
Dari spektrum tersebut, kemudian dicari nilai-nilai maksimum lokalnya. Nilai-nilai maksimum lokal yang didapatkan kemudian diurutkan ke bawah dengan perintah
‘descend’. Dari hasil sorting turun, nilai maksimum lokal urutan kedua dibagikan dengan nilai maksimum lokal urutan pertama. Hasil pembagian tersebut digunakan untuk
mengetahui nada yang terekam termasuk suara nada belira atau bukan. Untuk mengetahui hal tersebut, maka ditentukan nilai 0,07 untuk dibandingkan dengan hasil pembagian
maksimum lokalnya. Jika hasil pembagian lebih besar dari 0,07 maka nada tersebut bukan nada belira tetapi jika lebih kecil dari 0,07 maka nada tersebut termasuk nada belira. Nilai
0,07 tersebut didapatkan berdasarkan lampiran [L19]. Jika nada tersebut tidak termasuk na
da belira maka keluarannya “ERROR” dan program akan berhenti, tetapi jika nada tersebut termasuk nada belira maka proses akan berlanjut untuk penentuan frekuensi dan
penentuan keluaran teks. Proses penentuan keluaran teksnya dengan look up table. Proses penentuan range frekuensi pada look up table dapat dilihat pada lampiran [L5] dan
hasilnya dapat dilihat pada tabel 3.2. Program untuk tombol “SELESAI” atau untuk mengakhiri pengenalan nada :
4.2. Hasil Pengujian Program Pengenalan Nada Terhadap Tingkat