基于卡尔曼滤波与自适应滤波的语音去噪仿真系统
项目介绍
本项目是一个基于 MATLAB 平台开发的语音信号处理仿真系统。该系统旨在模拟现实环境中的背景噪声,并对比分析两种经典的数字信号处理算法——离散卡尔曼滤波(Kalman Filter)与自适应滤波(Adaptive Filter, LMS算法)在语音去噪方面的性能。
系统集成了信号产生的灵活性(支持外部文件或内部合成)、噪声环境模拟、核心算法实现以及全方位的可视化评估功能,适用于数字信号处理技术的教学演示与算法研究。
功能特性
- 灵活的信号源获取:支持读取外部
.wav 语音文件;若文件不存在,系统能自动合成包含多频率正弦波、调频信号及包络特性的仿真语音信号。 - 噪声环境仿真:能够根据指定的目标信噪比(SNR),精确计算噪声功率并生成高斯白噪声,叠加至纯净语音中。
- 卡尔曼滤波去噪:基于线性预测编码(LPC)构建状态空间模型,利用卡尔曼滤波的“预测-更新”迭代机制从含噪信号中恢复语音。
- 自适应滤波去噪:采用自适应谱线增强器(ALE)结构,基于最小均方(LMS)算法自动调整滤波器权值,利用信号的相关性分离噪声。
- 多维度性能评估:自动计算并输出含噪信号及两种算法处理后的信噪比(SNR)和均方误差(MSE)。
- 直观的可视化展示:同步绘制时域波形图与频域功率谱密度图(PSD),直观对比去噪前后的信号特征。
- 结果保存:自动将含噪语音及去噪后的音频保存到本地。
系统要求
- MATLAB R2016a 或更高版本
- Signal Processing Toolbox(信号处理工具箱,用于
lpc、pwelch 等函数)
使用方法
- 将代码保存为 MATLAB 脚本文件(如
main.m)。 - (可选)在同目录下放置名为
input_speech.wav 的纯净语音文件。如果未提供,程序将自动生成合成语音用于演示。 - 在 MATLAB 环境中直接运行该脚本。
- 程序运行结束后,控制台将显示 SNR 和 MSE 评估指标,弹出绘图窗口展示波形和频谱,并在当前目录生成
output_noisy.wav、output_kalman.wav 和 output_lms.wav 音频文件。
详细实现与算法逻辑
系统主要逻辑在单一脚本中顺序执行,具体实现流程如下:
1. 系统参数初始化
程序首先定义了全局仿真参数:
- 目标信噪比:设定为 5dB,用于控制噪声强度。
- LMS 参数:滤波器阶数设为 32,步长因子设为 0.002,采用 ALE 结构的延迟设为 1。
- 卡尔曼参数:AR 模型阶数设为 10,用于构建状态方程。
2. 信号采集与预处理
系统具备智能的信号加载机制:
- 文件读取:优先尝试读取
input_speech.wav,若为双声道则自动转换为单声道。 - 自动合成:若文件不存在,系统利用正弦波叠加(440Hz, 880Hz, 1200Hz)、调频调制以及指数包络技术,合成一段时长3秒、采样率8000Hz的模拟语音信号。
- 归一化:无论信号来源如何,均对幅度进行归一化处理(限制在 -1 到 1 之间),以统一算法的输入标准。
3. 噪声模拟
为了模拟真实的噪声环境:
- 计算纯净语音的平均功率。
- 根据设定的 SNR(5dB)反推所需的噪声功率。
- 生成对应功率的高斯白噪声序列,并将其叠加到纯净语音上,形成含噪语音信号。
4. 核心算法实现
#### A. 离散卡尔曼滤波 (Kalman Filter)
该模块实现了基于 AR 模型的标量卡尔曼滤波器:
- 参数估计:使用
lpc 函数直接从含噪信号中估计线性预测系数,以此近似语音信号的 AR 模型参数。 - 状态空间建模:
*
状态转移矩阵 (F):利用 LPC 系数构建伴随矩阵形式,描述语音信号的时间相关性。
*
观测矩阵 (H):构建为
[1, 0, ...],表示只观测当前时刻的信号值。
*
噪声协方差:过程噪声 Q 基于 LPC 的预测误差方差初始化;观测噪声 R 直接设为估计的背景噪声功率。
- 迭代过程:对每一个采样点执行“时间更新(预测状态与协方差)”和“量测更新(计算卡尔曼增益并修正状态)”,最终输出状态向量的第一个元素作为去噪后的语音。
#### B. 自适应滤波 (LMS 算法)
该模块实现了基于自适应谱线增强器 (ALE) 结构的 LMS 滤波器:
- 输入构造:利用语音信号的短时相关性和宽带噪声的弱相关性,将含噪信号延迟 1 个样本后作为滤波器的输入信号。
- 期望信号:将当前的含噪信号直接作为期望信号。
- 权值更新:在循环中,程序计算滤波器输出与期望信号之间的误差,并利用 LMS 权重更新公式
W = W + 2 * mu * error * input_vector 逐点调整 32 阶滤波器的系数。 - 输出:滤波器的输出信号即为预测出的相关部分(语音成分),从而实现噪声抑制。
5. 结果分析与评估
程序内置了专门的辅助函数用于客观指标计算:
- 信噪比 (SNR):通过计算纯净信号能量与噪声(误差)能量的比值,以对数形式(dB)输出。程序分别计算了输入信号、卡尔曼滤波输出、LMS 滤波输出相对于纯净语音的 SNR。
- 均方误差 (MSE):计算处理后信号与纯净信号差值的平方均值,量化波形失真程度。
- 控制台输出:运行结束后,会在命令行窗口打印出三组信号的 SNR 和 MSE 对比数据。
6. 输出与可视化
系统最后生成一个包含 4 行 2 列子图的综合图表:
- 时域波形:分别展示纯净语音、含噪语音、卡尔曼去噪结果、LMS 去噪结果的波形图,并在标题中实时标注对应的 SNR 值。
- 频域分析:利用 Welch 法(
pwelch)计算功率谱密度。
*
滤波前对比:将纯净语音与含噪语音的频谱叠加展示,直观呈现噪声基底的提升。
*
滤波后对比:将卡尔曼滤波和 LMS 滤波后的频谱与原始语音频谱对比,展示算法在不同频段的恢复能力和对高频噪声的抑制效果。