我有两个时间戳列表,我正在尝试在它们之间创建一个使用 imu_ts 作为真实时间的映射,并尝试找到最接近它的 vicon_ts 值。输出是一个 3xd 矩阵,其中第一行是 imu_ts 索引,第三行是该索引处的 unix 时间,第二行是同一列中时间戳上方最接近 vicon_ts 值的索引。
到目前为止,这是我的代码,它可以工作,但它真的很慢。我不确定如何对其进行矢量化。
function tmap = sync_times(imu_ts, vicon_ts)
tstart = max(vicon_ts(1), imu_ts(1));
tstop = min(vicon_ts(end), imu_ts(end));
%trim imu data to
tmap(1,:) = find(imu_ts >= tstart & imu_ts <= tstop);
tmap(3,:) = imu_ts(tmap(1,:));%Use imu_ts as ground truth
%Find nearest indecies in vicon data and map
vic_t = 1;
for i = 1:size(tmap,2)
%
while(vicon_ts(vic_t) < tmap(3,i))
vic_t = vic_t + 1;
end
tmap(2,i) = vic_t;
end
时间戳已经按升序排序,所以这本质上是一个 O(n) 操作,但因为它是循环的,所以运行缓慢。任何矢量化的方法来做同样的事情?
编辑 它的运行速度似乎比我预期的或第一次测量的要快,所以这不再是一个关键问题。但我很想看看这个问题是否有任何好的解决方案。