Infinite Impulse Response. 1차 저역 필터가 가장 흔하다.
y += (x - y) * ALPHA; /* ALPHA 가 작을수록 더 부드럽다 */
이전 출력 하나만 기억하면 된다. 이동 평균(FIR)은 N 개 샘플을 다 들고 있어야 하는데, IIR 은 변수 하나면 끝난다. MCU 에서 이 차이가 크다.
이 프로젝트에서 쓰이는 곳
RSSI 필터링이 대표적이다. BLE 신호 세기는 다중 경로 페이딩으로 샘플마다 수 dB 씩 튀는데, 그대로 임계값과 비교하면 근접 판정이 깜빡거린다.
c->rssi_filt += ((x - c->rssi_filt) * ALPHA_Q4) >> 4;
필터만으로는 부족하다
IIR 은 순간 노이즈를 줄이지만 경계 근처의 느린 변동은 못 막는다. 그래서 히스테리시스(크기 축)와 유지 시간(시간 축)을 함께 쓴다. 세 겹이 각각 다른 종류의 흔들림을 잡는다.
대가는 지연이다
ALPHA 를 작게 할수록 부드럽지만 반응이 느려진다. 안전 관련 신호에서는 이 지연이 곧 검출 지연이므로, 얼마나 평활할지가 그대로 안전 여유와 교환된다.