基于MATLAB的基础音频特征提取工具库
项目简介
本项目是一个专注于音频信号处理与分析的MATLAB代码实现。它旨在提供一套完整的音频特征提取流水线,能够从原始音频数据中计算多种关键的声学特征。该工具库不仅涵盖了基础的信号预处理,还深入实现了时域、频域以及倒谱域(MFCC)的核心特征计算。
本项目当前配置为演示模式,内置了合成信号生成逻辑,方便用户在无需外部音频文件的情况下直接运行并验证算法。提取的特征数据可广泛应用于语音识别、环境声音分类、音乐流派分析等机器学习任务的数据预处理阶段。
功能特性
该工具库实现了以下核心功能:
- 自动信号生成:内置测试信号生成器,包含扫频信号(Chirp)、静音段和白噪声,用于全面测试特征提取算法的响应。
- 信号预处理:包含单声道转换、预加重滤波器。
- 分帧与加窗:支持自定义帧长和帧移,采用汉明窗(Hamming Window)减少频谱泄露。
- 时域特征提取:
* 短时能量(Short-Time Energy)
* 过零率(Zero Crossing Rate, ZCR)
* 谱质心 (Spectral Centroid)
* 谱带宽 (Spectral Bandwidth)
* 谱滚降点 (Spectral Rolloff)
* 谱通量 (Spectral Flux)
* 梅尔频率倒谱系数 (MFCC)
- 数据可视化:提供包含原始波形、时域特征曲线、声谱图叠加质心轨迹以及MFCC热力图的综合分析图表。
- 数据导出:自动将所有计算结果封装并保存为
.mat 标准格式文件。
系统要求
- MATLAB R2016a 或更高版本(建议)
- Signal Processing Toolbox(用于
chirp, spectrogram, dct, hamming 等函数)
使用方法
- 确保MATLAB环境已安装并包含信号处理工具箱。
- 直接运行主函数。
- 程序将自动执行以下步骤:
* 生成合成测试音频。
* 执行完整的特征提取流程。
* 弹出一个包含四个子图的分析窗口,展示波形和提取的特征。
* 在当前目录下生成
audio_features.mat 文件,包含计算出的所有以结构体存储的数据。
详细实现逻辑与算法分析
本项目严格按照数字信号处理的流水线进行实现,以下是代码中各个关键模块的详细实现逻辑:
1. 参数配置与信号获取
代码首先定义了采样率(44100 Hz)和帧参数(帧长25ms,帧移10ms)。
- 演示信号生成:未直接读取外部文件,而是调用内部子函数生成了一个2秒的混合信号。
*
0-1秒:0Hz到1000Hz的线性扫频信号(Chirp),用于测试频率特征的追踪能力。
*
1-1.5秒:静音段,用于测试能量和噪声门限。
*
1.5-2秒:高斯白噪声,用于测试宽带信号特性。
- 声道处理:包含逻辑判断,若输入为立体声,通过计算名为平均值的方式转换为单声道。
2. 预处理
- 预加重:使用系数为
0.97 的一阶FIR高通滤波器 H(z) = 1 - 0.97z^{-1}。这一步旨在提升高频分量的能量,平衡频谱倾斜,为后续的MFCC提取做准备。
3. 分帧与加窗机制
- 手动分帧:代码未直接调用封装函数,而是通过循环索引的方式,根据计算出的帧长(Frame Length)和帧移(Frame Hop),从原始信号中截取数据段。
- 汉明窗:对每一帧数据点乘汉明窗(Hamming Window),以平滑帧边缘,减少傅里叶变换时的旁瓣效应。
4. 特征提取核心算法
#### A. 时域特征
- 短时能量 (STE):计算每一帧内信号幅度的平方和,反映音频的强弱变化。
- 过零率 (ZCR):计算帧内信号穿过零电平的次数。算法通过一阶差分检测符号变化,并除以两倍帧长进行归一化,常用于区分清音(高ZCR)和浊音(低ZCR)。
#### B. 频域特征 (基于FFT)
对每一帧进行N点FFT(N=512或大于帧长的2的幂次),取前一半(Nyquist频率以下)计算幅度谱和功率谱。
- 谱质心 (Spectral Centroid):以频率为权重的幅度谱加权平均值,代表声音的“亮度”或平均频率。
- 谱带宽 (Spectral Bandwidth):以谱质心为中心的加权标准差,反映频谱的分布宽度。
- 谱滚降点 (Spectral Rolloff):寻找一个频率点,使得该频率以下的能量累积达到总能量的85%。该特征用于区分具有不同高频能量分布的声音。
- 谱通量 (Spectral Flux):计算相邻两帧幅度谱向量之间的欧几里得距离(L2范数),用于检测音符起始点或信号突变。
#### C. MFCC (梅尔频率倒谱系数)
实现了标准的MFCC提取流程:
- 梅尔滤波器组:自定义函数构建了一个包含26个三角滤波器的滤波器组。映射关系利用公式
2595 * log10(1 + f/700) 将线性频率转换为梅尔刻度频率,在Mel频域上等间距分布,再映射回线性频率以确定三角滤波器的边界。 - 滤波:将功率谱与滤波器组矩阵相乘,得到梅尔频带能量。
- 对数能量:对梅尔能量取自然对数,模拟人耳对响度的非线性感知。
- 离散余弦变换 (DCT):对对数能量进行DCT变换,去除相关性。
- 系数截断:仅保留DCT输出的前13个系数作为最终的MFCC特征向量。
5. 可视化模块
利用
figure 和
subplot 创建综合图表:
- 子图1:绘制原始音频信号的时域波形。
- 子图2 (双Y轴):左轴显示短时能量,右轴显示过零率,直观对比两者的时变特性。
- 子图3:使用MATLAB内置
spectrogram 绘制声谱图,并将计算出的“谱质心”曲线以黑色虚线叠加在上方,展示特征与频谱分布的一致性。 - 子图4:使用
imagesc 绘制MFCC系数的热力图,X轴为时间,Y轴为系数索引(1-13)。
6. 数据导出
最终结果被封装在一个结构体中,保存为
audio_features.mat。
sample_rate: 采样率time_domain: 包含 short_time_energy 和 zero_crossing_ratefreq_domain: 包含 spectral_centroid, spectral_bandwidth, spectral_rolloff, spectral_fluxmfcc: 13维MFCC矩阵