MatlabCode

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

您现在的位置是:MatlabCode > 资源下载 > 一般算法 > 基于香农能量算法的心音信号包络提取源码

基于香农能量算法的心音信号包络提取源码

资 源 简 介

本项目主要用于对原始心音信号进行包络提取,是心音信号分析与自动诊断的前端预处理环节。程序首先对采集到的心音信号进行归一化处理,并利用巴特沃斯带通滤波器去除呼吸音、摩擦音等背景噪声干扰。核心处理阶段采用香农(Shannon)能量算法,通过计算归一化信号幅度的平方与其对数的乘积,非线性地放大信号中的高能量成分(如第一心音S1和第二心音S2),同时有效抑制低幅度的随机噪声。最后,系统通过特定的平滑滤波或滑动窗口算法对香农能量序列进行处理,生成平滑的心音包络曲线。该算法能清晰地勾勒出心音周期的形态,极大地提高了后续心音切分、特征提取以及病理性杂音识别的准确率。

详 情 说 明

基于香农能量算法的心音信号包络提取 (Shannon Energy Envelope Extraction)

项目介绍

本项目实现了一套基于香农(Shannon)能量算法的心音信号(PCG)包络提取系统。作为心音分析与自动诊断的前端预处理环节,该算法能够有效抑制背景噪声,放大心音信号中的关键成分(如第一心音S1和第二心音S2),并提取出光滑的包络曲线。这一处理过程对于后续的心音切分、特征提取以及病理性杂音识别具有重要的意义。

本项目完全基于MATLAB编写,包含了从信号模拟生成、预处理、核心特征计算到最终包络平滑的全流程实现。

功能特性

  • 高保真信号模拟:内置心音生成算法,能够模拟包含S1、S2成分的心音信号,并叠加高斯白噪声、50Hz工频干扰以及低频基线漂移,以此模拟真实的采集环境。
  • 信号预处理:集成归一化处理与高阶巴特沃斯带通滤波器,有效滤除呼吸音(极低频)和环境高频噪声。
  • 香农能量计算:利用香农能量算法的非线性特性,增强信号中的有效成分,显著抑制低幅度的随机噪声。
  • 包络平滑提取:采用零相位滑动平均滤波技术,从能量序列中提取出平滑且无相位延迟的心音包络。
  • 全流程可视化:提供四个维度的波形对比显示,直观展示从原始含噪信号到最终包络的处理效果。

系统要求

  • MATLAB R2016a 或更高版本
  • Signal Processing Toolbox(信号处理工具箱)

使用方法

直接运行主脚本即可启动程序。程序将自动执行以下步骤:

  1. 生成一段时长为5秒、采样率为2000Hz的模拟心音信号。
  2. 依次执行归一化、带通滤波、香农能量计算和平滑处理。
  3. 弹出一个包含四个子图的图形窗口,展示处理过程中的各阶段波形。

算法实现细节与逻辑分析

本项目主要包含以下核心处理模块,其逻辑严格对应代码实现:

1. 信号获取与生成

程序并没有加载外部音频文件,而是通过内置算法生成模拟数据:
  • 设定采样率为2000Hz,时长5秒。
  • 模拟60 BPM的心率(周期1秒),在特定时间点生成由阻尼正弦波构成的S1(50Hz)和S2(70Hz)。
  • 在纯净信号上叠加了三种干扰:0.05强度的随机高斯白噪声、0.02强度的50Hz工频干扰以及0.1强度的0.2Hz低频基线漂移(模拟呼吸波)。

2. 预处理阶段

为了提高后续算法的稳定性,首先对原始信号进行处理:
  • 幅度归一化:将原始信号幅度线性缩放到 [-1, 1] 区间,消除不同信号源的量级差异。
  • 带通滤波:设计了一个4阶巴特沃斯(Butterworth)带通滤波器。
* 通带范围:20Hz - 400Hz。这一范围涵盖了心音的主要频率成分,能够有效去除低频基线漂移(呼吸影响)和高频电子噪声。 * 零相位滤波:使用 filtfilt 函数进行滤波,确保输出信号相对于输入信号没有相位延迟,保证了心音发生时刻的准确性。
  • 二次归一化:滤波后的信号再次被归一化,为香农能量计算做准备。

3. 香农(Shannon)能量提取(核心算法)

这是本项目的核心部分,旨在将时域信号转换为能量序列,突出高能量的心音成分。
  • 算法公式:利用公式 E = -x^2 * log(x^2) 进行计算。
  • 实现逻辑
1. 计算归一化信号的平方(x^2)。 2. 为了防止对0取对数导致计算错误,在平方值上添加了一个极小值(epsilon = 1e-10)。 3. 计算对数值并乘以平方值,最后乘以-1将原本为负的结果转换为正能量值。 4. 对可能因浮点误差产生的微小负值进行截断处理(置零)。
  • 原理:该非线性变换能够对中高强度的信号(S1, S2)进行放大,同时极大地衰减低幅度的背景噪声。

4. 包络平滑与提取

香农能量序列通常包含较多毛刺,需要平滑处理以获得清晰的包络。
  • 滑动窗口:设定时间窗口为0.05秒(50ms),对应2000Hz采样率下的约100个采样点。
  • 移动平均滤波:构建均值滤波器,再次利用 filtfilt 对能量序列进行零相位滤波。这相当于在时域上进行平滑卷积,填补了能量波峰间的缝隙。
  • 最终归一化:将提取出的包络线归一化到 [0, 1] 区间,便于在绘图中与原始波形进行幅值对比。

5. 结果可视化

程序最后绘制了一个名为“基于香农能量的心音包络提取”的图表,包含四个子图:
  1. 原始心音信号:展示包含各类噪声和漂移的初始波形。
  2. 带通滤波信号:展示去除基线漂移和高频噪声后的干净波形。
  3. 香农能量序列:展示经非线性变换后的能量脉冲序列。
  4. 最终心音包络:将红色的平滑包络曲线叠加在灰色的滤波波形上,清晰展示了算法对S1和S2轮廓的提取能力。