基于具有不同采样时间的两个数据系列创建新数据系列

时间:2017-11-15 12:14:59

标签: matlab time-series sampling

我有两个带有速度和方向数据的数据集,用不同的时间步记录。

每10分钟记录一个数据集(A),每小时记录另一个数据集(B)。

开始时间不完全相同。

    每隔10分钟对
  • A(速度和方向数据)进行采样,例如00.00,00.10,00.20,...

  • 每小时对
  • B(方向数据)进行采样,例如23.54,00.54,01.54,......

我想创建一个新版本的数据集B,其中包含基于数据集A的方向数据(一种合成数据集),其中我每10分钟填写一次记录数据集A并保持每小时数据集B的原始记录。

示例数据:

% columns: timestamp, direction, speed
A = [732381.006944445  22.70  2.23 
     732381.013888889  18.20  3.41 
     732381.020833333  31.00  6.97 
     732381.027777778  36.90  5.63]; 


% columns: timestamp, direction
B = [732381.038078704   3.01 
     732381.079745370   5.63 
     732381.121412037   0.68 
     732381.163078704 359.56]; 

..我想要这样的东西..

% columns: timestamp, direction
B_new = [732381.038078704 'some value based on value in A at that time' 
         732381.079745370 'some value based on value in A at that time'  
         732381.121412037 'some value based on value in A at that time'  
         732381.163078704 'some value based on value in A at that time']; 

因此B_new矩阵中的第一列是10分钟的时间戳,而不是一小时的原始时间戳。 IE浏览器。我们创建一个新的时间序列(B_new),采样时间为10分钟。所以像你这样的东西已经显示@Wolfie,但是时间矩阵是A

B中将方向数据指定为A中最接近的可用时间的方向数据的最佳方法是什么,同时仍然在新矩阵中保持与A相同的数据采样{{1 }}?

1 个答案:

答案 0 :(得分:1)

使用interp1(表查找功能)很容易实现。

内插到较慢的采样

假设您为此演示提供了一些不错的干净数据AB ...

% Columns: time (0.1s timestep), data (just the row number)
A = [ (1:0.1:2); (1:11) ].';
% Columns: time (1.0s timestep), data (doesn't even matter, to be removed)
B = [ (1:1:2); rand(1,2) ].';

现在我们使用interp1A获取最接近的数据值(就时间列而言)并将其分配给B_new

B_new = zeros(size(B)); % Initialise 
B_new(:,1) = B(:,1);    % Get time data from B
% Get nearest neighbour by specifying the 'nearest' method.
% Using 'extrap' means we extrapolate if B's times aren't contained by A's
B_new(:,2) = interp1(A(:,1), A(:,2), B_new(:,1), 'nearest', 'extrap');

% Output
disp(B_new)
% >> [ 1   1
%      2  11 ]
% This is as expected, because 1 and 11 are the values at t = 1 and 2 
% in the A data, where t = 1 and 2 are the time values in the B data.

插入更高的采样

我们也可以做相反的事情。您建议您想要获取一些基本数据A,并填写B(或最接近的匹配项)的点数。

B_new = A;    % Initialise to fast sample data
% Get row indices of nearest neighbour (in time) by using interp1 and mapping
% onto a list of integers 1 to number of rows in A 
idx = interp1(A(:,1), 1:size(A,1), B(:,1), 'nearest', 'extrap');
% Overwrite those values (which were originally from A) with values from B
B_new(idx,2) = B(:,2);