본문 바로가기
programming language/MATLAB

MATLAB filter() 함수의 고급 사용

by 남성 2013. 9. 21.

필터 함수는 FIR 또는 IIR 필터링을 수행하는데 이용이 되는 함수이다.

다음과 같이

Z=filter(x,1,y); 하면 x 라는 필터 계수를 가진 필터로 FIR 필터링을 수행하는 것이다.

그런데 filter() 함수를 한번만 이용하는 것이 아니라 루프를 이용하여 필터링을 해야 하는 경우가 있다.

예를 들면 프레임 단위의 시뮬레이션을 하는 경우 등이다.

이럴 때는 filter() 함수의 옵션 몇 가지를 이용하면 가능 하다.

filter() 함수는 다음과 같이 이용할 수 있다.


[y,zf] = filter(b,a,X,zi)


위 표현에서 y 는 필터링 결과 zf 는 필터의 최종 상태, zi 는 초기 상태, b 는 필터의 numerator, a 는 필터의 denumerator, X 는 필터의 입력 이다.

zi 값은 a, b 의 길이중 최대값 -1 의 길이를 갖는다.

 

예를 들어 a=[1 ] 이고 b=[ 1 2 3 4 5] 라고 한다면

a 의 길이는 1 이고 b 의 길이는 5 이므로 zi 의 길이는 5-1 = 4 가 된다.

필터의 초기값으로 0 을 준다면 zi=zeros(4, 1) 이라고 선언을 하면 되는 것이다.

 

그럼 for 루프 안에서 필터링을 연속으로 하는 예를 들어 보자.

X=rand(100) 이라는 100 행 100 열의 매트릭스의 값을 각 열 별로 for 문을 이용하여 필터링을 해 볼 것이다.

 

X=rand(100); % X 의 값

a=[1]; % 필터의 denumerator

b=[1 2 3 4 5]; % 필터의 numerator

zi = zeros(4,1); % 필터의 초기 상태

Y=zeros(100); % 필터링 결과를 저장 할 버퍼

 

이제 for 문을 구성 해 본다.

 

for n=1:100

[Y(:,n) zi]=filter(b,a,X(:,n), zi); % 이 부분에서 필터 초기 상태와 필터 최종상태의 변수를

% 동일하게 놓음으로서 상태가 연속이 되도록 할 수 있는것이다.

end

 

위 결과값 Y(:) 는

Y2=filter(b,a,X(:)) 의 결과인 Y2 값과 동일한 결과이다.



댓글0