FFT 기반 노이즈 필터링 모델과 ML 기반 노이즈 필터링 모델의 효율 비교 (1)
우리가 통신을 하다 보면 주변 잡음이 함께 전달되고 더러운 신호를 받는다.
이러한 잡음은 가우시안 분포(Gaussian Distribution)을 따르는 노이즈이며, 가우시안 분포는 흔히 말하는 정규분포 (Normal Distribution)을 의미한다.
노이즈가 왜 정규분포를 따를까?
정확히는 모르지만, 중심 극한 정리(CLT)에 의해 증명되고 이해할 수 있다고 한다.
중심 극한 정리에 대해서도 언젠간 다뤄보도록 하겠다.
실제 통신에서의 BPSK, QPSK, QAM 과 같은 BIT 단위의 통신 노이즈 제거를 보기 앞서
간단한 파동에서 노이즈를 제거하는 방법을 알아보도록 하자.
아래 그림을 보면 Original Signal은 50Hz와 120Hz의 sin파를 합성한 파동이고 송신자가 이 파동을 송신한다.
이때 Gaussian noise가 추가되어 수신자가 Signal with Noise 파동을 수신하게 된다.
이렇게 잡음이 섞인 파동에서 원래의 파동, 즉 50Hz와 120Hz의 합성 sin파를 어떻게 복구할 수 있을까?
여기서 일반적으로 사용하는 수학적 개념이 바로 푸리에 변환(Fourier Transform)이다.
푸리에 변환에 대한 설명은 3Blue1Brown의 영상에 정말 잘 설명되어 있으니 관심 있는 사람은 보도록 하자.
https://youtu.be/spUNpyF58BY?si=tQOQdzQV7Mq63uOG
푸리에변환은 간단히 얘기해서 어떤 파동을 수신했을 때 그 파동이 어떤 진동수로 이루어져 있는지를 확인할 수 있도록 시간 축을 진동수 축으로 변환하는 것을 의미한다.
즉 50Hz와 120Hz의 합성파를 푸리에변환해보면 50Hz와 120Hz로 이루어져 있다는 사실을 알 수 있다.
이를 노이즈 제거에서 그대로 응용하면
노이즈가 함께 있는 신호를 푸리에 변환한 뒤 작은 피크들은 삭제시키고 큰 피크들만 남겨둔 채 역푸리에변환을 통해서 원래의 신호를 얻을 수 있다.
좀 더 정확히 얘기하면 임계값보다 작은 피크를 가지고 있는 진동수들은 다 삭제해 버리는 방법이다.
아래 증명은
1) 왜 피크의 값이 전체 샘플링 수 (1000)의 반이고
2) 피크가 대칭적으로 나오는지에 대한 증명이다.
큰 의미는 없다.
간단한 합성파(50Hz + 120Hz)에 대한 푸리에변환 기반 노이즈 필터링을 해보았다.
다음 포스트에서는 실제 bit 통신에서의 노이즈를 제거하는 모델을 만든 과정을 설명하겠다.
반론이나 질문은 환영입니다.
그리고 특히 이번 주제의 글은 파이썬 소스코드를 제공합니다.