matlab计算代码,用于计算MFCC的MATLAB代码

我有一个问题,如果没关系.我最近在寻找计算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

如果我犯了错误,有人可以确认这是正确的或直接指示我>我用简单的纯音测试了它,在我看来,它给了我合理的答案.

任何帮助非常感谢:)

PS.我正在研究如何应用矢量化的Cosinus变换.看起来我需要一个MxM的变换系数矩阵,但我找不到任何可以解释如何做的源.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值