dilakukanlah penentuan basis data yang akan digunakan dengan bantuan fungsi switch- case
. Nilai data pada variabel dijadikan sebagai acuan dalam switch. Program perekaman pengenalan ucapan dibuat sesuai perancangan diagram blok
pada gambar 3.6. Penulisan program untuk melakukan perekaman sebagai berikut.
sample_length=1; sample_freq=6000;
sample_time=sample_lengthsample_freq; x=wavrecordsample_time, sample_freq;
wavwritex, sample_freq,
s.wav ;
axeshandles.axes1 plotx;
xlabel
Times ; ylabel
Amplitude ,
... title
INPUT UCAPAN ;
x=wavread s.wav
;
Durasi waktu yang digunakan pada proses rekam suara adalah 1 detik dengan frekuensi sampling 6000 Hz L1. Proses perekaman menggunakan bantuan fungsi yaitu
“wavrecord”. Struktur penulisan ini yaitu “wavrecordn,fs”. Nilai “n” merupakan jumlah data yang ingin dicuplik sedangkan “fs” merupakan frekuensi sampling. Nilai frekuensi
sampling yang digunakan yaitu 6000 Hz, maka agar pencuplikan terjadi selama 1 detik
nilai data tercuplik sebesar 6000. Data hasil rekaman tersebut kemudian ditampilkan dalam bentuk g
rafik dengan menggunakan fungsi “plot”. Fungsi “axeshandles.axes1” digunakan untuk memilih axis mana pada kolom plot ucapan sebagai tempat penampil
grafik, maka dituliskan sebelum fungsi “plotx”. Fungsi “xlabel”, “ylabel”, dan “title”
digunakan untuk memberikan keterangan pada grafik sumbu x dan y, serta memberi judul grafik.
Program preprocessing dilakukan agar masuukan data sinyal ucapan dapat diolah terlebih dahulu sebelum dilakukan proses ekstraksi. Program preprocessing terdiri dari 4
bagian yaitu pre emphasis, normalisasi, pemotongan sinyal dan zero padding. Program preprocessing
dituliskan sebagai berikut:
Preemphasis b0=0.3;
x0=x; usig=2048;
alpha=0.95;
for k=2:lengthx0
x0k=x0k-alphax0k-1; end
Normalisasi x1=x0maxabsx0;
PEMOTONGAN SINYAL:
Potong kiri b1=findx1b0 | x1-b0;
x11:b11=[];
Potong kanan x2=fliplrx1;
b2=findx2b0 | x2-b0; x21:b21=[];
x2=fliplrx2;
ZERO PADDING x2usig=0;
x3=x21:usig;
Proses pre emphasis merupakan proses awal dimana sinyal masukan akan di update nilainya dari sebelumnya. Nilai pre emphasis menggunakan fungsi for dan dimulai dari 2
dimana jika dimulai dari 1 tidak terdapat nilai sebelumnya. Proses perhitungan pre emphasis
sesuai pada perancangan dengan nilai alpha 0.95. Proses pre emphasis mengacu pada flowchart yang telah dibuat pada gambar 3.7
Proses normalisasi melakukan perubahaan 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
mutlak atau bernilai positif. Proses normalisasi mengacu pada perancangan flowchart yang telah dibuat pada gambar 3.8
Proses pemotongan sinyal dimulai dengan mencari data yang akan dihilangkan dengan bantuan fungsi pada Matlab
yakni “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 fungsi “find” menjadi batas akhir pemotongan data,
sehingga data hasil normalisasi akan dihilangkan dari awal hinggi 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”. Fungsi “fliplr” merupakan
membalikan sinyal dari sisi kiri menjadi kanan dan sebaliknya. Proses pemotongan sinyal mengacu pada flowchart yang telah dibuat pada gambar 3.9
Proses zero padding dilakukan dengan menambahkan dengan deretan nilai data “0”
stelah data hasil pemotongan sinyal. Terdapat pendeklarasian variabel “usig” yang
merupakan ukuran deretan data dengan nilainya sebanyak 2048 sesuai perancangan.
Program penambahan deretan “0” hingga data ke 2048 dituliskan “x2usig=0”. Variabel “x2” merupakan data hasil pemotongan sinyal yang sebelumnya telah dideklarasikan,
maka “x2usig=0” yaitu data ke 2048 pada deretan nilai variabel „x2” diberi nilai 0.
Proses zero padding mengacu pada flowchart yang telah dibuat pada gambar 3.10. Setelah proses preprocessing dilanjutkan dengan proses framing dan windowing
sebelum masuk pada tahap proses ektraksi ciri. Program framing dan windowing dituliskan sebagai berikut:
Segmentasi dan windowing hamming pjseg=512;
ovlseg=128; h=hammingpjseg;
n=1;k=1;
while n==1
pjx0=lengthx3; if
pjx0=pjseg xseg=x31:pjseg;
xseg=xseg.h; segmtx:,k=xseg;
x31:pjseg-ovlseg=[]; k=k+1;
elseif pjx0==0
n=0; else
x3pjseg=0; xseg=x3.h;
segmtx:,k=xseg; n=0;
end end
Pada tahap proses framing dan windowing dibutuhkan pendeklarasian nilai panjang frame[9]dan nilai overlap[26]. Proses framing menggunakan program while dimana
mencari kesamaan data dengan panjang frame. Didalam proses framing terdapat proses windowing
dmana berfungsi untuk membuat pola pada sinyal. Hasil dari zero padding akan di bandingan panjang sinyal data dengan panjang frame . Jika data lebih besar dari
panjang frame lalu di windowing hamming lalu akan di kurangi dengan nilai overlap pada pendeklarasian sebesar 128. Jika data lebih kecil dari panjang frame akan ditambahkan 0
sesuai panjang frame . Pada proses windowing yang terdapat pada framing menggunakan jendela hamming. Proses Matlab terdapat fungsi untuk menggunakan jendela hamming
dengan formula”hammingL”. Variabel “L” merupakan banyaknya deretan data yang
akan diproses. Penulisan program yang dipakai untuk menentukan pola hamming ditulis
“hammingpjseg”. Hasil windowing hamming ini akan digunakan didalam proses framing. Proses framing dan windowing mengacu pada flowchart yang ditulis pada gambar 3.11.
Program ektraksi ciri terdapat 2 proses yaitu transformasi menggunakan DFT dan segment
averaging. Program ektraksi ciri dituliskan sebagai berikut:
Ektraksi ciri menggunakan DFT [baris,kolom]=size segmtx;
for k=1:kolom
hdft=absdftxsegmtx:,k; x4:,k=hdft:;
end x4=x4:;
x4=x41:lengthx42,:;
Segment averaging x5=reshapex4,varsegment,[];
x5=meanx5; x=x5:;
axeshandles.axes2 barx;
xlabel
Times ; ylabel
Amplitude ,
...
Pada ektraksi ciri pemanggilan fungsi dft digunakan fungsi eksternal dmana program dibuat terpisah dari program inti . Fungsi ekternal dibuat mengacu pada rumus
2.5. Program fungsi ekternal untuk ektraksi ciri dft dituliskan sebagai berikut :
Perhitungan DFT function
y=dftx N=lengthx;
y=zeros1,N;
for k=1:N
for n=1:N
w=exp-1i2pik-1n-1N; a=xnw;
yk=yk+a;
end end
Proses transformasi dilakukan dengan memanggil fungsi yang sudah dibuat pada M-file dengan nama fungsi DFT , kemudian nilai datanya diabsolutkan dengan bantuan
fungsi Matlab “abs”. Pada fungsi ekternal dft mengacu pada persamaan 2.5 dengan indeks
n pada persamaan dimulai dari 1 dikarenakan pada matlab tidak mengenal indeks 0[28]. Proses transformasi tersebut dilanjutkan dengan mengambil setengan bagian kiri sinyal
data dengan program yang ditulis “x4=x41:lengthx42,:”. Fungsi “length”merupakan
fungsi untuk mencari banyaknnya deretan data, sehingga fungsi “lengthx4 akan mencari banyaknnya deretan data pada variabel x4. Variabel
“x4” merupakan hasil dari transformasi DFT. Program mengacu pada flowchart perancangan gambar 3.12.