基于短时能量和过零率的语音端点检测系统
项目介绍
本项目实现了一个基于语音信号时域特征的端点检测(Voice Activity Detection, VAD)系统。该系统通过综合利用短时能量(STE)和短时过零率(ZCR)两个核心指标,能够准确地从包含背景噪声的信号中识别并提取出有效语音段。系统采用了经典的双门限判决算法,旨在提高语音在信噪比较低环境下的检测准确性。
功能特性
- 自动信号生成与模拟:内置测试信号合成功能,能够模拟带有加性高斯白噪声的连续语音信号。
- 预处理机制:包含预加重处理,通过高通滤波器提升高频分量,使信号频谱平坦化。
- 分帧与加窗:利用汉明窗(Hamming Window)进行固定长度的分帧处理,确保每一帧信号的短时平稳性。
- 双特征提取:同步提取物理意义明确的短时能量和短时过零率特征。
- 双门限状态机判决:通过多级状态转换逻辑(静默、可能开始、语音段),实现对语音起始点和结束点的精准定位。
- 可视化展示:自动生成多维度对比图表,直观显示时域波形、检测边界、能量曲线及过零率分布。
系统要求
- MATLAB R2016a 或更高版本
- 无需额外工具箱支持,基础核心组件即可运行
实现逻辑与算法分析
1. 信号预处理
系统首先对原始信号进行预加重,滤波器系数设为0.97。随后按照20ms的帧长(16kHz采样率下为320点)和10ms的帧移进行切分。每一帧数据都会乘以汉明窗,以减少频谱能量泄漏。
2. 特征计算
- 短时能量 (STE):计算每一帧内所有采样点幅值的平方和,反映信号强度。该参数对浊音(元音)极其敏感。
- 短时过零率 (ZCR):统计信号波形穿过零电平的次数。清音(辅音)的过零率通常远高于背景噪声,因此该特征用于辅助修正语音边界,防止漏检清音结尾。
3. 自动阈值设定
系统利用信号的前5帧作为环境噪声基准,动态计算当前背景下的背景噪声能量和背景过零率均值。
- 能量高门限:用于确认语音段的正式进入。
- 能量低门限:用于语音段的持续监测及初步启动搜索。
- 过零率门限:用于捕捉低能量但高频率的语音成分。
4. 判决执行流程
程序采用状态机逻辑处理每一帧特征:
- 静默阶段:当能量超过低门限或过零率超过门限时,进入“可能开始”状态。
- 可能开始阶段:若能量进一步超过高门限,则确认进入“语音段”;否则若能量回落,则判定为随机干扰,回到静默状态。
- 语音段阶段:持续监测。如果能量和过零率均低于设定门限,则启动静默计数。
- 确认结束:当持续静默帧数达到预设最大值(本项目中为10帧)时,确认该语音段结束。
- 后验过滤:程序会自动检查检测到的语音段长度,若总时长小于最小有效阈值(5帧),则视其为瞬间脉冲噪声并予以剔除。
5. 数据导出与结果展示
检测完成后,系统将提取的所有有效语音片段存储在单元数组(Cell Array)中。最终生成一个三层结构的图表:
- 图一:显示原始含噪波形,并用红虚线标出起点,蓝虚线标出终点,阴影区域覆盖检测到的有效语音。
- 图二:显示短时能量曲线及设置的高低能量门限参考线。
- 图三:显示短时过零率曲线及判决门限参考线。
使用方法
- 启动 MATLAB 软件。
- 将程序文件放置于当前工作目录。
- 在命令行窗口直接运行该主函数。
- 运行结束后,系统会自动弹出可视化图形窗口,并在控制台打印每个检测到的语音段的帧范围及持续时长。
- 如需检测真实语音文件,可将代码中构造测试信号的部分替换为 audioread 函数读取本地 wav 文件。