2017-07-29 146 views
0

我有一些數據由一個NMEA GPS字符串加時間標記,我將其解碼以獲得單一數據點Year,Month,Day等。使用MATLAB去除週期性數據中的尖峯

問題是,在很少的情況下,GPS(可能是由於一些信號損失)變得不穩定,它吐出了非常非常錯誤的東西。這會在時間戳數據中產生尖峯,正如您可以從附圖中看到的那樣,它會繪製GPS輸出的天數向量。

Random spikes in timestamp

正如你所看到的,GPS數據一般都很乖,和1 30/31每個月的天走在下月回落至1日前。但在某些時候,GPS會隨機抽出一天。

我嘗試了所有的標準MATLAB函數來實現despiking(比如medfilt1和findpeaks),但是它們不適合這個任務,要麼我不知道如何正確設置它們。

我的另一個想法是循環相鄰元素之間的差異,但矢量太大以至於電腦無法真正處理它。

有沒有矢量化的方式來走這樣一條路,並檢測到這些尖峯?

非常感謝!

+0

你能上傳你的數據嗎? – shamalaia

+0

你可以試試嗎? 'd1 = [diff(y)0];''q = q = find(diff(abs(d1))== 0)''plot(1:10,[y(1:q(1)-1 )y(q(1)+2)y(q(1)+2)y(q(1)+2:end)],'r')'。你的數據在哪裏。請讓我知道。 – shamalaia

回答

0

你需要使用一個簡單的低通過濾數據擺脫孤立點:

windowSize = 5; 
b = (1/windowSize)*ones(1,windowSize); 
a = 1; 

FILTERED_DATA = filter(b,a,YOUR_DATA); 

只是打了一下與windowSize,直到你得到你想要的平滑度。

+0

親愛的Noa,謝謝你的快速回答!也許我做錯了什麼,但除了平滑尖峯之外,過濾也會使時間序列向前移動(即:在不同指數下發生的變化比在非過濾時間序列中發生的變化)。 – Mutewinter

+0

良好的過濾確實會導致延遲,您還可以過濾其他數據集以獲得恆定的移位 –