基于峰发现将图分成了几个部分

18视图(30天)
嗨我有以下数据和我想做的是首先提取高峰和低谷,我做过的图片。一旦这样做是我需要能够创建情节从高峰到低谷创建expodental增长和expodential衰减曲线。我一直试图自动化,以便它可以用许多不同的情节,每个情节都存储,然后可以做曲线拟合曲线。我似乎不能让它情节从一个顶峰到达下一个槽不检查每个时间和硬编码。如果你能帮助那就太好了。
图1:原始数据
图2:山峰
图3:低谷
这是下面的代码我在工作。我试图自动化的部分是(%从细胞中提取数据到索引部分)和时间剖面。提取数据的时间剖面将相同的部分只是来自于时间向量。数据文件连接,这样你就可以运行代码。
%提取时间和细胞2
数据= xlsread (“Data.xlsx”,“Sheet1”,“A1: o327”);
%提取时间
t =数据(:1);
%提取细胞2
c2 =数据(:,3);
%绘制细胞2数据
图(1)
情节(t, c2);
%找到高峰和位置
[peakValues, indexesOfPeaks] = findpeaks (c2, t,“MinPeakHeight”2 e4,“MinPeakDistance”10);
%找到波谷和位置
[troughValues, indexesOfTrough] = findpeaks (c2 t“MinPeakDistance”10);
%画出峰
图(3)
findpeaks (c2, t,“MinPeakHeight”2 e4,“MinPeakDistance”10);
%画出低谷
图(4)
findpeaks (c2, t,“MinPeakDistance”,40);
%做出积极的低谷值
postiveTrough = abs (troughValues);
%查找和存储的所有实例索引数据的峰值
iPM = 0(长度(peakValues), 1);
i = 1:长度(peakValues)
indexPeakMatrix =找到(c2 = = peakValues(我));
iPM (i + 1) = indexPeakMatrix;
结束
%查找和存储的所有实例索引数据槽的细胞
iTM = 0(长度(postiveTrough), 1);
i = 1:长度(postiveTrough)
indexTroughMatrix =找到(c2 = = postiveTrough(我));
iTM (i + 1) = indexTroughMatrix;
结束
%从细胞中提取数据到索引
p1 = c2 (1: iPM (2));
dataArray {1} = p1;
%流(“第一节:iPM (2) = % d \ n ', iPM (2));
p2 = c2 (iPM (2): iTM (3));
dataArray {2} = p2;
%流(“第二节:iPM (2) = % d和iTM (3) = % d \ n ', iPM (2), iTM (3));
p3 = c2 (iTM (3): iPM (3));
dataArray {3} = p3;
%流(“第三节:iTM (3) = % d和iPM (3) = % d \ n ', iTM (3), iPM (3));
p4 = c2 (iPM (3): iTM (5));
dataArray {4} = p4;
%流(“第四节:iPM (3) = % d和iTM (5) = % d \ n ', iPM (3), iTM (5));
p5 = c2 (iTM (5): iPM (4));
dataArray {5} = p5;
%流(“第五节:iTM (5) = % d和iPM (4) = % d \ n ', iTM (5), iPM (4));
p6 = c2 (iPM (4): iTM (8));
dataArray {6} = p6;
%流(“第六节:iPM (4) = % d和iTM (8) = % d \ n ', iPM (4), iTM (8));
p7 = c2 (iTM (8): iPM (5));
dataArray {7} = p7;
%流(第7节:iTM (8) = % d和iPM (5) = % d \ n ', iTM (8), iPM (5));
p8 = c2 (iPM (5): iTM (12));
dataArray {8} = p8;
%流(第8部分:iPM (5) = % d和iTM (11) = % d \ n ', iPM (5), iTM (12));
p9 = c2 (iTM (12): iPM (6));
dataArray{9} =票数;
%流('节9:iTM (12) = % d和iPM (6) = % d \ n ', iTM (12), iPM (6));
p10 = c2 (iPM (6): iTM (15));
dataArray {10} = p10;
%流('节10:iPM (6) = % d和iTM (15) = % d \ n ', iPM (6), iTM (15));
侯= c2 (iTM (15): iPM (7));
dataArray{11} =侯;
%流('节11:iTM (15) = % d和iPM (7) = % d \ n ', iTM (15), iPM (7));
p12 = c2 (iPM (7): iTM (18);
dataArray {12} = p12;
%流('节12:iPM (7) = % d和iTM (18) = % d \ n ', iPM (7), iTM (18);
p13 = c2 (iTM (18): iPM (8));
dataArray {13} = p13;
%流(13节:iTM (18) = % d和iPM (8) = % d \ n ', iTM (18), iPM (8));
好= c2 (iPM (8): iTM (20);
dataArray{14} =好;
%流('节14:iPM (8) = % d和iTM (20) = % d \ n ', iPM (8), iTM (20);
p15 = c2 (iTM (20): iPM (9));
dataArray {15} = p15;
%流(15节:iTM (20) = % d和iPM (9) = % d \ n ', iTM (20), iPM (9));
p16 = c2 (iPM (9): iTM (23));
dataArray {16} = p16;
%流('节16:iPM (9) = % d和iTM (23) = % d \ n ', iPM (9), iTM (23));
p17 = c2 (iTM (23): iPM (10));
dataArray {17} = p17;
%流(17节:iTM (23) = % d和iPM (10) = % d \ n ', iTM (23), iPM (10));
p18 = c2 (iPM (10): iTM (25);
dataArray {18} = p18;
%流(18节:iPM (10) = % d和iTM (25) = % d \ n ', iPM (10), iTM (25);
p19 = c2 (iTM (25): iPM (11));
dataArray {19} = p19;
%流(19节iTM (25) = % d和iPM (11) = % d \ n ', iTM (25), iPM (11));
p20 = c2 (iPM (11): iTM (28);
dataArray {20} = p20;
%流(20节:iPM (11) = % d和iTM (28) = % d \ n ', iPM (11), iTM (28);
p21 = c2 (iTM (28): iPM (12));
dataArray {21} = p21;
%流(21节iTM (27) = % d和iPM (12) = % d \ n ', iTM (27), iPM (12));
第22位= c2 (iPM (12): iTM (30);
dataArray{22} =第22位;
%流(22节:iPM (12) = % d和iTM (30) = % d \ n ', iPM (12), iTM (30);
%从时间到索引中提取数据
t1 = t (1: iPM (2));
timeArray {1} = t1;
t2 = t (iPM (2): iTM (3));
timeArray {2} = t2;
t3 = t (iTM (3): iPM (3));
timeArray {3} = t3;
t4 = t (iPM (3): iTM (5));
timeArray {4} = t4;
t5 = t (iTM (5): iPM (4));
timeArray {5} = t5;
t6 = t (iPM (4): iTM (8));
timeArray {6} = t6;
t7 = t (iTM (8): iPM (5));
timeArray {7} = t7;
t8 = t (iPM (5): iTM (12));
timeArray {8} = t8;
t9 = t (iTM (12): iPM (6));
timeArray {9} = t9;
t10 = t (iPM (6): iTM (15));
timeArray {10} = t10;
t11 = t (iTM (15): iPM (7));
timeArray {11} = t11;
病人= t (iPM (7): iTM (18);
timeArray{12} =病人;
t13 = t (iTM (18): iPM (8));
timeArray {13} = t13;
t14 = t (iPM (8): iTM (20);
timeArray {14} = t14;
t15 = t (iTM (20): iPM (9));
timeArray {15} = t15;
t16.1 = t (iPM (9): iTM (23));
timeArray {16} = t16.1;
t17 = t (iTM (23): iPM (10));
timeArray {17} = t17;
t18 = t (iPM (10): iTM (25);
timeArray {18} = t18;
t19 = t (iTM (25): iPM (11));
timeArray {19} = t19;
t20 = t (iPM (11): iTM (28);
timeArray {20} = t20;
t21 = t (iTM (28): iPM (12));
timeArray {21} = t21;
t22 = t (iPM (12): iTM (30);
timeArray {22} = t22;
%曲线拟合所有的数据部分
% i = 1:22说
%
% %曲线fot每个部分
我% createFit (timeArray {}, dataArray{我});
%
%结束

接受的答案

马修•诺伊
马修•诺伊 2021年8月24日
你好,大卫
快速和肮脏的审判使代码自动工作好,因为它可以在我有限的时间可用性
有进一步改进的空间
“b”系数的指数都存储在解决方案万博 尤文图斯 b_up b_down
请参见下面的代码:
clc
clearvars
%提取时间和细胞2
数据= xlsread (“Data.xlsx”,“Sheet1”,“A1: o327”);
%提取时间
t =数据(:1);
dt =意味着(diff (t));%的山峰之间的平均时间间隔
%提取细胞2
c2 =数据(:,3);
%绘制细胞2数据
图(1)
情节(t, c2);
%找到高峰和位置
[peakValues, TimeOfPeaks] = findpeaks (c2, t,“MinPeakHeight”2 e4,“MinPeakDistance”10);
%画出峰
图(2)
findpeaks (c2, t,“MinPeakHeight”2 e4,“MinPeakDistance”10);
时间=意味着(diff (TimeOfPeaks));%的山峰之间的平均时间间隔
buffer_before_peak =圆(0.25 *时期);%秒
buffer_after_peak =圆(0.7 *时期);%秒
ci = 1:长度(TimeOfPeaks)
% %前峰exp健康
t_start = TimeOfPeaks (ci) - buffer_before_peak;
t_stop = TimeOfPeaks (ci) - 0 * dt;%停止时间等于峰值时间
%我的测试代码
印第安纳州=找到(t > = t_start & t < = t_stop);
x_up = t(印第安纳州);
x_up = x_up - x_up (1);%的时间从0开始总是来简化实验
y2fit_up = c2(印第安纳州);
[sol_up, y_fit_up] = createFit_up (x_up y2fit_up);
%商店b系数
b_up (ci) = sol_up (2);
% %后峰值exp适合(衰减)
t_start = TimeOfPeaks (ci) + 2 * dt;%峰值后开始时间是2样品
t_stop = TimeOfPeaks (ci) + buffer_after_peak;
%我的测试代码
印第安纳州=找到(t > = t_start & t < = t_stop);
x_down = t(印第安纳州);
x_down = x_down - x_down (1);%的时间从0开始总是来简化实验
y2fit_down = c2(印第安纳州);
[sol_down, y_fit_down] = createFit_decay (x_down y2fit_down);
%商店b系数
b_down (ci) = sol_down (2);
图(ci + 2),
次要情节(211),情节(x_up y2fit_up,“r”x_up y_fit_up,“同意”);
标题([“斜率为正装/峰#”num2str (ci)]);
包含(“秒”);
传奇(“数据”,实验符合的);
次要情节(212),情节(x_down y2fit_down,“r”x_down y_fit_down,“同意”);
标题([“负斜率适合/峰#”num2str (ci)]);
包含(“秒”);
传奇(“数据”,实验符合的);
结束
函数[溶胶,y_fit] = createFit_up (x, y2fit)
%指数衰减符合
%与模板代码是给好的结果方程:% y =。* exp (b。*(得到))+ d;
f = @ (a, b, c, d, x)。* exp (b。*(得到))+ d;
obj_fun = @ (params)规范(f (params(1),参数个数(2),参数(3),参数(4),x) -y2fit);
索尔= fminsearch (obj_fun [y2fit(结束)-y2fit (1), 0, 0, y2fit (1)]);
a_sol =索尔(1);
b_sol =索尔(2);
c_sol =索尔(3);
d_sol =索尔(4);
y_fit = f (a_sol b_sol、c_sol d_sol, x);
结束
函数[溶胶,y_fit] = createFit_decay (x, y2fit)
%指数衰减符合
%与模板代码是给好的结果方程:% y = . * (1-exp (b。*(得到)))+ d;
f = @ (a, b, c, d, x)。* (1-exp (b。*(得到)))+ d;
obj_fun = @ (params)规范(f (params(1),参数个数(2),参数(3),参数(4),x) -y2fit);
索尔= fminsearch (obj_fun [y2fit(结束)-y2fit (1), 0, 0, y2fit (1)]);
a_sol =索尔(1);
b_sol =索尔(2);
c_sol =索尔(3);
d_sol =索尔(4);
y_fit = f (a_sol b_sol、c_sol d_sol, x);
结束
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
11最后一块显示上面的次要情节的“上升”部分信号在每个峰值之前,较低的次要情节是腐烂的一面
让我的生活更轻松,每次的一部分信号被认为是,其相应的时间向量总是从0开始——你可以改变自己,如果你喜欢
这两个例子(第一个和最后一个峰值)
4评论
马修•诺伊
马修•诺伊 2021年9月9日
你好,大卫
如果我的回答有期望,死而无憾!你介意接受它吗?
谢谢

登录置评。

更多的答案(0)

类别

找到更多的在自动特征提取使用MATLAB代码的应用程序帮助中心文件交换

标签

s manbetx 845


释放

R2021a

社区寻宝

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

开始狩猎!