卸下尖峯我有一個包含一些扭曲的數據從信號Matlab的
以下信號我試圖刪除這些尖峯而不會破壞我的信號,我已經試過medfilt1
功能,但它平滑了正確的信號以及不需要的信號。由於有用信號和無用信號之間的頻率重疊,無法使用濾波。我也嘗試了移動窗口,將值與此窗口的中位數比較,如果該點比它高得多,將其設置爲中位數如圖所示波紋管:
%moving cleaning window
y1_1= y1(1:100);%first window
x=1;
%cleaning loop
while x<= length(y1)
if(y1(x)> 1.01*(median(y1_1))||y1(x) < 0.95*(median(y1_1)))
y1(x)= median(y1_1);
end
if(x>= length(y1)-100)
y1_1= y1(length(y1)-100:length(y1));
else
y1_1 = y1(x:x+100);
end
x=x+1;
end
我已經擺脫了尖峯但也有一些信號的不同峯都消失瞭如圖所示波紋管
如何實現一個簡單的方法最好的降噪?
謝謝
您是否嘗試過:http://stackoverflow.com/questions/27432883/finding-peaks-matlab/27439621#27439621 –
在**這個特定的情況**,並且只有當這是**用於演示目的** ,它看起來像你可以刪除(或設置爲'NaN')低於約350和550以上的所有值。 –
你的代碼看起來總體上可以,但我會圍繞我感興趣的點進行調整。現在你只需要玩窗口和條件何時去除異常值。嘗試30的窗口,當點是中位數的2倍或一半。或者使用findpeaks函數來玩那個。 –