基于希尔伯特黄变换的心音包络提取系统
项目介绍
本项目实现了一套基于希尔伯特黄变换(HHT)的心音信号处理流程,专门用于从含有噪声和基线漂移的复杂心音信号中提取高质量的形态包络。心音信号具有非平稳与非线性的特征,传统滤波和包络提取方法往往难以兼顾相位保真度与噪声抑制。本项目通过经验模态分解(EMD)将信号自适应地投影到不同尺度的分量上,并结合希尔伯特变换提取瞬时幅值,从而精准刻画第一心音(S1)和第二心音(S2)的振幅演变规律。
功能特性
- 自适应信号分解:无需预设基函数,利用EMD算法将复杂的原始心音自动分解为反映不同振动特征的固有模态函数(IMF)。
- 智能分量筛选:通过相关系数分析法,自动筛选出承载心音核心能量的分量,有效剔除高频随机噪声与极低频的呼吸基线漂移。
- 高精度包络提取:利用希尔伯特变换构建解析信号,计算瞬时幅值,避免了整流平滑等传统方法带来的相位偏移。
- 多维度可视化:提供从时域分解、信号重构到包络提取及瞬时频率分析的全方位分析图谱。
- 特征显著性辅助分析:通过寻找包络峰值,标注心音包络的显著性区域。
系统要求
- 运行环境:MATLAB R2018a 或更高版本。
- 必备工具箱:Signal Processing Toolbox(信号处理工具箱)。
- 硬件配置:普通个人电脑即可满足计算需求。
实现逻辑与流程
1. 模拟信号生成模块
- 心音模型:通过高斯窗口调制的正弦波模拟产生S1和S2信号。S1频率设定在50Hz左右,S2频率设定在80Hz左右。
- 复合噪声环境:在纯净心音基础上人为引入高斯白噪声和由0.5Hz正弦波模拟的呼吸基线漂移,模拟真实的临床采集环境。
2. 经验模态分解(EMD)
- 调用emd函数对混合信号进行分解。
- 设置最大IMF数量为8层,限制筛选迭代次数以平衡计算效率与分解准确度,将信号从高频到低频依次剥离。
3. IMF分量相关性筛选
- 相关分析:计算每个IMF分量与原始含噪信号的Pearson相关系数。
- 自动逻辑:设定相关系数阈值(0.25至0.8之间),通过该逻辑保留包含心音主要特征的中频段分量。同时排除相关性极高但通常包含高频噪声的第一分量,以及相关性较低的低频趋势项。
4. 包络提取核心算法
- 希尔伯特变换:对重构后的核心心音信号进行希尔伯特变换,获得复数形式的解析信号。
- 瞬时幅值计算:取解析信号的模长作为心音的原始瞬时包络。
- 平滑与归一化:应用20ms(基于采样频率计算)的移动平均窗口对原始包络进行平滑处理,消除锯齿状波动,并进行幅值归一化以便于后续特征点定位。
5. 瞬时特性分析
- 频率计算:通过解析信号的相位展开计算差分,获得信号的瞬时频率曲线,辅助识别S1、S2的频谱差异。
- 峰值检测:在包络线上搜索局部极大值,通过设定最小峰值距离和高度阈值,识别心音事件的关键时刻。
关键算法说明
- 经验模态分解 (EMD):该算法是HHT的核心,通过包络线均值迭代提取信号的局部特征尺度。相比于傅里叶变换,它能更好地处理心音这种非线性生理信号。
- 希尔伯特变换 (Hilbert Transform):用于产生原始信号的90度相移分量,通过构建复数信号,可以瞬间获得信号在任何时间点上的幅值(包络)和频率。
- 移动平均滤波 (Moving Average):在提取出瞬时幅值后,通过此线性平滑操作,能够滤除希尔伯特变换后残余的高频纹波,使生成的包络更符合生物医学上对“形态包络”的定义。
使用方法
- 确保MATLAB安装了信号处理工具箱。
- 将主脚本及相关函数置于同一工作目录下。
- 运行主函数。
- 程序将自动生成三个交互式图表窗口:
- 窗口1展示信号的EMD分解过程及各IMF分量的波形。
- 窗口2展示重构信号与原始信号的对比,以及最终提取出的平滑形态包络线。
- 窗口3展示重构信号的瞬时频率波动情况及包络显著性区域的检测结果。
- 命令行窗口将实时输出信号长度、分解层数以及被保留的分量索引等关键元数据。