基于EM算法的小波域HMM参数高效训练系统
项目简述
本项目是一个基于MATLAB环境开发的统计信号处理系统,专注于在小波域中实现隐马尔科夫模型(Hidden Markov Model, HMM)的参数训练与估计。项目通过模拟非平稳信号,演示了如何将时域信号转换至小波域提取高频特征,并使用期望最大化(EM/Baum-Welch)算法对模型参数进行迭代求解。
本系统的核心亮点在于算法的对比与优化:不仅实现了便于理解的传统循环式EM算法作为基准,还重点构建了一套经过全面向量化、Log域防下溢处理及改进初始化策略的优化版EM算法。实验结果直观地展示了优化算法在计算速度(耗时)和收敛性能(对数似然)上的显著优势。
功能特性
- 非平稳信号仿真:能够生成具有状态切换特性的模拟信号(如低频静默与高频爆发状态切换),包含真实的状态序列与观测数据。
- 自定义小波变换:内置简易Haar离散小波变换(DWT)算法,不依赖MATLAB工具箱即可提取信号的近似系数(低频)与细节系数(高频)。
- 数据预处理:针对小波高频子带数据进行Z-score标准化处理,以适配模型训练。
- 双版本EM算法实现:
*
基准算法:采用显式多层循环结构,逻辑直观但效率较低,用于教学与性能对比。
*
优化算法:采用矩阵向量化运算、K-Means辅助初始化及缩放因子法(Scaling Factor),显著提升运行速度与数值稳定性。
- 多维度可视化分析:提供原始信号与状态对比、小波系数展示、对数似然收敛曲线对比以及训练耗时统计柱状图。
- 参数估计输出:自动输出优化模型计算得到的状态转移矩阵及高斯分布方差,并与真实值进行定性对比。
系统要求
- 运行环境:MATLAB (推荐 R2016b 及以上版本)
- 依赖工具箱:无(核心算法全原生实现,包括小波变换与K-Means,无需Signal Processing或Wavelet Toolbox支持)。
使用方法
直接运行主程序即可启动整个流程。程序将自动按顺序执行数据生成、模型配置、算法对比训练及结果绘图。控制台将实时打印基准算法与优化算法的执行状态及耗时,最终输出训练后的模型参数。
详细实现逻辑与代码分析
本项目的主程序逻辑高度模块化,主要包含以下关键步骤:
1. 数据生成与预处理
程序首先固定随机种子以确保结果可复现。
- 信号模拟:构建一个长度为2000的时间序列,定义两种隐状态(状态1为低方差,状态2为高方差)。通过预设的转移矩阵(
Trans_True)和高斯发射方差(Vars_True)生成状态序列及对应的观测信号。 - 离散小波变换 (DWT):通过内部函数实现Haar小波滤波。信号经过低通(
[1, 1])和高通([1, -1])滤波器下采样,分离出近似系数和细节系数。 - 标准化:选取细节系数(cD)作为HMM的观测数据,并对其进行均值为0、方差为1的标准化处理,有助于EM算法的稳定性。
2. 核心算法对比
程序配置了2个隐状态和50次最大迭代次数,分别运行两种训练函数:
#### A. 基准EM算法实现 (Standard EM)
- 初始化:采用完全随机的方式初始化状态转移矩阵、发射均值和方差。
- E步 (期望):通过显式的
for循环计算前向概率(Alpha)、后向概率(Beta)、状态后验概率(Gamma)及双状态后验概率(Xi)。 - M步 (最大化):同样通过循环遍历所有状态和样本,更新模型参数(转移矩阵、均值、方差)。
- 特点:代码结构直接对应数学公式,易于理解原理,但在MATLAB解释器中执行效率较低。
#### B. 优化EM算法实现 (Optimized EM)
- 初始化改进:引入简易K-Means算法对观测数据进行初步聚类,利用聚类结果初始化高斯发射参数(均值和方差),显著减少了迭代初期的盲目性。
- 向量化计算:利用MATLAB的矩阵运算特性,移除了E步和M步中的大部分内层循环。例如,通过矩阵乘法与点乘一次性计算所有时刻的概率值。
- 数值稳定性处理:引入缩放因子 (Scaling Factor) 机理。在计算前向和后向变量时,对每个时刻的概率进行归一化,防止长序列计算导致浮点数下溢(Underflow)。
- 正则化:在方差更新步骤中加入了微小的正则化项(1e-6),防止方差坍缩为零。
3. 自定义辅助算法
为了保证代码的独立性,项目内部实现了以下算法:
- simple_haar_dwt:手动实现的单层Haar小波变换,处理了奇数长度信号的补零问题。
- kmeans_simple:一个轻量级的K-Means迭代算法,用于寻找数据的高斯中心,辅助HMM初始化。
- gaussian_pdf:标准一维高斯概率密度函数计算。
4. 结果可视化与评估
执行结束后,系统会生成一个包含四个子图的分析窗口:
- 原始信号及隐含状态:展示带有不同方差特性的时域信号,并叠加真实的隐状态路径(红色线条)。
- 小波高频细分系数:展示用于训练的输入数据(DWT细节系数)。
- EM算法收敛性能对比:绘制基准算法与优化算法随迭代次数变化的对数似然(Log-Likelihood)曲线。通常可见优化算法收敛更快且初值更优。
- 耗时统计:通过柱状图直观对比两种方法的运行时间,并计算效率提升百分比。
控制台最后会输出优化算法估计得到的方差向量和状态转移矩阵,用户可直接将其与代码开头的真实生成参数进行比对,验证算法的有效性。