rendered paste bodyclear all;
%% vowel detection, (c) Martin Havlicek, martin(at)havlic(dot)com. This file is published under MPELv666 ( My Personal Evil License ), which means that your base belongs to me :) ...
% load signals from $matlabpath\csvowels folder
loadsig
fs=48000; %hz
fmin = 0; %hz
fmax = fs/2; %hz
tlen = 0.015; %s
tstep=0.08; %s
wlen=floor(fs*tlen);
wstep=floor(fs*tstep);
n=5;
nfft=2^n;
M=22;
Wmel=melbf(M,fs,nfft,fmin,fmax);
Bmel =[];
%docasny promeny
% meanBmel =[];
meanMfcc = [];
meanAR =[];
meanAR_Refl = [];
meanLPC = [];
%% finalni promeny
% mel energy bands
% mel_pwr = [];
%mfcc pwr
mfcc_pwr =[];
% AR coeffs
AR = [];
% AR refl coeffs
refl = [];
% LPC Ceps Coefs
lpcc = [];
%a
%% test
mel_pwr.a = [];
mel_pwr.e =[];
mel_pwr.i = [];
mel_pwr.o = [];
mel_pwr.u = [];
mel_pwr.aa = [];
mel_pwr.ee = [];
mel_pwr.ii = [];
mel_pwr.oo = [];
mel_pwr.uu = [];
lpc_coeff.a = [];
lpc_coeff.e = [];
lpc_coeff.i = [];
lpc_coeff.o = [];
lpc_coeff.u = [];
lpc_coeff.aa = [];
StructSize = length(fieldnames(a_load));
for z = 1:StructSize
norm_specgram=spectrogram(a_load.(genvarname(num2str(z))),wlen,wlen-wstep,nfft,fs,'yaxis');
Bmel = Wmel*abs(norm_specgram);
meanMfcc= [meanMfcc mean(abs(ifft(Bmel)),2);]; % mfcc koeficienty
% meanBmel = [meanBmel mean(Bmel,2);]; % matice prumernych vykonu realizace kazde samohlasky
mel_pwr.a = [mel_pwr.a mean(Bmel,2);];
[arC,reflC]=ar_model(a_load.(genvarname(num2str(z))),wlen,wstep);
meanAR = [meanAR; mean(arC);] % prumer se dela pres sloupce ...
meanAR_Refl = [meanAR_Refl mean(reflC,2)]; % prumer se dela pres radky
[av,Epv,tv]=speechlpc(a_load.(genvarname(num2str(z))),fs,16,tlen*1000,tstep*1000); % vybereme prvnich 10 LPC koeficientu ( tlen a tstep fce vyzaduje v milisekundach )
% meanLPC = [meanLPC;mean(av(:,1:10));]; % prumer delame podle zadani z prvnich deseti koeficientu
lpc_coeff.a = [lpc_coeff.a; mean(av(:,2:11)); ];
end
% mel_pwr = [mel_pwr mean(meanBmel,2)]; % finalni matice ve ktere je kazda samohlaska reprezentovana jednim sloupcem, tj z prumeru jsem udelal prumer pres vsechny prumery samohlasky
% mfcc_pwr = [mfcc_pwr mean(meanMfcc,2);];
% % ar_coeff = [ar_coeff mean(meanAR);]
% meanBmel =[];
% meanMfcc = [];
% AR = [AR; mean(meanAR);] % Prumerne koeficienty pro samohlasku jsou v radkovem vektoru
% refl = [refl mean(meanAR_Refl,2)']; % Prumerne koeficienty pro samohlasku jsou v radkovem vektoru
% meanAR =[];
% meanAR_Refl = [];
% lpcc = [lpcc; mean(meanLPC);]; % prumerne hodnoty kazdeho koeficientu pro samohlasku jsou v radcich
% meanLPC=[];
% %e
StructSize = length(fieldnames(e_load));
for z = 1:StructSize
norm_specgram=spectrogram(e_load.(genvarname(num2str(z))),wlen,wlen-wstep,nfft,fs,'yaxis');
Bmel = Wmel*abs(norm_specgram);
meanMfcc= [meanMfcc mean(abs(ifft(Bmel)),2);];
% meanBmel = [meanBmel mean(Bmel,2);];
mel_pwr.e = [mel_pwr.e mean(Bmel,2);];
[arC,reflC]=ar_model(e_load.(genvarname(num2str(z))),wlen,wstep);
meanAR = [meanAR; mean(arC);] % prumer se dela pres sloupce ...
meanAR_Refl = [meanAR_Refl mean(reflC,2)]; % prumer se dela pres radky
[av,Epv,tv]=speechlpc(e_load.(genvarname(num2str(z))),fs,16,tlen*1000,tstep*1000); % vybereme prvnich 10 LPC koeficientu ( tlen a tstep fce vyzaduje v milisekundach )
% meanLPC = [meanLPC;mean(av(:,1:10));]; % prumer delame podle zadani z prvnich deseti koeficientu
lpc_coeff.e = [lpc_coeff.e; mean(av(:,2:11)); ];
end
% mfcc_pwr = [mfcc_pwr mean(meanMfcc,2);];
% meanMfcc = [];
% mel_pwr = [mel_pwr mean(meanBmel,2)];
% meanBmel =[];
% AR = [AR; mean(meanAR);] % Prumerne koeficienty pro samohlasku jsou v radkovem vektoru
% refl = [refl; mean(meanAR_Refl,2)';]; % Prumerne koeficienty pro samohlasku jsou v radkovem vektoru
% meanAR =[];
% meanAR_Refl = [];
% lpcc = [lpcc; mean(meanLPC);]; % prumerne hodnoty kazdeho koeficientu pro samohlasku jsou v radcich
% meanLPC=[];
% %i
StructSize = length(fieldnames(i_load));
for z = 1:StructSize
norm_specgram=spectrogram(i_load.(genvarname(num2str(z))),wlen,wlen-wstep,nfft,fs,'yaxis');
Bmel = Wmel*abs(norm_specgram);
meanMfcc= [meanMfcc mean(abs(ifft(Bmel)),2);];
% meanBmel = [meanBmel mean(Bmel,2);];
mel_pwr.i = [mel_pwr.i mean(Bmel,2);];
[arC,reflC]=ar_model(i_load.(genvarname(num2str(z))),wlen,wstep);
meanAR = [meanAR; mean(arC);] % prumer se dela pres sloupce ...
meanAR_Refl = [meanAR_Refl mean(reflC,2)]; % prumer se dela pres radky
[av,Epv,tv]=speechlpc(i_load.(genvarname(num2str(z))),fs,16,tlen*1000,tstep*1000); % vybereme prvnich 10 LPC koeficientu ( tlen a tstep fce vyzaduje v milisekundach )
% meanLPC = [meanLPC;mean(av(:,1:10));]; % prumer delame podle zadani z prvnich deseti koeficientu
lpc_coeff.i = [lpc_coeff.i; mean(av(:,2:11)); ];
end
% mfcc_pwr = [mfcc_pwr mean(meanMfcc,2);];
% meanMfcc = [];
% mel_pwr = [mel_pwr mean(meanBmel,2)];
% meanBmel =[];
% AR = [AR; mean(meanAR);] % Prumerne koeficienty pro samohlasku jsou v radkovem vektoru
% refl = [refl; mean(meanAR_Refl,2)';]; % Prumerne koeficienty pro samohlasku jsou v radkovem vektoru
% meanAR =[];
% meanAR_Refl = [];
% lpcc = [lpcc; mean(meanLPC);]; % prumerne hodnoty kazdeho koeficientu pro samohlasku jsou v radcich
% meanLPC=[];
% %o
StructSize = length(fieldnames(o_load));
for z = 1:StructSize
norm_specgram=spectrogram(o_load.(genvarname(num2str(z))),wlen,wlen-wstep,nfft,fs,'yaxis');
Bmel = Wmel*abs(norm_specgram);
meanMfcc= [meanMfcc mean(abs(ifft(Bmel)),2);];
% meanBmel = [meanBmel mean(Bmel,2);];
mel_pwr.o = [mel_pwr.o mean(Bmel,2);];
[arC,reflC]=ar_model(o_load.(genvarname(num2str(z))),wlen,wstep);
meanAR = [meanAR; mean(arC);] % prumer se dela pres sloupce ...
meanAR_Refl = [meanAR_Refl mean(reflC,2)]; % prumer se dela pres radky
[av,Epv,tv]=speechlpc(o_load.(genvarname(num2str(z))),fs,16,tlen*1000,tstep*1000); % vybereme prvnich 10 LPC koeficientu ( tlen a tstep fce vyzaduje v milisekundach )
% meanLPC = [meanLPC;mean(av(:,1:10));]; % prumer delame podle zadani z prvnich deseti koeficientu
lpc_coeff.o = [lpc_coeff.o; mean(av(:,2:11)); ];
end
% mfcc_pwr = [mfcc_pwr mean(meanMfcc,2);];
% meanMfcc = [];
% mel_pwr = [mel_pwr mean(meanBmel,2)];
% meanBmel =[];
% AR = [AR; mean(meanAR);] % Prumerne koeficienty pro samohlasku jsou v radkovem vektoru
% refl = [refl; mean(meanAR_Refl,2)';]; % Prumerne koeficienty pro samohlasku jsou v radkovem vektoru
% meanAR =[];
% meanAR_Refl = [];
% lpcc = [lpcc; mean(meanLPC);]; % prumerne hodnoty kazdeho koeficientu pro samohlasku jsou v radcich
% meanLPC=[];
% %u
StructSize = length(fieldnames(u_load));
for z = 1:StructSize
norm_specgram=spectrogram(u_load.(genvarname(num2str(z))),wlen,wlen-wstep,nfft,fs,'yaxis');
Bmel = Wmel*abs(norm_specgram);
meanMfcc= [meanMfcc mean(abs(ifft(Bmel)),2);];
% meanBmel = [meanBmel mean(Bmel,2);];
mel_pwr.u = [mel_pwr.u mean(Bmel,2);];
[arC,reflC]=ar_model(u_load.(genvarname(num2str(z))),wlen,wstep);
meanAR = [meanAR; mean(arC);] % prumer se dela pres sloupce ...
meanAR_Refl = [meanAR_Refl mean(reflC,2)]; % prumer se dela pres radky
[av,Epv,tv]=speechlpc(u_load.(genvarname(num2str(z))),fs,16,tlen*1000,tstep*1000); % vybereme prvnich 10 LPC koeficientu ( tlen a tstep fce vyzaduje v milisekundach )
meanLPC = [meanLPC;mean(av(:,1:10));]; % prumer delame podle zadani z prvnich deseti koeficientu
lpc_coeff.u = [lpc_coeff.u; mean(av(:,2:11)); ];
end
% mfcc_pwr = [mfcc_pwr mean(meanMfcc,2);];
% meanMfcc = [];
% mel_pwr = [mel_pwr mean(meanBmel,2)];
% meanBmel =[];
% AR = [AR; mean(meanAR);] % Prumerne koeficienty pro samohlasku jsou v radkovem vektoru
% refl = [refl; mean(meanAR_Refl,2)';]; % Prumerne koeficienty pro samohlasku jsou v radkovem vektoru
% meanAR =[];
% meanAR_Refl = [];
% lpcc = [lpcc; mean(meanLPC);]; % prumerne hodnoty kazdeho koeficientu pro samohlasku jsou v radcich
% meanLPC=[];
% %aa
StructSize = length(fieldnames(aa_load));
for z = 1:StructSize
norm_specgram=spectrogram(aa_load.(genvarname(num2str(z))),wlen,wlen-wstep,nfft,fs,'yaxis');
Bmel = Wmel*abs(norm_specgram);
meanMfcc= [meanMfcc mean(abs(ifft(Bmel)),2);];
% meanBmel = [meanBmel mean(Bmel,2);];
mel_pwr.aa = [mel_pwr.aa mean(Bmel,2);];
[arC,reflC]=ar_model(aa_load.(genvarname(num2str(z))),wlen,wstep);
meanAR = [meanAR; mean(arC);] % prumer se dela pres sloupce ...
meanAR_Refl = [meanAR_Refl mean(reflC,2)]; % prumer se dela pres radky
[av,Epv,tv]=speechlpc(aa_load.(genvarname(num2str(z))),fs,16,tlen*1000,tstep*1000); % vybereme prvnich 10 LPC koeficientu ( tlen a tstep fce vyzaduje v milisekundach )
meanLPC = [meanLPC;mean(av(:,1:10));]; % prumer delame podle zadani z prvnich deseti koeficientu
lpc_coeff.aa = [lpc_coeff.aa; mean(av(:,2:11)); ];
end
% mfcc_pwr = [mfcc_pwr mean(meanMfcc,2);];
% meanMfcc = [];
% mel_pwr = [mel_pwr mean(meanBmel,2)];
% meanBmel =[];
% AR = [AR; mean(meanAR);] % Prumerne koeficienty pro samohlasku jsou v radkovem vektoru
% refl = [refl; mean(meanAR_Refl,2)';]; % Prumerne koeficienty pro samohlasku jsou v radkovem vektoru
% meanAR =[];
% meanAR_Refl = [];
% lpcc = [lpcc; mean(meanLPC);]; % prumerne hodnoty kazdeho koeficientu pro samohlasku jsou v radcich
% meanLPC=[];
% %%ee
% StructSize = length(fieldnames(ee_load));
% for z = 1:StructSize
% norm_specgram=spectrogram(ee_load.(genvarname(num2str(z))),wlen,wlen-wstep,nfft,fs,'yaxis');
% Bmel = Wmel*abs(norm_specgram);
% meanMfcc= [meanMfcc mean(abs(ifft(Bmel)),2);];
% meanBmel = [meanBmel mean(Bmel,2);];
% [arC,reflC]=ar_model(ee_load.(genvarname(num2str(z))),wlen,wstep);
% meanAR = [meanAR; mean(arC);] % prumer se dela pres sloupce ...
% meanAR_Refl = [meanAR_Refl mean(reflC,2)]; % prumer se dela pres radky
% [av,Epv,tv]=speechlpc(ee_load.(genvarname(num2str(z))),fs,16,tlen*1000,tstep*1000); % vybereme prvnich 10 LPC koeficientu ( tlen a tstep fce vyzaduje v milisekundach )
% meanLPC = [meanLPC;mean(av(:,1:10));]; % prumer delame podle zadani z prvnich deseti koeficientu
% end
% mfcc_pwr = [mfcc_pwr mean(meanMfcc,2);];
% meanMfcc = [];
% mel_pwr = [mel_pwr mean(meanBmel,2)];
% meanBmel =[];
% AR = [AR; mean(meanAR);] % Prumerne koeficienty pro samohlasku jsou v radkovem vektoru
% refl = [refl; mean(meanAR_Refl,2)';]; % Prumerne koeficienty pro samohlasku jsou v radkovem vektoru
% meanAR =[];
% meanAR_Refl = [];
% lpcc = [lpcc; mean(meanLPC);]; % prumerne hodnoty kazdeho koeficientu pro samohlasku jsou v radcich
% meanLPC=[];
% %%ii
% StructSize = length(fieldnames(ii_load));
% for z = 1:StructSize
% norm_specgram=spectrogram(ii_load.(genvarname(num2str(z))),wlen,wlen-wstep,nfft,fs,'yaxis');
% Bmel = Wmel*abs(norm_specgram);
% meanMfcc= [meanMfcc mean(abs(ifft(Bmel)),2);];
% meanBmel = [meanBmel mean(Bmel,2);];
% [arC,reflC]=ar_model(ii_load.(genvarname(num2str(z))),wlen,wstep);
% meanAR = [meanAR; mean(arC);] % prumer se dela pres sloupce ...
% meanAR_Refl = [meanAR_Refl mean(reflC,2)]; % prumer se dela pres radky
% [av,Epv,tv]=speechlpc(ii_load.(genvarname(num2str(z))),fs,16,tlen*1000,tstep*1000); % vybereme prvnich 10 LPC koeficientu ( tlen a tstep fce vyzaduje v milisekundach )
% meanLPC = [meanLPC;mean(av(:,1:10));]; % prumer delame podle zadani z prvnich deseti koeficientu
% end
% mfcc_pwr = [mfcc_pwr mean(meanMfcc,2);];
% meanMfcc = [];
% mel_pwr = [mel_pwr mean(meanBmel,2)];
% meanBmel =[];
% AR = [AR; mean(meanAR);] % Prumerne koeficienty pro samohlasku jsou v radkovem vektoru
% refl = [refl; mean(meanAR_Refl,2)';]; % Prumerne koeficienty pro samohlasku jsou v radkovem vektoru
% meanAR =[];
% meanAR_Refl = [];
% lpcc = [lpcc; mean(meanLPC);]; % prumerne hodnoty kazdeho koeficientu pro samohlasku jsou v radcich
% meanLPC=[];
% %oo
% StructSize = length(fieldnames(oo_load));
% for z = 1:StructSize
% norm_specgram=spectrogram(oo_load.(genvarname(num2str(z))),wlen,wlen-wstep,nfft,fs,'yaxis');
% Bmel = Wmel*abs(norm_specgram);
% meanMfcc= [meanMfcc mean(abs(ifft(Bmel)),2);];
% meanBmel = [meanBmel mean(Bmel,2);];
% [arC,reflC]=ar_model(oo_load.(genvarname(num2str(z))),wlen,wstep);
% meanAR = [meanAR; mean(arC);] % prumer se dela pres sloupce ...
% meanAR_Refl = [meanAR_Refl mean(reflC,2)]; % prumer se dela pres radky
% [av,Epv,tv]=speechlpc(oo_load.(genvarname(num2str(z))),fs,16,tlen*1000,tstep*1000); % vybereme prvnich 10 LPC koeficientu ( tlen a tstep fce vyzaduje v milisekundach )
% meanLPC = [meanLPC;mean(av(:,1:10));]; % prumer delame podle zadani z prvnich deseti koeficientu
% end
% mfcc_pwr = [mfcc_pwr mean(meanMfcc,2);];
% meanMfcc = [];
% mel_pwr = [mel_pwr mean(meanBmel,2)];
% meanBmel =[];
% AR = [AR; mean(meanAR);] % Prumerne koeficienty pro samohlasku jsou v radkovem vektoru
% refl = [refl; mean(meanAR_Refl,2)';]; % Prumerne koeficienty pro samohlasku jsou v radkovem vektoru
% meanAR =[];
% meanAR_Refl = [];
% lpcc = [lpcc; mean(meanLPC);]; % prumerne hodnoty kazdeho koeficientu pro samohlasku jsou v radcich
% meanLPC=[];
% %uu
% StructSize = length(fieldnames(uu_load));
% for z = 1:StructSize
% norm_specgram=spectrogram(uu_load.(genvarname(num2str(z))),wlen,wlen-wstep,nfft,fs,'yaxis');
% Bmel = Wmel*abs(norm_specgram);
% meanMfcc= [meanMfcc mean(abs(ifft(Bmel)),2);];
% meanBmel = [meanBmel mean(Bmel,2);];
% [arC,reflC]=ar_model(uu_load.(genvarname(num2str(z))),wlen,wstep);
% meanAR = [meanAR; mean(arC);] % prumer se dela pres sloupce ...
% meanAR_Refl = [meanAR_Refl mean(reflC,2)]; % prumer se dela pres radky
% [av,Epv,tv]=speechlpc(uu_load.(genvarname(num2str(z))),fs,16,tlen*1000,tstep*1000); % vybereme prvnich 10 LPC koeficientu ( tlen a tstep fce vyzaduje v milisekundach )
% meanLPC = [meanLPC;mean(av(:,1:10));]; % prumer delame podle zadani z prvnich deseti koeficientu
% end
% mfcc_pwr = [mfcc_pwr mean(meanMfcc,2);];
% meanMfcc = [];
% mel_pwr = [mel_pwr mean(meanBmel,2)];
% meanBmel =[];
% AR = [AR; mean(meanAR);] % Prumerne koeficienty pro samohlasku jsou v radkovem vektoru
% refl = [refl; mean(meanAR_Refl,2)';]; % Prumerne koeficienty pro samohlasku jsou v radkovem vektoru
% meanAR =[];
% meanAR_Refl = [];
% lpcc = [lpcc; mean(meanLPC);]; % prumerne hodnoty kazdeho koeficientu pro samohlasku jsou v radcich
% meanLPC=[];
% %% Pro lepsi orientaci odstranim nepotrebny promeny, v pripadne nutnosti debugu si to tady odkomentujte
% clear aa_* ee_* ii_* oo_* uu_* a_* e_* i_* o_* u_*;
% clear mean*;
% clear al z wlen wstep tv tlen tstep struct_length reflC norm_specgram nfft n l h fs fmin fmax files av arC Wmel StructSize M Epv Bmel ;
% %%
% disp('V matici AR jsou ulozeny koeficienty AR modelu pocitane Yule - Walkerovy metody, prumerne hodnoty pro kazdou samohlasku reprezentuji radky.');
% disp('V matici lpcc jsou ulozeno prvnich 10 LPC kepstranich koeficientu, prumerne hodnoty pro kazdou samohlasku reprezentuji radky. ');
% disp('V matici mel_pwr jsou ulozeny vykony v jednotlivych melovskych pasmech, readky reprezentuji prumerne hodnoty v jednotlivych pasmech pro kazdou hlasku');
% disp('V matici mfcc_pwr jsou ulozeny mel-frekvencni kepstralni koeficienty, radky reprezentuji prumernou hodnotu koeficientu pro jednotlive pasma');
% disp('V matici refl jsou ulozene koeficienty odrazu AR modelu pocitane Yule - Walkerovou metodou, radky reprezentuji prumerne hodnoty koeficientu pro kazdou samohlasku');