본문 바로가기
전자/신호 및 시스템

정수형 변수를 사용하여 IIR 필터 구현하기

by Begi 2020. 5. 10.
반응형

정수형 변수를 사용하여 IIR (Infinite Impulse Response) 필터를 구현하는 것은 조금 까다롭고 조심해야 할 것이 있다.

 

IIR 필터는 보통 다음과 같이 구현한다.

 

    y = (x + y *255) / 256;  

 

하지만, 정수형 변수를 사용하는 위와 같은 코드는 심각한 문제가 있다. 만약, 출력 y가 0이고 입력 x에 1의 입력이 들어온다면 위 명령을 아무리 많이 수행해도 y는 항상 0이 되고 1로 수렴되지 않는다. x가 255일 때도 마찬가지이고 256가 되어야 1이 된다.

 

이와 같은 문제는 다음과 같이 해결할 수 있다.

 

    x = x_in * 256;
    y = div(x + y*255, 256); 
    y_out = div(y, 256);

 

div 함수는 입력된 2개의 정수 변수를 나눈 후 버림 또는 올림 또는 반올림한 결과를 반환한다. 버림 또는 올림 또는 반올림에 따라 입력과 출력값은 ±1의 차이가 발생한다.

 

x의 범위가 12비트라면 y의 범위는 28비트이다. 스케일을 256이 아닌 1024로 한다면 y의 범위는 32비트가 된다.

 

반응형

'전자 > 신호 및 시스템' 카테고리의 다른 글

3dB 의미  (0) 2020.11.17
이동평균필터 프로그램 코드  (0) 2020.05.10
디지털 신호 처리  (0) 2019.06.20
FIR 필터와 IIR 필터의 차이  (0) 2019.04.16
칼만필터와 자이로센서  (0) 2018.04.09

댓글