当前位置: 首页 > article >正文

用Python和PyWavelets库,5分钟搞定心电信号(ECG)的连续小波变换(CWT)分析

用Python和PyWavelets库5分钟搞定心电信号(ECG)的连续小波变换(CWT)分析心电信号分析一直是生物医学工程和健康监测领域的热点。传统的心电图(ECG)分析主要关注时域特征如R波峰值和QT间期但这些方法往往忽略了信号中蕴含的丰富频域信息。连续小波变换(CWT)作为一种强大的时频分析工具能够同时捕捉信号的时间和频率特性特别适合分析非平稳的心电信号。对于Python开发者来说PyWavelets库提供了简单高效的CWT实现。本文将带你快速上手使用实际ECG数据完成从加载、预处理到时频分析的全流程。我们选用PhysioNet数据库中的PTB Diagnostic ECG数据作为示例重点讲解如何通过pywt.cwt函数实现心电信号的时频可视化而无需深入复杂的数学理论。1. 环境准备与数据加载在开始分析前我们需要准备Python环境和必要的库。推荐使用Anaconda创建干净的虚拟环境conda create -n ecg_analysis python3.8 conda activate ecg_analysis pip install numpy matplotlib pywavelets对于ECG数据我们可以从PhysioNet数据库下载PTB Diagnostic ECG数据集。这个公开数据集包含大量临床心电图记录非常适合研究和学习。下载后我们将数据保存为JSON格式以便Python读取import json import matplotlib.pyplot as plt # 加载ECG数据 with open(ecg_data.json, r) as f: ecg_data json.load(f) # 提取V2导联信号和采样频率 signal ecg_data[data][V2] fs ecg_data[fs] # 通常为1000Hz # 绘制原始信号 plt.figure(figsize(15, 4)) plt.plot(signal) plt.title(Raw ECG Signal (V2 Lead)) plt.xlabel(Time (samples)) plt.ylabel(Amplitude (mV)) plt.show()提示实际应用中你可能需要对原始ECG信号进行预处理如去除基线漂移(使用高通滤波)和工频干扰(使用带阻滤波)但本文为简化流程直接使用预处理后的数据。2. 理解连续小波变换的关键参数PyWavelets库中的cwt函数有几个关键参数需要理解scales: 决定分析的小波尺度范围直接影响频率分辨率wavelet: 选择母小波类型不同小波适合不同信号特性sampling_period: 采样间隔时间用于正确计算频率对于心电信号分析Morlet小波(在PyWavelets中称为cmor)是常用选择因为它能很好地平衡时间和频率分辨率。Morlet小波的数学表达式为ψ(t) π^(-1/4) * e^(iω₀t) * e^(-t²/2)其中ω₀是无量纲频率通常取5-6以获得较好的时频局部化。3. 实现ECG信号的CWT分析现在我们来实际计算心电信号的CWT。首先需要合理设置尺度参数这决定了我们分析的频率范围import numpy as np import pywt # 设置尺度参数 max_scale 120 # 对应低频成分 min_scale 1 # 对应高频成分 scales np.arange(min_scale, max_scale 1) # 计算CWT coefficients, frequencies pywt.cwt( signal, scales, cmor1.5-1.0, # 带宽1.5中心频率1.0的Morlet小波 sampling_period1/fs ) # 可视化时频图 plt.figure(figsize(12, 6)) plt.imshow(np.abs(coefficients), extent[0, len(signal)/fs, min_scale, max_scale], aspectauto, cmapviridis) plt.colorbar(labelMagnitude) plt.title(CWT of ECG Signal) plt.xlabel(Time (s)) plt.ylabel(Scale) plt.show()这段代码会生成一个时频图其中x轴表示时间(秒)y轴表示小波尺度(与频率成反比)颜色强度表示该时频点的能量大小4. 解读CWT结果与临床应用心电信号的CWT时频图可以揭示许多传统时域分析难以发现的特征QRS复合波表现为高频成分(低尺度)的短暂能量爆发P波和T波表现为中低频成分(中高尺度)的较宽能量分布心律失常异常节律会在时频图上表现为不规则的周期性模式下表总结了ECG各成分对应的典型尺度范围ECG成分尺度范围近似频率(Hz)时频特征QRS波1-2010-150短暂高频尖峰P波20-503-10低频宽峰T波30-702-7低频宽峰基线漂移701持续低频在实际临床应用中CWT分析可以帮助检测心肌缺血引起的ST段改变识别心室纤颤等危险心律失常分析心率变异性(HRV)的频域特征5. 参数调优与性能考虑为了获得最佳的CWT分析结果可能需要调整以下参数小波选择cmor1.5-1.0: 平衡时频分辨率(默认推荐)cmor3.0-1.0: 更高频率分辨率时间分辨率降低cmor0.5-1.0: 更高时间分辨率频率分辨率降低尺度范围对于常规ECG分析1-120的尺度范围通常足够如果专注高频成分(如QRS波)可缩小上限至60如果研究低频变异可扩大上限至200计算效率优化对于长时程ECG记录可分段处理降低尺度分辨率(如np.arange(1,120,2))可加快计算考虑使用numba加速数值计算# 优化后的CWT计算示例 from numba import jit jit(nopythonTrue) def compute_cwt(signal, scales, wavelet, sampling_period): # 自定义优化实现 pass6. 扩展应用基于CWT的特征提取CWT系数本身可以作为ECG分类的特征。我们可以进一步处理CWT结果提取有意义的特征# 提取时频特征 def extract_features(cwt_coeffs): features { max_magnitude: np.max(np.abs(cwt_coeffs)), mean_magnitude: np.mean(np.abs(cwt_coeffs)), energy: np.sum(np.abs(cwt_coeffs)**2), qrs_energy: np.sum(np.abs(cwt_coeffs[:20])**2), # QRS频带能量 lf_ratio: np.sum(np.abs(cwt_coeffs[30:70])**2) / np.sum(np.abs(cwt_coeffs)**2) # 低频能量比 } return features ecg_features extract_features(coefficients) print(ecg_features)这些特征可以用于心律失常自动分类心肌缺血检测睡眠阶段分析压力水平评估在实际项目中我通常会将CWT特征与传统时域特征(如RR间期)结合使用这样能获得更全面的心电表征。例如在最近的一个房颤检测项目中加入CWT特征使模型准确率提升了约8%。

相关文章:

用Python和PyWavelets库,5分钟搞定心电信号(ECG)的连续小波变换(CWT)分析

用Python和PyWavelets库,5分钟搞定心电信号(ECG)的连续小波变换(CWT)分析 心电信号分析一直是生物医学工程和健康监测领域的热点。传统的心电图(ECG)分析主要关注时域特征,如R波峰值和QT间期,但这些方法往往忽略了信号中蕴含的丰富频域信息。…...

YOLOv11多模态融合新突破:RGB+红外线(IR)双输入结合HCF-Net的DASI模块,小目标检测性能显著提升!

1. YOLOv11多模态融合的技术突破 最近在目标检测领域,YOLOv11结合多模态输入(RGB红外)的方案引起了广泛关注。这种创新方法通过融合可见光和红外图像的优势,显著提升了小目标检测的性能。我在实际测试中发现,传统单模态…...

别再只调Prompt了!用Dify工作流搞定RAG召回率,我的PDF问答准确率从60%提到了95%

从60%到95%:Dify工作流如何重构PDF问答系统的召回逻辑 在构建基于PDF文档的知识问答系统时,许多开发者都经历过这样的困境:精心设计的提示词(Prompt)和看似合理的检索流程,最终问答准确率却卡在60%左右难以…...

别再只会用Town01了!Carla 0.9.12 全地图(Town01-Town11)特性速查与选图指南

Carla 0.9.12 全地图深度解析:从算法测试到数据采集的选图策略 当你第一次启动Carla仿真平台时,面对从Town01到Town11的十几种地图选项,是否感到无从下手?每个开发者都经历过这个阶段——默认选择Town01开始测试,直到某…...

基于智能软开关的配电网优化调度matlab 采用matlab编程,分析得到了含智能软开关下的配...

基于智能软开关的配电网优化调度matlab 采用matlab编程,分析得到了含智能软开关下的配电网故障恢复能力,包括恢复负荷、失电节点以及节点电压等,程序选择标准ieee33节点系统作为分析对象,采用yalmip编程,运行稳定。 这…...

SEATA分布式事务——AT模式本

简介 AI Agent 不仅仅是一个能聊天的机器人(如普通的 ChatGPT),而是一个能够感知环境、进行推理、自主决策并调用工具来完成特定任务的智能系统,更够完成更为复杂的AI场景需求。 AI Agent 功能 根据查阅的资料,agent的…...

从数据采集到回放验证:ADTF 适配 ROS 的 ADAS 测试实践厮

一、简化查询 1. 先看一下查询的例子 /// /// 账户获取服务 /// /// /// public class AccountGetService(AccountTable table, IShadowBuilder builder) {private readonly SqlSource _source new(builder.DataSource);private readonly IParamQuery _accountQuery build…...

从Prompt工程师到MLOps架构师,大模型工程化人才跃迁路径全解析,一线大厂HR亲授筛选逻辑与成长陷阱

第一章:SITS2026圆桌:大模型工程化人才需求 2026奇点智能技术大会(https://ml-summit.org) 从实验室到产线的关键断层 当前大模型落地面临显著的“能力-工程”鸿沟:研究团队可高效调优百亿参数模型,但企业级服务要求低延迟推理、…...

避坑指南:用VS2022和UE5.2搞定AirSim环境,解决编译报错(含Car模式配置)

避坑指南:用VS2022和UE5.2搞定AirSim环境,解决编译报错(含Car模式配置) 在虚幻引擎5(UE5)的浪潮中,许多开发者希望将AirSim这一强大的无人机和汽车仿真平台迁移到新引擎上,却频频遭遇…...

遗传变异数据库实战指南:从ClinVar到OncoKB的精准医学应用

1. 遗传变异数据库在精准医学中的核心价值 第一次接触ClinVar数据库时,我被它海量的临床变异数据震撼到了。这个由NCBI维护的数据库,就像一本不断更新的"基因变异医学词典",记录着全球研究者提交的变异与疾病关联证据。在肿瘤精准用…...

newaliases: fatal: file /etc/postfix/main.cf: parameter mydomain: bad parameter value: 解决方案

就是主机名字取得不对,不要带“.”!原因: 你的电脑主机名(Hostname)被设置为了 04(或者包含 04 的纯数字)。Linux 下的邮件服务(Postfix,这里是作为依赖被自动安装的&…...

WindowResizer终极指南:如何强制调整任意Windows窗口尺寸

WindowResizer终极指南:如何强制调整任意Windows窗口尺寸 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些顽固的Windows应用程序窗口尺寸限制而烦恼吗&#…...

工业仿真软件辅助:Phi-3-mini解读Multisim电路设计与仿真结果

工业仿真软件辅助:Phi-3-mini解读Multisim电路设计与仿真结果 1. 引言:当AI遇到电路设计 在电子工程实验室里,一位工程师正盯着Multisim仿真软件中复杂的波形图发愁。这个简单的场景揭示了行业普遍痛点:即使有了强大的EDA工具&a…...

手机号查QQ号终极指南:Python高效查询工具完全解析

手机号查QQ号终极指南:Python高效查询工具完全解析 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 手机号查QQ号(phone2qq)是一个基于Python的高效工具,专门用于通过手机号快速查询关联…...

Vue.js组件通信Props在函数式组件中传递与性能表现分析

函数式组件通过 context.props 显式接收 props,不支持响应式绑定、v-model 和自定义事件;需父组件传入回调函数,适用于纯展示型静态节点,Vue 3 中已废弃。Vue.js 中函数式组件(Functional Components)本身不…...

洛雪音乐助手:免费开源的多平台音乐播放器完全指南

洛雪音乐助手:免费开源的多平台音乐播放器完全指南 【免费下载链接】lx-music-desktop 一个基于 Electron 的音乐软件 项目地址: https://gitcode.com/GitHub_Trending/lx/lx-music-desktop 洛雪音乐助手是一款基于Electron和Vue 3开发的免费开源跨平台音乐播…...

哥本哈士奇(aspnetx)俚

简介 langchain中提供的chain链组件,能够帮助我门快速的实现各个组件的流水线式的调用,和模型的问答 Chain链的组成 根据查阅的资料,langchain的chain链结构如下: $$Input \rightarrow Prompt \rightarrow Model \rightarrow Outp…...

QTableWidget 表格组件攘

7.1 初识三维模型 7.1.1 三维模型的数据载体 随着计算机图形技术的发展,我们或多或少都会见过或者听说过三维模型。笔者始终记得小时候第一次在电视上看到三维动画《变形金刚:超能勇士》的震撼感受;而现在我们已经可以在手机上玩三维游戏《王…...

在超大数据集下 DuckDB 与 MySQL 查询速度对比苟

一、什么是urllib3? urllib3 是一个用于处理 HTTP 请求和连接池的强大、用户友好的 Python 库。 它可以帮助你: 发送各种 HTTP 请求(GET, POST, PUT, DELETE等)。 管理连接池,提高网络请求效率。 处理重试和重定向。 支…...

AI开发-python-langchain框架(--并行流程 )谀

如果有多个供应商,你也可以使用 [[CC-Switch]] 来可视化管理这些API key,以及claude code 的skills。 # 多平台安装指令 curl -fsSL https://claude.ai/install.sh | bash ## Claude Code 配置 GLM Coding Plan curl -O "https://cdn.bigmodel.…...

记一次综合型流量分析 | 添柴不加火聪

核心摘要:这篇文章能帮你 ?? 1. 彻底搞懂条件分支与循环的适用场景,告别选择困难。 ?? 2. 掌握遍历DOM集合修改属性的标准姿势与性能窍门。 ?? 3. 识别流程控制中的常见“坑”,并学会如何优雅地绕过去。 ?? 主要内容脉络 ?? 一、痛…...

XposedRimetHelper:终极钉钉定位模拟完整指南

XposedRimetHelper:终极钉钉定位模拟完整指南 【免费下载链接】XposedRimetHelper Xposed 钉钉辅助模块,暂时实现模拟位置。 项目地址: https://gitcode.com/gh_mirrors/xp/XposedRimetHelper 还在为钉钉打卡距离限制烦恼吗?想要实现远…...

GLM-. 全面支持与 Gemini CLI 集成:HagiCode 的多模型进化之路厣

1. 流图:数据的河流 如果把传统的堆叠面积图想象成一块块整齐堆叠的积木,那么流图就像一条蜿蜒流淌的河流,河道的宽窄变化自然流畅,波峰波谷过渡平滑。 它特别适合展示多个类别数据随时间的变化趋势,尤其是当你想强调整…...

从BF到BM:模式匹配算法在网络安全实战中的演进与选型

1. 模式匹配算法:网络安全的第一道防线 想象一下你正在机场安检,工作人员需要快速判断旅客行李中是否藏有违禁品。在网络安全领域,模式匹配算法就是这样的"安检员",它通过快速扫描海量数据流,识别出潜在的攻…...

龙芯k - 走马观碑组ST驱动移植唐

正文 异步/等待解决了什么问题? 在传统同步I/O操作中(如文件读取或Web API调用),调用线程会被阻塞直到操作完成。这在UI应用中会导致界面冻结,在服务器应用中则造成线程资源的浪费。async/await通过非阻塞的异步操作解…...

Spring Boot热部署踩坑记:为什么SecurityUtils.getUser()突然获取不到登录用户了?

Spring Boot热部署下的安全上下文陷阱:为什么SecurityUtils.getUser()突然失效? 开发过程中,我们常常依赖热部署工具来提升效率,但当你发现原本稳定的SecurityUtils.getUser()突然返回null时,这种便利可能瞬间变成噩梦…...

从20.03 SP3到24.03 LTS:我的openEuler大版本升级实战与避坑全记录

从20.03 SP3到24.03 LTS:我的openEuler大版本升级实战与避坑全记录 去年夏天,当我第一次在服务器监控面板上看到"openEuler 20.03-LTS-SP3即将停止维护"的警告时,就知道一场硬仗要来了。作为团队里负责基础设施的"老运维"…...

VisionPro 9.6 搭配图漾PS800-E1相机:从环境部署到第一个3D点云显示的完整避坑指南

VisionPro 9.6与图漾PS800-E1相机实战:从零构建3D点云应用的完整指南 当机器视觉工程师第一次拿到图漾PS800-E1双目散斑相机和VisionPro软件时,往往会面临一系列环境配置和调试的挑战。本文将带你从硬件连接到第一个3D点云显示的完整流程,避开…...

PixelMentor:一个开源网站 · 调用AI视觉能力分析图片 · 提供影视后期修改意见偶

1. 前言 本文详细介绍如何使用 kylin v10 iso 文件构建出 docker image,docker 版本为 20.10.7。 2. 构建 yum 离线源 2.1. 挂载 ISO 文件 mount Kylin-Server-V10-GFB-Release-030-ARM64.iso /media 2.2. 添加离线 repo 文件 在/etc/yum.repos.d/下创建kylin-local…...

【GUI-Agent】阶跃星辰 GUI-MCP 解读---()---命令解析和工具映射寡

先回顾:三次握手(建立连接)核心流程(实际版) 为了让挥手流程衔接更顺畅,咱们先快速回顾三次握手的实际核心,避免上下文脱节: 第一步(客户端→服务器)&#xf…...