Main Content

hampel

햄펄(Hampel) 식별자를 사용하여 이상값 제거

설명

예제

y = hampel(x)는 햄펄 필터를 입력 벡터 x에 적용하여 이상값을 감지하고 제거합니다. x의 각 샘플에 대해 함수는 그 샘플과 주변 샘플 6개(측면당 3개)로 구성된 윈도우의 중앙값을 계산합니다. 또한 중앙값 절대 편차를 사용하여 각 샘플의 윈도우 중앙값에 대한 해당 샘플의 표준편차도 추정합니다. 중앙값과 3 표준편차 넘게 차이가 나면 샘플은 중앙값으로 대체됩니다. x가 행렬이면 함수는 x의 각 열을 독립적인 채널로 처리합니다.

y = hampel(x,k)는 측정 윈도우에 있는 x의 각 샘플의 양쪽 측면에 있는 이웃 수 k를 지정합니다. k의 디폴트 값은 3입니다.

예제

y = hampel(x,k,nsigma)는 표준편차 개수 nsigma를 지정합니다. x의 샘플이 중앙값으로 대체되려면 국소 중앙값과 이 값만큼 차이가 나야 합니다. nsigma의 디폴트 값은 3입니다.

예제

[y,j] = hampel(___)은 이상값으로 식별된 모든 지점의 위치에서 true인 논리형 행렬도 반환합니다. 이 구문은 위에 열거된 구문의 모든 입력 인수를 받습니다.

예제

[y,j,xmedian,xsigma] = hampel(___)은 국소 중앙값과 x의 각 요소에 대한 표준편차 추정값도 반환합니다.

hampel(___)에 출력 인수를 지정하지 않으면 필터링된 신호를 플로팅하고, 제거된 이상값에 주석을 표시합니다.

예제

모두 축소

100개의 정현파 신호 샘플을 생성합니다. 6번째 샘플과 20번째 샘플을 스파이크로 대체합니다.

x = sin(2*pi*(0:99)/100);
x(6) = 2;
x(20) = -2;

hampel을 사용하여, 국소 중앙값과 3 표준편차 넘게 차이가 나는 샘플을 모두 찾습니다. 측정 윈도우는 샘플과 그 주변 샘플 6개(한 쪽당 3개)로 구성됩니다.

[y,i,xmedian,xsigma] = hampel(x);

필터링된 신호를 플로팅하고 이상값에 주석을 표시합니다.

n = 1:length(x);
plot(n,x)
hold on
plot(n,xmedian-3*xsigma,n,xmedian+3*xsigma)
plot(find(i),x(i),'sk')
hold off
legend('Original signal','Lower limit','Upper limit','Outliers')

Figure contains an axes object. The axes object contains 4 objects of type line. One or more of the lines displays its values using only markers These objects represent Original signal, Lower limit, Upper limit, Outliers.

계산을 반복하되 이번에는 중앙값을 계산할 때 각 측면에서 인접 샘플을 하나만 취합니다. 함수는 극값을 이상값으로 간주합니다.

hampel(x,1)

Figure contains an axes object. The axes object contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent original signal, filtered signal, outliers.

주파수가 서로 다른 정현파로 구성된 2채널 신호를 생성합니다. 임의의 위치에 스파이크를 배치합니다. NaN을 사용하여 누락된 샘플을 임의로 추가합니다. 재현 가능한 결과를 얻기 위해 난수 생성기를 재설정합니다. 신호를 플로팅합니다.

rng('default')

n = 59;
x = sin(pi./[15 10]'*(1:n)+pi/3)';

spk = randi(2*n,9,1);
x(spk) = x(spk)*2;
x(randi(2*n,6,1)) = NaN;

plot(x)

Figure contains an axes object. The axes object contains 2 objects of type line.

디폴트 설정으로 hampel을 사용하여 신호에 필터를 적용합니다.

y = hampel(x);
plot(y)

Figure contains an axes object. The axes object contains 2 objects of type line.

샘플을 이상값으로 처리하기 위해 이동 윈도우의 길이는 늘리고 임계값은 줄입니다.

y = hampel(x,4,2);
plot(y)

Figure contains an axes object. The axes object contains 2 objects of type line.

각 채널의 이동 중앙값을 출력합니다. 신호의 플롯에 중앙값을 겹쳐 표시합니다.

[y,j,xmd,xsd] = hampel(x,4,2);
plot(x)
hold on
plot(xmd,'--')

Figure contains an axes object. The axes object contains 4 objects of type line.

단위 분산의 백색 가우스 잡음에 묻힌 서로 다른 주파수의 두 정현파로 구성된 다중 채널 신호를 생성합니다.

rng('default')

t = 0:60;
x = sin(pi./[10;2]*t)'+randn(numel(t),2);

햄펄 필터를 신호에 적용합니다. 샘플 9개로 구성된 주변 윈도우의 중앙값에서 2 표준편차 넘게 차이가 나는 지점을 이상값으로 간주합니다. 이상값 위치에서 true인 논리형 행렬을 출력합니다.

k = 4;
nsig = 2;

[y,h] = hampel(x,k,nsig);

자체 축에 신호의 각 채널을 플로팅합니다. 원래 신호, 필터링된 신호, 이상값을 그립니다. 이상값 위치에 주석을 표시합니다.

for k = 1:2
    hk = h(:,k);
    ax = subplot(2,1,k);
    plot(t,x(:,k))
    hold on
    plot(t,y(:,k))
    plot(t(hk),x(hk,k),'*')
    hold off
    ax.XTick = t(hk);
end

Figure contains 2 axes objects. Axes object 1 contains 3 objects of type line. One or more of the lines displays its values using only markers Axes object 2 contains 3 objects of type line. One or more of the lines displays its values using only markers

100개의 정현파 신호 샘플을 생성합니다. 6번째 샘플과 20번째 샘플을 스파이크로 대체합니다.

n = 1:100;
x = sin(2*pi*n/100);
x(6) = 2;
x(20) = -2;

hampel을 사용하여 각 샘플에 대한 국소 중앙값과 표준편차 추정값을 계산합니다. 입력 파라미터의 디폴트 값을 사용합니다.

  • 윈도우 크기는 2×3+1=7입니다.

  • 윈도우 중앙값과 3 표준편차 넘게 차이가 나는 지점이 이상값으로 간주됩니다.

결과를 플로팅합니다.

[y,i,xmedian,xsigma] = hampel(x);

plot(n,x)
hold on
plot(n,[1;1]*xmedian+3*[-1;1]*xsigma)
plot(find(i),x(i),'sk')
hold off
legend('Signal','Lower','Upper','Outliers')

Figure contains an axes object. The axes object contains 4 objects of type line. One or more of the lines displays its values using only markers These objects represent Signal, Lower, Upper, Outliers.

윈도우 크기 2×10+1=21과 2 표준편차를 이상값 식별 기준으로 사용하여 계산을 반복합니다.

sds = 2;
adj = 10;
[y,i,xmedian,xsigma] = hampel(x,adj,sds);

plot(n,x)
hold on
plot(n,[1;1]*xmedian+sds*[-1;1]*xsigma)
plot(find(i),x(i),'sk')
hold off
legend('Signal','Lower','Upper','Outliers')

Figure contains an axes object. The axes object contains 4 objects of type line. One or more of the lines displays its values using only markers These objects represent Signal, Lower, Upper, Outliers.

입력 인수

모두 축소

입력 신호로, 벡터나 행렬로 지정됩니다. x가 행렬이면 hampelx의 각 열을 독립적인 채널로 처리합니다.

예: cos(pi/4*(0:159))+randn(1,160)은 단일채널 행 벡터 신호입니다.

예: cos(pi./[4;2]*(0:159))'+randn(160,2)는 2채널 신호입니다.

데이터형: single | double

샘플 xs의 양쪽 측면에 있는 이웃 수로, 정수 스칼라로 지정됩니다. 신호 경계에 근접하고 한 측면의 샘플 개수가 k 미만인 샘플은 더 작은 윈도우의 중앙값과 비교됩니다.

데이터형: single | double

x의 샘플이 이상값으로 간주되기 위해 국소 중앙값과 차이가 나야 하는 표준편차 개수입니다. nsigma를 실수형 스칼라로 지정하십시오. 함수는 국소 중앙값 절대 편차(MAD)를 인자 κ=12erf1(1/2)1.4826으로 스케일링하여 표준편차를 추정합니다.

데이터형: single | double

출력 인수

모두 축소

필터링된 신호로, x와 크기가 동일한 벡터 또는 행렬로 반환됩니다.

데이터형: single | double

이상값 인덱스로, x와 크기가 동일한 벡터 또는 행렬로 반환됩니다.

데이터형: logical

국소 중앙값으로, x와 크기가 동일한 벡터 또는 행렬로 반환됩니다.

데이터형: single | double

표준편차 추정값으로, x와 크기가 동일한 벡터 또는 행렬로 반환됩니다.

데이터형: single | double

세부 정보

모두 축소

햄펄 식별자

햄펄 식별자는 이상값의 영향을 적게 받는 로버스트 통계의 3시그마 규칙에 대한 변형입니다.

시퀀스 x1, x2, x3, …, xn과 길이가 k인 슬라이딩 윈도우가 주어진 경우, 다음을 사용하여 지점 간 중앙값과 표준편차 추정값을 정의합니다.

  • 국소 중앙값 — mi=median(xik,xik+1,xik+2,,xi,,xi+k2,xi+k1,xi+k)

  • 표준편차 — σi=κmedian(|xikmi|,,|xi+kmi|),, 여기서 κ=12erf1(1/2)1.4826

수량 σi는 중앙값 절대 편차(MAD)라고 합니다.

샘플 xi가 주어진 임계값 nσ에 대해 다음과 같을 경우

|ximi|>nσσi

햄펄 식별자는 xi를 이상값으로 선언하고 mi로 대체합니다.

함수는 시퀀스 끝점 근처에서 mi와 σi를 계산하는 데 사용된 윈도우를 자릅니다.

  • i < k + 1

    mi=median(x1,x2,x3,,xi,,xi+k2,xi+k1,xi+k)

    σi=κmedian(|x1m1|,,|xi+kmi|)

  • i > n – k

    mi=median(xik,xik+1,xik+2,,xi,,xn2,xn1,xn)

    σi=κmedian(|xikmi|,,|xnmn|)

참고 문헌

[1] Liu, Hancong, Sirish Shah, and Wei Jiang. “On-line outlier detection and data cleaning.” Computers and Chemical Engineering. Vol. 28, March 2004, pp. 1635–1647.

확장 기능

버전 내역

R2015b에 개발됨

참고 항목

| | | | | (Statistics and Machine Learning Toolbox) | | |