心电数据采集到了,如何计算心率成了一个问题,不过这个问题很早就有人解决了,但是网上能查找到的资料少之又少,代码也很少公开。这里博主就提供一个使用matlab程序计算心率的方法,只是提供了一个简单的思路和程序,此方法和程序里面的参数可能只适合博主自己做的心电器,未必适合其他心电数据,具体情况具体分析,欢迎大家来讨论。

1、数据导入!

第一步就是数据导入了,博主这里有一个转换好的txt数据文件,直接用load指令就能导入了。

data=load('ecg.txt');

然后可以使用plot指令查看一下波形

plot(data)

有可能这个数据是反的,这时候则需要添加一个“-”号,放大数据如下图所示:

2、数据预处理

这一步很关键,观察心电波形,R波峰很明显,通常也是使用探测R波峰的方式捕获心率的,但是上图所测量到的T波也比较大,如果不处理的话很可能会因为基线漂移造成捕获失败,程序将R波和T波混淆。

从信号成分分析,R波的信号成分在20Hz以上,T波成分一般在10Hz以下,这样我们就可以使用滤波器,将T波的信号衰减,突出R波的信号。同时使用高通滤波,去除基线偏移。这样我们就需要设计一个带通滤波器了,带宽在20Hz-30Hz,20Hz是为了去除基线和衰减T波信号,30Hz是保证心电信号保留的状态下,去除一些抖动噪声,特别是50hz的工频干扰。由于博主的数据采样率是500Hz,所以设计滤波器的时候需要按照500hz采样率来设计。这里使用的是32阶FIR滤波器,使用hamming窗。

Fs = sampleRate;           % Sampling Frequency
N    = 32;          % Order
Fc1  = 20;           % First Cutoff Frequency
Fc2  = 30;          % Second Cutoff Frequency
flag = 'scale';     % Sampling Flag
win = hamming(N+1); % Create the window vector for the design algorithm.
b  = fir1(N, [Fc1 Fc2]/(Fs/2), 'bandpass', win, flag); % Calculate the coefficients using the FIR1 function.
filteredA = filtfilt(b,1,data);

滤波效果如下,是不是基线很平稳,R波很突出,T波基本衰减很小,这样捕获R波就很方便了。

3、设置捕获条件!

接下来就是捕获R波,博主使用的是matlab自带的 findpeaks 函数,该函数是寻找极大值,同时可以限定条件,比如峰值阈值,极大值间隔等等。这样就很方便了,在一段时间内(窗口为1分钟),各个R峰值的阈值一般在信号的70%(这个值可以自己调试,看你心电数据了)以上,通过获取某段时间(窗口为1分钟)的最小值和最大值,来设置 'MinPeakHeight 捕获条件阈值。其次就是极大值间隔,一般正常人的心率不会超过120次每分钟,findpeaks 里面的 'MinPeakDistance' 可以设置最小间隔就是0.5s了。

获取某分钟的心电数据(500指的是采样率):

time_watch =26;
RSF=filteredA(time_watch*60*500:(time_watch+1)*60*500);

幅度阈值设置(这里设置的是70%以上才可以捕获极大值):

Threshold = (max(RSF) - min(RSF))*0.7 + min(RSF);

接着是间隔设置(这里设置的是0.5s的最小间隔):

[R_pks,R_locs]=findpeaks(RSF,500,'MinPeakDistance',0.5,'MinPeakHeight',Threshold);

接着就是显示是否捕获到R峰了:

plot(RSF);
title(['第',num2str(time_watch),' 分钟 EEG'])
hold on
plot(R_locs*500,R_pks,'x')

运行效果如图,效果还是不错的:

使用 matlab 心电数据捕获心率相关推荐

  1. 根据心电信号计算心率的matlab代码

    先说说现有的资料: [1][2]弄了FIR1还有hamming窗,搞得老麻烦了,扔一边先. --------------------------------------------------自己另外 ...

  2. matlab读取心电txt数据画图,图解MIT-BIH数据库心电数据下载和Matlab读取程序

    开源数据网站PhysioNet(https://physionet.org/)提供了诸如MIMIC.MIT-BIH等丰富的生理信号数据库,这些数据库对于人体生理信号的分析.数据挖掘有着非常大的作用.M ...

  3. 图解MIT-BIH数据库心电数据下载和Matlab读取程序

    开源数据网站PhysioNet(https://archive.physionet.org/)提供了诸如MIMIC.MIT-BIH等丰富的生理信号数据库,这些数据库对于人体生理信号的分析.数据挖掘有着 ...

  4. matlab读取心电注释.qrs文件格式,MIT-BIH ECG 心电数据的下载和读取图解 - 晨宇思远 - CSDN博客...

    MIT-BIH ECG 心电数据的下载和读取图解 收藏 一.如何下载获取MIT-BIH的数据 从下面这个官方链接页面可以下载到所有48组MIT-BIH心电数据: 下面这个链接是MIT-BIH数据库的详 ...

  5. Matlab心电信号的PQRST模拟-实验报告

    心电信号处理算法设计-实验要求 data4 是一段实际采样得到的心电数据, 采样频率为 100Hz, 波形如下图所示.设计相应的算法, 计算心率, 单位为: 次/分钟.可能会用到的知识为数字滤波器的设 ...

  6. matlab心电信号处理,基于Matlab的心电信号自动处理系统的设计与开发 毕业论文设计.doc...

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspmatlab 基于Matlab的心电信号自动处理系统的设计与开发 ...

  7. 孩子心脏发育不好,我要存孩子的心电数据

    原创:谭婧 起名字,背后往往有故事. 我认识一个2020年11月出生的小朋友,名叫"建建",取"健"字的谐音. 当建建还在他妈妈肚子里的时候,就被怀疑有先天性心 ...

  8. 【GPS仿真】基于matlab GPS信号捕获跟踪定位仿真【含Matlab源码 1960期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[GPS仿真]基于matlab GPS信号捕获跟踪定位仿真[含Matlab源码 1960期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

  9. MIT-BIH ECG 心电数据的下载和读取图解

    一.如何下载获取MIT-BIH的数据 从下面这个官方链接页面可以下载到所有48组MIT-BIH心电数据: http://www.physionet.org/physiobank/database/mi ...

最新文章

  1. linux环境安装python-pip
  2. django 整理一
  3. 自定义SAP Spartacus Cart界面
  4. $.post请求的参数在后台代码中得到为null_vue中Axios的封装和API接口的管理
  5. java面试常考系列四
  6. java自己实现ioc_springioc原理、springmvc项目分析、自己实现IOC
  7. Building JavaScript Games for Phones Tablets and Desktop(6)- 响应玩家输入
  8. 幼儿园编程机器人课程介绍
  9. Tasker实现简易的Telegram新消息朗读
  10. 苹果鼠标右键怎么按_iPadOS 13.4 鼠标体验如何?附使用指南
  11. 一篇文章教会你用Python爬取淘宝评论数据(写在记事本)
  12. BubbleGum96 开箱杂谈与软件资源
  13. 网管的自我修养-信息系统
  14. 减速机的漏油原因及快速维修方法
  15. 使用 IDEA 翻译插件
  16. 感恩节,感谢2022的转变,有在好好生活!
  17. 最新热点资讯:多条国际客运航线复航,涉及欧洲、亚洲多个城市
  18. 1036: 某年某月有多少天 C语言
  19. CODESYS开发教程6-关键字及变量类型
  20. ICP、ISP、IAP、JTAG、SWD下载方式

热门文章

  1. 小技巧:停课不停学,ppt简易录屏方法
  2. 【工业物联网基础】工控安全入门分析
  3. 常用的通配符SSL证书
  4. 镇江SEO云优化:如何提高百度收录率?
  5. 有赞零售移动端收银商品实践
  6. 锁定计算机 最新的,锁定计算机的方法
  7. 冒泡排序的实现,及其效率具象化
  8. 使用selenium自动化爬取腾讯研究院报告
  9. 拿来就能用!Python 每天定时发送一句情话 | 原力计划
  10. html实现字段截取,实现espcms系统cuthtml字符截取