基于线性系统的拖尾倾斜噪声自适应滤波器
项目介绍
本系统是一个基于MATLAB开发的专业信号处理方案,专门解决线性动态系统在复杂环境下遭遇的非高斯噪声挑战。在实际工业(如旋转机械诊断)或国防(如雷达跟踪)场景中,传感器噪声往往并不遵循理想的正态分布,而是表现出明显的“拖尾”(频繁出现离群值)和“倾斜”(分布不对称)特征。本系统通过变分贝叶斯(Variational Bayes, VB)框架,实现了对噪声统计特性的实时在线学习,能够有效抑制离群值干扰并修正分布偏差,从而提供比标准卡尔曼滤波更高精度的状态估计。
功能特性
- 复杂噪声模拟:系统内置了能够生成复合噪声的仿真引擎,包含基础高斯噪声、基于概率触发的重尾离群值(15%比例)以及基于指数分布的非对称倾斜偏差。
- 双重自适应机制:在滤波迭代过程中,不仅能动态调整观测噪声方差以处理离群值,还能实时估计并补偿由分布倾斜引起的系统性偏置。
- 变分贝叶斯框架:通过KL散度最小化理论,在每一个采样时刻进行多次内部迭代,寻找隐含噪声参数(方差与偏置)的最优后验估计。
- 多维度性能评估:系统自动计算均方误差(MSE)提升比例,并利用滑动窗口技术实时监测残差序列的峰度(Kurtosis)与偏度(Skewness),量化噪声的非高斯程度。
- 可视化分析:提供完整的时域跟踪对比、误差分析曲线以及自适应参数(R值与Bias)的演进轨迹。
实现逻辑说明本系统的核心逻辑遵循“模拟-滤波-对比-评价”的闭环流程:
- 系统建模:建立匀速直线运动模型,定义状态转移矩阵(F)与观测矩阵(H)。
- 非高斯环境生成:
*
高斯分量:模拟基础背景噪声。
*
拖尾分量:利用随机触发机制引入10倍于常态的脉冲干扰,模拟传感器受到突发电磁冲击时的离群观测。
*
倾斜分量:引入减去均值的指数分布,制造出均值为零但概率分布明显向一侧偏移(非对称)的效果。
- 对比滤波算法执行:
*
标准卡尔曼滤波 (SKF):作为对照组,使用固定的名义噪声方差进行滤波。
*
变分贝叶斯自适应滤波 (VBAKF):系统核心。该部分在每个步长内运行10次变分迭代。它将观测噪声方差建模为Gamma分布,并将分布偏置建模为高斯分布,通过循环更新这两个分布的参数,修正状态估计。
- 统计参数识别:利用滑动窗口(长度为20个采样点)实时计算滤波残差的统计特性,用以验证算法对环境变化的感知能力。
关键算法细节
- 重尾噪声抑制 (Gamma-Gaussian):算法引入了alpha和beta超参数,通过残差的二阶矩实时更新观测噪声精度。当离群值出现时,估计的R值会迅速增大,从而自动减小卡尔曼增益,降低该受污数据的权重。
- 偏置补偿 (Bias Correction):针对分布倾斜造成的估计偏差,算法维护了一个名为mu_shift的状态变量。该变量能够学习噪声分布的中心偏移量,并在更新状态方程时将其扣除,确保了估计的无偏性。
- 迭代变分推断:在单步滤波内,算法交替更新系统状态估计与噪声超参数。通过这种局部迭代,能够使滤波器在极短的时间内收敛到真实的噪声特性附近。
- 性能提升:通过对比SKF与VBAKF的MSE指标,系统能直观展现自适应算法在减少漂移和降低抖动方面的优势。
系统要求- 软件环境:MATLAB R2016b 或更高版本。
- 所需工具箱:Statistics and Machine Learning Toolbox(用于mvnrnd和exprnd等分布统计函数)。
- 硬件要求:标准桌面级PC即可支持实时运算。
使用方法- 启动MATLAB软件。
- 将系统代码文件放置在当前工作路径。
- 在命令行窗口运行主函数。
- 系统将自动弹出一个包含四个子图的性能分析窗口,并同步在控制台输出滤波性能评估报告。
可视化结果解读
- 位置跟踪对比图:展示VBAKF轨迹与真实轨迹的吻合度,通常VBAKF轨迹比SKF更平滑且更接近真实值。
- 估计误差对比图:定量展示两种算法的绝对偏差,VBAKF由于能识别偏差,其基准误差通常更低。
- 噪声统计特征识别图:展示实时的偏度与峰度。当出现峰度突增时,表明检测到重尾离群值;偏度偏离零点则表明噪声分布存在严重倾斜。
- 自适应参数调整曲线:直观展示滤波器内部如何通过增大R值来抵御冲击,以及如何调整Bias来修正系统偏置。