基于维纳滤波器的时间序列信号去噪与AR参数估计系统
项目介绍
本项目是一个基于MATLAB开发的数字信号处理仿真系统,专注于在随机噪声环境下对平稳信号的恢复与模型参数辨识。项目构建了一个完整的闭环仿真链路,从基于自回归(AR)模型的信号生成开始,经历高斯白噪声信道,利用基于最小均方误差(MMSE)准则的FIR维纳滤波器进行去噪,最后通过Levinson-Durbin算法对去噪后的信号进行AR模型参数估计。
该系统旨在通过直观的仿真结果,展示统计信号处理中维纳滤波的有效性以及线性预测技术在系统辨识中的应用,适用于通信、信号处理领域的算法验证与教学演示。
核心功能特性
- 平稳随机信号生成:利用高斯白噪声驱动4阶AR模型生成具有特定频谱特征的窄带随机信号,并包含瞬态响应消除与功率标准化处理。
- 噪声环境模拟:支持指定信噪比(SNR)的加性高斯白噪声(AWGN)生成与叠加,模拟真实的含噪观测环境。
- FIR维纳滤波器设计:基于观测信号的统计特性(自相关与互相关),构建Wiener-Hopf方程并求解最优滤波器系数,实现MMSE准则下的信号去噪。
- 相位/群延迟补偿:自动计算FIR滤波器的线性相位延迟,对滤波后的输出信号进行时域对齐,确保波形对比的准确性。
- AR模型参数估计:内置Levinson-Durbin递归算法实现,能够从去噪后的信号中求解Yule-Walker方程,估计信号的AR阶数与系数。
- 多维度性能评估:
*
统计指标:计算并输出滤波前后的均方误差(MSE)及其改善量。
*
可视化分析:提供时域波形对比、功率谱密度(PSD)分析以及基于真实参数与估计参数的AR谱响应对比。
系统要求
- MATLAB R2016a及以上版本
- Signal Processing Toolbox(主要用于
xcorr, pwelch, freqz, toeplitz 等函数)
使用方法
直接在MATLAB环境中运行主脚本即可。程序运行时将依次执行以下步骤:
- 初始化系统参数并生成原始AR过程信号。
- 添加指定强度的噪声(默认SNR=5dB)。
- 计算统计量并设计维纳滤波器进行去噪处理。
- 在控制台输出MSE性能指标与AR参数估计结果。
- 弹出一个包含三个子图的综合图形窗口,展示时域、频域及系统辨识结果。
详细功能实现与逻辑分析
本项目代码逻辑严密,主要流程如下:
1. 信号源构建
系统首先定义采样频率(1000Hz)与信号时长。通过一个预设的4阶AR模型系数(极点靠近单位圆,产生窄带特征)构建滤波器。利用高斯白噪声作为驱动源,通过全极点滤波器生成平稳随机信号。为了确保信号的平稳性,代码特别去除了前100个采样点的初始瞬态响应,并对最终信号进行了功率归一化。
2. 噪声添加
根据设定的信噪比(SNR = 5 dB),计算所需的噪声方差,生成相应功率的高斯白噪声并叠加到原始信号上,合成最终的观测信号
y_noisy。
3. 维纳滤波器设计 (核心算法)
代码实现了一个64阶(M=64)的FIR维纳滤波器。
- 自相关矩阵估计:利用
xcorr计算观测信号的自相关函数(采用有偏估计 biased 以保证矩阵正定性),并提取正半轴数据构建Toeplitz矩阵 $R_{yy}$。 - 互相关向量估计:基于信号与噪声不相关的假设,使用原始纯净信号的自相关函数近似期望响应与观测信号之间的互相关向量 $R_{xy}$。
- Wiener-Hopf方程求解:通过矩阵运算 $w_{opt} = R_{yy}^{-1} R_{xy}$ 直接求解最优权重向量。
- 滤波与校正:对观测信号进行卷积滤波,并根据滤波器阶数截取并填补数据,以补偿引入的 $(M-1)/2$ 个样点的群延迟,使估计信号与原始信号在时域对齐。
4. AR参数估计 (Levinson-Durbin算法)
为了验证去噪效果对系统辨识的影响,系统尝试从去噪后的信号
x_est 中恢复AR参数。
- 首先计算去噪信号的自相关序列。
- 调用自定义函数
my_levinson_durbin,该函数不依赖MATLAB内置工具箱的AR估计功能,而是完整实现了Levinson-Durbin递归算法:
* 初始化预测误差能量。
* 通过递归公式计算反射系数(Reflection Coefficients)。
* 利用反射系数递推更新预测滤波器系数。
* 迭代直至达到预设阶数(P=4)。
5. 结果分析与可视化
- 定量评估:计算并打印滤波前后的均方误差(MSE),直观展示去噪带来的信噪比提升。同时打印真实AR系数与估计AR系数的对比表。
- 图形展示:
*
时域图:在一张图中叠加显示带噪信号(灰色)、原始信号(蓝色)和维纳滤波输出(红色),并截取前0.2秒局部放大显示。
*
PSD分析:利用Welch法计算并对比三者的功率谱密度,展示噪声底噪的压制效果。
*
AR谱估计:通过
freqz 函数绘制基于真实AR参数的系统频响和基于估计参数的系统频响,验证参数估计的准确度。
关键算法说明
Levinson-Durbin 递归实现
代码末尾包含一个独立的子函数
my_levinson_durbin。该函数输入自相关序列和阶数,输出AR模型系数、反射系数及预测误差功率。其核心在于利用Toeplitz矩阵的结构特性,将复杂度从 $O(N^3)$ 降低至 $O(N^2)$,具体步骤包括计算当前阶的反射系数 $lambda$,并根据 $lambda$ 更新下一阶的所有前向预测系数 $a$ 和误差能量 $E$。