• Tidak ada hasil yang ditemukan

BAB V PENUTUP

5.2. Saran

Dari hasil penelitian ini, ada beberapa saran untuk penulis dalam penelitian dengan topik yang sama :

1. Gunakan kombinasi kata yang sedikit mungkin untuk 1 file kalimat suara. Contohnya dengan 2 kata dalam 1 file suara, karena semakin banyak kata yang diucapkan dalam satu kalimat, seseorang akan cenderung untuk mengucapkannya dengan jeda yang sangat singkat dan suara yang dihasilkan semakin kurang jelas.

2. Perbanyak ciri data suara untuk setiap sumber suara karena aksen / logat dari daerah individu sumber data sangat mempengaruhi variasi kata yang ia diucapkan.

3. Menambahkan jumlah data suara seperti data suara dari 100 orang yang berbeda, menambahkan jumlah hidden layer atau melakukan variasi bobot dan bias yang lebih kompleks.

71

DAFTAR PUSTAKA

Amrutha S, Aravind S, Ansu Mathew, Swathy Sugathan, Rajasree R, Priyalakshmi S. (2015) Voice Controlled Smart Home. International Journal of Emerging Technology and Advanced Engineering, Volume 5, Issue 1, [272-276]. Available from: https://www.researchgate.net/publication/282270177_Voice_Contr olled_Smart_Home [ akses 30 Oktober 2017].

CH.Venkateswara Rao, Anirvan Sen, Debasish Tahbildar, Klanidhi Kumar. (2016) Smart Home Equipped with Voice Recognition. International Journal of Industrial Electronics and Electrical Engineering, Volume 4, Issue 4, [115-117]. Available from:

http://pep.ijieee.org.in/journal_pdf/11-247-1462944702115-117.pdf [ akses 30 Oktober 2017].

Ignatius Nathanael Andika, Bayu Kanigoro. (2014) Aplikasi Pengenalan Suara untuk Rumah Pintar Menggunakan Algoritma Fast Fourier Transform Berbasiskan Android. Jakarta : Binus University.

Available from:

http://library.binus.ac.id/Collections/ethesis_detail/2014-2-00638-IF [ akses 30 Oktober 2017 ]

Lorencius Echo Sujianto Putera. (2016) Klasifikasi Burung Berdasarkan Suara Kicau Burung Menggunakan Jaringan Syaraf Tiruan Propagasi Balik. Yogyakarta : Universitas Sanata Dharma.

Anastasia Rita Widiarti, Phalita Nari Wastu. (2009) Javanese Character Recognition Using Hidden Markov Model. World Academy of Science, Engineering and Technology, International Journal of Computer and Information Engineering Vol 3. [2201 - 2204].

Available from :

https://www.researchgate.net/publication/266998615_Javanese_Ch aracter_Recognition_Using_Hidden_Markov_Model [akses 2 November 2017]

Campbell Jr, J.P.. (1997), Speaker recognition: A tutorial. Proceedings of the IEEE. 85. 1437 - 1462. 10.1109/5.628714. Available from : https://scholar.google.com/citations?user=NUJqUkUAAAAJ&hl= en [ akses 8 Januari 2018 ]

Fauzan Masykur, Fiqiana Prasetiowati (2016), Aplikasi Rumah Pintar (Smart Home) Pengendali Peralatan Elektronik Rumah Tangga Berbasis WEB. Jurmal Teknologi Informasi dan Ilmu Komputer Vol

3. [51-58]. Available from :

jtiik.ub.ac.id/index.php/jtiik/article/download/156/pdf [ akses 8 januari 2018 ]

Setiawan, A., Hidayanto, A., & Isnanto, R. (2011). Aplikasi Pengenalan Ucapan dengan Ekstraksi Mel-Frequency Cepstrum Coefficients (MFCC) Melalui Jaringan Syaraf Tiruan Learning Vector Quantization (LVQ) untuk Mengoprasikan Kursor Komputer.

Transmisi, [82-86]. Available from : https://www.researchgate.net/publication/277998882_Aplikasi_Pe

ngenalan_Ucapan_dengan_Ekstraksi_Mel-Frequency_Cepstrum_Coefficients_MFCC_Melalui_Jaringan_Sya raf_Tiruan_JST_Learning_Vector_Quantization_LVQ_untuk_Men goperasikan_Kursor_Komputer [ akses 8 januari 2018 ].

Ali Mustofa (2007). Sistem Pengenalan Penutur dengan Metode Mel-Frequency Wrapping. Malang: Universitas Brawijaya. Available

from :

http://jurnalelektro.petra.ac.id/index.php/elk/article/view/16704 [ akses 8 januari 2018 ]

Diana L & Shidik (2014). Analisis Data Transaksi Penjualan Untuk Klasifikasi Jenis Barang dan Relasi Daya Beli Relatif Masyarakat Menggunakan Algoritma K-Means Serta Asosiasi Apriori. Jurnal Teknologi Informasi. [212-219]. Available from : https://anzdoc.com/jurnal-teknologi-informasi-volume-10-nomor-2-oktober-2014-is.html [ akses 8 januari 2018]

T. Ginnakopoulos (2015). An Open Source Phyton Library for Audio Signal Analisys. Italy : University of Pavia. Available from : https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0 144610 [ akses 15 desember 2018 ]

A. Astri (2016). Rancangan Bangun Open/Close Pintu Ruangan Otomatis Menggunakan Voice Recognition Berbasis Raspberry PI. Sumatera Selatan : Politeknik Negeri Sriwijaya. Available from : http://eprints.polsri.ac.id/2964/ [ akses 15 desember 2018 ]

Jang, J-S. R. (2005). ASR (Automatic Speech Recognition) Toolbox. Available from : http://mirlab.org/jang/matlab/toolbox/asr/ [ akses 15 desember 2018 ]

Jang, J-S. R. (2015). Audio Signal Processing and Recognition. Available from : http://mirlab.org/jang/book/audiosignalprocessing/ [akses 15 desember 2018 ]

Mittal & Zhang (2001). Artificial Neural Network for The Prediction of Temperature, Moisture and Fat Contents in Meatballs During Deep-Fat Frying. International Journal of Food Science and Technology

[489-497] Available from :

https://www.researchgate.net/publication/230452945_Artificial_ne ural_network_for_the_prediction_of_temperature_moisture_and_f at_contents_in_meatballs_during_deep-fat_frying [ akses 15 desember 2018 ]

Hermawan A. (2006). Jaringan Syaraf Tiruan : Teori dan Aplikasi.

Available from :

https://openlibrary.telkomuniversity.ac.id/pustaka/103410/jaringan -saraf-tiruan-teori-dan-aplikasi.html [akses 15 desember 2018]

Siang JJ. (2005). Jaringan Syaraf Tiruan dan Pemrogramannya Menggunakan Matlab. Yogyakarta : Andi Offets.

Anam, Khoirul (2013) Pengenalan Suara Manusia Dengan Menggunakan Metode Linear Predictive Coding. Available from : https://etheses.uin-malang.ac.id/7376/1/06550095.pdf [akses 15 Desember 2018]

Hagan, M. T. and Beale, M. H. (2014) Neural Network Design. 2nd edn. Oklahoma: Martin Hagan, Avaliable from: http://hagan.okstate.edu/NNDesign.pdf [akses 15 Desember 2017]

76

A. Lampiran Program

1. Source Code GUI newGUI

Berikut merupakan source code tampilan muka Main Sistem function varargout = newGUI(varargin)

% Begin initialization code - DO NOT EDIT gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @newGUI_OpeningFcn, ... 'gui_OutputFcn', @newGUI_OutputFcn, ... 'gui_LayoutFcn', [] , ...

'gui_Callback', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end

% End initialization code - DO NOT EDIT

% --- Executes just before newGUI is made visible.

function newGUI_OpeningFcn(hObject, eventdata, handles, varargin)

% This function has no output args, see OutputFcn. % hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% varargin command line arguments to newGUI (see VARARGIN)

% Choose default command line output for newGUI handles.output = hObject;

% Update handles structure guidata(hObject, handles);

% UIWAIT makes newGUI wait for user response (see UIRESUME)

% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.

function varargout = newGUI_OutputFcn(hObject, eventdata, handles)

% varargout cell array for returning output args (see VARARGOUT);

% hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure varargout{1} = handles.output;

% --- Executes on button press in pushbutton1.

function pushbutton1_Callback(hObject, eventdata, handles) % Cari Data

[filenames pathname] = uigetfile({'*.wav'},'File Selector','MultiSelect','on');

set(handles.text2, 'String', pathname); set(handles.listbox1,'string',filenames); handles.pathname = pathname;

handles.filenames = filenames; guidata(hObject,handles);

% hObject handle to pushbutton1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% --- Executes on selection change in listbox1.

function listbox1_Callback(hObject, eventdata, handles) % hObject handle to listbox1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns listbox1 contents as cell array

% contents{get(hObject,'Value')} returns selected item from listbox1

% --- Executes during object creation, after setting all properties. function listbox1_CreateFcn(hObject, eventdata, handles) % hObject handle to listbox1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles empty - handles not created until after all CreateFcns called

% Hint: listbox controls usually have a white background on Windows.

% See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

% --- Executes on selection change in popupmenu1.

function popupmenu1_Callback(hObject, eventdata, handles) % hObject handle to popupmenu1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array

% contents{get(hObject,'Value')} returns selected item from popupmenu1

% --- Executes during object creation, after setting all properties. function popupmenu1_CreateFcn(hObject, eventdata, handles) % hObject handle to popupmenu1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.

% See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

% --- Executes on selection change in popupmenu2.

function popupmenu2_Callback(hObject, eventdata, handles) % hObject handle to popupmenu2 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu2 contents as cell array

% contents{get(hObject,'Value')} returns selected item from popupmenu2

% --- Executes during object creation, after setting all properties. function popupmenu2_CreateFcn(hObject, eventdata, handles) % hObject handle to popupmenu2 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.

% See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

% --- Executes on button press in pushbutton2.

function pushbutton2_Callback(hObject, eventdata, handles) % SIMPAN

%% Get Value

filenames = handles.filenames; pathname = handles.pathname;

ppV = get(handles.popupmenu1,'Value'); % Label

tipeRekaman = get(handles.popupmenu2,'Value'); % Rekaman depan/ samping

% Panggil Database load('DB.mat');

[urutan b]= size(DB); % Jumlah data dalam database

for i=1:length(filenames)

[x,Fs] = audioread(horzcat(pathname,filenames{i})); % baca file suara

[Features] = newFeatureExtraction(x,Fs); % Ambil ciri % Masukan ciri suara kedalam database

DB{i+urutan,1}= Features; DB{i+urutan,2}= ppV; DB{i+urutan,3}= tipeRekaman; end save('DB','DB'); tt=1;

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% --- Executes on button press in pushbutton3.

function pushbutton3_Callback(hObject, eventdata, handles) % hObject handle to pushbutton3 (see GCBO)

%% Uji Data Tunggal

[filenames pathname] = uigetfile({'*.wav'},'File Selector','MultiSelect','off'); [x,Fs] = audioread(horzcat(pathname,filenames)); % Feature V1 [~,Features] = FeatureExtraction(x,Fs); % Feature V2 [~,newF] = ReFragment(x,Fs); % Combine bantuLength = length(Features); for i=1:length(newF) Features{i+bantuLength}=newF{i}; end

%Uji JST load('DB.mat');

[data label recPos] = pilahData(DB); [lT,lTS] = ubahLuaran(13,label);

rand('seed', 491218382);

% membuat feed-forward backpropagation network net = newff(data', lT', [19,19]); %7. Membentuk model JST [net, tr] = train(net,data', lT'); %8. Menguji model for i=1:length(Features) out = sim(net,Features{i}'); out(out < 0) = 0;

nout(i,:) = round(out); %nilai di atas 0.5 akan dibulatkan ke atas end

nl = ubahkeDesimal(nout);

% Ambil Label Perintah dKata = cekKata(nl);

% Ubah Label Menjadi Kalimat Kalimat = num2Kalimat(dKata); if length(Kalimat) == 3

myTeks = horzcat('Terdeteksi : ',Kalimat{1},' ',Kalimat{2},' ',Kalimat{3});

else

myTeks = horzcat('Terdeteksi : ',Kalimat{1},' ',Kalimat{2}); end

set(handles.text6, 'String', myTeks);

%% Grafik

x = x.'; % Transposisi

% N = length(x); % Panjang Signal % n = 0:N-1;

% ts = n*(1/Fs); % Waktu

% Definisi window

wintype = 'rectwin'; % Rectangular window winlen = 201; % panjang window

% find the zero-crossing rate

E = energy(x,wintype,winamp(2),winlen);

% time index for the STE after delay compensation % out = (winlen-1)/2:(N+winlen-1)-(winlen-1)/2; % t = (out-(winlen-1)/2)*(1/Fs); % Edited Energy makE = max(E); rataE = mean(E); for i=1:length(E) if E(i) >= rataE*0.25 E(i) = makE; else E(i) = 0; end end % Fltering b = [1/4 1/4 1/4 1/4]; ENew = filter(b,1,E);

%% Erosi & Dilasi ENew = im2bw(ENew); se = strel('rectangle',[1 300]); ENew = imerode(E,se); ENew = imdilate(ENew,se); %%

N = length(x); % signal length n = 0:N-1;

ts = n*(1/Fs); % time for signal

% time index for the ST-ZCR and STE after delay compensation out = (winlen-1)/2:(N+winlen-1)-(winlen-1)/2;

t = (out-(winlen-1)/2)*(1/Fs); cla reset;

axes(handles.axes1); plot(ts,x); hold on;

plot(t,ENew(out),'r','Linewidth',2); xlabel('t, seconds');

% find the zero-crossing rate

%% Edited mak = max(zc); rata = mean(zc); for i=1:length(zc) if zc(i) >= rata*0.75 zc(i) = mak; else zc(i) = 0; end end % Fltering b = [1/4 1/4 1/4 1/4]; zcNew = filter(b,1,zc);

%% Erosi & Dilasi zcNew = im2bw(zcNew); se = strel('rectangle',[1 300]); zcNew = imerode(zc,se); zcNew = imdilate(zcNew,se);

out = (winlen-1)/2:(N+winlen-1)-(winlen-1)/2; t = (out-(winlen-1)/2)*(1/Fs);

plot(t,zcNew(out),'g','Linewidth',2); xlabel('t, seconds'); legend('signal','Energy','ZCross');

title('Short-time Energy'); %% END Grafik

% --- Executes on button press in pushbutton5.

function pushbutton5_Callback(hObject, eventdata, handles) %% Akurasi DataBase

load('DB.mat');

[data label recPos] = pilahData(DB);

[dataTraining, dataTesting, labelTraining, labelTesting] = buat3Fold(data,label,1);

clear data label recPos;

[lT,lTS] = ubahLuaran(labelTesting,labelTraining); clear labelTesting labelTraining;

[confMat,akurasi(1)] =

clear lT lTS;

[data label recPos] = pilahData(DB);

[dataTraining, dataTesting, labelTraining, labelTesting] = buat3Fold(data,label,2);

clear data label recPos;

[lT,lTS] = ubahLuaran(labelTesting,labelTraining); clear labelTesting labelTraining;

[confMat,akurasi(2)] =

ujiJST_BP(dataTesting,lTS,dataTraining,lT,[19,19]); clear lT lTS;

[data label recPos] = pilahData(DB);

[dataTraining, dataTesting, labelTraining, labelTesting] = buat3Fold(data,label,3);

clear data label recPos;

[lT,lTS] = ubahLuaran(labelTesting,labelTraining); clear labelTesting labelTraining;

[confMat,akurasi(3)] =

clear lT lTS; akurasiRata = (akurasi(1)+akurasi(2)+akurasi(3))/3; id = [1 2 3]; cla reset; axes(handles.axes1); plot(id,akurasi);

myTeks = horzcat('Akurasi : ',num2str(akurasiRata),'%'); set(handles.text5, 'String', myTeks);

2. Source Code FeatureExstraction

Berikut merupakan source code dari fungsi FeatureExtraction function [PotonganSignal,Features] = FeatureExtraction(x,Fs) %% Use File : audioread, potongSignalEnergy, potongSignalZeroCrossing

%% Use File : FrameWindow, vec2frames, midColumFixer, statistics, luruskan

%% Use File : energy, wincov, zerocross %% Variable null Tipe CELL & bantu PotonganSignal2 = {};

bantu = 1;

%% Normalisasi Signal xNorm = x/abs(max(x));

%% Potong Signal berdasarkan Energy

[SignalPartE,SignalPartENorm] =

potongSignalEnergy(xNorm,xNorm);

%% Potong Signal berdasarkan Zero-Crossing

try for i=1:length(SignalPartE) clear SignalPartZC [SignalPartZC,SignalPartZCNorm] = potongSignalZeroCrossing(SignalPartE{i},SignalPartENorm{i}); checkCell = iscell(SignalPartZC); if checkCell == 1 for j=1:length(SignalPartZC) PotonganSignal{bantu} = SignalPartZC{j};

PotonganSignalNorm{bantu} = SignalPartZCNorm{j}; bantu = bantu+1; end end if checkCell == 0 PotonganSignal{bantu} = SignalPartZC; PotonganSignalNorm{bantu} = SignalPartZCNorm; bantu = bantu+1; end end catch PotonganSignal = SignalPartE; PotonganSignalNorm = SignalPartENorm; end % %% Tambahan % if length(PotonganSignal2) == 4 % PotonganSignal{1} = vertcat(PotonganSignal2{1},PotonganSignal2{2});

% PotonganSignalNorm{1} = vertcat(PotonganSignalNorm2{1},PotonganSignalNorm2{2}); % PotonganSignal{2} = vertcat(PotonganSignal2{3},PotonganSignal2{4}); % PotonganSignalNorm{2} = vertcat(PotonganSignalNorm2{3},PotonganSignalNorm2{4}); % else % PotonganSignal=PotonganSignal2; % PotonganSignalNorm = PotonganSignalNorm2; % end

%% Framesize & Overlap framesize = 15; overlap = 10; %% Feature Extraction (MFCC) for i=1:length(PotonganSignalNorm) % [theFrames] = FrameWindow(PotonganSignalNorm{i},Fs,framesize,overlap); % the MFCC % Define variables

Ts = 10; % analysis frame shift (ms) \ Overlaps alpha = 0.97; % preemphasis coefficient

M = 20; % number of filterbank channels C = 12; % number of cepstral coefficients L = 22; % cepstral sine lifter parameter LF = 300; % lower frequency limit (Hz) HF = 3700; % upper frequency limit (Hz)

[ theFrames, FBEs, frames ] = ...

mfcc( PotonganSignalNorm{i}, Fs, Tw, Ts, alpha, @hamming, [LF HF], M, C+1, L ); % The MFCC

Hasil = statistics(theFrames'); % Ambil data statistik mfcc statLine = luruskan(Hasil);

Features{i} = statLine; % Masukan data feature clear theFrames;

% %% Samakan Kolom Feature % if length(theFrames(1,:)) > 4 % jj = length(theFrames(1,:))/4; % jj = floor(jj);

% % Hasil = midColumFixer(theFrames,jj); % menyamakan ukuran kolom

% [statistic] = statistics(Hasil); % ambil nilai statistik

% statLine = luruskan(statistic); % meluruskan / membuat sejejer data statistik

% %%

% Features{i} = statLine; % Masukan data feature % else

% Hasil = real(ambilCiri(theFrames,Fs));

% [statistic] = statistics(theFrames); % ambil nilai statistik % statLine = luruskan(statistic); % meluruskan / membuat sejejer data statistik

% %%

% Features{i} = statLine; % Masukan data feature % end

% clear theFrames; % end % end For

End

3. Source Code potongSignalEnergy

Berikut merupakan source code potongSignalEnergy. Berfungsi untuk mencari nilai energy dari sampel data suara.

function [SignalBaru,SignalBaruNorm] = potongSignalEnergy(x,xNorm)

xOriginal = x;

x = x.'; % Transposisi

% N = length(x); % Panjang Signal % n = 0:N-1;

% ts = n*(1/Fs); % Waktu

% Definisi window

wintype = 'rectwin'; % Rectangular window winlen = 201; % panjang window

winamp = [0.5,1]*(1/winlen);

% find the zero-crossing rate

E = energy(x,wintype,winamp(2),winlen);

% time index for the STE after delay compensation % out = (winlen-1)/2:(N+winlen-1)-(winlen-1)/2; % t = (out-(winlen-1)/2)*(1/Fs);

makE = max(E); rataE = mean(E); for i=1:length(E) if E(i) >= rataE*0.25 E(i) = makE; else E(i) = 0; end end % Fltering b = [1/4 1/4 1/4 1/4]; ENew = filter(b,1,E);

%% Erosi & Dilasi ENew = im2bw(ENew); se = strel('rectangle',[1 300]); ENew = imerode(E,se); ENew = imdilate(ENew,se);

% N = length(x); % signal length % n = 0:N-1;

% ts = n*(1/Fs); % time for signal %

% % time index for the ST-ZCR and STE after delay compensation

% out = (winlen-1)/2:(N+winlen-1)-(winlen-1)/2; % t = (out-(winlen-1)/2)*(1/Fs);

% figure;

% plot(ts,x); hold on;

% plot(t,ENew(out),'r','Linewidth',2); xlabel('t, seconds'); % title('Short-time Energy');

% legend('signal','STE'); % %%

%% get The Data AP = zeros(1,2); a=1;

for i=2:length(ENew)-1

if ENew(i) == 0 && ENew(i+1) == makE AP(a,1) = i;

if ENew(i) == makE && ENew(i+1) == 0 if i <= length(xOriginal)-1 AP(a,2) = i; a=a+1; else AP(a,2) = length(xOriginal)-1; a=a+1; end end end for j=1:length(AP(:,1)) SignalBaru{j} = xOriginal(AP(j,1):AP(j,2)); SignalBaruNorm{j} = xNorm(AP(j,1):AP(j,2)); end end

4. Source Code potongSignalZeroCrossing

Berikut merupakan source code potongSignalZeroCrossing. Berfungsi untuk mencari nilai zero-crossing dari sampel data suara hasil fungsi potongSignalEnergy.

function [SignalBaru,SignalBaruNorm] =

xOriginal =x;

x = x.';

% define the window

wintype = 'rectwin';

winlen = 201;

winamp = [0.5,1]*(1/winlen);

% find the zero-crossing rate

zc = zerocross(x,wintype,winamp(1),winlen); %% Edited mak = max(zc); rata = mean(zc); for i=1:length(zc) if zc(i) >= rata*0.75 zc(i) = mak; else zc(i) = 0; end end

% Fltering

b = [1/4 1/4 1/4 1/4];

zcNew = filter(b,1,zc);

%% Erosi & Dilasi

zcNew = im2bw(zcNew);

se = strel('rectangle',[1 300]);

zcNew = imerode(zc,se);

zcNew = imdilate(zcNew,se);

%% get The Data

AP = zeros(1,2);

a=1;

for i=2:length(zcNew)-1

if zcNew(i) == 0 && zcNew(i+1) == mak

AP(a,1) = i;

end

if zcNew(i) == mak && zcNew(i+1) == 0

AP(a,2) = i;

a=a+1;

end

if length(AP(:,1)) > 1 for i=1:length(AP(:,1)) SignalBaru{i} = xOriginal(AP(i,1):AP(i,2)); SignalBaruNorm{i} = xNorm(AP(i,1):AP(i,2)); end end if length(AP(:,1)) == 1 for i=1:length(AP(:,1)) SignalBaru = xOriginal; SignalBaruNorm = xNorm; end end

5. Source Code statistics

Berikut merupakan source code statistics. Berfungsi untuk mencari nilai mean, median, standar deviasi dan standar deviasi by mean.

function [statistic] = statistics(frames)

% statistic = mean,median,std,stdbymean,max,min

for i=1:length(frames(1,:))

statistic(i,1) = mean(frames(:,i)); statistic(i,2) = median(frames(:,i));

statistic(i,3) = std(frames(:,i));

statistic(i,4) = std(frames(:,i)) ./ (mean(frames(:,i))+eps); % statistic(i,5) = max(frames(:,i));

% statistic(i,6) = min(frames(:,i)); end

end

6. Source Code PilahData

Berikut merupakan source code PilahData. Berfungsi untuk memilah data sebelum dijadikan tiga kelompok data untuk 3-Fold Cross Validation

function [data label recPos] = pilahData(database)

% Memilah data suara untuk mengambil data yang dikenali sebagai kata

% data = ciri dari data suara % label = label dari ciri data

% recPos = posisi rekaman dari data suara

AllLabel(:,1) = database(:,2); % Mengambil semua Label data AllLabel = cell2mat(AllLabel); % Mengubah cell array menjadi matrix array

label1 = find(AllLabel==1); % Mengambil posisi ciri kata Hidup dalam database

label2 = find(AllLabel==2); % Mengambil posisi ciri kata Mati dalam database

label3 = find(AllLabel==3); % Mengambil posisi ciri kata Buka dalam database

label4 = find(AllLabel==4); % Mengambil posisi ciri kata Tutup dalam database

label5 = find(AllLabel==5); % Mengambil posisi ciri kata Lampu dalam database

label6 = find(AllLabel==6); % Mengambil posisi ciri kata TV dalam database

label7 = find(AllLabel==7); % Mengambil posisi ciri kata Pintu dalam database

label8 = find(AllLabel==8); % Mengambil posisi ciri kata Jendela dalam database

label9 = find(AllLabel==9); % Mengambil posisi ciri kata Ruang dalam database

label10 = find(AllLabel==10); % Mengambil posisi ciri kata Tamu dalam database

label11 = find(AllLabel==11); % Mengambil posisi ciri kata Kamar dalam database

label12 = find(AllLabel==12); % Mengambil posisi ciri kata Garasi dalam database

%% Mengambil matriks ciri data suara beserta label dan posisi pengambilan suaranya for i=1:length(label1) try d1(i,:) = cell2mat(database(label1(i),1)); l1(i,1) = AllLabel(label1(i),1); pos1(i,1) = cell2mat(database(label1(i),3)); catch d1(i,:) = zeros(1,52); l1(i,1) = 13; end pos1(i,1) = cell2mat(database(label1(i),3)); end for i=1:length(label2) try d2(i,:) = cell2mat(database(label2(i),1)); l2(i,1) = AllLabel(label2(i),1); pos2(i,1) = cell2mat(database(label2(i),3));

catch d2(i,:) = zeros(1,52); l2(i,1) = 13; pos2(i,1) = cell2mat(database(label2(i),3)); end end for i=1:length(label3) try d3(i,:) = cell2mat(database(label3(i),1)); l3(i,1) = AllLabel(label3(i),1); pos3(i,1) = cell2mat(database(label3(i),3)); catch d3(i,:) = zeros(1,52); l3(i,1) = 13; pos3(i,1) = cell2mat(database(label3(i),3)); end end for i=1:length(label4) try d4(i,:) = cell2mat(database(label4(i),1)); l4(i,1) = AllLabel(label4(i),1);

pos4(i,1) = cell2mat(database(label4(i),3)); catch d4(i,:) = zeros(1,52); l4(i,1) = 13; pos4(i,1) = cell2mat(database(label4(i),3)); end end for i=1:length(label5) try d5(i,:) = cell2mat(database(label5(i),1)); l5(i,1) = AllLabel(label5(i),1); pos5(i,1) = cell2mat(database(label5(i),3)); catch d5(i,:) = zeros(1,52); l5(i,1) = 13; pos5(i,1) = cell2mat(database(label5(i),3)); end end for i=1:length(label6) try d6(i,:) = cell2mat(database(label6(i),1));

l6(i,1) = AllLabel(label6(i),1); pos6(i,1) = cell2mat(database(label6(i),3)); catch d6(i,:) = zeros(1,52); l6(i,1) = 13; pos6(i,1) = cell2mat(database(label6(i),3)); end end for i=1:length(label7) try d7(i,:) = cell2mat(database(label7(i),1)); l7(i,1) = AllLabel(label7(i),1); pos7(i,1) = cell2mat(database(label7(i),3)); catch d7(i,:) = zeros(1,52); l7(i,1) = 13; pos7(i,1) = cell2mat(database(label7(i),3)); end end for i=1:length(label8) try

d8(i,:) = cell2mat(database(label8(i),1)); l8(i,1) = AllLabel(label8(i),1); pos8(i,1) = cell2mat(database(label8(i),3)); catch d8(i,:) = zeros(1,52); l8(i,1) = 13; pos8(i,1) = cell2mat(database(label8(i),3)); end end for i=1:length(label9) try d9(i,:) = cell2mat(database(label9(i),1)); l9(i,1) = AllLabel(label9(i),1); pos9(i,1) = cell2mat(database(label9(i),3)); catch d9(i,:) = zeros(1,52); l9(i,1) = 13; pos9(i,1) = cell2mat(database(label9(i),3)); end end for i=1:length(label10)

try d10(i,:) = cell2mat(database(label10(i),1)); l10(i,1) = AllLabel(label10(i),1); pos10(i,1) = cell2mat(database(label10(i),3)); catch d10(i,:) = zeros(1,52); l10(i,1) = 13; pos10(i,1) = cell2mat(database(label10(i),3)); end end for i=1:length(label11) try d11(i,:) = cell2mat(database(label11(i),1)); l11(i,1) = AllLabel(label11(i),1); pos11(i,1) = cell2mat(database(label11(i),3)); catch d11(i,:) = zeros(1,52); l11(i,1) = 13; pos11(i,1) = cell2mat(database(label11(i),3)); end end

for i=1:length(label12) try d12(i,:) = cell2mat(database(label12(i),1)); l12(i,1) = AllLabel(label12(i),1); pos12(i,1) = cell2mat(database(label12(i),3)); catch d12(i,:) = zeros(1,52); l12(i,1) = 13; pos12(i,1) = cell2mat(database(label12(i),3)); end end %% data = [d1;d2;d3;d4;d5;d6;d7;d8;d9;d10;d11;d12]; % Gabung matrix ciri data potongan suara

label = [l1;l2;l3;l4;l5;l6;l7;l8;l9;l10;l11;l12]; % gabung label data potongan suara

recPos =

[pos1;pos2;pos3;pos4;pos5;pos6;pos7;pos8;pos9;pos10;pos11;pos12]; % gabung posisi rekaman data suara

clc; end

7. Source Code ubahLuaran

Berikut merupakan source code ubahLuaran. Berfungsi untuk merubah label hasil JST kedalam bilangan desimal.

function [lT,lTS] = ubahLuaran(labelTesting,labelTraining) bantu = labelTraining for i=1:length(bantu) if bantu(i) == 1 lT(i,:) = [0 0 0 1]; end if bantu(i) == 2 lT(i,:) = [0 0 1 0]; end if bantu(i) == 3 lT(i,:) = [0 0 1 1]; end if bantu(i) == 4 lT(i,:) = [0 1 0 0]; end if bantu(i) == 5 lT(i,:) = [0 1 0 1]; end if bantu(i) == 6 lT(i,:) = [0 1 1 0];

end if bantu(i) == 7 lT(i,:) = [0 1 1 1]; end if bantu(i) == 8 lT(i,:) = [1 0 0 0]; end if bantu(i) == 9 lT(i,:) = [1 0 0 1]; end if bantu(i) == 10 lT(i,:) = [1 0 1 0]; end if bantu(i) == 11 lT(i,:) = [1 0 1 1]; end if bantu(i) == 12 lT(i,:) = [1 1 0 0]; end end bantu2 = labelTesting for i=1:length(bantu2)

if bantu(i) == 1 lTS(i,:) = [0 0 0 1]; end if bantu(i) == 2 lTS(i,:) = [0 0 1 0]; end if bantu(i) == 3 lTS(i,:) = [0 0 1 1]; end if bantu(i) == 4 lTS(i,:) = [0 1 0 0]; end if bantu(i) == 5 lTS(i,:) = [0 1 0 1]; end if bantu(i) == 6 lTS(i,:) = [0 1 1 0]; end if bantu(i) == 7 lTS(i,:) = [0 1 1 1]; end if bantu(i) == 8 lTS(i,:) = [1 0 0 0];

end if bantu(i) == 9 lTS(i,:) = [1 0 0 1]; end if bantu(i) == 10 lTS(i,:) = [1 0 1 0]; end if bantu(i) == 11 lTS(i,:) = [1 0 1 1]; end if bantu(i) == 12 lTS(i,:) = [1 1 0 0]; end end end

8. Source Code ujiJST_BP

Berikut merupakan source code ujiJST_BP. Berfungsi untuk melakukan klasifikasi dan pengenalan dari data yang dimasukkan.

function [confMat,akurasi] =

ujiJST_BP(dataTesting,labelTesting,dataTraining,labelTraining,hidden layer)

% membuat feed-forward backpropagation network net = newff(dataTraining', labelTraining', hiddenlayer);

%7. Membentuk model JST

[net, tr] = train(net,dataTraining', labelTraining');

%8. Menguji model

out = sim(net,dataTesting');

out=round(out); %nilai di atas 0.5 akan dibulatkan ke atas [y_out, idx]=max(out);

% Ubah ke desimal

oout = ubahkeDesimal(out');

LT = ubahkeDesimal(labelTesting);

%9. Membandingkan luaran dengan target % LT = labelTesting'; % confMat=confusionmat(LT(1,:),out); try confMat=confusionmat(LT',oout'); %10. Akurasi model akurasi=(sum(diag(confMat))/sum(sum(confMat)))*100;

catch

confMat=0; akurasi=0; end

D. Lampiran Tabel Hasil Proses Perhitungan Menggunakan Mel Frequency Cepstral Coefficients

Baca selengkapnya

Dokumen terkait