基于自相关函数的语音信号基音频率检测仿真系统
项目介绍
本项目是一款基于 MATLAB 平台开发的语音基音频率检测仿真系统。基音频率(Pitch Frequency)反映了语音信号的周期性特征,是语音处理领域的核心参数。本系统通过实现经典的短时自相关函数法(ACF),结合非线性预处理技术,从准平稳的语音帧中提取准确的基音轨迹。通过模拟动态变化的语音信号,系统展示了自相关法在基音检测中的全过程,包括信号合成、分帧加窗、中心削波、自相关计算、峰值搜索及后处理平滑。
功能特性
- 动态合成测试信号:系统内置语音合成模块,可生成频率随时间线性变化(100Hz至200Hz)的多谐波合成语音,并添加加性白噪声以模拟真实环境。
- 非线性中心削波:引入中心削波(Center Clipping)技术,通过设定阈值(默认0.7)消除共振峰干扰,使自相关函数的周期性峰值更加突出。
- 快速自相关算法:利用 FFT(快速傅里叶变换)及其逆变换加速计算自相关函数,提高处理效率。
- 稳健的基音提取:支持自定义基音搜索范围(50Hz-500Hz),并通过幅值阈值判断进行清/浊音决策。
- 中值滤波平滑:采用 3 点中值滤波技术对初步检测的基音轨迹进行平滑处理,有效剔除孤立的检测错误点。
- 综合可视化界面:程序运行后自动生成多维度图表,包括时域信号波形、削波前后的对比、单帧自相关序列以及最终的基音频率轨迹。
实现逻辑与功能说明
本系统主要在主程序中按以下步骤实现基音检测流程:
- 信号生成与环境搭建:程序首先设定 16000Hz 的采样率,通过累积相位的方法生成一个基频从 100Hz 线性增长至 200Hz 的模拟信号,并叠加三次谐波和少量随机噪声。
- 参数初始化:配置帧长为 30ms,帧移为 15ms,确定基音搜索对应的延迟点数(Lag)范围为 32 至 320 个采样点。
- 逐帧循环处理:对每一帧信号执行以下具体操作:
- 加窗:使用手动实现的汉明窗(Hamming Window)对信号进行加窗,减少频率泄露。
- 中心削波:计算当前帧的最大幅值,将低于 70% 阈值的信号成分归零,对超过阈值的部分进行平移处理,以抑制第一共振峰对自相关结果的干扰。
- 自相关计算:通过对削波后的信号执行 FFT,计算模平方后进行 IFFT,得到自相关序列。
- 峰值搜索与判决:在预设的延迟延迟范围内搜寻最大峰值。若该峰值超过自相关函数原点值的 0.3 倍,则认为当前帧为浊音(Voiced),根据峰值坐标计算基音频率;否则判定为清音或无声,频率记为 0。
- 后处理:对完整的基音频率序列应用 3 点中值滤波,消除由于噪声或算法失效产生的突跳点。
- 数据统计与展示:计算有效基音段的平均频率与标准差,并绘制四组图形进行直观对比。
技术细节分析
- 自相关函数原理:自相关函数反映了信号在不同时刻的相关程度。对于具有周期性的基音信号,自相关函数会在基音周期的整数倍处出现显著峰值,通过检测第一个大峰值(除原点搜索范围外)即可确定基音周期。
- 中心削波的作用:原始语音信号受声道共振峰的影响,自相关函数往往包含多个局部峰值。中心削波通过剥离低幅度信号,能够有效削减共振峰带来的干扰,使基音对应的周期性峰值在搜索区域内占据绝对主导地位。
- FFT 加速:传统的时域自相关计算复杂度较高,系统通过 FFT 将时域卷积(或相关)转化为频域乘法,显著提升了大规模数据处理的性能。
- 搜索范围限制:系统根据人类发声规律,将搜索范围严格限制在 50Hz 到 500Hz 之间,有效避免了倍频或半频现象对结果的影响。
系统要求
- 运行环境:MATLAB R2016a 或更高版本。
- 硬件要求:标准 PC,内存 4GB 以上。
- 依赖项:无需安装额外的 Toolbox 工具箱,相关关键函数(如汉明窗、中值滤波等)已在脚本中直接实现或调用标准内置函数。
使用方法
- 将 main.m 文件放置在 MATLAB 的当前工作路径中。
- 在命令行窗口输入 main 并按回车。
- 系统将自动运行算法,输出包含四个子图的可视化结果。
- 在控制台(Command Window)查看计算出的平均基音频率和标准差等统计数据。