计算变量保持特定值的持续时间

31次观看(过去30天)
你好,
我需要计算,一个具有特定值的变量在再次改变之前的间隔是多久。在下面的图片中,你可以看到我正在使用的变量的图(速度vs时间)。
我想有一个这样的结果:速度3000在数据集中遵循间隔持续时间
S_3000 = [6 5 4 7 8 9 4 5]%,以分钟或数据点为单位
其中S_3000的条目是在数据集中找到的间隔的数量。我已经尝试了一些想法,但我没有找到任何解决方案。我也将附上我正在工作的数据。提前谢谢!

接受的答案

凯文·霍利
凯文·霍利 2023年2月23日
编辑:凯文·霍利 2023年2月23日
负载(“tab.mat”
Logical_array = tab.s==3000;%在这里选择了速度值
栏(tab.t logical_array)
T2 =表;
计数= 0;
计算=""
Epochtime = [];
在这里,我检测到速度保持在3000值至少3个数据点。除了计算持续时间外,我还为每个检测到的持续时间的开始和结束创建了时间戳。
Ii = 3:length(logical_array)-1
如果Logical_array (ii+1) == 1 && Logical_array (ii+2) == 1 &&时间点(end) ~=“开始时间”
Count = Count + 1;
如果计算= =""
计算=“开始时间”
Epochtime = [Epochtime;tab.t (ii)];
其他的
时间点=[时间点;“开始时间”];
Epochtime = [Epochtime;tab.t (ii)];
结束
结束
如果Logical_array (ii) == 0 && Logical_array (ii-1) == 1 && Logical_array (ii-2) == 1 &&时间点(end)==“开始时间”%检测110,即终点
计数= 0;
时间点=[时间点;“结束时间”];
Epochtime = [Epochtime;tab.t (ii)];
结束
结束
t2。Epochtime = Epochtime;
t2。时间点=时间点;
T2.duration (2:2:length(t2.epochtime)) = t2.epochtime(2:2:end)-t2.epochtime(1:2:end-1);
t2.duration(1:2:length(t2.timepoint)) = NaN;
t2
t2 =58×3表
epochtime 的计算 持续时间 _____ ____________ ________13 "开始时间" NaN 23 "结束时间" 10 25 "开始时间" NaN 28 "结束时间" 3 37 "开始时间" NaN 47 "结束时间" 10 58 "开始时间" NaN 65 "结束时间" 7 72 "开始时间" NaN 75 "结束时间" 3 93 "开始时间" NaN 96 "结束时间" 3 101 "开始时间" NaN 109 "结束时间" 8 111 "开始时间" NaN 114 "结束时间" 3 58
答案= t2.duration(2:2:length(t2.epochtime))
回答= 29日×1
10 3 10 7 3 3 8 3 7 3

更多答案(2)

图像分析
图像分析 2023年2月23日
如果您有图像处理工具箱,您可以通过调用,在一行代码中获得所有脉冲的持续时间 regionprops
%测量每个区域的持续时间
props = regionprops(mask, 'Area')
下面是完整的演示
S =负载(“tab.mat”);
T = s.tab;
X = t.t;
Y = t.s;
Subplot (2,1,1);
情节(x, y,“b -”“线宽”2);
网格
持有
标题(“原始数据”
在阈值处画一条线。
阈值= 3000;
yline(阈值,“线宽”2,“颜色”“r”
标题(“原始数据”
包含(“t”
ylabel (“年代”
%-----------------------------------------------------------------------------------
为y超过阈值的地方获取一个逻辑向量。
掩码= y >阈值;
%测量每个区域的持续时间
Props = regionprops(掩码,“区域”);
%将所有区域的持续时间转化为一个向量(从结构中提取)
S_3000 =[道具。]区)
S_3000 = 1×70
3 2 2 5 1 3 6 1 1 1 1 1 1 1 5 1 2 1 2 3 4 4 4 1 1 1 2 2 2 1
显示所有持续时间的直方图
Subplot (2,1,2);
直方图(S_3000);
网格
标题(“脉冲持续时间”
包含(“持续时间”
ylabel (“数”

杰森mcilvenny
杰森mcilvenny 2023年3月3日9:46
另一个解决方案:
Idx = t.s > 3000;
转换= diff(idx);
started = find(transitions == 1);
Ends = find(transitions == -1);
duration = ends - starts;
durdates = t.t(开始);
s3000 =时间表(durdates,持续时间);
栏(s3000。durdates s3000.durations);
datetick

世界杯预选赛小组名单社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!世界杯预选赛小组名单

开始狩猎!

Baidu
map