基于谱减法的语音去噪系统设计与实现
项目介绍
本项目实现了一个基于经典谱减法(Spectral Subtraction)理论的语音增强系统。该系统专门用于处理受到平稳加性噪声(如白噪声、分扇声、电流声等)污染的语音信号。通过在频域内从带噪语音的功率谱中减去估计出的噪声功率谱,系统能够有效地从干扰中恢复原始语音内容。该程序不仅包含核心的降噪算法,还集成了完整的预处理、后处理以及性能指标评估模块,能够显著提升语音的信噪比和听感清晰度。
功能特性
- 灵活的信号输入:支持本地语音文件读取或模拟信号生成。
- 完整的信号预处理:包含预加重滤波、分帧以及海明窗(Hamming Window)加窗处理。
- 统计学噪声评估:利用语音起始部分的静默段(前5帧)自动估算背景噪声的功率谱特性。
- 改进型谱减算法:引入过减因子(Alpha)和谱下界参数(Beta),有效平衡噪声抑制能力与语音失真度,缓解“音乐噪声”现象。
- 稳健的信号重建:采用重叠相加法(Overlap-Add)重建连续时域语音,并配有去重增益补偿。
- 多维度评估与可视化:自动计算处理前后的信噪比(SNR),并生成时域波形对比图与频率域语谱图。
使用方法
- 环境配置:确保计算机已安装MATLAB开发环境。
- 运行程序:启动MATLAB,打开主脚本文件并点击运行。
- 参数调整:根据噪声强度的不同,可在代码参数设置区修改过减因子Alpha(默认值为4)和谱下界Beta(默认值为0.002)。
- 结果获取:程序运行完成后,会自动在工作目录下生成名为“enhanced_output.wav”的去噪后音频文件,并弹出分析图表。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 硬件要求:具备基本音频输出能力的个人电脑。
- 依赖项:系统内置基本的信号处理函数库(Signal Processing Toolbox)。
系统实现逻辑
- 信号初始化:程序首先定义采样率(16000Hz)并生成由正弦波组成的模拟语音信号,随后注入指定强度的加性高斯白噪声。
- 预处理阶段:系统对带噪信号进行高通滤波(预加重),以补偿语音信号高频部分的能量损失。之后按照512采样点的帧长和50%的重叠率进行分帧并加海明窗。
- 背景噪声建模:选取信号的前5帧作为纯噪声样本,计算其平均功率谱密度。
- 频域处理循环:
- 对每一帧信号进行快速傅里叶变换(FFT)。
- 提取当前帧的幅度谱和相位谱。
- 在功率谱维度执行减法操作,减去经过过减因子加权的噪声功率谱。
- 应用谱下界限幅:若减法后的能量低于预设阈值,则使用较小的噪声缩放值进行填充,防止产生过多的负值脉冲(即音乐噪声)。
- 信号还原:结合原始相位信息,通过逆快速傅里叶变换(IFFT)将增强后的频谱转回时域。
- 重建与后处理:执行重叠相加法消除分帧带来的间断感,并应用去加重滤波器还原语音的原始频率分布。
- 评估输出:对比并显示处理前后的SNR数值,绘制可视化图表。
技术细节与关键算法分析
- 分帧函数(enframe):这是时频转换的基础。通过滑窗技术将连续语音切分为短时平稳的片段。每个片段长度为32ms,这符合人耳对语音段的感知特性。
- 谱减核心算法:核心计算公式基于功率谱。通过调整Alpha值,可以控制减除噪声的强度。较大的Alpha能去得更干净,但可能损伤语音细节;Beta(谱下界)的引入是关键,它保证了频谱通道不会被完全置零,保留了一定的背景底噪,从而使残留噪声听起来更加自然。
- 相位保留技术:由于人耳对短时相位的变化并不敏感,本系统采用“带噪相位还原法”,即提取带噪信号的相位信息并直接作用于去噪后的幅度谱,这极大简化了计算开销且保证了语音的可懂度。
- 重叠相加(Overlap-Add):该子函数解决了由于加窗和分帧导致的时域包络畸变。通过对各帧能量的累加平滑,消除了帧与帧之间的跳变冲突,确保了输出音频的平滑性。
- 指标评估(SNR):系统使用对数能量比公式量化降噪效果。通过计算“原始干净信号能量”与“误差信号能量”的比值,直观反映了算法对噪声的压制程度。