音频特征-梅尔频率倒谱系数(MFCC)详解

总结一些关于MFCC写的比较好的资源:

1. MFCC提取过程讲解的非常详细,形象(图表多):

http://blog.csdn.net/zouxy09/article/details/9156785

2. MFCC原理上讲解的很简洁,有基于MATLAB和HTK的实现代码:

http://blog.csdn.net/jojozhangju/article/details/18678861

3. 另一篇MFCC Blog:

http://blog.csdn.net/xmdxcsj/article/details/51228791

4. CMU关于MFCC介绍的经典Slides:

http://www.speech.cs.cmu.edu/15-492/slides/03_mfcc.pdf

5. MFCC英文版教程:

http://practicalcryptography.com/miscellaneous/machine-learning/guide-mel-frequency-cepstral-coefficients-mfccs/

  • 9
    点赞
  • 127
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在Matlab中提取翻转梅尔频率倒谱系数MFCC)的示例代码: ```matlab % 读取音频文件 [y, Fs] = audioread('example.wav'); % 预处理:对信号进行预加重,使用高通滤波器 preemph = [1, -0.97]; y = filter(preemph, 1, y); % 帧分割:将信号分为若干个帧 frame_size = 0.025; % 帧长(单位:秒) frame_shift = 0.01; % 帧移(单位:秒) frame_length = frame_size * Fs; % 帧长(单位:采样点) frame_step = frame_shift * Fs; % 帧移(单位:采样点) num_frames = floor((length(y) - frame_length) / frame_step) + 1; frames = zeros(frame_length, num_frames); for i = 1:num_frames start_idx = (i-1) * frame_step + 1; frames(:, i) = y(start_idx : start_idx + frame_length - 1); end % 加窗:对每个帧进行汉明窗加窗 window = hamming(frame_length); frames = bsxfun(@times, frames, window); % 快速傅里叶变换:对每个帧进行FFT计算 NFFT = 512; fft_frames = fft(frames, NFFT, 1); % 能量谱:计算每个帧的能量谱 power_frames = abs(fft_frames).^2 / NFFT; % 梅尔滤波器组:计算梅尔滤波器组的系数 num_filters = 20; mel_low_freq = 0; % 梅尔滤波器组的最低频率 mel_high_freq = 2595 * log10(1 + (Fs/2) / 700); % 梅尔滤波器组的最高频率 mel_points = linspace(mel_low_freq, mel_high_freq, num_filters + 2); hz_points = 700 * (10.^(mel_points / 2595) - 1); bin = floor((NFFT + 1) * hz_points / Fs); fbank = zeros(num_filters, NFFT / 2 + 1); for m = 1:num_filters f_m_minus = bin(m); f_m = bin(m+1); f_m_plus = bin(m+2); for k = f_m_minus:f_m fbank(m, k+1) = (k - bin(m)) / (bin(m+1) - bin(m)); end for k = f_m:f_m_plus fbank(m, k+1) = (bin(m+2) - k) / (bin(m+2) - bin(m+1)); end end % 翻转梅尔频率倒谱系数:计算每个帧的MFCC num_ceps = 12; mfcc = zeros(num_ceps, num_frames); for i = 1:num_frames % 将能量谱乘以梅尔滤波器组的系数,得到每个滤波器的输出能量 filter_energies = fbank * power_frames(:, i); % 取对数,得到滤波器组的对数输出能量 log_filter_energies = log(filter_energies + eps); % 对上面的对数输出能量进行离散余弦变换(DCT) mfcc(:, i) = dct(log_filter_energies); % 取前 num_ceps 个系数作为MFCC mfcc(:, i) = mfcc(1:num_ceps, i); end % 翻转MFCC:对每个MFCC向量进行翻转 rfcc = flipud(mfcc); ``` 以上代码中,翻转MFCC的操作是通过 `flipud` 函数实现的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值