计算MFCC的MATLAB程序

计算MFCC的MATLAB程序,matlab,signal-processing,speech-recognition,mfcc,Matlab,Signal Processing,Speech Recognition,Mfcc,如果可以的话,我有个问题。我最近在寻找计算MFCC的算法。我找到了一个好的教程而不是代码,所以我试着自己编写。我仍然觉得我错过了一件事。在下面的代码中,我对信号进行FFT,计算归一化功率,使用三角形对信号进行滤波,并最终对每个组对应的能量求和,以获得MFCC function output = mfcc(x,M,fbegin,fs) MF = @(f) 2595.*log10(1 + f./700); invMF = @(m) 700.*(10.^(m/2595)-1);

如果可以的话,我有个问题。我最近在寻找计算MFCC的算法。我找到了一个好的教程而不是代码,所以我试着自己编写。我仍然觉得我错过了一件事。在下面的代码中,我对信号进行FFT,计算归一化功率,使用三角形对信号进行滤波,并最终对每个组对应的能量求和,以获得MFCC

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
函数输出=mfcc(x,M,fbegin,fs)
MF=@(f)2595.*log10(1+f./700);
invMF=@(m)700.*(10.^(m/2595)-1);
M=M+2;%三角形文件管理器的数量
mm=linspace(MF(fbegin),MF(fs/2),M);%mel频率中的等间距
ff=invMF(毫米);%将mel频率转换为频率
X=fft(X);
N=长度(X);%短时间窗口的长度
N2=最大值([楼层(N+1)/2楼层(N/2)+1]);%
P=abs(X(1:N2,:)。^2./N;%NoFr周期图编号
mfccShapes=三角形过滤器形状(ff,N,fs);%
输出=对数(MFCCP);
结束
函数[out,k]=三角形滤波器形状(f,N,fs)
N2=最大值([楼层(N+1)/2层(N/2)+1]);
M=长度(f);
k=linspace(0,fs/2,N2);
out=零(N2,M-2);
对于m=2:m-1
I=k>=f(m-1)&k=f(m)&k我用一个简单的纯音测试了它,在我看来,它给了我合理的答案

非常感谢您的帮助:)


我正在研究如何应用矢量化余弦变换。看起来我需要一个变换系数的MxM矩阵,但我没有找到任何能解释如何做的源代码

您可以通过将结果与其他实现(如 您会发现一个完全可配置的matlab工具箱,包括MFCC,甚至还有一个将MFCC反转回时间信号的函数,对于测试目的来说非常方便:

melcc.m
-用于从声波计算PLP和MFCC的主要功能,支持多种选项

invmelfcc.m
-将倒谱系数反向转换为频谱图和(噪声激励)波形的主要功能,选项与melfcc完全匹配(以反转该处理)


页面本身有很多关于软件包使用的信息。

如果有人对这个帖子感兴趣,我会找到一个相当不错的网站。有关于信号预处理等的信息。也被问到是的,因为我在这里没有得到任何答案。谢谢链接。我要去那个图书馆看看。