개발/Essay

Filter iteration과 Low pass

lazykuna 2023. 3. 20. 01:10

요즘 영어 능력을 향상하고자 하는 일환으로 여러 문서들을 닥치는 대로 영어로 읽고 있습니다. 특히 기술 관련 에세이들을 많이 읽게 되는데, 긴 문장이나 고난도 어휘나 구절들을 많이 쓰는 경우가 많아서 정독하기가 정말 쉽지 않은 것 같습니다. 🥲 그래도 읽다 보니, 좀 더 어렵고 긴 문장을 머릿속에 담아가며 맥락을 잃지 않고 읽는 능력이 눈에 띄게 좋아지고 있는 것 같습니다.

아무튼, 그 중에서도 최근에는 ryg 님의 블로그에 재미있는 글들이 많아 열심히 읽고 있었는데, 그 중에서 filter의 signal diminish에 대해 다룬 글을 보게 되었습니다. 두 포스트로 나뉘어 정리가 되어 있었더라고요. 선형대수학을 잘 모르더라도 배경 이론 설명까지 되어 있는 등 굉장히 정리가 잘 되어 있어서, 읽기에 굉장히 좋은 느낌이 들었습니다.

일단 여기서 이야기하는 filter은 동영상/사운드와 같이 discrete한 Time에 대한 값(신호)를 모델링한 것입니다. 이를 하는 이유는 interpolate를 위함도 있고, 노이즈 필터링(여기서의 주된 이유)도 있고, 정보 압축을 위함도 있을 것입니다. 이를 위해서 성분 분해를 하는데, 이 과정에서 그 유명한 "eigenvector" 가 나오게 됩니다. 특정 조건(역행렬이 필요)에서만 구할 수 있는데, 꽤 오래되어 잘 기억은 나지 않지만, 역행렬이 없는 경우에도 근사치로 대충 구할 수 있을 겁니다, 아무튼.

그래서 위와 같이 filter가 여러번 들어가도 쉽게 구할 수 있고, 그리고 이러한 연산은 선형적 증가 (convolution)의 성격을 띕니다. 그럴 때, 이 정보가 안정적으로 유지되는가? 가 여기에서 다루고자 하는 논제입니다. 여기서 안정적이라 함은, 값이 0으로 수렴(diminish)해서도 안되고 발산해서도 안 된다는 것입니다.

그래서 DTFT 형태의 식을 통해 실제로 여러 coefficients로 실험을 직접 해본 결과, 공통적으로 high frequency의 정보는 쉽게 날아간다는 재미있는 특징이 있었다는 것을 확인 할 수 있었습니다(다르게 말하면 Filter가 기본적으로 Low pass가 되는 이유). 또 흥미로운 점은, 이러한 high freq 정보가 날아가는 것을 보상하기 위한 기술(motion compensation)이 또 있다는 것이었네요.

이 글을 읽고서야 왜 동영상 코덱이 중간중간 "보상"프레임이 존재하는지 알 수 있었습니다. gif와는 다르게 프레임마다 구간 같은 게 있어서 그것들을 모두 처리해주지 않으면 시간도 이미지도 모두 깨져 나왔던 기억이 나네요. 그리고 동영상이 어떻게 GPU에서 인코딩/ 디코딩 될 수 있는가에 대해서도 알 수 있었네요. 블록 단위 연산이 가능하니까 그렇겠죠. 이전에 인코딩/디코딩 로직을 짤 때 전혀 이해를 하지 못하고 짰던 부분들을 한번에 풀게 되었습니다.

컴퓨터를 반평생 배워 왔지만 아직도 모르는 내용들이 너무 많다는 것을 새삼 느낍니다. 글 내용에 대해서는 두 포스트에 잘 정리되어 있으므로 이 정도로 줄이겠습니다.

TMI: 디지털 신호 프로세싱에 대해서 거의 아는 바가 없어서, 내용의 타당성을 확신할 수 없으니 해당 글은 절대로 참고용으로만 봐 주세요. 혹여나 틀린 내용이 있다면 알려주시면 감사하겠습니다.