基于MATLAB的音频信号降噪与算法验证系统
这是一个基于MATLAB开发的音频信号处理与降噪实验平台。该项目实现了一套完整的音频处理流程,从信号生成、噪声模拟,到多种经典降噪算法的执行与性能评估。系统采用了模块化设计,内置了谱减法、维纳滤波和小波阈值三种核心算法,并提供了直观的可视化界面来对比降噪前后的时域波形与声谱图。
项目简介
本项目旨在验证不同数字信号处理算法在音频降噪任务中的表现。程序不依赖外部音频文件,而是直接生成包含基频、谐波及线性调频成分(模拟鸟鸣)的合成语音信号,并模拟真实环境叠加高斯白噪声。通过计算信噪比(SNR)的变化,量化评估各算法的去噪能力。
主要功能特性
- 模拟信号合成:自动生成包含440Hz基频、880Hz二次谐波以及200Hz-1000Hz线性调频信号的复合音频,时长3秒,采样率16kHz。
- 噪声模拟环境:支持指定输入信噪比(默认为5dB),自动计算并添加相应功率的高斯白噪声。
- 多算法集成:
*
谱减法 (Spectral Subtraction):基于过减因子与谱底参数的经典频域降噪。
*
维纳滤波 (Wiener Filtering):基于先验SNR估计(Decision Directed方法)的自适应滤波。
*
小波阈值降噪 (Wavelet Thresholding):利用小波分解与软阈值处理去除噪声成分。
- 智能环境检测:自动检测MATLAB是否安装小波工具箱,若缺失则自动降级为均值滤波演示,保证程序不报错。
- 性能量化评估:自动计算原始信号、以及三种算法处理后的信号SNR,并计算SNR提升量。
- 全方位可视化:绘制时域波形对比图、声谱图(Spectrogram),直观展示噪声在时频域的分布及去除效果。
- 结果导出:自动将含噪音频及三种降噪后的音频保存为WAV文件到当前目录。
系统要求
- MATLAB R2016b 或更高版本
- Signal Processing Toolbox(信号处理工具箱)
- Wavelet Toolbox(小波工具箱,用于小波降噪算法;若未安装,系统将使用替代算法演示)
算法实现细节
本项目核心代码实现了以下三种降噪策略,其具体逻辑如下:
1. 谱减法 (Spectral Subtraction)
- 分帧策略:使用25ms帧长,50%重叠率,加汉明窗(Hamming Window)。
- 噪声估计:假设前5帧为静默期(纯噪声),计算其平均幅度谱作为噪声基准。
- 核心逻辑:
* 应用过减因子(alpha = 2.0)增强去噪力度。
* 引入谱底参数(Low bound beta = 0.01)防止频谱出现负值,避免“音乐噪声”过大。
- 重构:使用重叠相加法(Overlap-Add)恢复时域信号。
2. 维纳滤波 (Wiener Filtering)
- 分帧策略:256点窗口,128点重叠,加汉宁窗(Hanning Window)。
- SNR估计:采用判决导向(Decision Directed)方法估计先验信噪比,平滑因子设置为0.98,以获得更稳定的增益函数。
- 噪声更新:内置简易的语音活动检测(VAD)逻辑,当当前帧能量显著低于背景噪声水平时,更新噪声功率谱密度。
- 增益计算:基于维纳滤波公式计算传递函数,调整幅度谱并保留原始相位。
3. 小波阈值降噪 (Wavelet Denoising)
- 小波基与分解:采用
db4 (Daubechies 4) 小波基,进行4层分解。 - 阈值策略:
* 利用第一层细节系数估算噪声标准差。
* 计算通用阈值(Universal Threshold)。
- 处理方式:采用软阈值(Soft Thresholding)处理小波系数,在去噪的同时保留信号的平滑度。
- 容错机制:代码中包含
exist 检查,若未检测到小波函数库,会自动切换为5点平滑滤波,确保演示流程畅通。
使用方法
- 将代码保存为
main.m。 - 在MATLAB命令行窗口中直接运行
main。 - 控制台输出:程序将打印每一步的执行状态(参数初始化、各算法执行进度)以及最终的SNR对比数据。
- 图形输出:弹出一个包含多个子图的窗口,展示原始信号、含噪信号及处理后信号的波形和频谱。
- 文件输出:在当前工作目录下生成以下音频文件:
*
output_noisy.wav (含噪信号)
*
output_denoised_spectral.wav (谱减法结果)
*
output_denoised_wiener.wav (维纳滤波结果)
*
output_denoised_wavelet.wav (小波降噪结果)
辅助功能说明
- 分帧与重构:代码通过
enframe_sig 和 overlap_add 两个自定义子函数手动实现了信号的加窗分帧与重叠相加重构,方便用户理解DSP底层流程。 - SNR计算:标准化的SNR计算函数,通过计算纯净信号功率与残余噪声功率之比来评估质量。
- 可视化系统:综合绘图函数将所有对比结果集中在一个窗口中,便于直观的A/B测试。