计算BPM——从PPG信号
150(30天)
显示旧的评论
willing2learn
2014年3月15日
大家好!
我已经能够创建一个脚本,该脚本读取实时心率-显示值图。
现在我需要计算图中山峰的数量和BPM
简单的脚本解决方案吗?
任何帮助将是最欣赏!谢谢!
6个评论
willing2learn
2014年3月25日
嘿,使用试试这段代码:
ydpos = diff (ydata > 1000) > 0;%这些数据点所示
%以下附图
dxmax = max (xdata (ydpos = = 1));
dxmin = min (xdata (ydpos = = 1));
dx = (dxmax - dxmin) / ((ydpos)和1)
dx =
米金写的
艾哈迈德YALCIN
2014年3月31日
谢谢米,
我将尝试你的建议…我开发了以下算法(类似于你的)发现山峰,似乎也工作:
——顺利通过使用一维高斯滤波器和卷积g = gausswin (5);g = g / (g)总和;和通过卷积conv - - > conv_sig = conv (sig, g,“相同”);
——计算和绘制1 st-derivative卷积信号
——找到1 st-derivative信号的峰值[pks_1stderiv loc_1stderiv_peaks] = findpeaks (conv_sig (d),“MINPEAKHEIGHT”, 1,“MINPEAKDISTANCE”, 18)
联合会
2014年5月6日
大家好,我需要计算心率变异性(HRV)通过使用频域测量和发现非常低的频率(重要),低频(LF)、高频(HF)和总功率。例如如果X是X = RR区间[.......... 0.456,0.567,0.457,0.770),长度X = 600和第二。我怎么能找到(六世从0.0 X -0.04),(如果从0.04 - 0.15 X),(高频X从0.15 - 0.40)和总功率在毫秒广场。
接受的答案
米金
2014年3月15日
编辑:米金
2014年3月15日
13个评论
willing2learn
2014年3月15日
嗨,谢谢你的快速响应!
我不是伟大的matlab
使用find山峰,我计算的频率如何?
使用fft函数,我有附图- HR小于10赫兹是合理的。
但是我需要检测并显示实际的脉冲计数- e。g 70次超过60秒样本的
谢谢
willing2learn
2014年3月15日
willing2learn
2014年3月17日
嗨,是的信号值> 1000算一个峰值,x = 56 - x = 71是一种单脉冲/峰值。
方波是由于饱和电流电路。当我拒绝获得图应该接近一个心电图曲线。
谢谢
米金
2014年3月17日
编辑:米金
2014年3月17日
好的。在这种情况下,您可以简单地使用
ydpos = diff (ydata > 1000) > 0;%这些数据点所示
%以下附图
dxmax = max (xdata (ydpos = = 1));
dxmin = min (xdata (ydpos = = 1));
dx = (dxmax - dxmin) / ((ydpos)和1)
dx =
37.500000000000000
xdata
和
ydata
你的数据吗
HR1.fig
,
dx
是个体之间的平均持续时间节拍。我不知道你的单位在x轴上,所以你需要找出如何将
dx
每分钟节拍。
这是否让你你需要什么并回答你的问题吗?
willing2learn
2014年3月17日
太酷了!这几乎是我想要的,只是我不知道x轴转换成时间,目前数量的样品我想——在10秒内。下面是我的代码:
% HR_real_time
清晰的所有;
一个= arduino (“COM24”)
抽搐
toc
time_start =抽搐;%开始采取样本
time_stop = toc;%停止样品
sample_time = 60;% 1 k样品
xstop = 1000;
x = (0,0);
而(toc < sample_time)
b = a.analogRead (0);%将模拟值存储在b
x = [x、b];% x作为矩阵?,updating x - causing the shift
图(1)
情节(x);
xstop轴([0,0,1500]);
网格
% t =抽搐;% t增量步长
drawnow;
与其% = findpeaks (x)
结束
xfft = fft (x);
图(2)
频率= 0:(1000)/ (x):长度(1000)/ 2;
情节(频率、abs (xfft(1:长度(x) / 2 + 1)))
%的代码
结束
谢谢
willing2learn
2014年3月19日
嗨米沙,时间轴计算和解决方案添加到代码中。我很近!唯一的问题是似乎有计数- e的丧失。g当我的心率约63 bpm, Matlab回报约55……
请查看更新后的代码,看看我错过了或误解的东西?
非常感谢
% HR_real_time
清晰的所有;
一个= arduino (“COM24”)
抽搐
toc
time_start =抽搐;%开始采取样本
time_stop = toc;%停止样品
sample_time = 20;% 1 k样品
xstop = 20;
x = [];
time_ind = [];% 0 (600 1);
i = 1;
BPM = 0;
而(toc < sample_time)
b = a.analogRead (0);%将模拟值存储在b
time_ind = (time_ind, toc);%新数组索引存储时间
我=我+ 1;%每次循环运行时,增量
x = [x、b];% x作为矩阵?,updating x - causing the shift
图(1)
情节(time_ind x);%绘制时间指数
xstop轴([0,0,1500]);
ylabel (“级”);
包含(“时间”);
标题(心跳在时间域的);
网格
drawnow;
结束
情节与完成循环
xfft = fft (x);
图(2)
频率= 0:(1000)/ (x):长度(1000)/ 2;
情节(频率、abs (xfft(1:长度(x) / 2 + 1)));
ylabel (“级”);
包含(“频率”);
标题(心跳在频域的);
图(3)
情节(time_ind);
ylabel (“级”);
包含(“样本”);
标题(“心跳”);
% %计算频率
ydpos = diff (x > 1000) > 0;
%在脉冲时刻,当前值比以前大因而diff > 0
%在其他时候,diff < 0或diff = 0;
dxmax = max (time_ind (ydpos = = 1));% dxmax分配马克斯ydpos > 0时时间价值
dxmin = min (time_ind (ydpos = = 1));% dxmin ydpos > 0时分配的最小时间价值
dx = (dxmax - dxmin) / ((ydpos)和1);%计算频率在1秒? ? ?
BPM = (dx * 60)%获得BPM
米金
2014年3月20日
很难说。在
HR1上update.fig
我数21胜在不到19.5秒
21 / (19.89 - -0.57)* 60
ans =
65.217391304347828
这是你所期望的吗?
willing2learn
2014年3月20日
嗨,是的这就是我预计约63 BPM,但最后我55岁左右。我只是跑另一个测试25脉冲,但是代码只返回48 BPM——应该是75(25胜在20秒)。
必须有一个小错误的地方
willing2learn
2014年3月21日
嗨米非常感谢你的帮助。
我已经增加了采样周期为60秒,跑几个测试和代码是100%准确的10项(当手动脉冲数)。
以5比大多数时候它是准确的。
任何想法如何微调多一点吗?
谢谢
答案(1)
t . Thinh声称阮
2015年10月5日
看看我写的代码在这里。
https://uk.mathworks.com/matlabcentral/fileexchange/53364-heart-rate--spo2-using-ppg
心率估计完成通过FFT或峰值检测。
1评论
一个错误发生
无法完成的行动,因为页面所做的更改。重新加载页面更新状态。
你也可以从下面的列表中选择一个网站
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。