基于峭度极大化的独立分量分析(ICA)算法项目说明
项目介绍
本项目实现了一种基于峭度(Kurtosis)极大化准则的独立分量分析(ICA)算法。由于中心极限定理指出,多个独立变量混合后的信号通常比任何一个原始信号更接近高斯分布,因此算法通过寻找使输出信号非高斯性(即峭度绝对值)最大的投影方向,来从线性观察信号中恢复出统计独立的原始源信号。
功能特性
- 信号仿真模拟:内置正弦波、方波及均匀分布噪声三种典型的非高斯源信号。
- 全流程预处理:包含数据中心化(零均值化)和白化(Whitening)处理,以简化后期优化难度。
- 增强梯度技术:采用基于峭度梯度的上升搜索算法,自动适配超高斯和亚高斯信号的分离。
- 正交化约束:通过奇异值分解(SVD)实现权值矩阵的正交化,防止多个提取分量收敛至同一信号。
- 多维度可视化:直观展示源信号、观测混合信号、白化信号及最终分离结果。
- 统计验证:自动计算并对比各阶段信号的峭度统计量,量化分离效果。
实现逻辑与步骤
算法在主程序中按照以下逻辑顺序执行:
- 信号生成:
创建采样频率为1000Hz、时长为2秒的时域信号。生成三路源信号:5Hz正弦波、8Hz方波以及在[-1, 1]区间均匀分布的随机噪声。
- 线性混合:
生成一个随机的3x3混合矩阵,将三路源信号进行线性组合,模拟传感器采集到的观测信号。
- 中心化处理:
减去观测信号的均值,使各观测通道的均值变为0。
- 白化处理:
计算观测信号的协方差矩阵,通过特征值分解(EVD)获取特征向量和特征值。利用白化变换矩阵消除信号间的相关性,并使各分量的方差统一为1。
- 梯度上升迭代优化:
* 初始化解混矩阵并进行单位化处理。
* 在迭代循环中,针对每一个分量的权值向量,计算当前估计信号的峭度。
* 根据峭度的梯度方向更新权值向量,通过学习率控制步长,并结合峭度的符号决定极大化方向。
* 采用SVD对称正交化方法刷新整个解混矩阵,确保分离出的各分量相互正交且互不重叠。
* 当连续两次迭代之间的解混矩阵变化率小于预设阈值或达到1000次迭代时,算法停止。
- 信号恢复:
利用最终训练得到的解混矩阵作用于白化后的信号,提取分离出的独立分量。
关键细节分析
- 峭度计算准则:算法核心在于利用公式 E[y^4] - 3 来评估信号的非高斯性。对于白化后的数据,方差为1,峭度简化为四阶矩与3的差值。
- 梯度更新公式:更新步长由梯度项 mean(Z .* y^3) 驱动。通过引入 sign(kurt_val),算法能够同时处理正峭度(超高斯)和负峭度(亚高斯)信号。
- 对称正交化:为了保证解混矩阵 W 的行向量保持正交,算法在每次迭代后执行一次正交化操作。通过 W = U * V'(其中 U 和 V 源自 W 的 SVD 分解),可以有效地保持矩阵的紧致性。
- 收敛判定:算法不仅检查迭代次数,还通过计算新旧权值矩阵的点积差值( 1 - min(abs(diag(W * W_old'))) )来判断方向是否趋于稳定,确保了算法的鲁棒性。
使用方法
- 环境准备:确保计算机中安装了 MATLAB 环境。
- 运行程序:在 MATLAB 命令行窗口直接运行主程序脚本。
- 结果观察:
* 图形界面:程序会自动弹出对比图窗口。从左至右依次为:原始信号、混合信号、白化处理后的信号、ICA分离后的信号。
* 命令行输出:Matlab控制台将输出原始信号、混合信号及分离信号的峭度统计数值,以及最终计算出的解混矩阵 W。
系统要求
- 软件版本:MATLAB R2016b 及以上版本(需支持绘图及基础矩阵运算函数)。
- 硬件要求:标准 PC 配置即可,无需特殊加速设备。