我和我的朋友在两周前做了一个实验,我们遇到了一些奇怪的事情。我应该先说一下,我真的不怎么编程,所以如果这是一个愚蠢的问题,看起来像是浪费时间,我很抱歉。
假设我们有数据集A和数据集B(实验本身并不重要)。所有的时间都以小数天表示。数据的格式应该是一致的,但是每组数据点记录的时间不一定是一致的(它们都有自己的时间向量)。例如,数据集A的测量值每100毫秒记录一次。然而,数据集B的仪器是对数据取平均值,大约每分钟只记录一个点。我的问题是如何调整收集到的不同类型数据的时间。对于数据集A,数据和时间向量的长度为25042 (25042x1 double)。数据集B及其时间向量的长度为828 (828x1 double)。
归根结底,我需要查看数据集B,并找到与数据中峰值对应的时间。这些时间是我在数据集a中唯一感兴趣的时间,这就是为什么我需要一种方法来对齐时间向量/序列,从而对齐数据。如果不可能得到精确解,即使是近似值也会有很大帮助。有人有什么想法吗?
所以你有两个时间向量:tA
和tB
,以及一个包含已知峰值(s)的时间指数向量bIndices
。这对应于时间(s) 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
在期望时间(s)对应的指标。我没有实际测试这段代码,希望我的逻辑是合理的。