Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

medfilt1

1차원 중앙값 필터 적용

설명

y = medfilt1(x)는 차수가 3인 1차원 중앙값 필터를 입력 벡터 x에 적용합니다. 이 함수는 끝점을 벗어난 신호를 0으로 간주합니다. 출력값 yx와 길이가 동일합니다.

예제

y = medfilt1(x,n)은 차수가 n인 1차원 중앙값 필터를 x에 적용합니다.

y = medfilt1(x,n,blksz,dim) 또는 y = medfilt1(x,n,[],dim)은 필터가 동작하는 차원 dim을 지정합니다. blksz는 이전 버전과의 호환성을 위해 필요하며, 무시됩니다.

예제

y = medfilt1(___,nanflag,padding)은 위에 열거된 구문에 나와 있는 입력 인수 중 하나를 사용하여 각 세그먼트에서 NaN 값이 처리되는 방식을 지정합니다. 이 구문은 신호 경계에서 수행되는 필터 적용 유형인 padding도 지정합니다.

nanflagpadding은 함수 호출에서 x 이후의 아무 위치에나 나타날 수 있습니다.

예제

모두 축소

1초 동안 100Hz로 샘플링된 정현파 신호를 생성합니다. 주파수가 더 높은 정현파를 추가하여 잡음을 시뮬레이션합니다.

fs = 100;
t = 0:1/fs:1;
x = sin(2*pi*t*3)+0.25*sin(2*pi*t*40);

10차 중앙값 필터를 사용하여 신호를 평탄화합니다. 결과를 플로팅합니다.

y = medfilt1(x,10);

plot(t,x,t,y)
legend('Original','Filtered')
legend('boxoff')

주파수가 서로 다른 정현파로 구성된 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)

디폴트 설정으로 medfilt1을 사용하여 신호에 필터를 적용합니다. 필터링된 신호를 플로팅합니다. 기본적으로, 이 필터는 누락된 샘플이 있는 모든 세그먼트의 중앙값에 NaN을 할당합니다.

y = medfilt1(x);
plot(y)

원래 신호를 전치합니다. 함수가 행을 따라 동작하도록 지정하여 신호에 다시 필터를 적용합니다. 중앙값을 계산할 때 누락된 샘플을 제외시킵니다. 두 번째 인수를 비워놓으면 medfilt1은 디폴트 필터 차수 3을 사용합니다.

y = medfilt1(x',[],[],2,'omitnan');
plot(y')

이 함수는 NaN만 포함하는 세그먼트에는 값을 할당할 수 없습니다. 세그먼트 길이를 늘려 이 문제를 해결하십시오. 이렇게 변경하면 이상값도 더욱 확실히 제거됩니다.

y = medfilt1(x,4,'omitnan');
plot(y)

디폴트 0 채우기를 수행하면 함수가 경계에 있는 신호 값을 과소 평가합니다. 감소하는 윈도우를 사용하여 끝에서 중앙값을 계산하는 방식으로 이 영향을 줄이도록 하십시오.

y = medfilt1(x,4,'omitnan','truncate');
plot(y)

입력 인수

모두 축소

입력 신호로, 실수 벡터, 행렬 또는 N차원 배열로 지정됩니다.

데이터형: single | double

1차원 중앙값 필터의 차수로, 양의 정수 스칼라로 지정됩니다.

  • n이 홀수이면 y(k)x(k-(n-1)/2:k+(n-1)/2)의 중앙값입니다.

  • n이 짝수이면 y(k)x(k-n/2:k+(n/2)-1)의 중앙값입니다. 이 경우, medfilt1은 수치를 정렬하고 정렬한 목록에서 정중앙 요소 두 개의 평균을 구합니다.

예: n = 11이면 y(k)x(k-5:k+5)의 중앙값입니다.

예: n = 12이면 y(k)x(k-6:k+5)의 중앙값입니다.

데이터형: double

필터를 적용할 차원으로, 양의 정수 스칼라로 지정됩니다. 기본적으로 medfilt1x의 첫 번째 비한원소(Nonsingleton) 차원을 따라 동작합니다. 특히, x가 행렬인 경우 이 함수는 y(:,i) = medfilt1(x(:,i),n)을 만족하도록 이 행렬의 열에 필터를 적용합니다.

데이터형: double

NaN 조건으로, 'includenan' 또는 'omitnan'으로 지정됩니다.

  • 'includenan'NaN을 포함하는 모든 세그먼트의 중앙값 또한 NaN이 되도록 필터링된 신호를 반환합니다.

  • 'omitnan'NaN을 포함하는 모든 세그먼트의 중앙값이 NaN이 아닌 값 간의 중앙값이 되도록 필터링된 신호를 반환합니다. 세그먼트의 모든 요소가 NaN이라면 결과는 NaN이 됩니다.

끝점 필터링으로, 'zeropad' 또는 'truncate'로 지정됩니다.

  • 'zeropad' — 끝점을 벗어난 신호를 0으로 간주합니다.

  • 'truncate' — 신호 경계에 도달한 경우 더 작은 세그먼트의 중앙값을 계산합니다.

출력 인수

모두 축소

필터링된 신호로, 실수 값 벡터, 행렬 또는 N차원 배열로 반환됩니다. yx와 같은 크기입니다.

데이터형: double

Image Processing Toolbox™의 라이선스가 있으면 medfilt2 (Image Processing Toolbox) 함수를 사용하여 2차원 중앙값 필터를 적용할 수 있습니다.

참고 문헌

[1] Pratt, William K. Digital Image Processing. 4th Ed. Hoboken, NJ: John Wiley & Sons, 2007.

참고 항목

| | | |

R2006a 이전에 개발됨