MatlabCode

本站所有资源均为高质量资源,各种姿势下载。

您现在的位置是:MatlabCode > 资源下载 > 一般算法 > 基于希尔伯特变换的心音信号包络提取算法实现

基于希尔伯特变换的心音信号包络提取算法实现

资 源 简 介

本项目旨在利用MATLAB平台开发一套针对生物医学信号的处理程序,特别是针对非平稳的心音信号(PCG)进行分析。程序的核心功能是通过希尔伯特变换(Hilbert Transform)方法来提取心音信号的瞬时振幅包络。在实际操作中,该程序首先加载采集到的心音时间序列数据,构建对应的解析信号(Analytic Signal)。由于解析信号的模值表征了原始实信号的瞬时包络,该方法能够有效地平滑信号的高频振荡,描绘出心音能量随时间变化的轮廓。这对于后续的心音分割、特征提取(如定位第一心音S1和第二心音S2)、心率计算以及心杂音的识别具有至关重要的作用。该程序不仅实现了算法逻辑,还提供了直观的图形化结果展示,帮助研究人员或医生快速观察心音强度的变化趋势。

详 情 说 明

基于希尔伯特变换的心音信号包络提取系统

项目简介

本项目是一个基于MATLAB开发的生物医学信号处理系统,专注于非平稳心音信号(PCG)的分析。系统的核心功能是利用希尔伯特变换(Hilbert Transform)算法构建解析信号,从而精确提取心音信号的瞬时振幅包络。

该程序能够有效地平滑高频振荡,描绘出心音能量随时间变化的轮廓,为后续的第一心音(S1)和第二心音(S2)定位、心率计算及病理性杂音识别提供了可靠的信号基础。系统内置了高保真的心音模拟生成器,无需外部数据即可直接演示完整的信号处理流程,并提供直观的可视化结果。

与代码实现一致的功能特性

本系统严格按照 main.m 中的代码逻辑实现,具备以下核心功能:

  • 心音信号模拟生成:内置算法能够生成包含S1、S2成分、环境白噪声以及呼吸基线漂移的模拟心音信号,模拟采样率为2000Hz。
  • 信号预处理:应用巴特沃斯(Butterworth)带通滤波器去除低频基线漂移和高频干扰,并利用零相位滤波技术防止信号时移。
  • 瞬时包络提取:利用希尔伯特变换计算解析信号,通过求模值获取未经平滑的瞬时包络。
  • 包络平滑处理:采用低通滤波技术对原始包络进行平滑,去除高频抖动,突出心音的主体轮廓。
  • 自适应阈值展示:计算平滑包络的统计均值,并生成自适应阈值线,辅助观察心音定位。
  • 多视图可视化:在一个窗口中通过三个子图分别展示预处理对比、包络提取效果及平滑后的阈值分析。

系统要求

  • MATLAB R2016a 或更高版本
  • Signal Processing Toolbox(信号处理工具箱,用于 butter, filtfilt, hilbert 等函数)

使用方法

  1. 确保MATLAB已安装并包含信号处理工具箱。
  2. 打开MATLAB环境,将工作目录切换至项目所在文件夹。
  3. 直接运行 main 函数。
  4. 程序将自动执行以下操作:
* 生成5秒长的模拟心音数据。 * 执行滤波、变换和包络提取算法。 * 在控制台输出采样率和最大包络幅值。 * 弹出包含三个子图的图形窗口,展示处理结果。

算法逻辑与代码实现细节

程序 main.m 的执行流程严格遵循以下五个步骤:

1. 数据获取与模拟

程序首先初始化参数,设置采样率(Fs)为 2000Hz,信号时长为 5秒。 代码调用内部辅助函数 generate_simulated_pcg 生成模拟数据。该部分为了模拟真实环境,叠加了且幅度为0.05的高斯白噪声以及0.25Hz的低频正弦呼吸干扰。

2. 信号预处理

为了提取有效的心音成分,代码构建了一个 4阶巴特沃斯带通滤波器
  • 通带范围25Hz - 400Hz,覆盖了心音的主要频率成分。
  • 零相位滤波:使用 filtfilt 函数替代标准的 filter 函数,确保滤波后的信号不会产生相位延迟,保证了时间轴上的精准对齐。
  • 归一化:将滤波后的信号除以其绝对值的最大值,使其幅值范围归一化到 [-1, 1] 之间,便于跨样本比较。

3. 基于希尔伯特变换的包络提取

这是系统的核心算法部分。
  • 构建解析信号:使用 hilbert() 函数对预处理后的实数信号 $x(t)$ 进行变换,得到复数解析信号 $z(t) = x(t) + j cdot H{x(t)}$。
  • 提取模值:计算解析信号的模(绝对值),即 abs(analytic_signal)。该模值代表了信号的瞬时振幅包络,能够反映心音强度的瞬时变化。

4. 包络平滑处理

原始的希尔伯特包络通常包含大量的高频毛刺。代码通过二级滤波进行优化:
  • 低通滤波:设计了一个截止频率为 15Hz2阶巴特沃斯低通滤波器
  • 平滑及去噪:再次利用 filtfilt 对包络进行处理,得到了平滑且边缘清晰的心音轮廓(smoothed_envelope)。

5. 结果可视化与分析

程序生成一个图形窗口,包含三个子图:
  • 子图1(预处理对比):同时绘制原始含噪信号(灰色)和带通滤波后的信号(蓝色),展示去噪效果。
  • 子图2(包络提取):在滤波信号上方叠加绘制红色的希尔伯特瞬时包络线,直观展示包络对波峰的追踪能力。
  • 子图3(阈值分析):展示最终的平滑包络(黑色粗线),并计算 mean(smoothed_envelope) * 1.5 作为自适应阈值,绘制出品红色的虚线。这演示了如何通过简单的阈值逻辑来定位S1和S2心音。

辅助函数说明

代码包含一个名为 generate_simulated_pcg 的内部函数,其实现逻辑如下:

  • 基于70 BPM (次/分) 的心率计算心动周期。
  • 使用 Gabor小波(正弦波乘以高斯窗)来模拟心音成分:
* S1 (第一心音):设定频率50Hz,位于周期起始段。 * S2 (第二心音):设定频率70Hz,位于周期约35%处。
  • 通过循环叠加多个周期的波形,并最终加入噪声与漂移,形成完整的时域信号。