matlab特征提取:MFCC(Mel频率倒谱系数)
时间: 2024-12-27 19:22:22 浏览: 18
### Matlab 中实现 MFCC 特征提取
MFCC(梅尔频率倒谱系数)是一种广泛应用于语音识别中的特征参数。其基本原理在于模拟人类听觉系统对不同频率声音感知的不同敏感度,通过一系列处理步骤来获取能够表征语音特性的数值。
#### 原理概述
为了更好地理解这一过程,在开始编程之前先了解一下各个阶段的作用:
- **预加重**:增强高频部分以补偿声道传输损失。
- **分帧加窗**:将连续时间序列分割成多个短时片段并施加汉宁窗口函数减少边界效应。
- **快速傅立叶变换 (FFT)** :把每一帧的数据由时域转到频域以便后续分析[^2]。
```matlab
% 对输入音频数据执行快速傅里叶变换
Xfft = zeros(N,floor(length(x1)/M)-1);
Xfft = fft(windowed');
magx = abs(Xfft).^2;
for k = 1:N/2+1
psdx(k,:) = magx(k,:);
end
figure(5), imagesc(psdx), title('Spectrogram'), xlabel('Time(frame number)'), ylabel('Frequency (FFT number)');
```
- **功率谱密度估计**:计算各频率点上的能量分布情况。
- **应用 Mel 滤波器组**:依据人耳感受特性设计的一系列带通滤波器,用于捕捉重要信息的同时降低维度。
```matlab
clc; clear; close all; warning off; addpath(genpath(pwd));
bank=melbankm(8,512,8000,0,0.5,'y'); bank=full(bank); bank=bank/max(bank(:)); % 幅值归一化
df=8000/512; ff=(0:256)*df; % 频率坐标刻度
for k=1 : 8 % 绘制8个Mel滤波器响应曲线而非原文本中的24个
plot(ff,bank(k,:)); hold on;
end
hold off; grid; xlabel('频率/Hz'); ylabel('相对幅值')
title('Mel滤波器组频率响应曲线')
```
- **取对数运算**:进一步压缩动态范围使得输出更加稳定可靠。
- **离散余弦变换(DCT)**:最终得到一组反映原始信号本质属性却又相互独立的新向量作为结果输出。
以上就是整个流程的大致描述以及对应的部分代码展示。需要注意的是实际操作过程中可能还需要考虑更多细节问题比如采样率设置、噪声抑制等措施来提高算法性能。
阅读全文