在MATLAB中插值时间序列以查找特定值的时间,然后在另一个时间序列中查找此时间

时间:2014-10-15 10:36:21

标签: matlab

我有一个时间序列,可以将数据(time vs theta)从Simulink模型输出到MATLAB工作区。我想自动插入这些数据,这样我就可以找到t1时的时间(theta == 45)。

然后,我需要在另一个时间序列(t1 vs time)中查找velocity,然后输出当时的速度。

我该怎么做?有没有更好的方法来解决这个问题?

编辑:我可以使用新的时间向量和更精细的分辨率插入第一个时间序列,因此它具有完全theta == 45,但我的方法非常强大,需要先手动查看时间序列以确定我的时间我需要在(我需要永远)之间进行插值,我想避免,例如:

theta2 = resample(theta, 1.68:0.0000001:1.685)

2 个答案:

答案 0 :(得分:1)

我假设thetavelocity是时间序列对象。

您可以按如下方式搜索时间间隔[time_start, time_finish]。但是,这假设您知道此间隔中存在符号更改。

t1 = fzero(@(t) theta.resample(t).Data - 45, [time_start, time_finish]);

然后,给定t1,您可以直接插入速度。

vel = velocity.resample(t1).Data;

答案 1 :(得分:0)

您可以使用文件交换中的this function查找时间序列与theta = 45处的直线的交点:

% assume t and theta exist in the base workspace
theta_45 = 45*ones(size(theta));
[t1,theta1] = intersections(t,theta,t,theta_45); % t1 and theta1 are column vectors of the intersection points

然后说出t1的第一个元素并在第二次向量t2中查找它(我假设t2单调增加,因此应该是直截了当的)并找到相应的索引idx2velocity(idx2)是您想要的值。