>> 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
Kamis, 20 Desember 2018
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
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
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;
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
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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"');
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.
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');
A.Pre-emphasis
the speech signal s(n) is sent to a high-pass filter:
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:
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:
- Multiply each frame by a Hamming window to increase its continuity at the first and last points.
- Take a frame of a variable size such that it always contains a integer multiple number of the fundamental periods of the speech signal.
Langganan:
Postingan (Atom)






















