基于短时平均幅度差函数(AMDF)与自相关函数的语音分析对比研究
项目介绍
本项目是一个利用MATLAB平台实现的语音信号分析系统,旨在对比研究短时自相关函数(ACF)与短时平均幅度差函数(AMDF)在基音周期估计、清/浊音判别以及计算效率方面的差异。语音信号的基音周期是描述语音本质特征的重要参数,而ACF和AMDF是提取该参数的两种经典时域算法。本项目通过模拟语音信号,直观展示了AMDF算法在牺牲极小精度的情况下,如何通过简化运算(以减法和绝对值代替乘法)显著提升处理速度。
功能特性
- 模拟语音信号合成:系统能够自动生成一段包含浊音(150Hz及其谐波组成的周期信号)和清音(高斯白噪声)的典型语音序列。
- 标准化预处理:实现语音信号的归一化、分帧(30ms窗长)、帧移(15ms)以及汉明窗加窗处理。
- 双算法并行计算:同时运行短时自相关函数与短时平均幅度差函数,计算各帧信号的特征曲线。
- 实时性能定量分析:通过高精度计时功能统计两种算法的总运行耗时,并计算效率提升百分比。
- 基音周期精准提取:在50Hz至500Hz的频率范围内,通过寻找ACF的最大值点和AMDF的极小值点来锁定基音。
- 清/浊音自动识别:基于特征函数的显著性阈值(ACF的峰值强度或AMDF的谷值深度)自动判定当前帧属于浊音还是清音。
- 多维度可视化:提供波形对比图、典型帧特征曲线对比图、基音频率轨迹图以及清浊音判定结果图。
实现逻辑与算法细节
主处理程序遵循以下逻辑流程:
1. 信号初始化与分帧
设定采样率为16000Hz,合成一段1秒长的信号。浊音部分由基频及其多级谐波叠加而成,清音部分为随机噪声。使用30ms的周期性汉明窗对信号进行切分,每帧包含480个采样点,相邻帧重叠50%。
2. 自相关函数 (ACF) 实现
在算法核心循环中,对于每一帧信号,执行双重循环累加。计算每一位偏移量下的乘法积之和。ACF反映了信号与其自身在不同延迟下的相似程度,其计算复杂度主要源于大量的浮点乘法运算。
3. 平均幅度差函数 (AMDF) 实现
同步执行AMDF计算。该算法不使用乘法,而是计算信号点与延迟点之间的绝对差值并求和。这种方式在硬件实现尤其是嵌入式系统中具有显著的性能优势。
4. 特征提取与判别逻辑
- ACF提取:在预设的延迟范围内(32至320个点),寻找R(k)的最大值。若该最大值超过R(0)的35%,则判定为浊音。
- AMDF提取:在相同延迟范围内寻找函数的极小值。若该极小值小于全帧最大幅度差的40%,则判定为浊音。
- 基音计算:根据采样率与最值点对应的延迟点数,计算得到实时的基音频率(Hz)。
5. 统计与反馈
计算结束后,程序汇总两种算法的总耗时,并在控制台输出包含计算耗时、效率改进百分比以及部分典型帧运算结果的对比表。
关键函数与实现细节分析
- 自定义汉明窗函数:代码手动实现了Hamming窗计算公式,支持对称(Symmetric)和周期性(Periodic)两种模式,通过0.54-0.46*cos(2*pi*n/(M-1))公式确保信号边缘平滑,减少分帧带来的频谱泄露。
- 嵌套循环运算:ACF和AMDF均采用直接嵌套循环实现,这种写法虽然在MATLAB中不如矩阵化运算快,但能最真实地模拟硬件指令执行流程,便于进行公平的算法复杂度与原始运行耗时对比。
- 自适应判定阈值:针对ACF采用的是相对最大值的比例(0.35)判定,针对AMDF采用的是相对波动范围的比例(0.4)判定。这两种动态阈值的设定增强了算法对不同信号强度的鲁棒性。
- 基音范围限制:通过min_lag和max_lag变量限定搜索空间,有效避开了0点附近的自相关峰值干扰,确保提取的是人类语音正常的基频范围。
使用方法
- 启动MATLAB软件。
- 确保当前工作目录包含该项目的主处理程序文件。
- 在命令行窗口输入主函数名称并回车。
- 程序将自动执行计算,随后弹出可视化图形窗口。
- 在MATLAB控制台(Command Window)查看详细的性能评估报告和实验数据对比表。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 硬件要求:无需特殊硬件,标准的x86或ARM架构计算机即可运行,程序中包含耗时统计,建议关闭其他大型后台程序以获得更准确的效率对比数据。