基于MATLAB的心音信号预处理与时频分析系统
项目介绍
本项目是一个集成化的心音信号处理与分析平台,专注于从含有复杂噪声的原始心音数据中提取生理特征。系统实现了从信号模拟、多级降噪、自适应分解到时频特征提取及心音周期识别的全流程处理。通过结合经典的数字滤波技术与现代时频分析算法(如 wavelet、EMD、HHT),该系统能够有效应对非平稳、非线性的心音信号,为心脏健康监测和瓣膜疾病的辅助诊断提供精准的数据支持。
功能特性
- 多层级噪声抑制:结合巴特沃斯低通滤波与离散小波变换(DWT),能够同时消除高频环境电磁干扰与宽带随机过程噪声。
- 自适应信号分解:引入经验模态分解(EMD)算法,无需预设基函数,根据信号自身尺度特征将其分解为物理意义明确的固有模态函数(IMF)。
- 高分辨率时频表达:利用希尔伯特黄变换(HHT)获取各阶分量的瞬时频率与瞬时能量,揭示心音在时域和频域上的动态演变。
- 智能特征点定位:基于香农能量包络算法与动态阈值技术,自动识别并标注第一心音(S1)与第二心音(S2),并计算实时心率。
- 全维度可视化界面:系统自动生成包含原始对比图、去噪波形、IMF分量图、HHT能量分布图及定位结果图的综合分析看板。
运行环境与系统要求
- 软件要求:MATLAB R2018a 或更高版本(需内置信号处理工具箱以支持 emd 等函数)。
- 硬件要求:建议内存 8GB 或以上,以确保在大样本数据分解时的运算效率。
- 主要工具箱:Signal Processing Toolbox, Wavelet Toolbox。
算法实现逻辑与核心流程
系统按照以下技术路径执行心音分析任务:
1. 信号初始化与模拟生成
程序内置了高仿真心音生成逻辑。采样频率设定为 2000Hz,模拟产生 4 秒的心音序列。其中 S1 模拟为 50Hz 的低频长持续信号,S2 模拟为 80Hz 的高频短持续信号。随后向其中注入 450Hz 的高频正弦干扰以及高斯白噪声,用以模拟真实的采集环境。
2. 预处理降噪阶梯
- 低通滤波阶段:采用 4 阶巴特沃斯低通滤波器,截止频率设定为 150Hz(覆盖心音主要能量区间)。通过零相位滤波技术,在滤除高频干扰的同时确保信号相位不发生畸变。
- 小波去噪阶段:选用 db6 小波基进行 5 层多尺度分解。利用启发式阈值(Heuristic Thresholding)原理,对小波系数进行软阈值处理,从细节分量中剥离随机背景噪声,保留心音突发的细节特征。
3. 经验模态分解 (EMD)
核心算法将去噪后的纯净信号自适应分解为最多 6 个 IMF 分量。该过程通过筛选法将不同频率尺度的震荡分量从高频到低频依次提取,有效解决了非平稳信号在局部时间尺度上的特征表达问题。
4. 希尔伯特黄变换 (HHT) 分析
对分解出的前三阶主要 IMF 分量进行 Hilbert 变换。通过解析信号计算各时刻的瞬时相位,进而求得瞬时频率与瞬时能量。分析结果以时间-频率-能量的三维分布形式呈现,直观反映了心跳过程中能量如何在不同频率段随时间转移。
5. 能量包络提取与特征定位
- 香农能量计算:为了突出心音波峰并抑制基线波动,系统对信号进行平方归一化处理,并计算香农能量(-x^2 * log(x^2))。
- 平滑与检测:应用滑动平均窗口平滑能量包络,配合动态阈值定位峰值点。
- 逻辑判定:根据心动周期生理常识,利用 S1 到 S2 之间约 0.25s 至 0.55s 的收缩期时间间隔判别准则,从检测到的峰值中准确区分并标记 S1 与 S2 位置。
6. 结果输出与统计
系统将在控制台实时打印检测到的 S1、S2 数量,并基于 S1 心动周期序列计算平均心率(BPM),同时在图形交互界面中高亮显示识别出的心音特征点。
关键实现细节说明
- 自适应阈值:在小波去噪中,程序通过中位数绝对偏差(MAD)估计噪声标准差,具有极强的鲁棒性。
- 零相位处理:滤波过程使用 filtfilt 函数,避免了常规单向滤波器带来的群延迟,保证了心音特征点定位的准确性。
- 动态峰值间距限制:在定位算法中设定了 MinPeakDistance,有效防止了由于信号毛刺导致的单次心动周期内多次重复计数的错误。