从多个传感器同步传感器数据

23次浏览(最近30天)
迪伦den Hartog
迪伦den Hartog 2021年5月19日
评论道: 明星黾 2021年6月4日
我有四个惯性传感器的数据。在收集数据时,由于缺少一些测量,每个传感器的.csv文件的行数略有不同。现在我想同步4个数据帧到一个大数据帧,其中包含来自所有4个传感器的数据,并且是同步的。
数据看起来是这样的
传感器1 =
SampleTimeFine FreeAcc_X_S1
______________ __________
1 2.0
23日4.0
36个6.0
47个8.0
53个10.0
传感器2 =
SampleTimeFine FreeAcc_X_S2
______________ __________
1 3.0
36个5.0
47个6.0
53个2.0
传感器3 =
SampleTimeFine FreeAcc_X_S3
______________ __________
1 1.0
23日5.0
47个4.0
53个9.0
传感器4 =
SampleTimeFine FreeAcc_X_S4
______________ __________
1 6.0
23日5.0
36个6.0
47个7.0
53个8.0
我想这样结束
传感器1 =
SampleTimeFine FreeAcc_X_S1
______________ __________
1 2.0
23日4.0
36个6.0
47个8.0
53个10.0
传感器2 =
SampleTimeFine FreeAcc_X_S2
______________ __________
1 3.0
23 4.0
36个5.0
47个6.0
53个2.0
传感器3 =
SampleTimeFine FreeAcc_X_S3
______________ __________
1 1.0
23日5.0
36 4.5
47个4.0
53个9.0
传感器4 =
SampleTimeFine FreeAcc_X_S4
______________ __________
1 6.0
23日5.0
36个6.0
47个7.0
53个8.0
如您所见,表2和表3中都添加了一个新行。对这些新行插入FreeAcc_X。最后,我想把这些表添加到一个更大的表中。它应该是这样的:
Sensor_all =
SampleTimeFine FreeAcc_X_S1 FreeAcc_X_S2 FreeAcc_X_S3 FreeAcc_X_S4
______________ __________ __________ __________ __________
1 2.0 3.0 1.0 6.0
23日4.0 4.0 5.0 - 5.0
36个6.0 - 5.0 4.5 6.0
47 8.0 6.0 4.0 7.0
53 10.0 2.0 9.0 8.0
有什么简单的方法可以做到这一点?
1评论
亚当Danz
亚当Danz 2021年5月20日
这个解决方案类似于我在你之前的问题中分享的解决方案,但我们没有收到你在那个帖子上的回复。而不是使用 innerjoin 您将使用一个类似的函数。

登录评论。

接受的答案

明星黾
明星黾 2021年5月22日
如果第一个列不是实际的时间,则使用 datetime 持续时间 ,只是插入。
考虑到其中的三个——
S1 = [1 2.0
23日4.0
36个6.0
47个8.0
53 10.0);
S2 = [1 3.0 .
36个5.0
47个6.0
53 2.0);
S3 = [1
23日5.0
47个4.0
53 9.0);
Sc = {S1;S2;S3};%垂直连接矩阵到单元格数组
Scm = cell2mat (Sc);%转换为(Nx2)矩阵得到唯一的时间
S_Time =独特(Scm (: 1));%独特的时代
k = 1:元素个数(Sc)
Si (:, k) = interp1 (Sc {k} (: 1), Sc {k} (:, 2), S_Time);%插入
结束
sname =组成(“Sensor_ % 2 d '1:元素个数(Sc));创建变量名
= [table(S_Time) array2table(Si)];%创建结果表
Combined.Properties.VariableNames = {“SampleTimeFine”, sname {:}}
结合=5×4表
SampleTimeFine Sensor_01 Sensor_02 Sensor_03 ______________ _________ _________ _________1 23 1 23 4 4.2571 5 36 6 5 4.4583 47 8 6 4 53 10 2 9
这可以很容易地扩展到矩阵的其余部分,包括它们 “Sc” 使用最有效的插值方法。看到 interp1 文档的细节。
4评论
明星黾
明星黾 2021年6月4日
在原来的问题中,样本次数是单调增加的。这一次,他们没有。
在做了一些实验之后,改变矩阵的顺序 “Sc” 赋值:
Sc = {S1;S3;S2};
订单是按您的要求来的
S1 = [1 2.0
23日4.0
36个6.0
45 8.2
47个8.0
2 10.0);
S2 = [1 3.0 .
36个5.0
47个6.0
2 2.0
6 3.0);
S3 = [1
23日5.0
47个4.0
2 9.0
4 10.0);
Sc = {S1;S3;S2};%垂直连接矩阵到单元格数组
Scm = cell2mat (Sc);%转换为(Nx2)矩阵得到唯一的时间
S_Time =独特(Scm (: 1),“稳定”);%独特的时代
k = 1:元素个数(Sc)
Si (:, k) = interp1 (Sc {k} (: 1), Sc {k} (:, 2), S_Time);%插入
结束
sname =组成(“Sensor_ % 2 d '1:元素个数(Sc));创建变量名
= [table(S_Time) array2table(Si)];%创建结果表
Combined.Properties.VariableNames = {“SampleTimeFine”, sname {:}}
结合=8×4表
SampleTimeFine Sensor_01 Sensor_02 Sensor_03 ______________ _________ _________ _________1 2 13 23 45 4.1333 36 6 4.4583 5 45 8.2 4.0833 5.8182 47 8 4 6 2 10 9 2 4 9.4286 10 2.5 6 8.8571 9.4737 3
这很可能和 ' 2 ' 对所有人来说都是一样的 “4” “6” 不是,所以指定 “稳定” 排序顺序是指矩阵本身的顺序 “Sc” 是很重要的。

登录评论。

答案(1)

默罕默德·萨米
默罕默德·萨米 2021年5月20日
最简单的方法是将数据导入为时间表,然后使用内置的同步函数。文档中有详细信息和示例。
//www.tatmou.com/help/matlab/ref/timetable.synchronize.html
2的评论
默罕默德·萨米
默罕默德·萨米 2021年5月22日
如果不同传感器的采样时间精细值被认为是相等的,您可以将其用作时间变量。

登录评论。

下载188bet金宝搏

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!