웨이블릿 변환 기반 시간-주파수 분석 간단 사례

웨이블릿 변환을 활용한 시간-주파수 해석 목적

신호가 시간에 따라 어떤 주파수 성분을 갖는지 직관적으로 파악하기 위해 웨이블릿 변환이 자주 활용된다. 복잡한 진동이나 임펄스가 나타나는 구간을 정확히 포착하려면 시변 특성을 반영해야 하며, 이를 위해서는 시간 영역과 주파수(혹은 스케일) 영역을 동시에 살펴볼 수 있는 방식이 필요하다. 일반적인 푸리에 변환은 전체 신호에 대한 전역적인 주파수 해석만을 제공하므로, 특정 시간 구간에서 발생하는 국소 특성을 관찰하기에는 한계가 있다. 반면 웨이블릿 변환에서는 모함수로 불리는 $\psi(t)$를 여러 스케일(scale)로 확장하거나 축소하고, 적절히 평행 이동하여 시간 축상 특정 구간에서 주파수 성분을 세밀하게 분석한다.

연속 웨이블릿 변환(Continuous Wavelet Transform, CWT)의 정의는 다음과 같은 적분 형태로 제시된다. 시간 영역에서의 신호를 $x(t)$라 하고, 모함수 $\psi(t)$가 주어졌을 때, 변환 계수 $X_w(a, \tau)$는

Xw(a,τ)=x(t)ψ ⁣(tτa)dtX_w(a, \tau) = \int_{-\infty}^{\infty} x(t) \, \psi^*\!\Bigl(\frac{t - \tau}{a}\Bigr)\,dt

와 같이 표현된다. 여기서 $*$는 복소 켤레를 의미하고, $a$는 스케일(scale) 계수이며 $\tau$는 시간 이동 파라미터다. 이때 $1/a$가 주파수 해상도와 연관되고, $\tau$가 시간 영역에서 국소 분석을 위한 지표로 쓰인다. $a$가 작을수록 시간 해상도가 높아지고, $a$가 클수록 주파수 해상도가 높아지는 특성을 가진다.

시간-주파수 해석 관점에서 중요한 점은, 모함수 $\psi(t)$의 에너지가 시간영역에서 비교적 좁은 구간에 집중되어 있다는 것이다. 따라서 웨이블릿 계수 $X_w(a, \tau)$를 2차원 평면$(\tau, a)$ 혹은 $(\tau, \omega)$로 표현하면, 시간과 주파수 스케일의 변화 양상을 동시에 시각화할 수 있다. 이를 통해 신호가 특정 구간에서만 일시적으로 나타내는 진동 특성, 구간별 주파수 대역 변동, 스파이크 성분 등을 명확하게 포착할 수 있다.

단순 신호 사례

임의로 합성된 짧은 신호를 예시로 들어 살펴본다. 예를 들어 시간 구간 $t\in[0,1]$에서, 중간 구간 $[0.3,,0.4]$ 무렵에 주파수가 높아지는 짧은 구간을 가진 신호를 정의해볼 수 있다. 이를 간단히 수식으로 나타내면

x(t)={sin(2π10t),0t<0.3sin(2π50t),0.3t<0.4sin(2π20t),0.4t1x(t)= \begin{cases} \sin(2\pi \cdot 10 \, t), & 0 \le t<0.3 \\ \sin(2\pi \cdot 50 \, t), & 0.3 \le t<0.4 \\ \sin(2\pi \cdot 20 \, t), & 0.4 \le t \le 1 \end{cases}

와 같은 형태가 될 수 있다. 이 신호는 $t\in[0,0.3)$ 구간에서 10Hz, $[0.3,0.4)$ 구간에서 50Hz, $[0.4,1]$ 구간에서 20Hz의 주파수를 가진 사인파들을 각각 이어붙인 구조다.

이 신호에 대해 연속 웨이블릿 변환을 수행하면 시간 구간마다 스케일(또는 주파수)에 따른 분해가 달라지는 양상을 관측할 수 있다. 모함수로 멕시칸 햇(Mexican hat) 웨이블릿이나 몰레(Morlet) 웨이블릿 등을 선택하여 변환 계수를 계산하면, $t=0.3$ 전후로 급격히 주파수가 변하는 구간에서 고스케일(또는 고주파)에 해당하는 계수값이 순간적으로 크게 나타난다. 또한 $t=0.4$ 구간에서도 50Hz에서 20Hz로 주파수가 낮아지는 변화가 뚜렷이 나타난다.

실제로 파이썬 환경에서 PyWavelets 라이브러리를 사용해 이산 웨이블릿 변환 혹은 연속 웨이블릿 변환을 수행하려면 다음과 같이 코드를 작성할 수 있다.

이 예시 코드에서는 간단하게 멕시칸 햇 웨이블릿(mexh)을 사용했고, 스케일 인덱스를 1에서 127까지 할당하여 변환 계수를 시각화했다. 실제로는 응용 분야에 따라 모함수를 더 적절하게 선택해야 하며, 스케일 범위를 조절해서 원하는 시간 해상도와 주파수 해상도를 얻어야 한다.

잡음이 포함된 복합 신호 사례

현실 세계에서 관측되는 신호는 주파수가 시시각마다 달라질 뿐 아니라, 다양한 잡음이 혼합된 복합 신호 형태를 띠는 경우가 많다. 이러한 잡음 환경에서 특정 이벤트나 이상 진동을 찾아내려면, 신호 자체의 비정상성뿐만 아니라 잡음의 특성도 고려해야 한다. 웨이블릿 변환은 국소 영역에서의 주파수 변화를 포착하는 동시에, 필터뱅크 구조를 통해 잡음을 억제하거나 특정 주파수 대역만 선택적으로 강조하기에 적합하다.

웨이블릿 기반 잡음 제거(denoising) 기법은 보통 스케일별로 분해된 계수들을 임계치(Threshold) 방식으로 처리하여 원하는 대역 이외의 신호 성분을 제거하는 절차를 거친다. 다만 간단한 노치(notch) 필터나 저역/고역 통과 필터와 달리, 비정상성을 가진 시간 구간을 보존하면서 국부적인 잡음만 억제할 수 있다는 점에서 유리하다. 이 과정에서 사용되는 임계치 값이나 파라미터들은 신호의 대역폭, 스케일 범위, 모함수 선택 등에 따라 달라진다.

임의의 복합 신호를 정의해 예시를 살펴보면,

x(t)=s(t)+η(t)x(t) = s(t) + \eta(t)

와 같은 형태로 나타낼 수 있다. 여기서 $s(t)$는 원하는 신호, $\eta(t)$는 잡음을 나타낸다. $s(t)$가 시간에 따라 주파수가 달라지는 사인파들의 합성이라고 할 때,

s(t)=sin(2π15t)+sin(2π35t2)s(t) = \sin(2\pi \cdot 15 \, t) + \sin(2\pi \cdot 35 \, t^2)

와 같은 식으로 비선형적인 시간 함수를 도입할 수도 있다. 두 번째 항 $\sin(2\pi \cdot 35 , t^2)$는 시간 축에 따라 주파수가 변하는 형태로, 비정상성을 내포하고 있다. 잡음 $\eta(t)$는 예를 들어 평균이 0이고 분산이 $\sigma^2$인 가우시안 백색잡음 $w(t)\sim\mathcal{N}(0,\sigma^2)$를 가정할 수 있다.

이때 웨이블릿 변환을 수행하면, 특정 시간 구간에서 주파수가 고주파 영역으로 치우치거나, 잡음 성분이 세밀히 나타나는 양상을 파악할 수 있다. $t^2$ 항으로 인해 주파수가 시간에 따라 천천히 증가하거나, 혹은 감소하는 패턴이 있다면, 웨이블릿 계수를 통해 그 구간에서만 특정 스케일에서 계수값이 집중적으로 증가하는 현상을 관찰할 수 있다. 잡음이 더해졌을 때도, 상대적으로 대역폭이 협소한 신호 성분은 웨이블릿 영역에서 스파스(sparse)하게 나타나므로, 적절히 임계치를 적용하여 잡음을 억제할 수 있다.

멀티레졸루션 분석(Multiresolution Analysis, MRA) 관점에서도 스케일에 따라 세밀한 변동(고주파 성분)과 전반적인 추세(저주파 성분)를 분리해낼 수 있다. 잡음이 주로 고주파 대역에 분포한다고 가정하면, 웨이블릿 변환 후 고주파 스케일에서 계수들을 임계치 방식으로 축소(shrinkage)하거나 완전히 제로화(zeroing)하는 전략을 취할 수 있다. 이를 코드 예시로 간단히 작성해볼 수 있다.

이 코드에서는 Daubechies 계열(db4) 웨이블릿을 선택하고, 총 4단계(level=4)까지 이산 웨이블릿 변환을 적용하여 계수를 얻는다. 그 뒤 각 세부(detailed) 계수에 대해 소프트 임계치(soft threshold)를 적용하여 상대적으로 작은 값들은 0으로 수렴하게 만든다. 이렇게 하면 주로 잡음이 분포된 고주파 대역 계수를 줄일 수 있고, 재구성(reconstruction)을 통해 잡음이 줄어든 신호를 복원한다. 이 과정은 시간-주파수 분석과 잡음 제거를 동시에 구현할 수 있는 전형적인 웨이블릿 기반 접근이다.

웨이블릿 변환 계수를 더 세부적으로 시각화하려면, 각 스케일별 세부 계수(discrete wavelet detail coefficient)를 별도의 그래프로 그려서 어느 구간에서 잡음과 신호가 구분되는지 확인할 수 있다. 또한 비정상성 특성이 강한 $t^2$ 항이나 순간적인 이벤트가 발생하는 구간이 있을 경우, 특정 세부 계수 그래프에서 훨씬 더 명확히 나타난다. 이를 통해 잡음이 섞여 있는 시계열 신호에서도 언제, 어느 주파수(스케일)에서 변화가 나타나는지 직관적으로 파악할 수 있다.

진동 신호 분석 사례

기계 설비나 구조물에서 계측되는 진동 신호는 시간에 따라 크기가 달라질 뿐 아니라, 회전 주파수, 공진 주파수, 충격성 이벤트 등 다양한 요소들이 혼재되어 나타난다. 특히 회전체나 기어(gear) 등에서 특정 결함이 발생하면, 주파수가 미세하게 변하거나 순간적인 충격이 반복되는 형태로 진동이 기록된다. 이와 같은 비정상 신호를 분석할 때, 웨이블릿 변환을 적용하면 시간축에서 결함이 나타나는 순간(impulse)이 어떤 스케일(주파수 영역)에 해당하는지를 국소적으로 추적할 수 있어, 결함 진단이나 예지 정비 등에 유용하다.

회전체 진동을 간단히 예시하면, 회전 속도 $\Omega$에 의해 진동이 기초적으로 $\Omega$의 정수 배와 연관된 주파수를 갖는다고 할 수 있다. 결함이 없는 정상 상태라면, 해당 고유 주파수들을 중심으로 꾸준한 패턴이 관찰된다. 하지만 특정 베어링(roller bearing), 기어 치아(gear tooth), 축(shaft) 등에서 결함이 발생하면 진동 크기가 주기적으로 변하거나, 스펙트럼에서 국소적으로 새로운 측파대(sideband)가 생성되기도 한다. 웨이블릿 변환을 통해 시간 구간별로 스케일(주파수 대역)에 따른 에너지를 관측하면, 결함으로 인해 발생하는 작은 충격 신호나 주파수 편이가 어느 구간에서 나타나는지 밝힐 수 있다.

진동 데이터가 $x(t)$라 할 때, 이산 웨이블릿 변환(DWT)을 여러 단계(level)로 분해하면, 저주파 스케일(approximation coefficients)에서는 전체적인 추세(저속 회전 성분 등)를 확인하고, 고주파 스케일(detail coefficients)에서는 충격성 이벤트나 결함으로 인한 진동 상승 구간 등을 추적할 수 있다. 이 과정을 실제로 구현하면, 각 단계별로 필터뱅크를 적용하여 고주파 성분과 저주파 성분을 분리한 뒤, 결함이 발생하는 구간에서 고주파 성분이 뚜렷하게 급증하는 양상을 관찰할 수 있다.

회전체 진동 분석은 전통적으로 시간-주파수 기법(예: 스펙트럼 분석, STFT)으로 접근해 왔지만, 웨이블릿 변환은 신호가 짧은 시간 구간에서 급격히 변할 경우에도 더 예리하게 반응한다. 예를 들어, 고주파 진동이 일시적으로만 나타날 때 STFT로는 창(window)의 크기 선택에 따라 해상도가 제한될 수 있으나, 웨이블릿은 스케일별로 창의 크기가 달라져서 단기간의 이벤트 탐지에 유리하다. 또한 고주파(작은 스케일) 영역에서 시간 분해능이 좋아져, 결함 진단과 같이 단발성 이벤트를 포착해야 하는 상황에도 적합하다.

아래 코드는 임의의 결함 진동을 모사하기 위해, 주파수 $\Omega$의 진동 신호에 작은 충격을 인위적으로 삽입한 예시를 보여준다.

코드에서 진동 신호의 기본 구성은 50Hz 사인파이며, $t=0.25$초 부근($500$번째 샘플 근처)에 약간의 충격성 이벤트를 추가했다. 이로 인해 웨이블릿 변환 후 고주파 대역 세부 계수에서 그 충격에 대응하는 계수가 뚜렷하게 나타난다. 실제 베어링 데이터나 기어 결함 데이터는 잡음이 많고 여러 종류의 결함 모드가 복합적으로 나타나므로, 더 정교한 기법(특정 웨이블릿 기반 충격 추출, 엔트로피 기반 정량화 등)이 필요할 수 있다. 하지만 기본적으로는, 웨이블릿 변환을 통해 결함 신호가 나타나는 시점과 그에 해당하는 주파수 대역을 시간-주파수 관점에서 동시에 확인하는 것이 가능하다.

음성 신호 분석 사례

음성 신호는 상대적으로 낮은 주파수 대역부터 고주파 대역까지 넓은 스펙트럼을 포괄하며, 발화 내용이나 말하는 사람의 성대 특성, 주변 잡음에 따라 다양하게 변동한다. 음성 인식이나 음질 개선을 위해서는 시간축에서 음성의 음소(phoneme)가 어떻게 분포하는지, 그 음소가 어느 정도의 주파수 대역을 갖는지 분석해야 한다. 이때 웨이블릿 변환을 적용하면, 음소 단위로 급격히 달라지는 성분들을 시변 스펙트럼 형태로 살펴볼 수 있으며, 전통적인 푸리에 기반 스펙트럼 분석으로는 놓치기 쉬운 짧은 구간의 소리 변화를 포착하기가 용이하다.

특히 모음(vowel)이나 자음(consonant) 구간은 시간적으로 짧게 지속되거나 성대 진동과 관계된 특정 주파수 성분을 갖는 경우가 많다. 웨이블릿 변환을 통해 각 구간에서의 주파수 분포 변화를 스케일별로 관찰하면, 음성 신호 내부에서 성대 진동이 강하게 나타나는 성분, 혹은 터지는 소리(plosive)처럼 순간적인 고주파 성분이 강조되는 구간을 구분할 수 있다. 이를 바탕으로 발화자의 특징을 추출하거나, 잡음 환경에서 음성 신호를 복원(denoising)하는 데에도 활용된다.

음성 신호는 일반적으로 수 kHz에서 수십 kHz 사이에서 표본화(sampling)되며, 디지털 필터링 과정을 거친 뒤 전처리(preprocessing)가 이루어진다. 그 후 웨이블릿 변환으로 특정 구간의 시간-주파수 정보를 추출할 때, 다음과 같은 점들을 고려한다.

창(window) 기반의 단기 푸리에 변환(STFT)에서는 창 길이를 고정해야 하지만, 웨이블릿 변환에서는 스케일별로 다른 창 크기를 갖기 때문에, 음성 내 순간적인 전이 구간(transition)이 더 선명하게 드러난다. 작은 스케일(고주파)에서는 시간 분해능이 높아, 자음처럼 순간적인 음성 특성을 분석하기 좋고, 큰 스케일(저주파)에서는 주파수 분해능이 좋아, 모음처럼 비교적 안정된 음성 구간을 더욱 세밀하게 살펴볼 수 있다.

음성 인식 시스템에서는 멜(Mel) 필터 뱅크를 활용한 푸리에 기반의 분석이 널리 쓰이지만, 웨이블릿 변환을 추가로 사용하면 잡음 제거 단계에서 세밀한 처리를 할 수 있다. 예를 들어, 웨이블릿 계수 중 저주파 성분(approximation)을 남기고 고주파 대역(detail)을 임계치 기반으로 조정하면, 배경 잡음은 줄이면서 음성의 핵심 특성은 유지하는 효과를 얻을 수 있다.

아래 코드는 파이썬 환경에서 음성 신호를 웨이블릿 변환으로 처리하는 단순 예시다. 실제 음성 데이터 대신, 임의로 생성한 신호를 통해 구간별 변화를 시각화하는 과정을 보여준다.

코드에서 0.5~0.6초 구간에 300Hz와 2000Hz를 합성하여, 짧고 빠르게 변화하는 고주파 성분을 강제로 삽입했다. 연속 웨이블릿 변환(CWT) 결과를 시각화해보면 이 구간에서 작은 스케일(높은 주파수 대역)에 대한 계수가 유독 크게 나타남을 확인할 수 있다. 이렇게 음성 신호에서 모음-자음 전환이 일어나는 구간이나, 순간적으로만 존재하는 잡음 피크 등을 잡아내는 데 웨이블릿 분석이 활용된다.

아래는 웨이블릿 변환 과정을 단순화하여 나타낸 예시 흐름도다.

spinner

음성 신호가 입력되면 웨이블릿 변환을 통해 시간에 따른 주파수 특성을 분석하고, 그 결과를 바탕으로 잡음이 많은 구간을 제거하거나 음소(발음 단위)를 분리하여 후처리(예: 음성 인식, 화자인증 등)에 활용할 수 있다.

생체 신호 분석 사례

의료 분야에서 측정되는 심전도(ECG), 뇌파(EEG), 근전도(EMG) 등은 생체 내부의 전기적 활동을 반영하므로, 매우 작은 신호 변동도 임상적으로 중요한 의미를 지닐 수 있다. 이들 신호는 측정 과정에서 다양한 잡음 요소가 포함되고, 측정 대상이나 상황에 따라 정상 동작 범위가 달라지며, 시간적으로 비정상적인 이벤트(부정맥, 발작, 근육 경련 등)가 불규칙하게 발생한다. 웨이블릿 변환은 이러한 비정상 신호에서 원하는 특징(특정 파형, 이벤트 등)을 국소적으로 추적하기에 적합하다.

심전도 신호를 간단히 예시로 들면, 정상적인 심장 박동은 P파, QRS 복합파, T파 등 주기적이고 특징적인 파형을 갖는다. 부정맥이나 기타 이상 징후가 있을 경우, 특정 구간의 파형이 짧게 변형되거나, 전반적인 주기가 달라질 수도 있다. 웨이블릿 변환을 적용하면, 저주파 대역(길게 지속되는 추세)부터 고주파 대역(짧고 급격히 변하는 이벤트)까지 다양하게 분해하여, 각각의 파형이 시간축상 어디에서 나타나는지, 그 세기가 어느 정도인지 분석할 수 있다.

연속 웨이블릿 변환(CWT)을 이용해 심전도 파형을 시각화하면, R 피크나 T 파형이 나타나는 시간 구간에서 특정 스케일(주파수 대역)의 계수가 뚜렷하게 증가하는 양상을 관찰할 수 있다. 반면 이산 웨이블릿 변환(DWT) 기반의 다중 스케일 분해를 사용하면, 잡음 제거 및 특징 추출을 단계적으로 수행할 수 있다. 특히 높은 스케일(저주파)에서 심전도 신호의 전반적인 박동 주기를 파악하고, 낮은 스케일(고주파)에서 노이즈나 미세한 파형 변화를 추적하는 방식으로 분석할 수 있다.

아래 코드는 간단히 합성한 심전도 유사 신호에 잡음을 더한 뒤, 웨이블릿 변환으로 주요 파형을 살펴보는 예시다. 실제로는 시중에 공개된 심전도 데이터(예: MIT-BIH Arrhythmia Database 등)를 활용하거나, 임의로 생성한 모델 신호에 다양한 노이즈나 이상 파형을 추가하여 실험을 진행한다.

코드에서는 1초 주기의 간단한 모델 파형을 QRS 구간에만 강조하는 형태로 만들고, 그 위에 가우시안 잡음을 더했다. 웨이블릿 변환 결과를 시각화해보면, QRS 구간에 해당하는 순간에 특정 스케일에서 계수 값이 두드러지게 나타남을 확인할 수 있다. 또한 임의의 ECG 데이터에 대해 DWT를 적용하면, 여러 단계의 세부 계수를 통해 R 피크 검출이나 잡음 제거를 수행할 수 있다. 이렇게 웨이블릿 변환을 활용하면, 비정상적이고 잡음이 많은 생체 신호에서도 특정 이벤트를 비교적 쉽게 추출할 수 있다는 장점이 있다.

금융 시계열 분석 사례

시장 지표나 주가, 환율, 선물 가격 등 금융 데이터는 시간에 따라 변동성이 달라지고, 특정 구간에서 급격한 변동(스파이크)이나 구조적 변화를 보이는 경우가 많다. 전형적인 예로, 거시적 이벤트나 정책 변화, 기업 실적 발표 등의 영향이 단기간에 집중되어 시세가 급등락할 수 있다. 이러한 국소 이벤트를 포착하려면, 단순한 푸리에 스펙트럼 분석보다는 특정 시점과 주파수(변동 주기)를 동시에 추적할 수 있는 기법이 필요하다.

웨이블릿 변환을 금융 시계열에 적용하면, 저주파 스케일에서 장기 추세나 경기 사이클을 파악하고, 고주파 스케일에서 단기간 급등락이나 과도 변동성을 분리하여 분석할 수 있다. 예를 들어, 단기 변동이 큰 구간에서는 웨이블릿 변환의 고주파 계수가 눈에 띄게 커지고, 비교적 완만한 변동이 지속되는 구간에서는 고주파 계수가 작아진다. 이를 통해 변동성이 높은 시점을 감지하거나, 노이즈 제거를 통해 장기 추세 성분을 뽑아낼 수 있다.

웨이블릿 변환을 이용해 변동성 분석(Volatility Analysis)을 간단히 시도해볼 수 있다. 시계열 데이터를 $x_t$라 할 때, 예를 들어 다중 스케일 분해를 통해 다음과 같은 식으로 표현한다.

xt=aj+k=1jdkx_t = a_{j} + \sum_{k=1}^{j} d_{k}

이때 $a_j$는 가장 낮은 주파수 대역(장기 스케일) 성분, $d_k$는 각각의 단계에서 분리된 고주파(단기 스케일) 성분이다. 금융 시계열에서 $d_k$ 성분들을 자세히 살펴보면, 특정 구간에서만 뚜렷한 변동성이 나타나고, 그 외 구간에서는 작은 값을 유지하는 패턴을 발견할 수 있다. 이를 기반으로 이벤트 구간, 충격 구간, 시장 분산도 등을 조사하고, 헤징 전략 또는 포트폴리오 리밸런싱 시점 등을 판단하는 자료로 활용한다.

아래 코드는 주가 데이터를 가정한 일련의 랜덤 워크에 웨이블릿 변환을 적용해, 스케일별 분해 결과를 살펴보는 예시다. 실제로는 금융 기관에서 제공하는 시계열(예: Yahoo Finance API 등)을 통해 데이터를 불러오고, 일봉, 주봉, 분봉 등으로 분석 범위를 조정할 수 있다.

코드에서 난수 기반의 랜덤 워크에 일시적인 급등·급락 이벤트를 삽입하여, 금융 데이터의 국소 변동을 흉내냈다. 웨이블릿 변환 결과의 상세(detail) 계수를 보면, 이벤트가 발생한 구간에서 특정 스케일에 해당하는 계수들이 급격히 변한다. 이는 웨이블릿 변환이 금융 시계열의 국소 이상 징후를 감지하거나 변동 패턴을 파악하는 데 유효하다는 점을 시사한다.

Last updated