필터 함수는 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 값과 동일한 결과이다.
'programming language > MATLAB' 카테고리의 다른 글
MATLAB, OCTAVE Root Raised Cosine Filter Coefficient (0) | 2013.11.03 |
---|---|
MATLAB hash table 사용하기 (0) | 2013.10.22 |
MATLAB Batman Equation (0) | 2013.10.20 |
MATLAB 시작 폴더 변경 및 startup.m 파일 설정 (0) | 2013.09.30 |
MATLAB 모든 경우의 수 뽑기 Cartesian Product (0) | 2013.08.18 |
MATLAB에서 sqlite 사용하기 (0) | 2013.06.16 |
MATLAB Gibbs Phenomenon (0) | 2013.04.10 |
MATLAB 로그 스케일 그래프 그리기 semilogx(),semilogy(), loglog() (0) | 2013.01.29 |
댓글