【问题标题】:MATLAB code for calculating MFCC计算MFCC的MATLAB代码
【发布时间】:2013-12-03 02:21:24
【问题描述】:

我有一个问题,如果这样可以。我最近在寻找计算 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

如果我犯了错误,请有人确认这没问题或指导我> 我用简单纯音测试它,在我看来,它给了我合理的答案。

非常感谢任何帮助:)

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

【问题讨论】:

标签: matlab signal-processing speech-recognition mfcc


【解决方案1】:

您可以通过将结果与 this one here 等其他实现进行比较来自行测试 你会发现一个完全可配置的 matlab 工具箱,包括。 MFCC 甚至是一个将 MFCC 反转回时间信号的函数,这对于测试目的来说非常方便:

melfcc.m - 从声音波形中计算 PLP 和 MFCC 的主要函数,支持多种选项。

invmelfcc.m - 用于从倒谱系数反转回频谱图和(噪声激发)波形的主函数,选项与 melfcc 完全匹配(以反转该处理)。

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

【讨论】:

  • 感谢ben 的链接。我要试试那个库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 2015-05-08
  • 2016-02-08
相关资源
最近更新 更多