我想编写一个应用程序来评估来自两个传感器的传感器数据。两个传感器都将它们的数据发送到Package对象中,这些对象被分成多个Frame对象。APackage本质上是a Tuple<Timestamp, Data[]>,aFrame是a Tuple<Timestamp, Data>。然后我需要始终Frame使用来自两个来源的最早时间戳。
所以基本上我的对象流是
Package -(1:n)-> Frame \
}-pair synchronized-> Tuple<Frame, Frame>
Package -(1:n)-> Frame /
例子
假设每个Package包含 2 或 3 个值(现实:5-7)和递增 1 的整数时间戳(现实:~200Hz => ~5ms 增量)。“数据”只是timestamp * 100为了简单起见。
Packages (timestamp, values[])
Source 1:
{(19, [1700, 1800, 1900]), (22, [2000, 2100, 2200]), (26, [2500, 2600]),
(29, [2700, 2800, 2900]), ...}
Source 2:
{(17, [1500, 1600, 1700]), (19, [1800, 1900]), (21, [2000, 2100]),
(26, [2400, 2500, 2600]), ...}
步骤后(1:n):
Frames (timestamp, value)
Source 1:
{(17, 1700), (18, 1800), (19, 1900), (20, 2000), (21, 2100),
(22, 2200), (25, 2500), (26, 2600), (27, 2700), (28, 2800),
(29, 2900), ...}
Source 2:
{(15, 1500), (16, 1600), (17, 1700), (18, 1800), (19, 1900),
(20, 2000), (21, 2100), (24, 2400), (25, 2500), (26, 2600), ...}
步骤后pair synchronized:
Merged tuples (timestamp, source1, source2)
{(15, null, 1500), (16, null, 1600), (17, 1700, 1700), (18, 1800, 1800),
(19, 1900, 1900), (20, 2000, 2000), (21, 2100, 2100), (22, 2200, null),
(24, null, 2400), (25, 2500, 2500), (26, 2600, 2600), ...}
请注意,23缺少时间戳,因为两个源都没有发送值。那只是一个副作用。我可以放入或不放入一个空元组,这无关紧要。(27, 2700, 2700)元组是or也没有关系((27, 2700), (27, 2700)),即Tuple<Timestamp, Data, Data>or Tuple<Frame, Frame>。
牛魔王的故事
叮当猫咪
相关分类