matlab編程代寫使用hampel濾波,去除異常值


 

原文鏈接:http://tecdat.cn/?p=7181

 

此示例顯示了Hampel用於檢測和刪除異常值的過程的 實現。 

產生一個包含24個樣本的隨機信號x。 重置隨機數生成器以獲得可重復的結果。

rng default

lx = 24;
x = randn(1,lx);

圍繞x的每個元素生成觀察窗口。 在樣本的任一邊取k = 2個鄰居。 產生的移動窗口的長度為2×2 + 1 = 5個樣本。

k = 2;

iLo = (1:lx)-k;
iHi = (1:lx)+k;

截斷窗口,以便函數在到達信號邊緣時計算較小段的中值。

iLo(iLo<1) = 1;
iHi(iHi>lx) = lx;

記錄每個周圍窗口的中位數。 找到每個元素相對於窗口中位數的絕對偏差的中位數。

for j = 1:lx
    w = x(iLo(j):iHi(j));
    medj = median(w);
    mmed(j) = medj;
    mmad(j) = median(abs(w-medj));
end

縮放中位數絕對偏差

1G2erf−1(1/2)≈1.4826

 

以獲得正態分布標准偏差的估計值。

sd = mmad/(erfinv(1/2)*sqrt(2));
查找與中位數相差超過nd = 2個標准偏差的樣本。 將這些離群值替換為其周圍窗口的中間值。 這是Hampel算法的本質。
 
yu = x;
yu(ki) = mmed(ki);

使用hampel 計算濾波后的信號並注釋異常值。 覆蓋在此示例中計算的過濾值。

 plot(yu,'o','HandleVisibility','off')
 

 

 

如果您有任何疑問,請在下面發表評論。   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM