Code MATLAB pour le calcul des MFCC
J'ai une question si c'est ok. J'ai récemment été à la recherche pour l'algorithme pour calculer MFCCs. J'ai trouvé un bon tutoriel plutôt que le code donc j'ai essayé de code par moi-même. Je me sens toujours comme je suis en manque une chose. Dans le code ci-dessous j'ai pris la FFT d'un signal, calculée de la puissance normalisée, filtre un signal à l'aide de formes triangulaires et, finalement, la somme des énergies correspondant à chaque banque pour obtenir des MFCCs.
function output = mfcc(x,M,fbegin,fs)
MF = @(f) 2595.*log10(1 + f./700);
invMF = @(m) 700.*(10.^(m/2595)-1);
M = M+2; % number of triangular filers
mm = linspace(MF(fbegin),MF(fs/2),M); % equal space in mel-frequency
ff = invMF(mm); % convert mel-frequencies into frequency
X = fft(x);
N = length(X); % length of a short time window
N2 = max([floor(N+1)/2 floor(N/2)+1]); %
P = abs(X(1:N2,:)).^2./N; % NoFr no. of periodograms
mfccShapes = triangularFilterShape(ff,N,fs); %
output = log(mfccShapes'*P);
end
function [out,k] = triangularFilterShape(f,N,fs)
N2 = max([floor(N+1)/2 floor(N/2)+1]);
M = length(f);
k = linspace(0,fs/2,N2);
out = zeros(N2,M-2);
for m=2:M-1
I = k >= f(m-1) & k <= f(m);
J = k >= f(m) & k <= f(m+1);
out(I,m-1) = (k(I) - f(m-1))./(f(m) - f(m-1));
out(J,m-1) = (f(m+1) - k(J))./(f(m+1) - f(m));
end
end
Quelqu'un pourrait s'il vous plaît confirmer que c'est tout droit ou direct-moi si j'ai fait une erreur> je l'ai testé sur une simple tonalité et il me donne, à mon avis, des réponses raisonnables.
Toute aide grandement appréciée 🙂
PS. Je suis en train de travailler sur la façon d'appliquer vectorisé Cosinus Transform. Il semble que j'ai besoin d'une matrice de MxM de transformer les coefficients, mais je n'ai trouvé aucune source qui pourrait expliquer comment le faire.
Également demandé à dsp.stackexchange.com/questions/12812/mfcc-calculation
Oui, c'est parce que je n'ai pas de réponse ici.
OriginalL'auteur Celdor | 2013-11-19
Vous devez vous connecter pour publier un commentaire.
Vous pouvez tester vous-même en comparant vos résultats avec d'autres implémentations comme celui-là
vous trouverez un entièrement configurable matlab toolbox incl. MFCCs et même une fonction pour inverser MFCC retour à un signal de temps, ce qui est assez pratique pour des fins de test:
melfcc.m
- fonction principale pour le calcul des PLP et des MFCCs de formes d'onde audio, supporte de nombreuses options.invmelfcc.m
- fonction principale pour inverser l'arrière de cepstral coefficients de spectrogrammes et (bruit excité) formes d'onde, les options de correspondre exactement à melfcc (à inverser que de traitement).la page elle-même a beaucoup d'informations sur l'utilisation de l'emballage.
content d'avoir pu aider.
OriginalL'auteur ben