2014-09-21 16 views
0

我無法插入我擁有的溫度數據的時間序列。由於儀器漂移,時間變量增加非單調性。例如,它在正確的時間開始並按照其編程的每40秒採樣一次。在matlab中內插非單調x數據

YYYY MM DD HH MM SS 
2013 9 29 17 0 1 
2013 9 29 17 0 41 
2013 9 29 17 1 21 
2013 9 29 17 2 1 
2013 9 29 17 2 41 
2013 9 29 17 3 21 
2013 9 29 17 4 1 
2013 9 29 17 4 41 
2013 9 29 17 5 21 
2013 9 29 17 6 1 
2013 9 29 17 6 41 
2013 9 29 17 7 21 
2013 9 29 17 8 1 

然後,隨着時間的流逝,它會緩慢地漂移到下面的不同時間採樣。

2013 11 3 19 0 45 
2013 11 3 19 1 25 
2013 11 3 19 2 5 
2013 11 3 19 2 45 
2013 11 3 19 3 25 
2013 11 3 19 4 5 
2013 11 3 19 4 45 
2013 11 3 19 5 25 
2013 11 3 19 6 5 

最糟糕的是,在儀器的電池壽命附近,它以更隨機的時間進行採樣,

2013 11 19 0 14 0 
2013 11 19 0 15 28 
2013 11 19 0 16 56 
2013 11 19 0 18 24 
2013 11 19 0 19 52 
2013 11 19 0 21 20 
2013 11 19 0 22 48 
2013 11 19 0 24 16 
2013 11 19 0 25 44 
2013 11 19 0 27 12 
2013 11 19 0 28 40 
2013 11 19 0 30 8 
2013 11 19 0 31 36 
2013 11 19 0 33 4 

我會想使用這些數據進行插值,以每2分鐘,因爲現在當我使用這個數據,FFT和Matlab的PSD分析,我沒有得到在PSD任何峯預計,由於每天的溫度波動。

由於我的數據是在我顯示的日期向量的datenum()中,我使用下面的代碼來獲取每2分鐘(每0.0014日期)的新Yi。

xi=(x(1,1):0.0014:x(end,1)); 
yi=interp1(x,y,xi); 

其中x是datenum向量ie。

735506.708344907 
735506.708807870 
735506.709270833 
735506.709733796 
735506.710196759 
735506.710659722 
735506.711122685 
735506.711585648 
735506.712048611 
735506.712511574 

,y是溫度數據每次樣本帶有像這樣,

32.4086025192727 
32.4052088117713 
32.4051005865126 
32.4043088697477 
32.4049974142611 
32.4046963702913 
32.4038950877519 
32.4047969012421 
32.4055051003980 
32.4062010783006 

我能請得到您的幫助以某種方式插補的溫度數據到2分鐘間隔的數據集?我將不勝感激任何幫助和指導來解決這個問題。非常感謝。

尊敬, 綾

+0

我沒有看到您的方法有任何問題。這應該沒問題。 「xi」和「yi」的結果有什麼不對? – Hoki 2014-09-21 18:24:26

+0

嗨Hoki,我剛纔發現這個數據集我有很多問題。我對它進行了排序,通過fillgaps.m刪除了那裏的NaN,然後​​就可以插入它!謝謝你指出。它幫助我認識到在interp1()之前需要修復的小事,我沒有意識到這一點。 'A_sorted = sortrows(A)''A_f = fixgaps(A_sorted)''[C,ia,ic] =唯一的(A_f); A_ia = A_f(ia,:)' – Aya 2014-09-22 07:02:01

+0

很好,你完成了。事實上,數據有時需要在處理之前被「清理」,或者可能出現奇怪的結果。你可以寫一個關於你如何分類你的問題的答案,並接受它。這將結束這個問題。 – Hoki 2014-09-22 07:20:03

回答

1

對於我的數據,我不得不清理時間序列之前,我可以interp1()來喜。以下是我需要做的事情...排序,填寫空白(NaN),並且每個時間樣本只能進行一次測量。

A_sorted=sortrows(A); 
A_f=fixgaps(A_sorted); 
[C,ia,ic]=unique(A_f); 
A_ia=A_f(ia,:)