Kamis, 20 Desember 2018

BubbleSort Matlab

>> A=rand(1,8)

A =

    0.4505    0.0838    0.2290    0.9133    0.1524    0.8258    0.5383    0.9961

>> B=bubblesort(A)

B =

    0.0838    0.1524    0.2290    0.4505    0.5383    0.8258    0.9133    0.9961


Adapun Fungsinya adalah sbb:


function x = bubblesort(x)

n = length(x);
while (n > 0)
    nnew = 0;
    for i = 2:n
        if (x(i) < x(i - 1))
            x = swap(x,i,i - 1);
            nnew = i;
        end
    end
    n = nnew;
end

end

function x = swap(x,i,j)
val = x(i);
x(i) = x(j);
x(j) = val;

end


Rabu, 19 Desember 2018

Implementasi Matlab Untuk Tingkat kesegaran Ikan


Yuk Kita Buat GUInya :



Jika nanti dijalankan ahsilnya sbb:




Lalu atur propertis nama TAGnya di setiap itemnya


Lalu pada Button kita kasih Koding




Code ahirnya dalah sbb:

function varargout = myGUI(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @myGUI_OpeningFcn, ...
                   'gui_OutputFcn',  @myGUI_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

function myGUI_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);



function btnPilih_Callback(hObject, eventdata, handles)
[handles.namafile,handles.direktori]=uigetfile({'*.xls;*.xlsx','file excel(*.xls,*.xlsx)';'*.*','semua file(*.*)'},'buka file xls master');
I=fullfile(handles.direktori,handles.namafile);

if ~isequal(handles.namafile, 0)
set(handles.edPath,'String',I);
    [a,b,c]=xlsread(I); 

    header= {'Kategori', 'Jam', 'Jenis Ikan', 'bagian', 'R', 'G', 'B'};
    ba=size(c,1);
    co=size(c,2);
    mulaike=2;
    mydata=c(mulaike:ba,1:co);
    rnames = linspace(1,ba-mulaike+1,ba-mulaike+1);

jml=['Total Data Latih ' num2str(ba-1) ' Item']
        set(handles.myTabel1,'data',mydata,'ColumnName',header,'RowName',rnames);
        set(handles.myTabel1,'Userdata',mydata);
        set(handles.txtTotal,'String',jml);
       
       
 r1=10;
 r2=18;
 r3=27;

 ar1=cell2mat(c(2:r1,5));
 ag1=cell2mat(c(2:r1,6));
 ab1=cell2mat(c(2:r1,7));

 ar2=cell2mat(c(r1+1:r2,5));
 ag2=cell2mat(c(r1+1:r2,6));
 ab2=cell2mat(c(r1+1:r2,7));

 ar3=cell2mat(c(r2+1:r3,5));
 ag3=cell2mat(c(r2+1:r3,6));
 ab3=cell2mat(c(r2+1:r3,7));

minr1=min(ar1);
ming1=min(ag1);
minb1=min(ab1);

minr2=min(ar2);
ming2=min(ag2);
minb2=min(ab2);

minr3=min(ar3);
ming3=min(ag3);
minb3=min(ab3);


maxr1=max(ar1);
maxg1=max(ag1);
maxb1=max(ab1);

maxr2=max(ar2);
maxg2=max(ag2);
maxb2=max(ab2);

maxr3=max(ar3);
maxg3=max(ag3);
maxb3=max(ab3);



header= {'Kategori', 'Rmin', 'Rmax', 'Gmin', 'Gmax', 'Bmin', 'Bmax'};
rnames = linspace(1,3,3);
mydata2(1,1)={'Segar'};
mydata2(1,2)={minr1};
mydata2(1,3)={maxr1};
mydata2(1,4)={ming1};
mydata2(1,5)={maxg1};
mydata2(1,6)={minb1};
mydata2(1,7)={maxb1};

mydata2(2,1)={'Cukup Segar'};
mydata2(2,2)={minr2};
mydata2(2,3)={maxr2};
mydata2(2,4)={ming2};
mydata2(2,5)={maxg2};
mydata2(2,6)={minb2};
mydata2(2,7)={maxb2};

mydata2(3,1)={'Tidak Segar'};
mydata2(3,2)={minr3};
mydata2(3,3)={maxr3};
mydata2(3,4)={ming3};
mydata2(3,5)={maxg3};
mydata2(3,6)={minb3};
mydata2(3,7)={maxb3};

set(handles.myTabel2,'data',mydata2,'ColumnName',header,'RowName',rnames);
set(handles.myTabel2,'Userdata',mydata2);
       
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
header= {'Linguistic Term', 'R', 'G', 'B'};
rnames = linspace(1,3,3);
mydata3(1,1)={'Low'};
mydata3(1,2)={'10-91'};
mydata3(1,3)={'11-76'};
mydata3(1,4)={'14-87'};

mydata3(2,1)={'Medium'};
mydata3(2,2)={'14-93'};
mydata3(2,3)={'16-90'};
mydata3(2,4)={'27-88'};

mydata3(3,1)={'High'};
mydata3(3,2)={'44-96'};
mydata3(3,3)={'42-93'};
mydata3(3,4)={'41-97'};

set(handles.myTabel3,'data',mydata3,'ColumnName',header,'RowName',rnames);
set(handles.myTabel3,'Userdata',mydata3);


header= {'Linguistic Term', 'Range'};
rnames = linspace(1,3,3);
mydata4(1,1)={'Segar'};
mydata4(1,2)={'11-76'};

mydata4(2,1)={'Cukup Segar'};
mydata4(2,2)={'27-88'};

mydata4(3,1)={'Tidak Segar'};
mydata4(3,2)={'41-97'};

set(handles.myTabel4,'data',mydata4,'ColumnName',header,'RowName',rnames);
set(handles.myTabel4,'Userdata',mydata4);


end   



function btnBersih_Callback(hObject, eventdata, handles)
proyek=guidata(gcbo);
mau=questdlg(['Reset ' get(proyek.figure1,'Name')''],['Anda ingin Reset  Aplikasi ini?'],'Ya','Tidak','Ya');
if strcmp(mau,'Tidak')
return;
else
    %str=date;
    %set(handles.edjoindate,'String',str);
    set(handles.myTabel1,'data',[],'ColumnName',[],'RowName',[]);
    set(handles.myTabel1,'Userdata',[]);
    set(handles.myTabel2,'data',[],'ColumnName',[],'RowName',[]);
    set(handles.myTabel2,'Userdata',[]);
   
     set(handles.myTabel3,'data',[],'ColumnName',[],'RowName',[]);
    set(handles.myTabel3,'Userdata',[]);
     set(handles.myTabel4,'data',[],'ColumnName',[],'RowName',[]);
     set(handles.myTabel4,'Userdata',[]);
   
   
     set(handles.edPath,'String','');
     set(handles.edMR,'String','');
     set(handles.edMG,'String','');
     set(handles.edMB,'String','');
     set(handles.edPath2,'String','');
   
     set(handles.edHasil1,'String','');
     set(handles.edHasil2,'String','');
     set(handles.edProses,'String','');
   
     set(handles.txtTotal,'String','Total DataLatih 0 Item');

     cla(handles.axes1,'reset');
     cla(handles.axes2,'reset');
     cla(handles.axes3,'reset');
     cla(handles.axes4,'reset');
     cla(handles.axes5,'reset');
   
end


function btnPilih2_Callback(hObject, eventdata, handles)

[handles.namafile,handles.direktori]=uigetfile({'*.jpg;*.bmp','file Image(*.jpg,*.bmp,*.bmp)';'*.*','semua file(*.*)'},'buka file xls master');
I=fullfile(handles.direktori,handles.namafile);

if ~isequal(handles.namafile, 0)
    Matrix=imread(I);
    set(handles.figure1,'CurrentAxes',handles.axes1);
    imshow(Matrix);
    set(handles.axes1,'Userdata',Matrix);
   
   
    MatrixHSV=rgb2hsv(Matrix);
    set(handles.figure1,'CurrentAxes',handles.axes5);
    imshow(MatrixHSV);
    set(handles.axes5,'Userdata',MatrixHSV);
   
    set(handles.btnRGB,'Enable','on');
    set(handles.edPath2,'String',I);
end


function btnRGB_Callback(hObject, eventdata, handles)
Matrix=get(handles.axes1,'Userdata');

R=Matrix(:,:,1);
    set(handles.figure1,'CurrentAxes',handles.axes2);
    imshow(R);
    set(handles.axes2,'Userdata',R);
   
G=Matrix(:,:,2);
    set(handles.figure1,'CurrentAxes',handles.axes3);
    imshow(G);
    set(handles.axes3,'Userdata',G);
   
B=Matrix(:,:,3);
    set(handles.figure1,'CurrentAxes',handles.axes4);
    imshow(B);
    set(handles.axes4,'Userdata',B);
   
MR=mean(mean(R));
MG=mean(mean(G));
MB=mean(mean(B));
set(handles.edMR,'String',num2str(MR));
set(handles.edMG,'String',num2str(MG));
set(handles.edMB,'String',num2str(MB));
 set(handles.btnRGB,'Enable','off');


function btnExit_Callback(hObject, eventdata, handles)
close;













Minggu, 11 November 2018

Menu Editor Matlab

Setelah membuat halaman kosong + backgroud, agar menarik dan hemat tempat buatlah menu editor

Tools-Menu Editor

Buat link sebagai berikut:


function mnuAdmin_Callback(hObject, eventdata, handles)
admin; %memanggil halaman admin

function mnuEmployes_Callback(hObject, eventdata, handles)
matlabEmploye;%memanggil halaman employee

function mnuValue_Callback(hObject, eventdata, handles)
value;%memanggil halaman value

function mnuAplikasi_Callback(hObject, eventdata, handles)
aplikasi;%memanggil halaman aplikasi

function mnuLogout_Callback(hObject, eventdata, handles)
exit;%keluar aplikasi


CMIIW

Matlab 64bit ke Database



1.Download driver Matlab ke databse mysql  mysql-connector-java-3.1.14-bin
2.File jar yag di dapat copas ke C:\Program Files\MATLAB\R2017a\java\jar

3.Buka file C:\Program Files\MATLAB\R2017a\toolbox\local\classpath.txt menggunakan notepad, dan letakkan kode sbb di bagian bawahnya:
$matlabroot/java/jar/mysql-connector-java-3.1.14-bin.jar




4.Buat database db_matlab dengan tabel sbb

CREATE TABLE `tb_admin` (
  `kode_admin` varchar(15) NOT NULL,
  `name` varchar(30) NOT NULL,
  `username` varchar(20) NOT NULL,
  `password` varchar(30) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE `tb_employe` (
  `nik` varchar(15) NOT NULL,
  `name` varchar(30) NOT NULL,
  `join_date` varchar(20) NOT NULL,
  `divisi` varchar(20) NOT NULL,
  `department` varchar(20) NOT NULL,
  `tempat_lahir` varchar(30) NOT NULL,
  `tanggal_lahir` varchar(20) NOT NULL,
  `jenis_kelamin` varchar(20) NOT NULL,
  `agama` varchar(15) NOT NULL,
  `pendidikan_terakhir` varchar(15) NOT NULL,
  `jurusan` varchar(30) NOT NULL,
  `status` varchar(30) NOT NULL,
  `alamat` varchar(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `tb_value` (
  `id` int(11) NOT NULL,
  `nik` varchar(20) NOT NULL,
  `tanggal_nilai` varchar(20) NOT NULL,
  `month` varchar(20) NOT NULL,
  `year` varchar(10) NOT NULL,
  `age` varchar(10) NOT NULL,
  `nilai` varchar(10) NOT NULL,
  `note` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE `tb_admin`
  ADD UNIQUE KEY `kode_admin` (`kode_admin`);

ALTER TABLE `tb_value`
  ADD UNIQUE KEY `id` (`id`);

ALTER TABLE `tb_value`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=607;
COMMIT;

++++++++++++++++++++++++++++
Sehingga hasilnya adalah sebagai berikut





Atau penampakan keseluruhannya adalah sbb:

5.Langkah selanjutnya adalah kita membuat code CRUD:create Read Update dan Delete tb_admin

A.Buat fungsi koneksiadmin() gunanya sebagai penghubung tb_admin dengan database

function [con,table,kolom] = koneksiadmin()
url = 'jdbc:mysql://localhost:3306/';
table='tb_admin';
kolom = {'kode_admin', 'name', 'username', 'password'};
con = database('db_matlab', 'root', '', 'com.mysql.jdbc.Driver', url);
end

B.Buat fungsi lihatadmin() gunanya sebagai code melihat tb_admin database ke database

function [ kolom,mydata,no ] = lihatadmin(varargin)
[con,table,kolom]=koneksiadmin();

tabel=varargin{1};
SQL=['SELECT * FROM ' tabel];
    if length(varargin)==3
        pk=varargin{2};
        kode=varargin{3};

        setdbprefs('NullNumberWrite', 'NaN');
        SQL=['select * from ' tabel ' where ' pk ' like ''%', kode, '%'''];
    end
    curs = exec(con,SQL);
    curs = fetch(curs);
    mydata=curs.Data;
    baris=size(mydata,1);
    no=linspace(1,baris,baris); 
end




C.Membuat Fungsi autoadmin(), gunanya untuk membuat kode autocode kode_admin.....

function [ AU ] = autoadmin( varargin )
[con,table,kolom]=koneksiadmin();
%kode='KAT1407000';
tabel=varargin{1};
pk=varargin{2};
pre=varargin{3};
setdbprefs('NullNumberWrite', 'NaN');
    SQL=['SELECT * FROM ' tabel '  order by ' pk ' desc' ];
    curs = exec(con,SQL);
    curs = fetch(curs);
    mydata=curs.Data;
    baris=size(mydata,1);
 
th=year(date);
bl=month(date);
thn=num2str(th);
thn=thn(3:4);
bln=num2str(bl);
C=1;
if bl<10
    bln=['0' bln];
end
kode=[pre thn bln '001'];
[AU]=[pre thn bln];
if baris>0
    kode=cell2mat(mydata(1,1));
    if strcmp(kode,'No Data')>0
        C=1;
    else
        C1=kode(8:10);
        C=str2num(C1)+1;
        YL=kode(4:5);
        ML=kode(6:7);
        [AU]=[pre YL ML];
        if str2num(thn)~=str2num(YL)
            C=1;
        elseif str2num(bln)~=str2num(ML)
            C=1;
        end

    end   
end

if C <10
  [AU]=[AU '00' num2str(C)];
elseif C <100
  [AU]=[AU '0' num2str(C)];
else
  [AU]=[AU num2str(C)];
end

end


D.Membuat GUI CRUD Admin



E.Buat code sbb di dalamnya:


function varargout = admin(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @admin_OpeningFcn, ...
                   'gui_OutputFcn',  @admin_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

function admin_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
axes(handles.axes2); %memilih axes1 sebagai letak gambar yang dimunculkan
imshow('logo.jpeg');
axes(handles.axes3); %memilih axes1 sebagai letak gambar yang dimunculkan
imshow('bg2.jpeg');
axes(handles.axes4); %memilih axes1 sebagai letak gambar yang dimunculkan
imshow('bg2.jpeg');

global kode_admin;
handles.pk='kode_admin';
handles.tabel='tb_admin';
handles.pre='ADM';

[kolom,mydata,no ]=lihatadmin(handles.tabel,handles.pk);
set(handles.myTable,'data',mydata,'ColumnName',kolom,'RowName',no);
set(handles.myTable,'Userdata',mydata); T=size(mydata,1); [tot]=['Total '
num2str(T) ' data']; set(handles.txtTotal,'String',tot);


[AU]=autoadmin(handles.tabel,handles.pk,handles.pre);
set(handles.edkodeadmin,'String',AU);
guidata(hObject, handles);

guidata(hObject, handles);


function btnSimpan_Callback(hObject, eventdata, handles)
 kode_admin=get(handles.edkodeadmin,'String');
 name=get(handles.edname,'String');
 username=get(handles.edusername,'String');
 password=get(handles.edpassword,'String');

    [con,table,kolom]=koneksiadmin();
 
    kolomsimpan = {'kode_admin', 'name', 'username', 'password'};
    arData = {kode_admin, name,username,password};
        fastinsert(con,table,kolomsimpan,arData);
        showtabel('Simpan',handles);
 
function btnUbah_Callback(hObject, eventdata, handles)
 kode_admin=get(handles.edkodeadmin,'String');
 name=get(handles.edname,'String');
 username=get(handles.edusername,'String');
 password=get(handles.edpassword,'String');

[con,table,kolom]=koneksiadmin();
    [SQL]= ['update tb_admin set name=''', name, ''',username=''', username,''',password=''', password, ''' where kode_admin=''', kode_admin, ''''];
  sqls=cell2mat(SQL)
  curs = exec(con,sqls);
    exec(con, 'rollback');
    exec(con, 'commit');
 
showtabel('Ubah',handles);

function btnHapus_Callback(hObject, eventdata, handles)
 kode_admin=get(handles.edkodeadmin,'String');
[con,table,kolom]=koneksiadmin();
    [SQL]=['delete from tb_admin where kode_admin='''  kode_admin  ''''];
    curs = exec(con,SQL);
      sqls=cell2mat(SQL)
  curs = exec(con,sqls);exec(con, 'rollback');
    exec(con, 'commit');
showtabel('Hapus',handles);

function btnReset_Callback(hObject, eventdata, handles)
proyek=guidata(gcbo);
mau=questdlg(['Reset ' get(proyek.figure1,'Name')''],['Anda ingin Reset  Aplikasi ini?'],'Ya','Tidak','Ya');
if strcmp(mau,'Tidak')
return;
else

    hm = msgbox('Reset','Reset Sukses','help');
    showtabel('Clear',handles);
end

function btnTutup_Callback(hObject, eventdata, handles)
close();



function showtabel(proses,handles)
tabel=handles.tabel;
pk=handles.pk;
[kolom,mydata,no ]=lihatadmin(tabel,pk);
set(handles.myTable,'data',mydata,'ColumnName',kolom,'RowName',no);
set(handles.myTable,'Userdata',mydata);
T=size(mydata,1);
[tot]=['Total ' num2str(T) ' data'];
set(handles.txtTotal,'String',tot);

[AU]=autoadmin(handles.tabel,handles.pk,handles.pre);
    set(handles.edkodeadmin,'String',AU);
    set(handles.edname,'String','');
    set(handles.edusername,'String','');
    set(handles.edpassword,'String','');
[ps]=['Sukses Proses ' proses];
msgbox(ps,proses,'help');


function myTable_CellSelectionCallback(hObject, eventdata, handles)
try
    al= eventdata.Indices;
    dataseleksi=get(handles.myTable,'Userdata');
    getdata=dataseleksi(al);
    kode=getdata{1};
 
    [kolom,mydata,no ] = lihatadmin(handles.tabel,handles.pk,kode);
    var1=mydata(1,1);
    var2=mydata(1,2);
    var3=mydata(1,3);
    var4=mydata(1,3);
 
    set(handles.edkodeadmin,'string',var1);
    set(handles.edname,'string',var2);
    set(handles.edusername,'string',var3);
    set(handles.edpassword,'string',var4);

catch
    [AU]=autoadmin(handles.tabel,handles.pk,handles.pre);
    set(handles.edkodeadmin,'string',AU);
    set(handles.edname,'string','');
    set(handles.edusername,'string','');
    set(handles.edpassword,'string','');
end



F.Hasil ahirnya adalah sbb:




Bila salah satu data pada tabel kita pilih/klik maka data tersebut akan terseleksi ke atas dan siap untuk di modifikasi (ubah / dihapus).....



CMIIW











Sabtu, 10 November 2018

POPUP MENU MATLAB


How Get VALUE POPUP MENU

function pilAgama_Callback(hObject, eventdata, handles)
ar= get(handles.pilAgama, 'String');
v = get(handles.pilAgama, 'value');        
hasil=cell2mat(ar(v));
set(handles.pilAgama, 'Userdata',hasil); 






How SET VALUE POPUP MENU:

         v=1;
         if(strcmp(agama,'Islam')>0)
             v=1;
         elseif(strcmp(agama,'Kristen')>0)
             v=2;
         elseif(strcmp(agama,'Hindu')>0)
             v=3;
         elseif(strcmp(agama,'Budha')>0)
             v=4;   
         end 
         set(handles.pilAgama, 'Value', v);



How SET STRING POPUP MENU:


a='you';b='are';c='crazy'
s=char(a,b,c);  %s         3x5                30  char   

set(handles.pilNIK,'string',s);



How SET STRING POPUP MENU FROM DATABASE:

[arkode,arnama] = aremployee( 'tb_employe' );

set(handles.pilNIK,'string',arkode);


function [kode,nama] = aremployee( tabel )
[con]=koneksivalue();
setdbprefs('NullNumberWrite', 'NaN');
    SQL=['SELECT nik,name FROM ' tabel '  order by nik asc' ];
    curs = exec(con,SQL);
    curs = fetch(curs);
    mydata=curs.Data;
    baris=size(mydata,1); 
    kode=mydata(:,1);
    nama=mydata(:,2);

end

function [con] = koneksivalue()
url = 'jdbc:mysql://localhost:3306/';
con = database('db_matlab', 'root', '', 'com.mysql.jdbc.Driver', url);

end




Menghitung Selisih Tanggal

Di database Matlab menyimpan tanggal dalam format string...

Misal:

str=date
    '10-Nov-2018'

Dan jika kita k=ingin mncari selisih dari dua string  tanggal tersebut maka gunakan rumus sbb:

A=datetime('02-Nov-2018','InputFormat','dd-MM-yyyy');
B=datetime('12-Nov-2018','InputFormat','dd-MM-yyyy');
numdays = datenum(A) - datenum(B);


HASIL:
  A            1x1                17  datetime             
  B            1x1                17  datetime             
  numdays      1x1                 8  double               

A = 02-Nov-2018
B = 12-Nov-2018
numdays =-10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++





Jumat, 17 Agustus 2018

MFCC Audio File

download file latihan


A.Pre-emphasis
the speech signal s(n) is sent to a high-pass filter:
s2(n) = s(n) - a*s(n-1)
where s2(n) is the output signal and the value of a is usually between 0.9 and 1.0. The z-transform of the filter is
H(z)=1-a*z-1

figure;
waveFile='sunday.wav';
[y,fs]=audioread(waveFile);
nbits=8;
y=y*2^nbits/2;
subplot(2,1,1);
time=(1:length(y))/fs;
plot(time, y); axis([min(time), max(time), -2^nbits/2, 2^nbits/2]);
xlabel('Time (seconds)'); ylabel('Amplitude'); title('Waveforms of "sunday"');

frameSize=512;
index1=0.606*fs;
index2=index1+frameSize-1;
line(time(index1)*[1, 1], 2^nbits/2*[-1 1], 'color', 'r');
line(time(index2)*[1, 1], 2^nbits/2*[-1 1], 'color', 'r');
subplot(2,1,2);
time2=time(index1:index2);
y2=y(index1:index2);
plot(time2, y2, '.-'); axis([min(time2), max(time2), -2^nbits/2, 2^nbits/2]);
xlabel('Time (seconds)'); ylabel('Amplitude'); title('Waveforms of the voiced "ay" in "sunday"');



B.Frame blocking
The input speech signal is segmented into frames of 20~30 ms with optional overlap of 1/3~1/2 of the frame size. 
Usually the frame size (in terms of sample points) is equal to power of two in order to facilitate the use of FFT. If this is not the case, we need to do zero padding to the nearest length of power of two. If the sample rate is 16 kHz and the frame size is 320 sample points, then the frame duration is 320/16000 = 0.02 sec = 20 ms. Additional, if the overlap is 160 points, then the frame rate is 16000/(320-160) = 100 frames per second.



C.Hamming windowing

Each frame has to be multiplied with a hamming window in order to keep the continuity of the first and the last points in the frame (to be detailed in the next step). If the signal in a frame is denoted by s(n), n = 0,…N-1, then the signal after Hamming windowing is s(n)*w(n), where w(n) is the Hamming window defined by:
w(n, a) = (1 - a) - a cos(2pn/(N-1)),0≦n≦N-1
Different values of a corresponds to different curves for the Hamming windows shown next:



D.Fast Fourier Transform or FFT

Spectral analysis shows that different timbres in speech signals corresponds to different energy distribution over frequencies. Therefore we usually perform FFT to obtain the magnitude frequency response of each frame.
When we perform FFT on a frame, we assume that the signal within a frame is periodic, and continuous when wrapping around. If this is not the case, we can still perform FFT but the incontinuity at the frame's first and last points is likely to introduce undesirable effects in the frequency response. To deal with this problem, we have two strategies:
  1. Multiply each frame by a Hamming window to increase its continuity at the first and last points.
  2. Take a frame of a variable size such that it always contains a integer multiple number of the fundamental periods of the speech signal.
The second strategy encounters difficulty in practice since the identification of the fundamental period is not a trivial problem. Moreover, unvoiced sounds do not have a fundamental period at all. Consequently, we usually adopt the first strategy to mutiply the frame by a Hamming window before performing FFT. The following example shows the effect of multiplying a Hamming window.


fs=8000; t=(1:512)'/fs; f=306.396; original=sin(2*pi*f*t)+0.2*randn(length(t),1); windowed=original.*hamming(length(t));
plot(t, original); grid on; axis([-inf inf -1.5 1.5]); title('Original signal'); plot(t, windowed); grid on; axis([-inf inf -1.5 1.5]); title('Windowed signal');


PLOT AUDIO

[ clean, fs ] = audioread( 'tes.wav' );
plotWave_YW(1, clean, fs, 'time', 0, 'clean speech');


plotWave_YW(1, clean, fs, 'time', 1, 'clean speech');


plotWave_YW(0, clean, fs, 'time', 1, 'clean speech');



 function plotWave_YW(newFig, signal, fs, type, x_axis, name, removeFreq, frame)
%%     By YI-WEN CHEN, 2017 / Jarvus Studio
%     1. Plot signal wave in time or frequency domain
%     2. Choose x-axis as time or samples 
%     3. Remove spectral energy under a value when show the spectrogram
%     Read more at http://jarvus.dragonbeef.net/note/noteAudioPlot.php
% 
%     Required Input Parameters : 
%       newFig      Create in a new figure window ( 0:No, 1:Yes )
%       signal      Speech data
%       fs          Sampling frequency (Hz)
%       type        'time' or 'freq'
%     Optional Input Parameters : 
%       x_axis      0: samples, 1: time
%       name        Figure title
%       removeFreq  Threshold for  spectral energy
%       frame       Frame size for spectrogram (ms)
% %     example :
%     [ clean, fs ] = audioread( 'sp10.wav' );
% %     open a new figure, plot in time domain
% %     show index as x-axis, titile is 'clean speech'
%     plotWave_YW(1, clean, fs, 'time', 0, 'clean speech');
% %     open a new figure, plot in time domain
% %     show time as x-axis, titile is 'clean speech'
%     plotWave_YW(1, clean, fs, 'time', 1, 'clean speech');
% %     open a new figure, plot in frequency domain
% %     titile is 'clean speech'
%     plotWave_YW(1, clean, fs, 'freq', 1, 'clean speech');
% %     open a new figure, plot in frequency domain
% %     titile is 'clean speech', remove spectral energy when under 0
%     plotWave_YW(1, clean, fs, 'freq', 1, 'clean speech',0);
% %     use subplot, so the first parameter should be zero 
%     figure;
%     subplot(2,1,1);
%     plotWave_YW(0, clean, fs, 'time', 1, 'clean speech');
%     subplot(2,1,2);
%     plotWave_YW(0, clean, fs, 'freq', 1, 'clean speech');

    if ( nargin < 5)
        x_axis = 0;
    end
    if ( nargin < 7)
        removeFreq = 0;
    end
    if ( nargin < 8)
        frame = 32;
    end
    s_length = length(signal);
    sampleTime = ( 1:s_length )/fs;
    frameSize = fix(frame*0.001*fs);
    if ( newFig == 1 )
        figure;
    end
    if ( strcmp(type, 'time') && x_axis == 0)
        plot(signal);
        if ( nargin > 5 )
            title(name)
        end    
        xlabel('Samples');ylabel('Amplitude');
    end
    if ( strcmp(type, 'time') && x_axis == 1)
        plot(sampleTime, signal);
        if ( nargin > 5 )
            title(name)
        end
        xlabel('Time (s)');ylabel('Amplitude');
    end
    if ( strcmp(type, 'freq') )
        [B,f,T] = specgram(signal,frameSize*2,fs,hanning(frameSize),round(frameSize/2));
        B = 20*log10(abs(B));
        if ( nargin > 6 ) 
            B_idx =  B <= removeFreq ;
            B(B_idx) = -50;
        end
        imagesc(T,f,B);axis xy;colorbar
        if ( nargin > 5 )
            title(['Spectrogram' ' - ' name]);
        end
        xlabel('Time (s)');ylabel('Frequency (Hz)'); 
    end

end

Selasa, 14 Agustus 2018

Pengolahan Sinyal Audio

LPC

Linear Predictive Coding (LPC)
adalah salah satu teknik yang efektif untuk menganalisa suara
dan salah satu metode yang sering digunakan untuk menghasilkan kualitas suara yang baik dengan bit yang rendah.

LPC Pitch dan LPC Voice Excited
Parameter LPC al: koefisien prediksi, gain, dan pitch u perbaikan rekontruksi suara yang baik.

Voice excited LPC digunakan perhitungan DCT untuk membangkitkan sinyal energi dengan beberapa koefisien sehingga memberikan rekontruksi sinyal yang lebih bila dibandingkan dengan plain LPC yang menggunakan perhitungan pitch.

Perbandingan keluaran dari plain LPC dan voice excited LPC.
Keluaran sinyal yang dihasilkan pada plain LPC hampir tidak jelas terdengar.
Sedangkan sinyal keluaran pada voice excited LPC lebih terdengar jelas tetapi
menggunakan total bit yang lebih banyak dibandingkan dengan plain LPC.

Terlihat bahwa untuk mendapatkan kualitas keluaran sinyal yang lebih baik maka dibutuhkan
total bit yang lebih besar.

++++++++++++++++++++
Umumnya LPC digunakan karena menyediakan pemodelan yang baik untuk sinyal suara,
LPC dapat dengan mudah dan langsung diterapkan baik secara perangkat lunak maupun perangkat keras karena perhitungan matematis yang dilibatkan realtif lebih singkat dari metode-metode yang dikenal sebelumnya.

Fast Fourier transform (FFT) menjadi penting untuk bermacam–macam aplikasi, dari pengolahan sinyal digital dan memecahkan persamaan diferensial parsial menjadi algoritma-algoritma untuk penggandaan bilangan integer dalam jumlah yang banyak.

Secara garis besar, cara kerja sistem pengenalan suara ini ialah

+mula-mula sinyal suara manusia yang diterima dengan menggunakan microphone (sinyal analog) dicuplik sehingga menjadi sinyal digital dengan bantuan sound card pada komputer.

+Sinyal digital hasil cuplikan ini terlebih dulu dinormalisasi kemudian diproses awal menggunakan metode LPC sehingga didapat beberapa koefisien LPC yang merupakan feature (ciri) dari suara pembicaraan.

+Kemudian koefisien LPC tersebut diproses dengan Fast Fourier Transform (FFT) untuk mendapatkan sinyal pada domain frekuensi. Hal ini bertujuan agar perbedaan antar pola kata yang satu dengan yang lain terlihat lebih jelas sehingga ekstraksi parameter sinyal memberikan hasil yang lebih baik. Hasil keluaran FFT ini akan di compare sebagai fungsi utama dari sistem untuk proses pengenalan.


LPC melakukan analisis dengan cara memperkirakan formant,
memisahkan  formant  dari sinyal, yang dinamakan proses  inverse  filtering,
lalu mengestimasi intensitas dan frekuensi dari sinyal percakapan yang  tersisa, yang disebut  residue.

Karena sinyal percakapan bervariasi seiring waktu, estimasi tersebut dilakukan untuk setiap potongan kecil dari sinyal, yang  dinamakan frame.
Prosedur untuk mendapatkan koefisien LPC diperlihatkan pada gambar dibawah.




1. Preemphasis :
Proses dimana sinyal / speech ucapan sirubah menjadi sinyal
Preemphasis terhadap cuplikan sinyal dengan persamaan preemphasizer:
s (n) = s(n)- as(n -1) atau 
s(n) = s(n) – 0.95 s(n − 1) 
dengan s(n) adalah sampel ke-n dan harga a yang paling sering digunakan ialah 0.95. 

jadi..pada langkah ini dilakukan filtering terhadap sinyal menggunakan FIR filter orde satu untuk meratakan spektral sinyal tersebut. Proses ini mencakup penambahan energi suara pada frekuensi tinggi.
di mana as(n) adalah sinyal yang ditekan, sedangkan s(n) adalah sinyal terdigitasi. Koefisien dengan nilai 0.95 menunjukkan sinyal yang diekstrak merupakan 95 % sinyal aslinya


2. Blocking into frames / Tracking :
Pada langkah ini sinyal ucapan yang telah teremphasis dibagi menjadi beberapa frame (bingkai)
dengan masing-masing frame memuat N sampel sinyal dan frame yang saling yang berdekatan dipisahkan sejauh M sample.

Menyusun sinyal ke dalam bingkai yang lebih pendek. Panjang frame yang membagi setiap
sample menjadi beberapa frame berdasarkan waktu terletak di antara 20 hingga 40 ms . Dengan asumsi bahwa frekuensi suara 18 kHz, maka sampel yang akan diekstrak adalah 0,025 detik * 18.000 Hz = 450 sampel.

Semakin M < N semakin baik perkiraan spektral LPC dari frame ke frame.



3. FrameWindowing :
Windowing (Penjendelaan) merupakan proses pembobotan terhadap setiap frame yang telah dibentuk
pada langkah sebelumnya menggunakan fungsi Window. Ada dua fungsi window yang biasa digunakan, yaitu
Rectangular Window dan Hamming Window. 

Fungsi window ini menghasilkan sinyal yang diskontinyu.
Salah satu cara untuk menghindari diskontinyu pada ujung window adalah dengan
meruncingkan sinyal menjadi nol atau dekat dengan nol sehingga dapat mengurangi kesalahan.

Rectangular Window yang didefinisikan untuk meminimalkan pada bagian awal dan akhir sinyal.
Jika definisikan sebuah window w(n) dan sinyal tiap bagian adalah x(n) .




Fungsi Hamming digunakan seperti bentuk jendela dengan mempertimbangkan blok berikutnya dalam rantai pemrosesan ekstraksi fitur dan memadukan semua
garis frekuensi terdekat. 

Fungsi Hamming Window didefinisikan sebagai:

Artinya HammingWindow untuk sampel ke-n adalah:  W(n) =0.54-0.46 cos (2Ï€n/N-1), 0 ≤ n ≤ N-1




4. Auto Correlation Analisys :
Tiap bagian yang telah diberi window kemudian akan dibentuk autokorelasinya.

Analisis autokorelasi terhadap setiap frame hasil windowing x1 (n) dengan persamaan:
r1(m)=Σ n-1-mn=0 x1(n)x1(n+m)     
dengan m dimulai dari 0 dan nilai tertinggi dari m = p adalah orde LPC yang biasa bernilai 8 - 16

5. Analisa LPC :
Langkah berikutnya adalah analisa LPC dimana semua nilai aotukorelasinya yang telah dihitung pada tahap sebelumnya akan diubah menjadi parameter LPC

Mengubah p +1 buah hasil autokorelasi pada masing masing frame menjadi
koefisien LPC am = αm(p)

untuk m = 1,2,..., p dengan persamaan dibawah ini:
E(o)=r(0)  (2.5)
km={r(m)-Σm-1j=1αj(m-1)r(|m-j|)/E(m-1), 1 ≤ m ≤ p

αm(m)= km  αj(m) = αj(m-1)- km αm-j(m-1), 1 ≤ j ≤ m-1  

E(m)=(1- km2) E(m-1)      

dengan r(0)adalah hasil autokorelasi,
E(m) adalah error,
km adalah koefisien pantulan,
aj(m) adalah koefisien prediksi untuk 1 ≤ j ≤ m


6. Pengubahan parameter LPC menjadi koefisien cepstral :
Parameter LPC yang sangat penting yang bisa diturunkan dari koefisien LPC adalah koefisien cepstral LPC, c(m).

 Mengubah parameter LPC am ke koefisien cepstral cm untuk mendapatkan kinerja yang lebih baik dan tahan terhadap noise,
yaitu dengan persamaan:
cm=am+Σm-1k=1(k/m)ck am-k, 1 ≤ m ≤ p
cm= Σm-1k=1(k/m)ck am-k, m > p  

koefisien cepstral ini adalah koefisien dari representasi pada spectrum logaritmis.



clear all;
fs=10000;
[x,fs]=audioread('tes.wav');
xx=length(x)+1;
x(xx)=0;
alpha=0.96;
for i=2:xx
 y0(i)=x(i-1);
end
for i=1:xx
 y(i) = x(i) - alpha*y0(i);
end
subplot(211)
t=1:xx;
plot(t/fs,y);legend('input');grid
xlabel('waktu (dt)'); ylabel('magnitudo');axis([0 0.7 -0.25 0.25]);
subplot(212)
plot(t/fs,y0); legend('output');grid
xlabel('waktu (dt)'); ylabel('magnitudo'); axis([0 0.7 -1 1.5])




MFCC

Mel frequency Cepstral Coefficient adalah sebuah koefisien audio, dalam beberapa studi menunjukkan bahwa persepsi pendengaran manusia tidaklah dalam skala yang linier dalam bentuk frekuensi melainkan diukur dalam bentuk skala mel-frekuensi.

Sehingga Mel-Scale merupakan skala yang diambil berdasarkan pendekatan terhadap pendengaran manusia. Dimana penggunaannya adalah untuk mengestrak data sinyal suara. Tahapan proses dalam Mel Frequency Cepstral Coefficient adalah;

1. Frame Blocking
Dalam proses frame blocking sinyal suara yang masuk akan diblok menjadi frame frame dengan jumlah N sampel dan jarak antar sampel dengan spasi M dimana M < N. Nilai dari N biasanya adalah 256 dengan spasi M=100


2. Windowing
Proses windowing dilakukan pada setiap frame dengan tujuan untuk meminimumkan diskontinuitas antar dua frame yang adjacent, khususnya pada bagian awal dan akhir.


3. FFT ( Fast Fourier Transform )  Tahapan berikutnya adalah FFT, disini FFT akan mengubah masing-masing frame N sampel dari domain waktu menjadi domain frekuensi.

Pada langkah ini setiap frame hasil dari fungsi window dikenai proses FFT. Fungsi FFT digunakan
untuk mengubah sinyal yang semula merupakan time domain menjadi frequency domain. Langkah ini mengubah tiap frame N sampel dari domain waktu ke dalam domain frekuensi. Dalam pengolahan suara, Transformasi Fourier Cepat berguna untuk mengubah konvolusi getaran celah suara dan respon gelombang saluran suara dalam domain waktu.

4. Wrapping  Skala mel-frekuensi adalah frekuensi linier berada dibawah 1000 Hz dan bentuk logaritmik berada diatas 1000 Hz. Pendekatan persamaan untuk mengitung mel dalam frekuensi f ( Hz ) adalah;
                                  Mel ( f ) = 2595 x Log10( 1+ f / 700 )

5. Cepstrum  Langkah terakhir adalah mengubah spektrum log-mel menjadi domain waktu. Hasil dari proses inilah yang disebut dengan Mel Frequency Cepstral Coefficient. Representasi cepstral dari spektrum sinyal suara berasal dari sifat spektrum sinyal untuk analisa frame yang ada.

Pada tahap ini dilakukan wrapping terhadap spektrum yang dihasilkan dari FFT sehingga dihasilkan Mel-scale
untuk menyesuaikan resolusi frekuensi terhadap properti pendengaran manusia. Kemudian Mel-scale
dikelompokkan menjadi sejumlah critical bank menggunakan filter bank. Jangkauan frekuensi dalam
spektrum sangatlah luas dan sinyal suara tidak mengikuti skala linear. Sehingga setelah spektrum
terkomputasi, data dipetakan dalam skala Mel menggunakan filter segitiga yang saling tumpang tindih.

















Jumat, 10 Agustus 2018

MSGBOX UIWAIT

uiwait(questdlg('Are you sure, you want to stop Realtime?','CloseRequestFunction','Yes','No','Yes'),.2);


f = figure('pos',[30 800 250 150]);
h = uicontrol('Position', [20 20 200 40], 'String', 'Continue', ...
              'Callback', 'uiresume(gcbf);close(gcbf)');
disp('This will print immediately');
uiwait(gcf);
disp('This will print after you click Continue');



uiwait(warndlg('You have an anomalous situation here.  Click OK to continue'));
uiwait(msgbox('I will wait for you to click OK.'));


 t=0:0.1:2*pi;y=sin(t);
plot(t,y)
uiwait(gcf)%
%at this point the program will wait you close the curent figure and the continue
y=cos(t);
plot(t,y)


Kamis, 21 Juni 2018

OCR dan JST

businessCard   = imread('contoh-gambar-plat-motor.jpg');
ocrResults     = ocr(businessCard)
     recognizedText = ocrResults.Text;   
     figure
     imshow(businessCard)
     text(600, 150, recognizedText,'BackgroundColor', [1 1 1])



Sedang HASIL JST:


I=get(handles.axes1,'Userdata');
g=rgb2gray(I);
ED=im2bw(g);
   g=medfilt2(g,[3 3]);
   set(handles.figure1,'CurrentAxes',handles.axes4);
   imshow(g); 
   set(handles.axes4,'Userdata',g);
 
   set(handles.figure1,'CurrentAxes',handles.axes8);
   imshow(ED); 
   set(handles.axes8,'Userdata',ED);
   %**********************************
            conc=strel('disk',1);
            gi=imdilate(g,conc);
            ge=imerode(g,conc);            %%%% morphological image processing
            gdiff=imsubtract(gi,ge);
            gdiff=mat2gray(gdiff);
            whos gdiff
           
            gdiff=conv2(gdiff,[1 1;1 1]);
            gdiff=imadjust(gdiff,[0.5 0.7],[0 1],.1);
            %B=logical(gdiff);
            B=im2bw(gdiff);

            [a1 b1]=size(B);
                set(handles.figure1,'CurrentAxes',handles.axes5);
                imshow(B); 
                set(handles.axes5,'Userdata',B);
           
            er=imerode(B,strel('line',100,0));
            out1=imsubtract(B,er);
            F=imfill(out1,'holes');      %%%filling the object
            H=bwmorph(F,'thin',1);
            H=imerode(H,strel('line',3,90));
                set(handles.figure1,'CurrentAxes',handles.axes6);
                imshow(H); 
                set(handles.axes6,'Userdata',H);
            %%
            final=bwareaopen(H,floor((a1/15)*(b1/15))); 
            final(1:floor(.9*a1),1:2)=1;
            final(a1:-1:(a1-20),b1:-1:(b1-2))=1;
           
                set(handles.figure1,'CurrentAxes',handles.axes7);
                imshow(ED); 
                set(handles.axes7,'Userdata',ED);
               
            Iprops=regionprops(final,'BoundingBox','Image');
            hold on
            for n=1:size(Iprops,1)
               V= rectangle('Position',Iprops(n).BoundingBox,'EdgeColor','g','LineWidth',2);
            end
            hold off
            NR=cat(1,Iprops.BoundingBox)
     
load net.mat;
load datatarget.mat; 
gab=[""];
      mat=[];     
      n=1;
                    for i=1:size(NR,1)
                        M=NR(i,:)
                        A=imcrop(ED,M);
                        if size(A,2)>10
                            mat(n,:)=M;
                            n=n+1;
                            figure (i) , imshow(A);
                            Q=getEDmulti(A);
                            H=sim(net_keluaran,Q');
                            %%%%%%%%%%%%%%%%%%%%%%%%%
                                b=0;%0.02;
                                %T=1x126
                                hasil='1-3 bmp';
                                if H < T(1,3)+b
                                    hasil='1-3 bmp/a';
                                elseif H < T(1,6)+b
                                    hasil='4-6 bmp/b';
                                elseif H < T(1,9)+b
                                    hasil='7-9 bmp/c';
                                elseif H < T(1,12)+b
                                    hasil='10-12 bmp/d';
                                elseif H < T(1,15)+b
                                    hasil='13-15 bmp/e';
                                elseif H < T(1,18)+b
                                    hasil='16-18 bmp/f';
                                elseif H < T(1,21)+b
                                    hasil='19-21 bmp/g';
                                elseif H < T(1,24)+b
                                    hasil='22-24 bmp/h';
                                elseif H < T(1,27)+b
                                    hasil='25-27 bmp/i';
                                elseif H < T(1,30)+b
                                    hasil='28-30 bmp/j';
                                elseif H < T(1,33)+b
                                    hasil='31-33 bmp/k';
                                elseif H < T(1,36)+b
                                    hasil='34-36 bmp/l';
                                elseif H < T(1,39)+b
                                    hasil='37-39 bmp/m';
                                elseif H < T(1,42)+b
                                    hasil='40-42 bmp/n';
                                elseif H < T(1,45)+b
                                    hasil='43-45 bmp/o';
                                elseif H < T(1,48)+b
                                    hasil='46-48 bmp/p';
                                elseif H < T(1,51)+b
                                    hasil='49-51 bmp/q';
                                elseif H < T(1,54)+b
                                    hasil='52-54 bmp/r';
                                elseif H < T(1,57)+b
                                    hasil='55-57 bmp/s';
                                elseif H < T(1,60)+b
                                    hasil='58-60 bmp/t';
                                elseif H < T(1,63)+b
                                    hasil='61-63 bmp/u';
                                elseif H < T(1,66)+b
                                    hasil='64-66 bmp/v';
                                elseif H < T(1,69)+b
                                    hasil='67-69 bmp/w';
                                elseif H < T(1,72)+b
                                    hasil='70-72 bmp/x';
                                elseif H < T(1,75)+b
                                    hasil='73-75 bmp/y';
                                elseif H < T(1,78)+b
                                    hasil='76-78 bmp/z';
                                elseif H < T(1,81)+b
                                    hasil='79-81 bmp/0';
                                elseif H < T(1,84)+b
                                    hasil='82-84 bmp/1';
                                elseif H < T(1,87)+b
                                    hasil='85-87 bmp';
                                elseif H < T(1,90)+b
                                    hasil='88-90 bmp/2';
                                elseif H < T(1,93)+b
                                    hasil='91-93 bmp/3';
                                elseif H < T(1,96)+b
                                    hasil='94-96 bmp/4';
                                elseif H < T(1,99)+b
                                    hasil='97-99 bmp';
                                elseif H < T(1,102)+b
                                    hasil='100-102 bmp/5';
                                elseif H < T(1,105)+b
                                    hasil='103-105 bmp/6';
                                elseif H < T(1,108)+b
                                    hasil='106-108bmp/7';
                                elseif H < T(1,111)+b
                                    hasil='109-111 bmp/8';
                                elseif H < T(1,114)+b
                                    hasil='112-114 bmp/9';
                         
                                end

                            gab=[gab num2str(H) '#' hasil ','];
                            %%%%%%%%%%%%%%%%%%%%%%%%%
                        end   
                    end
       
toc
set(handles.edResult,'String',num2str(toc));
set(handles.edProses,'String',gab);









jadinya ...ada yg terbaca dan ada yg tak terbaca tergantung ukuran huruf plat dan ukuran tanggal masa berlakunyaaa....


Silakan teman2 kembangkan yaaaa u atur sensitivitasnyaaaa....




Kamis, 26 April 2018

Algoritma Genetika Dalam Toolbok

Misalkan kita dikasih rumus matematika:
y=(x-3)^2+10;

Lalu di tanyakan:
Berapakah nilai x agar menghasilkan nilai keluaran minimum? dengan range antara 0 s/d 20..

Tentu kita akan coba2 dan memasukkan  semua angka range tersebut....dan didapat hasil yg minimum saat x=3.

Nah disinilah kita perlunya Genetika u optimasi.....

caanya sbb:

1.buat fungsi dan simpan ke suatu folder, misal  sebagai berikut:

function [ y] = myRumus( x)
y=(x-3)^2+10;
end


2.pada CLI Matlab ketik : optimtool, lalu konfigurasi fform sbb:
atau bisa juga mengetikkan: optimtool(‘ga’)




Terahir klik start dan amati hasilnya:

Persamaan di atas akan menghasilkan nilai minimum saat x bernilai : 3
dengn hasil y/Objective function value: 10.000000000441915;



dari grafik bisa dipahami bahwa pada iterasi ke 3, hasil sudah rendah dan saat loop berikutnyapun hasilnya tidak berubah......sehingga iterasi 3 melakukan penguncian atau Elitisme nilai terendahnya.


Oh mudah yaaaaaaaaaaaaaaaaaaaa....