需要帮助在MATLAB中对齐时间序列数据

时间:2014-07-16 01:07:55

标签: algorithm matlab time linear-algebra

所以我和我的朋友在两周前做了一个实验,我们遇到了一些奇怪的事情。我应该这样说,如果这是一个愚蠢的问题并且看起来像是浪费时间,那么我真的没有编程。

假设我们有数据集A和数据集B(实验本身并不重要)。所有时间都是在分数日给出的。数据的格式应该全部匹配,但是为每个集合记录数据点的时间不一定是对齐的(它们每个都有自己的时间向量)。例如,每100ms记录数据集A的测量值。但是,数据集B的工具是对数据求平均值,并且每分钟只记录一次点。我的问题是调整收集的不同类型数据的时间。对于数据集A,数据和时间向量的长度为25042(25042x1 double)。数据集B及其时间向量的长度为828(828x1双)。

归结为我需要查看数据集B,并找到与数据中的峰值对应的时间。这些时间是我在数据集A中唯一感兴趣的时间。这就是为什么我需要一种方法来对齐时间向量/系列以及数据。如果无法得到精确的解,那么即使近似也会有很大的帮助。有没有人有任何想法?

1 个答案:

答案 0 :(得分:1)

因此,您有两个时间向量:tAtB,以及包含已知峰值的时间索引bIndices的向量。这对应于时间tB(bIndices(:))。您需要循环遍历整个向量bIndices,每次完整搜索整个向量tA(:),直到时间大于或等于tB(b)

bIndices = [101, 403,...];  %Vector containing the indices of the peaks in 'tB'
aIndices = [];              %Allocate an empty vector
A = [];                     %Allocate an empty vector
B = [];                     %Allocate an empty vector
for b = bIndices            %This will cycle through all peak indices one at a time setting 'b' to the current single index
    B = [B tB(b)];          %Retrieve the actual time using the index, concatenate it
    for a = 1:length(tA)    %Loop through the entire time vector tA
        if (tA(a) >= tB(b)) %Time is greater than or equal
             %Concatenate the newly found index 'a' from tA to the vector aIndex:
             aIndices = [aIndices a];
             %Concatenate the newly found time 'tA(a)' to the time vector A:
             A = [A tA(a)]; %Or if you want the actual time
             break;         %Exit the inner loop, search for the next index `b`
        end
    end
end

最后,A存储了一个匹配B中所有时间的峰值时间数组(大约可能稍后)。 A-B是两次之间的差异(两个向量应该是相同的长度),但它应该非常小,任何零都意味着2在这些实例中完美对齐。 aIndices是所需时间tA的相应索引。我实际上并没有测试这段代码,希望我的逻辑是合理的。