전자/신호 및 시스템

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

Begi 2020. 5. 10. 16:11
반응형

정수형 변수를 사용하여 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비트가 된다.

 

반응형