2014-07-16 102 views
1

所以我的朋友和我在2周前進行了一項實驗,我們遇到了一些奇怪的事情。我應該在前面說,如果這是一個愚蠢的問題,而且看起來像是浪費時間,那麼我真的不會編程太多。假設我們有數據集A和數據集B(實驗本身並不重要)。所有的時間都是在分數日給出的。數據的格式應該全部匹配,但是每個數據點記錄的時間不一定對齊(它們每個都有自己的時間向量)。例如,數據集A的測量值每100毫秒記錄一次。但是,數據集B的儀器正在平均數據,並且每分鐘左右只記錄一次點。我的問題在於調整收集的不同類型數據的時間。對於數據集A,數據和時間矢量的長度爲25042(25042x1 double)。數據集B及其時間矢量長度爲828(828x1雙倍)。需要幫助對齊MATLAB中的時間序列數據

事實上,我需要查看數據集B,並找到與數據中的峯值相對應的時間。那些時間是我在數據集A中唯一感興趣的時間。這就是爲什麼我需要一種對齊時間向量/序列以及數據的方法。如果一個確切的解決方案是不可能的,即使是近似也是很有幫助的。有人有任何想法嗎?

+0

查找連續點之間的差在B. C = B(2,結束) - B(1,端-1) 當從正的符號變爲負在C,你有一個峯。 –

回答

1

因此,您有兩個時間向量:tAtB,以及包含已知峯值的時間索引向量bIndices。這對應於時間(s)tB(bIndices(:))。你通過整個矢量bIndices通過整個向量tA(:) FULLY每次再次搜索需要循環直到時間是大於或 - 等於到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存儲峯值的陣列timesl匹配B(大約可能稍後)中的所有時間。 A-B是兩次之間的差異(兩個矢量應該是相同的長度),但它應該非常小,任何零將意味着2在這些情況下完美對齊。 aIndices是在期望的時間(s)對應的指數tA。我沒有真正測試這個代碼,希望我的邏輯是正確的。

+1

爲什麼一個循環?爲什麼不找'(tA> B,1,'第一')? – nkjt

+0

這是一個很好的速記建議,但對於教育解釋目的來說並不太好。給男人一條魚或教一個男人去釣魚? – MasterHD

+0

這對我來說很困難,因爲我有一個已知峯出現的向量。這不只是一個數字。有什麼建議?我試圖使用2 for循環,我無法得到它的工作。 –