웨이블릿 변환을 이용한 신호 압축
1차원 신호의 압축에서 웨이블릿 변환은 불필요한 고주파 성분을 제거하고 중요한 정보가 담긴 저주파 성분을 보존함으로써 효율적인 압축을 가능하게 한다. 이는 주파수 대역이 다양한 스케일로 분할되는 웨이블릿 변환의 다중 해상도 분석(Multi-resolution Analysis) 특성에 기인한다. 기본적으로 웨이블릿 변환은 신호를 저주파 성분과 고주파 성분으로 분해하여, 불필요한 고주파 성분을 제거하고 저주파 성분을 중심으로 신호를 재구성하는 방식을 따른다.
웨이블릿 변환을 적용하여 신호 압축을 구현하는 과정은 다음과 같이 요약할 수 있다.
단계 1: 신호의 다중 해상도 분해
웨이블릿 변환은 연속적 혹은 이산적 형태로 신호를 다중 해상도로 분해하여 고주파 및 저주파 성분을 추출한다. 분해된 신호는 다음과 같은 방식으로 표현될 수 있다.
여기서 \mathbf{A}_{j}는 저주파 성분(Approximation coefficient)이며, \mathbf{D}_{j}는 고주파 성분(Detail coefficient)이다. 각 j는 분해 레벨을 나타낸다.
단계 2: 고주파 성분의 선택적 제거
신호 압축에서 중요한 요소는 필요한 정보가 포함되지 않은 고주파 성분을 제거하는 것이다. 특정 임계값 T를 기준으로 고주파 성분을 제거하는데, 이 임계값을 설정하는 기준은 신호 특성과 품질 요구 사항에 따라 결정된다. 예를 들어, T 이하의 고주파 성분을 다음과 같이 제거할 수 있다.
이와 같이 고주파 성분 중 중요도가 낮은 부분을 제거하여 신호 크기를 줄이는 것이 가능하다.
웨이블릿 변환을 이용한 노이즈 제거
노이즈 제거에서 웨이블릿 변환은 고주파 성분에 포함된 노이즈를 효율적으로 제거할 수 있는 방법을 제공한다. 노이즈 제거의 목적은 신호의 본래 형태를 유지하면서 노이즈만을 최소화하는 것이다. 이를 위해 웨이블릿 변환에서는 신호와 노이즈가 주파수 대역에서 다르게 분포하는 특성을 활용한다.
단계 1: 웨이블릿 변환을 통한 신호와 노이즈의 분리
노이즈는 대개 고주파 성분에 포함되기 때문에, 웨이블릿 변환을 통해 신호를 저주파 및 고주파 성분으로 분해하여 노이즈를 분리할 수 있다. 이를 수학적으로 표현하면 다음과 같다.
여기서 \mathbf{Y}는 노이즈가 포함된 신호, \mathbf{X}는 원 신호, \mathbf{N}은 노이즈 성분을 의미한다. 웨이블릿 변환을 적용하면 신호는 다음과 같이 분해된다.
노이즈 제거는 \mathbf{N}_{j} 성분을 제거하여 \mathbf{X}에 가까운 신호를 재구성하는 과정으로 볼 수 있다.
단계 2: 소프트 및 하드 스레숄딩 기법
노이즈 제거의 핵심 기법으로는 소프트 스레숄딩(Soft Thresholding)과 하드 스레숄딩(Hard Thresholding)이 있다. 이들 기법은 웨이블릿 계수에 임계값 T를 적용하여 노이즈를 줄이는 방법이다. 소프트 스레숄딩에서는 모든 웨이블릿 계수를 임계값에 따라 조정하여 부드러운 신호를 얻는 반면, 하드 스레숄딩은 일정 임계값 이하의 계수를 완전히 제거하는 방식이다.
소프트 스레숄딩 기법은 다음과 같이 정의된다.
하드 스레숄딩 기법은 다음과 같이 표현된다.
각 기법의 선택은 노이즈의 성질과 신호의 특성에 따라 결정된다. 소프트 스레숄딩은 부드러운 신호를 얻기 위해 사용되며, 하드 스레숄딩은 정확한 정보 보존을 위해 사용된다.
임계값 설정의 중요성
노이즈 제거의 성능은 임계값 T의 설정에 따라 크게 달라진다. 임계값이 너무 낮으면 노이즈가 충분히 제거되지 않으며, 너무 높으면 신호 자체가 손상될 수 있다. 따라서 최적의 임계값을 설정하는 것이 매우 중요하다. 일반적으로 사용되는 임계값 설정 방법에는 다음과 같은 것이 있다.
비율 기반 임계값 (Universal Threshold)
비율 기반 임계값은 노이즈의 표준편차 \sigma와 웨이블릿 변환된 신호의 크기 N를 이용하여 다음과 같이 설정된다.
이 임계값 설정은 큰 신호 데이터에서 유용하며, 주로 노이즈 분포가 가우시안인 경우에 적합하다. 그러나 이 방법은 신호의 복잡도와 상관없이 고정된 임계값을 사용하므로 모든 상황에 적용하기 어렵다.
레벨 기반 임계값 (Level-dependent Threshold)
레벨 기반 임계값은 신호의 각 분해 레벨 j에 대해 개별적인 임계값을 설정하는 방식이다. 이 방법은 다음과 같이 표현할 수 있다.
여기서 \sigma_{j}는 각 레벨에서 고주파 성분의 표준편차이다. 이를 통해 각 레벨의 특성에 맞게 임계값을 조절할 수 있으며, 다양한 주파수 성분이 포함된 신호에서도 유연하게 노이즈 제거가 가능하다.
신호의 재구성
노이즈 제거가 완료된 후에는 저주파 및 고주파 성분을 다시 합성하여 원래 신호에 가까운 형태로 재구성한다. 재구성 과정은 노이즈가 제거된 웨이블릿 계수를 이용하여 이루어지며, 이는 다음과 같이 표현된다.
여기서 \hat{\mathbf{A}}_{j}와 \hat{\mathbf{D}}_{j}는 노이즈 제거된 저주파 및 고주파 성분을 나타낸다. 이 과정을 통해 원 신호에 가까운 형태로 복원된 신호를 얻게 된다.
C++ 구현 개요
C++에서 웨이블릿 기반 신호 압축 및 노이즈 제거를 구현하기 위해서는 웨이블릿 변환을 수행하고, 스레숄딩 기법을 적용하여 필요한 신호만 남기고 불필요한 부분을 제거하는 과정이 필요하다. 이 과정은 다음과 같이 단계별로 요약할 수 있다.
- 웨이블릿 변환 수행: 신호를 입력받아 이산 웨이블릿 변환(DWT)을 통해 저주파 및 고주파 성분으로 분해한다.
- 스레숄딩 적용: 소프트 또는 하드 스레숄딩 기법을 통해 고주파 성분에서 불필요한 노이즈를 제거한다.
- 신호 재구성: 노이즈 제거된 웨이블릿 계수를 이용하여 원 신호에 가까운 형태로 신호를 재구성한다.
이 모든 과정은 C++에서 행렬과 벡터 연산을 효율적으로 처리할 수 있는 라이브러리, 예를 들어 OpenCV나 Eigen 등을 통해 구현할 수 있다. 특히 FFTW와 같은 고속 푸리에 변환 라이브러리와 결합하여 계산 효율을 높이는 것이 가능하다.