基于基本谱减法的语音增强系统
该项目实现了一个经典的语音增强系统,采用谱减法(Spectral Subtraction)从受高斯白噪声干扰的带噪语音中提取清晰信号。系统通过在频域执行功率谱减算,并引入过减因子和谱下限技术,旨在有效抑制背景噪声的同时,最大限度地减少“音乐噪声”并提升语音清晰度。
项目介绍
本项目模拟了从信号获取、噪声叠加到增强处理及效果评估的完整流程。系统以MATLAB内置的音频数据为基础,通过物理数学建模的方法在频域内对信号特征进行精细化操作。核心特色在于对非话段噪声的动态估计以及对减法算子的非线性保护逻辑,使其能够适应特定信噪比下的语音修复任务。
功能特性
- 全流程信号处理:涵盖了从预加重、分帧加窗、频域变换到重叠相加合成的完整语音处理通路。
- 过减因子机制:通过设置大于1的过减因子,能够更彻底地消除残余噪声。
- 谱下限保护:设定最小功率阈值,防止减法操作产生负值,显著缓解音乐噪声现象。
- 多维度评估可视化:提供时域波形图、频域语谱图对比,并量化计算增强前后的信噪比(SNR)提升值。
- 自适应噪声估计:利用信号起始阶段的统计特性自动建立背景噪声模型。
实现逻辑与流程
程序内部的执行逻辑严密遵循短时谱分析与合成理论,具体步骤如下:
- 信号制备与加噪:通过加载内置音频信号,手动添加指定信噪比(如5dB)的高斯白噪声,生成待处理的受干扰样本。
- 前端预处理:应用高通滤波器进行预加重(滤波器系数为[1, -0.97]),以提升高频共振峰。采用25ms帧长、10ms帧移进行分帧,并加汉明窗以优化频谱截断。
- 时频转换:对每一帧执行FFT变换,得到幅度谱和功率谱,并完整保留原始相位信息用于后续还原。
- 噪声模型构建:程序默认选取输入信号的前10帧作为静音段(无声段),计算其平均功率谱作为全局噪声的估计参考。
- 核心减法运算:在功率谱上执行减算,公式引入了两倍的过减因子。若减算后的值低于设定的谱下限(噪声功率的1%),则强制取下限值,确保幅度的正定性。
- 时域重构:将平滑后的幅度谱与原始相位结合,执行IFFT变换回时域。使用重叠相加法(Overlap-Add)将分帧处理的段落连接起来,消除帧间间断。
- 后置处理与对比:通过反预加重滤除前端引入的影响,最后对原始信号、带噪信号与增强信号进行SNR对齐计算及绘图。
关键技术与算法细节
- 汉明窗(Hamming Window):用于在分帧阶段降低频谱能量从主瓣向旁瓣的泄露,使得频域分析更准确。
- 过减因子(alpha = 2.0):标准谱减法在减去平均噪声后,仍会有随机噪声峰值产生,alpha参数调大有助于压制这些峰值。
- 谱下限(beta = 0.01):这是解决“音乐噪声”的关键。当减法结果过低时,保留一个极小的背景噪声底,使残余噪声听起来像是自然的宽带噪声,而非刺耳的离散频率点。
- 重叠相加(OLA):由于分帧加窗会改变信号幅度,OLA方法能够通过信号的重叠堆叠,在数学上完全恢复原始信号的包络(在无处理情况下),保证合成语音的连续性。
系统要求
- 运行环境:MATLAB R2016b 或更高版本。
- 必备工具箱:信号处理工具箱(Signal Processing Toolbox),用于调用相关滤波、加窗及语谱图分析函数。
- 输入资源:程序内集成内置信号,无需外部文件即可直接运行。
使用方法
- 在MATLAB中打开脚本程序。
- 直接运行函数,控制台将输出处理前后的信噪比数值及信噪比提升(Improvement)结果。
- 系统会自动弹出对比图表,用户可直观观察语谱图中噪声被去除的效果。
- (可选)取消程序末尾声音播放函数的注释,即可实时试听增强后的语音质量。