我怎么能计算平均值的峰值振幅和曲线下的面积?

38视图(30天)
你好,
我希望有人能帮助我与我的问题。作为一个医疗专业,我缺乏基本的了解数据编程和数学。
我有一个记录,如何吸收的变化,从一个红外photoplethysmography体内获得的信号。数据导入Matlab是列向量。我已经设法将低通和带通滤波器应用到原始信号,分离的不同组件进一步分析。从带通滤过的信号(下图),我需要——对于一些给定的时间点(用绿色箭头说明):
- - - - - - 确定峰值振幅峰值(局部最小值)。
- - - - - - 确定曲线下的面积(AUC)——从最小值峰值。
- - - - - - 振幅和AUC应该与一些中值估计,例如+ / - 5秒从给定的时间点或+ / - 5的山峰。我不知道哪个是最好的方法?
有人可能的解决方案有什么建议吗?万博 尤文图斯
我很欣赏你可以提供的任何帮助。
轴:光吸收在任意单位,轴:时间,基于采样率(100赫兹)——每一秒= 100单位
2的评论
埃里克·尼斯伦
埃里克·尼斯伦 2023年2月15日
我需要找振幅/ AUC为每一个峰,周围的一个给定的时间点,并计算“本地”的意思。

登录置评。

接受的答案

明星黾
明星黾 2023年2月15日
总是有帮助的一个信号,所以我找到了一个从先前pulse-plethysmograph帖子,我使用它。(所有信号的预处理步骤可能不是必要的,但是他们对于这一个。他们还演示如何预处理生理信号。)
这样的尝试
分= readmatrix (“//www.tianjin-qmedu.com/matlabcentral/answers/uploaded_files/103608/p3_sit.csv”);%使用PPG信号从Previoous回答
分=分(分> = 1 e + 6);%去除文物(仅这个信号)
L =大小(分,1)
L = 449359
Fs = 960;
Fn = f / 2;
t = linspace (0 L - 1升)/ Fs;%的时间向量
t = t (:);%力列向量
NFFT = 2 ^ nextpow2(左)
NFFT = 524288
FT_PPG = fft ((PPG-mean (PPG)。*损害(L), NFFT);
阵线= linspace (0, 1, NFFT / 2 + 1) * Fn;
4 = 1:元素个数(艘);
情节(阵线、abs (FT_PPG (Iv) * 2))
网格
xlim (10 [0])
分=低通滤波器(分5 Fs,“ImpulseResponse”,“信息检索”);%去除高频噪声(仅这个信号)
PPGmax = max (PPG);
PPGmin = min (PPG);
[pks, plocs] = findpeaks(分,“MinPeakProminence”(PPGmax-PPGmin) * 0.05);%的山峰
[v, vlocs] = findpeaks(分“MinPeakProminence”(PPGmax-PPGmin) * 0.05);%的山谷
k = 1:元素个数(vlocs) 1
idxrng = vlocs (k): vlocs (k + 1);%这个脉冲指数范围
idxlim = [vlocs (k);vlocs (k + 1)];% Inmdex限制
电视= t (idxrng);%脉冲' t '向量
sv = PPG (idxrng);%脉冲分的向量
ts (k) = t (vlocs (k));%的脉搏开始时间
te (k) = t (vlocs (k + 1));%普尔;se结束时间
:kv (k) = k;%峰值计数器
B = [t (idxlim)的(2,1)]\ PPG (idxlim);%线性消除趋势回归参数
dtsv = [t (idxrng)的(大小(t (idxrng)))) * B;%线性趋势分离向量
svc = sv - dtsv;%去趋势信号
p2p (k) = max (svc);%峰振幅
AUC (k) = trapz(电视、svc);%脉冲面积
结束
PPG_Statistics =表(kv, ts, te、p2p AUC,“VariableNames”,{“高峰”,“t_start”,“t_end”,“PeakToPeak”,“AUC”})
PPG_Statistics =533×5表
t_start t_end PeakToPeak AUC ____ _________ ______ __________ __________1 0.35625 1.0615 2.1852 e + 05年68335 74229 1.0615 1.9187 2.0586 e + 05年3 94319 1.9187 2.701 2.8195 e + 05年4 2.701 3.4365 3.6124 1.0798 e + e + 05年05年5 3.4365 4.2542 4.7608 1.4338 e + e + 05年05年6 4.2542 5.1667 5.3515 1.7238 e + e + 05年05年7 5.1667 6.025 5.2727 1.6454 e + e + 05年05年8 6.025 6.7417 3.9724 1.3015 e + e + 05年05年9 6.7417 7.7635 3.4405 1.4125 e + e + 05年05年10 7.7635 8.6667 3.2516 1.2902 e + e + 05年05年11 8.6667 9.601 2.6599 1.0231 e + e + 05年05年12 9.601 10.455 2.0859 e + 05 75130 13 10.455 11.417 2.6815 1.0332 e + e + 05年05年14 11.417 12.381 3.687 1.4273 e + e + 05年05年15 12.381 13.354 4.8558 1.8557 e + e + 05年05年16 13.354 14.235 4.9775 1.7913 e + e + 05年05
惠普{1}=情节(t,分,“DisplayName的”,的数据分);
持有
惠普{2}=情节(t (plocs),“^ r”,“DisplayName的”,“高峰”);
惠普{3}=情节(t (vlocs), -vys,“虚拟现实”,“DisplayName的”,“山谷”);
惠普{4}=情节((t (plocs(1:元素个数(p2p))) * [1])。”,[繁荣正义党(1:元素个数(p2p)党(1:元素个数(p2p) p2p]。,“- k”,“DisplayName的”,的最大峰值);
惠普{5}=情节(t (vlocs), -vys,“g”,“DisplayName的”,“Inter-Valley基线”);
持有
网格
传奇([惠普{1}(1),惠普{2}(1),惠普{3}(1),惠普{4}(1),惠普{5}(1)]。“位置”,“最佳”)
xlim (10 [0])%放大看细节
我不知道原来的单位是这个信号,然而得到的值统计数据似乎是正确的。
试试我的代码和你的信号。如果有任何问题,我将帮助我的代码适应它。
6个评论
明星黾
明星黾 2023年2月16日
我认真考虑麻醉学,因为我做了一个选择性在医学院,喜欢它。我更喜欢内科,在内分泌学我的实习做了一个项目后,尽管我从不参加董事会。(我宁愿重症监护医学内分泌学,不过这只是开始可用。)相反,我回到研究生院,获得了在生物医学工程硕士,因为个人电脑变得可用,我想学习如何充分利用技术在医学背景。(这是我的一个最好的生活决定。)我后续的职业生涯最终结合这两个学科。

登录置评。

答案(1)

阿曼
阿曼 2023年2月15日
你好,
我知道你有一个功能,你想找出其全球最大值。然后你想找到最近的局部最小值的两侧全球最大值之间的区域,然后计算两个局部最小值。
寻找全球最大值可以使用” 马克斯 ”功能。在全球最大值可以使用” islocal ”功能,让所有的局部最小值,得到所有的局部最小值你可以找到最近的局部最小值的全局最大值。一旦任何一方的局部最小值你可以找到它们之间的分段,然后使用“ trapz ”功能,得到它们之间的区域。你可以参考下面的例子:
x = 1:10 0;
= (1-cos(2 *π* 0.01 * x))。*罪(2 *π* 0.15 * x);%目标函数
[maxVal, indx] = max (A);%全球最大值
TF = islocalmin(一个);%所有局部最小值
我= indx: 1:1
如果(TF (i))
localMinLeft =我;
localMinLeftVal =(我);%局部最小值的全局最大值
打破;
结束
结束
i = indx: 100
如果(TF (i))
localMinRight =我;
localMinRightVal =(我);%局部最小值的全局最大值
打破;
结束
结束
分段= (localMinLeft: localMinRight);%分段之间的局部最小值
情节(x);
持有;
情节(localMinRight localMinRightVal,的r *);
情节(localMinLeft localMinLeftVal,的r *);
情节(x (indx) (indx),“波”);
情节(localMinLeft: localMinRight小节);
持有;
disp (的曲线下的面积是+ trapz(分段));%分段选择下的面积
希望这可以帮助!
1评论
埃里克·尼斯伦
埃里克·尼斯伦 2023年2月15日
非常感谢你的回答,这是优雅。澄清一下,我没有一个函数使用(?),而是导入MATLAB的列向量。我需要在这个向量,X数量的时间点,发现平均估计的AUC /峰值振幅在每个时间点。
您的解决方案适用于这样的问题吗?
谢谢你!

登录置评。

s manbetx 845


释放

R2022b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!