이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

데이터 필터링하기

차분 방정식 필터링하기

필터는 데이터에 포함된 고주파 요동을 평활화하거나 데이터에서 특정 주파수의 주기적 추세를 제거할 수 있는 데이터 처리 기법입니다. MATLAB®에서 filter 함수는 탭 지연선 필터를 설명하는 다음 차분 방정식에 따라 데이터 x의 벡터를 필터링합니다.

a(1)y(n)=b(1)x(n)+b(2)x(n1)++b(Nb)x(nNb+1)                 a(2)y(n1)a(Na)y(nNa+1)

이 방정식에서 a와 b는 필터의 계수로 구성된 벡터이고, Na는 피드백 필터의 차수이며, Nb는 피드포워드 필터의 차수입니다. n은 x의 현재 요소의 인덱스입니다. 출력값 y(n)은 x와 y의 현재 요소와 이전 요소의 일차 결합입니다.

filter 함수는 지정된 계수 벡터 a와 b를 사용하여 입력 데이터 x를 필터링합니다. 필터를 설명하는 차분 방정식에 대한 자세한 내용은 [1] 항목을 참조하십시오.

교통량 데이터의 이동평균 필터

filter 함수는 일반적인 데이터 스무딩 기법인 이동평균 필터를 구현할 수 있는 한 가지 방법입니다.

다음 차분 방정식은 시간 종속적 데이터의 현재 시간과 세 개의 이전 시간에 대해 이 데이터의 평균을 구하는 필터를 설명합니다.

y(n)=14x(n)+14x(n-1)+14x(n-2)+14x(n-3)

시간 경과에 따른 교통 흐름을 설명하는 데이터를 가져온 다음, 차량 대수의 첫 번째 열을 벡터 x에 할당합니다.

load count.dat
x = count(:,1);

필터 계수 벡터를 생성합니다.

a = 1;
b = [1/4 1/4 1/4 1/4];

데이터의 4시간 이동평균을 계산한 다음, 원래 데이터와 필터링된 데이터를 모두 플로팅합니다.

y = filter(b,a,x);

t = 1:length(x);
plot(t,x,'--',t,y,'-')
legend('Original Data','Filtered Data')

데이터의 진폭 수정하기

이 예제에서는 전달 함수를 적용하여 데이터 벡터의 진폭을 수정하는 방법을 보여줍니다.

디지털 신호 처리에서 필터는 종종 전달 함수로 나타냅니다. 다음 차분 방정식의 Z 변환은

a(1)y(n)=b(1)x(n)+b(2)x(n-1)+...+b(Nb)x(n-Nb+1)-a(2)y(n-1)-...-a(Na)y(n-Na+1)

다음과 같은 전달 함수로 표현됩니다.

Y(z)=H(z-1)X(z)=b(1)+b(2)z-1+...+b(Nb)z-Nb+1a(1)+a(2)z-1+...+a(Na)z-Na+1X(z)

다음 전달 함수를 사용하여

H(z-1)=b(z-1)a(z-1)=2+3z-11+0.2z-1

count.dat에 있는 데이터의 진폭을 수정해 보겠습니다.

데이터를 불러온 다음 첫 번째 열을 벡터 x에 할당합니다.

load count.dat
x = count(:,1);

전달 함수 H(z-1)에 따라 필터 계수 벡터를 생성합니다.

a = [1 0.2];
b = [2 3];

필터링된 데이터를 계산한 다음, 원래 데이터와 필터링된 데이터를 모두 플로팅합니다. 기본적으로 이 필터는 원래 데이터의 진폭을 수정합니다.

y = filter(b,a,x);

t = 1:length(x);
plot(t,x,'--',t,y,'-')
legend('Original Data','Filtered Data')

참고 문헌

[1] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. Upper Saddle River, NJ: Prentice-Hall, 1999.

참고 항목

| | | |

관련 항목