clear 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');