힐베르트 변환

**힐베르트 변환**(Hilbert變換 (또는 힐버트 변환), Hilbert transform)은 수학과 신호처리 용어로, u(t) 라는 함수를 취하는 선형연산자인데, 이는 같은 domain상에서 H(u)(t) 함수를 만들어 낸다. 힐베르트 변환은 신호 u(t)의 해석적 표현을 유도하기 위해 사용되는 신호처리 영역에서 대단히 중요하다. 이는 실수 신호u(t)를 복소수 차원으로 확장한다는 것이다. 예로, 힐베르트 변환은 푸리에 해석에서 주어진 함수의 고조파 쌍(:en:harmonic conjugate)으로 만든다. 단일 적분 연산자와 푸리에 곱은 동등하다. (어떤 신호가 전달함수를 통과하면, 단일적분연산자인 합성곱의 결과와 전달함수의 주파수 함수인 푸리에 함수의 곱과 같다는 의미임) 힐베르트 변환은 원래 주기함수, 즉 원에서 힐베르트 핵(Hilbert kernel)과 합성곱에 의해 주어지는 함수를 위해 정의되었다. 그러나 일반적으로 힐베르트 변환은 실선 **R**(위상단의 영역)에 정의되는 함수인 코시 핵(Cauchy kernel)과 합성곱을 취한다. 힐베르트 변환은 페일리-위너 정리(Paley–Wiener theorem)와 연관되어 있다. 힐베르트 변환은 정칙 함수에 대해 리만-힐베르트 문제(Riemann–Hilbert problem)의 특수한 경우를 풀기 위해 도입한 연산자로 이를 도입한 다비트 힐베르트에 의해 이름이 붙어졌다. 파란색의 구형파에 대한 힐베르트 변환 (붉은 선)
# 개요
*u(t)*의 힐베르트 변환은 함수 *h*(*t*) = 1/(π*t*) 와 *u*(*t*)의 합성곱으로 생각할 수 있다. *h*(*t*)는 적분이 아니기 때문에, 합성곱을 정의하는 적분은 수렴하지 않는다. 대신, 코시 주요값(여기에 p.v.라 표시)을 사용하여 힐베르트 변환을 정의한다. 이 경우 명시적으로, 함수 또는 신호 *u*(*t*)의 힐베르트 변환은 다음과 같다. : :H(u)(t) = \text{p.v.} \int_{-\infty}^{\infty}u(\tau) h(t-\tau)\, d\tau = \frac{1}{\pi} \ \text{p.v.} \int_{-\infty}^{\infty} \frac{u(\tau)}{t-\tau}\, d\tau :H(u)(t) = -\frac{1}{\pi}\lim_{\varepsilon\rightarrow 0}\int_{\varepsilon}^\infty \frac{u(t + \tau) - u(t - \tau)}{\tau}\,d\tau. 힐베르트 변환이 함수 *u*에 2번 연속 수행되면, 결과는 *u* 의 음의 값이 된다 : :H(H(u))(t) = -u(t) 역변환(inverse transform)은 −*H*이다. *u*(*t*)의 푸리에 변환에서 힐베르트 변환의 영향을 고려함에 의해 이 효과는 쉽게 볼 수 있다. (참조 아래 푸리에 변환과의 관계). 상반평면(upper half-plane)에서 해석함수(:en:analytic function)에 대해, 힐베르트 변환은 경계값(boundary values)의 실수부와 허수부 사이의 관계를 설명한다. 즉, 만약 *f*(*z*)이 영역 Im *z* > 0에서 해석적이고 *u*(*t*) = Re *f*(*t* + 0·*i* ) 라면, 힐베르트 변환이 존재한다는 조건으로 부가적인 값까지 Im *f*(*t* + 0·*i* ) = *H*(*u*)(*t*) 가 된다.
## 특성
힐베르트 변환 필터의 특성은 모든 주파수에서 크기는 변하지 않고(all-pass filter) 위상만 음의 주파수에선 +90도, 양의 주파수에선 -90도로 변화시켜주는 필터이다. 즉 어떤 주파수의 cos wt 신호가 들어가면 항상 sin wt 신호가 나오는 것이다. 아래 푸리에 변환과의 관계 참조.
## 표기
신호처리에서 *u*(*t*)의 힐베르트 변환은 \widehat u(t)\,로 일반적으로 표기된다 (loc=pg 87). 그러나 수학에선 이 표기를 이미 *u*(*t*)의 푸리에 변환으로 광범위하게 사용하고 있다 (1971). 경우에 따라선, 힐베르트 변환은 \tilde{u}(t)라고 쓰기도 한다. 더욱이, 많은 문헌에선 여기에 정의한 것의 음으로 힐베르트 변환을 정의한다 (loc=pg 359).
# 역사
힐베르트 변환은 리만-힐베르트 문제(Riemann–Hilbert problem)이라고 알려진 해석적 함수(1989; 2001)에 관해 Riemann에 의해 제기된 문제에서 다비트 힐베르트의 1905년 작업에서 시작되었다. 힐베르트의 작업은 주로 원(2001; 1953)에서 정의된 함수에 대한 힐베르트 변환에 관한 것이었다.
# 푸리에 변환과의 관계
힐베르트 변환은 곱셈 연산자이다.loc=Chapter 3 *H*의 표기는 σ*H*(ω) = −*i* sgn(ω) 인데 여기서 sgn 은 signum function 함수이다. 그러므로 :\mathcal{F}(H(u))(\omega) = (-i\,\operatorname{sgn}(\omega)) \cdot \mathcal{F}(u)(\omega) 여기서 \mathcal{F}는 푸리에 변환을 의미한다. sgn(*x*) = sgn(2π*x*) 이므로, 푸리에 변환 \mathcal{F}의 세 가지 일반적인 정의에 적용되어 이 결과는 다음과 같다. 오일러 공식에 의해, :\sigma_H(\omega) = \begin{cases} i = e^{+\frac{i\pi}{2, & \mbox{for } \omega 0 \end{cases} 고로 *H*(*u*)(*t*)은 *u*(*t*)의 음의 주파수 성분은 +90° (π/2 radians)의 위상이 이동 되고, 양의 주파수 성분은 −90° 의 위상이동 효과를 나타낸다. 그리고 *i*·*H*(*u*)(*t*) 은 양의 주파수 성분을 되살리고, 음의 주파수 성분은 추가로 +90° 위상이동시켜, 결론적으로 음으로 만든다. 힐베르트 변환을 2번 적용했을시, *u*(*t*)의 음과 양의 주파수 성분은 각각 +180° 와 −180° 이동한다. 이 신호는 크기는 같고 부호만 반대로 된다. *H*(*H*(*u*)) = −*u*, 그 이유는 다음과 같다. :\big(\sigma_H(\omega)\big)^2 = e^{\pm i\pi} = -1 \qquad \text{for } \omega \neq 0
# 특정함수의 힐베르트 변환
{| class="wikitable" |- ! 신호
u(t)\, !! 힐베르트 변환몇몇 저자들(예를 들어 Brace Well)은 앞의 변환의 정의로 -H를 사용한다. 결과적으로 이 표의 오른쪽 열(column)의 부호가 반대로 된다.
H(u)(t) |- | align="center"| \sin(t)*sin*과 *cos* 함수의 힐버트 변환은 그것들을 정의하는 적분이 경우에 따라서 수렴할 수 있는 우려가 있는 경우 분포적 의미로 정의 될 수 있다. 주기적인 설정에선, 이 결과는 아무런 어려움없이 유지된다. || align="center"| -\cos(t) |- | align="center"| \cos(t) || align="center"| \sin(t)\, |- | align="center"| \exp \left( i t \right) || align="center"| \- i \exp \left( i t \right) |- | align="center"| \exp \left( -i t \right) || align="center"| i \exp \left( -i t \right) |- | align="center"| 1 \over t^2 + 1 || align="center"| t \over t^2 + 1 |- | align="center"| **싱크 함수**
\sin(t) \over t|| align="center"| 1 - \cos(t)\over t |- | align="center"| **구형 함수**
\sqcap(t)|| align="center"| {1 \over \pi} \log \left | {t + {1 \over 2} \over t - {1 \over 2 \right | |- | align="center"| **디랙 델타 함수**
\delta(t) \, || align="center"| {1 \over \pi t} |- | align="center"|**특성 함수**
\chi_{[a,b]}(t) \, || align="center"| { \frac{1}{\pi} \left\vert \frac{t - a}{t - b}\right\vert } |} 더 많은 함수에 대한 힐베르트 변환도 알 수 있다 (2009). 상수에 대한 힐베르트 변환은 0임을 상기하라.
# 정의 차원
:H(u)(t) = -\frac{1}{\pi}\lim_{\epsilon\downarrow 0}\int_\epsilon^\infty \frac{u(t + \tau) - u(t - \tau)}{\tau}\,d\tau 이 수식은 거의 모든 *t*에 존재한다. 무한접근 함수 또한 *L**'p*(**R''')에 있고, 부적절한 적분의 수단으로 극한을 사용한다는 사실이다. 즉 다음과 같다. :-\frac{1}{\pi}\int_\epsilon^\infty \frac{u(t + \tau) - u(t - \tau)}{\tau}\,d\tau\to H(u)(t)
# 이산 힐베르트 변환
그림 1: 주파수 반응이 Nyquist 주파수의 약 95%로 Band 제한된 필터 그림 2: 고역통과 주파수 반응을 가진 힐베르트 변환 필터 그림 3: 힐베르트 변환에 근사한 DFT 그림 4. cos(wt)의 힐베르트 변환은 sin(wt)이다. 이 그림은 MATLAB 라이브러리 함수, hilbert(·)에 의해 계산된 근사 힐베르트 변환과 sin(wt)의 차이 아날로그 신호를 이산 신호로 바꾸면 주파수 축에서 아날로그 스펙트럼이 sampling 주파수마다 반복된다. 이산시간 푸리에 변환(discrete-time Fourier transform, DTFT), U(ω)에 대한 이산함수(discrete function) u[n]에 대해, 힐베르트 변환은 다음과 같다. :H(u)[n] = \scriptstyle{DTFT}^{-1} \displaystyle \\{U(\omega)\cdot \sigma_H(\omega)\\} 여기서: :\sigma_H(\omega)\ \stackrel{\mathrm{def{=}\ \begin{cases} e^{+i\pi/2}, & -\pi < \omega < 0 \\\ e^{-i\pi/2}, & 0 < \omega < \pi\\\ 0, & \omega = -\pi, 0, \pi \end{cases} 그리고 합성곱 정리(convolution theorem)에 의해, 등가 수식은 다음과 같다. :H(u)[n] = u[n] * h[n] 여기서: :h[n]\ \stackrel{\mathrm{def{=}\ \scriptstyle{DTFT}^{-1} \big \\{\displaystyle \sigma_H(\omega)\big \\} = \begin{cases} 0, & \mbox{for }n\mbox{ even}\\\ \frac2{\pi n} & \mbox{for }n\mbox{ odd} \end{cases} 합성곱을 수치적으로 계산했을때, FIR 근사는 **그림1**에 보여주는 것처럼 *h*[*n*]에 대해 치환된다. (다시말해 들어오는 신호와 그림 1의 첫번째 함수로 합성곱을 취하면 힐베르트 변환이 된다.) 그리고 밴드패스필터의 결과로 낮은 주파수와 높은 주파수 (0과 나이퀴스트 주파수(Nyquist frequency))에서 통과대역이 0로 떨어지는 것을 볼 수 있다. **그림 2**에서 보여주는 것처럼, 높은 끝 주파수는 부드럽고, 연속시간함수인 *h*(*t*)에 더욱 근사인 resembles samples의 FIR 에 의해 원위치될 수 있다. 그러나 실제적인 문제에 있어서, 적절히 sampling된 *u*[*n*] 연속 data는 그 주파수에서 사용가능한 주파수를 가지고 있지 않다. 임펄스 반응을 더욱 길게 얻는다면, 낮은 끝 쪽 주파수 또한 잘 처리할 수 있다. 힐베르트는 다음 이산 변환을 연구하였다. : \frac{1}{n} * u[n] = \sum_{m=-\infty}^\infty \frac{u(m)}{n-m}\qquad m \neq n 그리고 L2의 *u*(*n*)에 대하여 순열 *H*(*u*)[*n*]이 또한 L2임을 증명하였다.(힐베르트의 부등식 참조). 이에 대한 기초적인 증명은 1994에 있다. 이 변환은 E. C. Titchmarsh에 의하여 M. Riesz의 결과를 연속인 경우에 증명하기 위하여 사용되었으나(1926; loc=¶314), 실용적인 신호처리에서는 사용되지 않는다. *h*[*n*]에 근사 FIR 필터로, **overlap-save**이라는 방법은 긴 *u*[*n*] 연속 데이터로 합성곱을 수행하는게 효과적인 방법이다. 때때로 array FFT{*h*[*n*]}는 σ*H*(ω)의 상응 샘플에 대치된다. 그것은 다음의 :en:periodic summation으로 합성곱의 효과를 가진다. :h_N[n]\ \stackrel{\text{def{=}\ \sum_{m=-\infty}^{\infty} h[n - mN] **그림 3**은 *hN*[*n*]의 반주기와 *h*[*n*]의 상응 길이 부분의 비교이다. 그들 사이의 차이와 그들 세그먼트 길이 (*N*)보다 짧지 않다는 사실이 왜곡의 근원인데, 세그먼트 길이와 중첩 파라미터를 증가시킴으로써 왜곡을 관리하여 줄일 수 있다. 대중적인 매트랩(MATLAB) 함수인 **hilbert(u,N)url=http://www.mathworks.com/help/toolbox/signal/ref/hilbert.html;jsessionid=67ed4e69e9729363548abed31054**는 복소 출력 데이터의 허수부분으로 *u*[*n*]의 근사 이산 힐베르트 변환을 해준다. 실수부분은 원래의 입력 연속 데이터이게되어, 복소출력은 *u*[*n*]의 해석적 표현(analytic representation)이 된다. 위에서 이야기한 것과 비슷하게, hilbert(u, N)함수는 sgn(ω)분포만을 사용하여 *hN*[*n*]로 합성곱을 취하게 된다. 출력 데이터의 근사수를 무시하여 실제 *u*[*n*] 연속 데이터보다 큰 *N*값을 사용함에 의해 왜곡을 줄일 수 있다. 이 형태의 왜곡의 예는 **그림 4**에 있다.
## 내용주
전거 통제 위키데이터 속성 추적 분류:신호 처리 분류:다비트 힐베르트 분류:적분 변환 분류:조화 함수