1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| function c =mfcc2(s)
% mfcc2: réécriture de l'algorithme MFCC
% Entrees:
% s : signal de la parole a analyser
% fs : fréquence échantillonnage
% k: nombre de coefficients a creer
% Sortie
% c : matrice des coefficients
% variables:
% p : nombre de filtre a creer dans le banc de
% filtres
%p=floor(3*log(fs));
eml.extrinsic('hamming');
eml.extrinsic('enframe');
eml.extrinsic('melbankm');
eml.extrinsic('idct');
eml.extrinsic('melcepst');
eml.extrinsic('fft');
eml.extrinsic('logarithme');
eml.extrinsic('log');
fs=11025;
p=12;
%n: taille des "frames" en échantillons optimale
% (une puissance de 2, generalement n=256 ou n=512
n=pow2(floor(log2(0.03*fs)));
% fl,fh: fixent le debut (fl) et la fin (fh)
% de la bande passante de fs a utiliser
fl=0;
fh=0.5;
% w: indique la fonction de ponderation a utiliser
% ici 'M' => Hamming.
w='m';
% inc : duree de recouvrement des fenetres
% (les fenetres se recouvrent toutes les...)
inc=floor(n/2);
% creation des frames ponderees par Hamming
z=enframe(s,hamming(n),inc);
%[k,l]=size(z);
% Premiere etape : f est la transorme rapide
% de Fourier de z
f=fft(z.');
% creation du banc de filtre
% p : nombre de filtre a creer dans le banc de filtre
% n : taille des frames en échantillons
% fs : frequence d'echantillionnage du signal
% d'entree
% fl, fh : fraction de fs a utiliser
% w : type de fenetre de ponderation a utiliser.
[m,a,b]=melbankm(p,n,fs,fl,fh,w);
% m: matrice du banc de filtre
% a et b sont les bornes de la partie utilisee dans f
% on applique le banc de filtre au signal f (en fait
% seulement a la partie delimitee entre a et b) par
% un produit matriciel m * f
% puis on prend le logarithme des coefficients.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%[y]=logarithme(f,m);
y=log(m*(abs(f(a:b,:)).^2));
% %%%y=log(m*(abs(f(a:b,:))));
%
% % creation du cepstre en temps que tel:
% % tranformee en cosinus discret reel:
c=idct(y); |
Partager