2013-05-29 160 views
1

我想要查找使用MATLAB繪製的數據集中的第一個,第二個和第三個峯。有人可以幫我弄這個嗎?這裏是鏈接到的情節,我已經上傳在圖中找到第一個,第二個和第三個最大值

enter image description here

的中心思想是要找到一定的時間間隔之後出現峯值。第二個條件是存儲前四個峯值,然後打破條件。所以我在圖中找到第一個最大值。我在X軸上看到了2530的時間值。然後,我不看附近的鄰居,但在X軸上尋找180-200之後的峯值。我得到峯值2,然後存儲。然後我又跳了180-200,再次搜索附近的山峯。最後,在獲得前四個最大值後,我停止搜索峯值

+2

首先定義一個最大值。有幾個局部最大值大於你的第二個圓圈點 – Rasman

+0

@Rasman我知道有更多的最大值,但我只需要那些已標記的峯值。我還從圖表中發現,如果我的第一個波形峯值位於2530處,那麼我的下一個波形峯值將在第一個波形峯值之後大約180-200毫秒。所以我的下一個高峯會在2710到2730之間。 – maverick

+0

那麼爲什麼3350沒有高峯呢? – Rasman

回答

2

我通常在這些情況下做的是搜索最大值,然後擦除最大點周圍小鄰域中的所有點並重復這些過程。當然,鄰域大小依賴於應用程序。

所以,如果你有矢量y的數據,下面應該工作:

[max1, max_ind] = max(y); 
y(max_ind-delta:max_ind+delta) = 0; 

[max2, max_ind2] = max(y); 
+0

上面給出的解決方案的問題是假設我有一個值不是我圖中標記的峯值,但是它是max_ind-delta和max_ind + delta的最大值。所以這個值也得到保存,但實際上它必須被忽略。 – maverick

+0

@maverick:一旦你在'max_ind'找到了主峯,這段代碼就會擦除周圍窗口中的任何次要峯值。你不應該保存任何鄰近的峯值。 –

1

作爲替代nimrodm的回答,您可以使用已知的時間延遲,你的優勢。找到你的第一個最大值,然後跳過你已知的延遲並在較小的窗口內搜索最大值。這樣做時你必須調整索引,但效果很好。

隨着數據以矢量y

[max1,max_ind1] = max(y); 
next_ind = max_ind + 190; 

[max2,max_ind2] = max(y(next_ind-20:next_ind+20)); 
max_ind2 = max_ind2 + next_ind-21; 
+0

是的大衛上面的代碼工作正常,但有一些波形,我只有一個單峯,所以實際上我應該停止執行那裏,只存儲一個值。 – maverick

+0

@maverick你也會遇到nimrodm解決方案的問題。對於任何一種情況,您都可以設置一個閾值,如果您發現閾值以上沒有峯值,則停止查找。 –

0

findpeaks功能會給你在矢量所有的山峯,但需要做更多的工作來篩選,你不關心峯值。可以在findpeaks之前應用低通濾波器來完成此操作。

相關問題