基于香浓能量的心音信号包络提取系统
项目介绍
本项目是一款专门用于心音信号(PCG)分析的数字化处理系统。其核心目标是从包含噪声和高频振荡的原始心音数据中,提取出形态平滑、能够准确反映心脏搏动特征的能量包络线。通过应用香浓能量(Shannon Energy)算法,系统能够显著增强心音中的第一心音(S1)和第二心音(S2)分量,并有效抑制无关的背景噪声与微弱杂音。该系统生成的包络曲线为后续的心动周期识别、心率计算及病理分析提供了高质量的基础数据,适用于远程医疗监测、智能穿戴设备算法开发以及临床辅助诊断。
---
功能特性
- 模拟信号构建:内置心音合成功能,能够精确模拟包含S1和S2典型特征的心音信号,并支持叠加高斯白噪声以验证算法的鲁棒性。
- 多级预处理模块:系统集成了重采样、中值滤波和带通滤波(25Hz-400Hz)功能,针对心音频率特性进行深度优化,去除工频干扰和基线漂移。
- 非线性能量变换:采用香浓能量算法进行信号转换。相比传统算力,该算法能非线性地放大信号包络,使得心音成分的边界更加清晰。
- 动态滑动窗口平滑:通过自定义的时间窗口对能量分布进行均值处理,确保能量曲线的实时性和稳定性。
- 二次平滑策略:利用移动平均技术执行二次加工,消除残余的细微抖动,生成连续性良好的最终包络。
- 自动化特征定位:基于阈值与最小峰值距离约束,自动检测包络中的心音峰值点(S1/S2),并估算实时心率(BPM)。
- 多维度可视化分析:通过三段式图表直观展示预处理对比、能量计算过程以及最终的心音成分定位结果。
---
使用方法
- 环境准备:启动MATLAB环境,确保已安装信号处理工具箱(Signal Processing Toolbox)。
- 信号载入:直接运行主脚本。系统默认会通过辅助函数生成一组5秒长的模拟心音信号。若需处理实际临床数据,可将“模拟生成”部分代码替换为相应的音频读取函数。
- 参数调整:根据实际信号的采样率,可微调代码中的重采样频率(fs_new)或滤波器的截止频率(25Hz-400Hz)。
- 运行监控:在命令行窗口(Command Window)观察自动检测到的峰值个数与平均心率。
- 结果查看:通过弹出图表观察原始信号、滤波信号、瞬时能量与最终归一化包络的对应关系。
---
系统要求
- 软件环境:MATLAB R2018b 或更高版本。
- 必需包:Signal Processing Toolbox(用于调用filtfilt, butter, findpeaks, medfilt1等核心函数)。
- 硬件建议:标准PC环境即可,算法已针对大样本批处理进行优化,内存占用极低。
---
实现逻辑与代码功能分析
1. 信号生成与预处理逻辑
代码首先建立采样率为2000Hz的信号环境。预处理环节包含三个核心步骤:
- 重采样:将信号降频至1000Hz,在保证心音信息完整的前提下提高计算效率。
- 中值滤波:应用长度为10点的中值滤波器,有效剔除信号中可能存在的突发性尖峰脉冲噪声。
- 带通滤波:使用4阶巴特沃斯(Butterworth)滤波器,保留25Hz至400Hz的有效频率区间,这是心音主要能量集中的频段,能有效过滤呼吸音和环境低频干扰。
2. 香浓能量算法核心实现
算法通过公式 E = -x^2 * log(x^2) 进行能量转换。逻辑详情如下:
- 归一化处理:首先将滤波后的信号映射到 [-1, 1] 区间,这是计算香浓能量的前提。
- 瞬时能量计算:利用平方项突出振幅,结合对数项改善信号的对比度。为了防止零点导致的计算异常,代码中加入了名为 epsilon (1e-10) 的极小偏移量。
- 加权过程:香浓能量能使高幅值部分更加突出,同时将中低强度的噪声能量进一步压缩,使S1与S2的形态在时域上呈明显的驼峰状。
3. 滑动窗口与平滑策略
为了从高频波动的瞬时能量中提取平滑曲线,系统执行了两步操作:
- 窗口均值化:设置20ms的动态滑动窗口对瞬时香浓能量进行第一次集成。
- 多次平滑:利用 movmean 函数进行50ms窗口的移动平均处理,这一步骤极大增强了包络的连续性,确保了在复杂的信号环境下不会出现多余的小碎峰。
4. 特征提取与心率评估
- 峰值检测:系统在归一化后的包络线上通过 findpeaks 函数搜寻局部极大值。
- 约束条件:设置了0.15倍窗口最大值的阈值限定,并利用0.2秒的最小峰值间距限制,防止将同一个S1或S2成分误检为多个目标。
- 心率转换:通过检测到的峰值位置差(diff)计算平均周期,进而推算出模拟心率。
---
关键算法细节分析:香浓能量的优势
在本项目实现中,香浓能量算法相较于传统的希尔伯特变换(Hilbert Transform)具有更好的自适应性。代码通过对 $x^2$ 的非线性变换,有效地平衡了信号的强弱分布。在心音信号中,即便 S2 的幅度远小于 S1,香浓能量算法也能通过对数运算的特性将其包络清晰地提取出来,而不会被 S1 所遮掩。此外,该算法对含有微弱震颤的病理性心音具有天然的集成平滑作用,是生理信号包络提取领域的高效选择。