지난 시간에 우리는 비주기 신호에 대한 연속 시간 푸리에 변환을 공부하였다. 그러나 아직 주기 신호에 대한 푸리에 변환을 정의하지는 않았는데, 이번 강의에서 나머지 부분을 배워보도록 하자. 

 

 

 

5. 델타함수(delta function)와 임펄스 응답(Impulse Response)

 

- Step function and delta function

 

주기 신호에 대한 푸리에 변환을 배우기 전에 먼저 공부해야 할 것이 있다. 바로 델타함수(delta function)이다. Paul Dirac이라는 영국의 물리학자에 의해 널리 알려졌기 때문에 Dirac delta function이라고도 불린다. 델타함수는 계단 함수(step function)와 관련이 깊은데, 이 둘을 함께 공부해두면 좋다. 아래 그림을 보자. 

 

 

Fig. 4 스텝함수(좌)와 델타함수(우)의 모습

 

 

Fig. 4는 계단 함수(step function)와 델타함수(delta function)의 모습을 각각 나타낸다. 그림에서 보이는 것처럼 계단 함수는 t가 0보다 작을 경우 그에 대한 함수값 H(t)가 0이다가, t가 0을 넘어서는 순간 함수값 H(t)가 1이 되는 특성을 가진 함수이다. 반면에 델타함수는 0을 제외한 모든 구간에서 함수값이 0이고, t=0인 그 찰나의 순간에는 함수값이 무한대(infinite)인 특성을 보인다. 그래프의 모양은 굉장히 이상적(ideal)으로 표현된 것이고 실제로 이러한 완벽에 가까운 형태의 그래프를 만드는 것은 어렵다. 이들을 수식으로 표현하면 아래와 같다. 

 

 

식 (9.1)은 계단 함수의 수학적 정의를, (10.1)은 델타함수의 수학적 정의를 각각 나타낸다. 직관적으로 이해하기 어렵지 않을 것이다. 식 (10.2)는 델타함수의 특징을 나타내는데, 델타함수를 무한대의 t영역에서 적분을 하게 되면 그 값이 1이 된다는 것이다. 물론 t=0에서의 값이 무한대가 되긴 하지만, t=0인 순간이 무한대로 짧아진다고 생각해보면 결국 적분값이 1이 됨을 유추할 수 있다. 

 

이렇듯 공학도라면 한 번쯤은 듣거나 배운 이들함수는 그렇다면 무슨 관계가 있을까? 그것은 바로 계단 함수(step function)의 미분값이 델타함수라는 것이다. Fig. 4를 보면 계단 함수는 t가 0보다 작을땐 값에 변화가 전혀 없다. 즉 이때의 미분값은 0이다. 그러다 t가 0이 되는 그 순간 값이 아주 급격하게 1이 되어버린다. 즉 t=0에서의 미분값(변화량)은 거의 무한대가 된다는 의미다. 그러다가 t가 0을 지나는 그 다음 순간부터는 다시 1로 유지되어 값의 변화가 없다. 미분값이 다시 0이 된다는 의미다. 지금까지 설명한 계단 함수의 미분값을 그래프로 표현한것이 바로 델타함수이다. 이들의 관계를 수식으로 표현하면 아래와 같다. 

 

 

 

식 (11.1)은 계단 함수(step function)를 미분하면 델타함수(delta function)가 됨을 수식으로 표현한 것이다. 이 식에서 양변을 적분하면 (11.2)와 같이 정리할 수 있는데, 이때 계단 함수 H(t)는 양의 무한대와 음의 무한대의 영역에서 적분할 수 있다. 적분 결과값은 1이 되어 델타함수를 적분한 것과 결과가 같다. 결론적으로 계단 함수와 델타함수는 서로간에 미분/적분 관계에 있음을 확인하였다. 

 

 

- Step function and delta function (shifted)

 

계단 함수와 델타함수는 t=0을 기준으로 그 값에 변화가 있는데, 이들 함수는 어떤 시스템에 입력을 가해 그 응답을 확인하여 해당 시스템의 특성을 파악하는데에 종종 사용된다. 따라서 t=0 이외에도 임의의 시간 a에 대한 함수를 정의할 필요가 있다. 아래 그림은 a의 시간 만큼 이동(shift or delay)된 형태의 계단 함수와 델타함수를 나타낸다. 

 

 

Fig. 5 시간 a만큼 이동된(shifted) 형태의 계단함수와 델타함수

 

 

Fig. 5의 왼쪽은 a만큼 shift된 계단 함수를, 오른쪽은 a만큼 shift된 델타함수를 나타낸다. 이들 shift된 계단/델타함수는 아래와 같은 식으로 표현한다. 

 

 

식 (12.1)은 shift된 스텝함수를, (12.2)는 shift된 델타함수를 각각 나타낸다. 스텝함수의 경우 기존엔 t가 0보다 큰 경우에 값이 1이 되었지만, shift된 스텝함수는 a보다 커야 함수값이 1이 된다. 델타함수의 경우에도 마찬가지로 shift가 되면 t=0이 아닌 t=a에서 함수값이 존재하게 된다. 델타함수는 본래 t=0에서 값이 활성화되는데, shift가 된 경우 델타함수의 입력값을 0으로 만들기 위해선 t=a로 설정해야 δ(a-a)=δ(0)=1이 된다. 결국 shift된 델타함수를 통해 어떤 시스템의 임의의 시간 a에서의 임펄스 응답(Impulse response)을 확인할 수 있다. 

 

 

- Properties of delta function

 

이러한 계단함수와 델타함수는 어떤 시스템, 특히 선형-시불변 시스템(Linear Time-invariant system, LTI system)에 대한 응답을 확인하여 시스템의 특성을 파악하는데에 사용되는 중요한 개념의 함수인데, 이를 단위 스텝응답(Unit Step Response), 임펄스 응답(Impulse Response)이라고 각각 부른다. 이중 임펄스 응답은 흥미로운 특성을 가지고 있는데, 그것은 임펄스 응답에 사용되는 델타함수는 모든 주파수 영역에서 동일한 응답을 한다는 것이다. 델타함수를 푸리에 변환(Fourier Transform)해보면 아래 그림과 같이 1이 되는데, 이는 모든 주파수 영역에서 동일한 응답을 한다는 것을 의미한다. 

 

 

Fig. 6 델타함수의 푸리에 변환 결과

 

 

Fig. 6에 보인것과 같이 델타함수는 모든 주파수 영역에서 동일한 응답을 하기 때문에 어떤 시스템의 특성을 파악하는데에 훌륭한 도구가 될 수 있다. 아래 식은 델타함수의 푸리에 변환을 식으로 나타낸 것이다. 

 

 

델타함수의 경우 오직 t=0에서만 값을 가지는데, 이상적으로는 무한대의 값을 가지지만 보통 실제 문제에 적용하기 위해서는 이 값을 1로 간주한다. 이는 식 (10.2)와 같이 델타함수의 무한대 영역에서의 적분값이 1이기 때문에 t=0에서 1로 간주해도 무리가 없다. 1로 간주했을 때의 델타함수를 단위 임펄스 함수(Unit impulse function)라 한다. 

 

델타함수는 (13.1)과 같이 임의의 함수 f(t)에 곱해졌을 때 오직 f(0)에만 1이 곱해지고 나머지 영역, 예를 들면 f(-2.4), f(-1.7), f(31.678)등은 전부 0이 되기 때문에 결국 f(0)의 값이 δ(t)f(t)의 적분값이 된다. 중요한것은 (13.1)에서는 무한대의 영역에서 적분을 했지만, 어떤 임의의 구간 [a, b]구간에서 적분을 한다고 했을 때, 이 구간에 반드시 0이 포함되어 있어야 (13.1)이 성립한다. 즉 a≤0b를 만족해야만 한다. (13.1)에 따라 식 (13.2)의 델타함수의 푸리에 변환을 정의할 수 있고 그 값은 1이 된다.  

 

식 (13.3)은 a의 시간만큼 이동(shift)된 델타함수의 특성을 나타낸다. 함수 f(t)에 곱해졌을 때 그 적분결과는 f(a)와 같으며, 임의의 구간 [c, d]에서 적분한다면 a가 반드시 c와 d사이에 존재해야만 (13.3)이 만족된다. (c≤ad) 식 (13.3)으로부터 shift된 델타함수의 적분을 (13.4)와 같이 정의할 수 있다. 이와 같이 shift된 델타함수의 푸리에 변환 결과는 지수함수의 식으로 나온다. 

 

어떤 사람들은 이 식의 결과에 대해서 지수함수의 그래프를 그려놓고 값이 이상하게 나온다고 잘못 이해하는 경우도 있으나, 푸리에 변환 결과가 복소지수함수(complex exponential function)임을 기억하자. 즉 푸리에 변환을 크기(magnitude)와 위상(phase)의 관점에서 바라봐야한다. cos의 real축과 sin의 imaginary축으로 구성되는 2차원의 복소평면(complex plane)에서 크기는 벡터의 길이, 위상은 벡터의 각도이며 아래의 식으로 계산할 수 있다. 

 

 

결국 시간 영역에서 델타함수가 a만큼 shift됐다면, 푸리에 변환의 결과에선 크기는 변함이 없고 위상만 변하게된다. 식 (13.4)에서 임의의 a를 설정하여 실제로 계산해보면 크기는 여전히 1이고, a에 따라 위상만 변하는 것을 볼 수 있다. 

 

 

- Impulse response

 

앞서 언급했듯이 임펄스 응답은 선형성(Linearity)과 시불변성(Time-Invariance)을 만족하는 시스템인 선형-시불변 시스템(Linear Time-invariant system, LTI system)의 특성을 파악하는데에 이용될 수 있다. 아래의 그림을 보자. 

 

 

Fig. 7 LTI(Linear Time-Invariant) 시스템과 임펄스 응답(Impulse Response)

 

 

Fig. 7은 LTI 시스템과 임펄스 응답에 관한 내용을 나타낸다. 예를 들어 어떤 LTI시스템이 있고, 입력 신호 x(t)를 받아서 y(t)를 출력한다고 해보자. 그런데 여기서 우리는 아직 이 LTI 시스템이 어떤지 잘 모른다고 가정해보자. 이러한 상황에서 무작정 입력신호를 넣을 수는 없을 것이다. 왜냐하면 우리는 아직 이 시스템이 안정적인지, 혹은 불안정한 시스템인지 잘 모르기 때문이다. 

 

 

이와 같이 잘 알려지지 않은(unknown) 시스템의 특성을 파악하고자 할 때 임펄스 응답이 사용될 수 있다. 앞서 언급했듯이 임펄스 신호는 모든 주파수에 대해서 동일한 반응을 보이는 특성을 가졌고, 해당 시스템이 어떤 주파수의 신호에서 어떤 반응을 보일지 모르는 상황이다. 이때 아주 기본단위의 신호인 임펄스 신호를 해당 시스템에 가하고, 그에 대한 응답을 분석한다면 해당 시스템의 특성을 파악할 수 있다. 임펄스 응답은 h(t)로 표현한다.

 

시스템의 특성을 나타내는 임펄스 응답 h(t)는 입력 신호 x(t)와 콘볼루션(convolution)되어 출력 신호 y(t)를 산출한다. 결국 임펄스 응답 h(t)는 출력 신호 y(t)를 만들어내는 근거이기 때문에 시스템 그 자체라고 해도 과언이 아니다

 

그렇다면 임펄스 함수(Impulse function)는 임펄스 응답(Impulse response)을 통해 시스템을 기술하는데에만 사용될까? 그렇지않다. 임펄스 함수는 입력신호 x(t)를 분해하여 표현하는 데에도 사용된다. 다음의 예를 통해 임펄스 함수를 이용하여 입력신호 x(t)를 분해하는 과정, 그리고 임펄스 응답에 대해 알아보자. 

 

 

Fig. 8 임펄스 함수를 이용한 입력 신호의 분해(decomposition)와 임펄스 응답

 

 

Fig. 8은 임펄스 함수를 이용한 입력 신호의 분해와 LTI 시스템의 임펄스 응답을 나타낸것이다. 이해를 돕기 위해 연속시간(continuous time)이 아닌 이산 시간(discrete time)으로 표현하였다. 이산시간은 소괄호대신 대괄호를 이용하여 함수를 표현하며, 시간 축을 셀 수 있기 때문에 알파벳 n을 이용한다. 

 

그림의 위쪽을 보면 입력신호 x[n]이 시간 -1, 0, 1에 걸쳐 1, 3, 2의 값을 각각 갖는다. 이때 각 시간의 입력신호는 임펄스 함수를 이용하여 분해하여 표현할 수 있다. 입력 신호 x[n]은 k인덱스를 이용하여 모든 시간축의 신호들을 탐색하며 x[k]에 k만큼 shift된 델타함수 δ[n-k]를 곱한 것들을 모두 더하여 표현할 수 있다. 예를 들어 x[n=1]을 구한다고 했을 때, x[-1]δ[1-(-1)] + x[0]δ[1-0] + x[1]δ[1-1]과 같이 계산할 수 있는데, 이때 n=k인 경우에만 델타함수의 값이 1이고, 나머지는 모두 0이기 때문에 x[1]이 계산되어져 나온다. 결과적으로 델타함수를 이용하여 입력신호를 가중-지연 임펄스(weighted delayed impulse)의 선형조합(Linear combination)으로 분해하여 표현할 수 있다. 

 

그 아래를 보면 LTI 시스템에 대한 임펄스 응답이 나타나있다. 임펄스 응답은 알파벳 h를 써서 h[n]으로 표시한다. 예를 들어 어떤 시스템의 임펄스 응답이 Fig. 8의 파란 상자속 수식과 같이 정의되어 있다고 가정하자. 이때 u[n]은 단위스텝함수(unit step function)를 의미하는데, 이는 임펄스 신호가 시스템에 입력된 순간부터 그 이후의 지속적인 응답신호를 확인하기 위해 곱해져야 한다. 스텝함수의 미분이 임펄스 함수임을 생각해봤을 때 결국 지속적으로 찰나의 순간마다 shift된 임펄스 함수가 가해진다고 생각하면 된다. 그래프를 보면 n=0일 때 임펄스 신호(빨간색 화살표)가 가해졌고, 그 순간부터 시스템의 응답신호가 파란색 그래프로 표현되어져 있다. 그래프의 추이를 보면 점점 줄어드는 형태이고 안정적인 시스템인 것을 알 수 있다. 이렇게 하여 임펄스 응답 h[n]을 구하였다. 

 

임펄스 응답 h[n]은 입력신호 x[n]과 콘볼루션(convolution)되어 출력신호를 계산할 수 있다. 여기서 콘볼루션은 두 신호를 합성하는 것이고 기호 *(asterisk)를 써서 나타낸다. 신호처리를 공부하는 것이 아니기 때문에 콘볼루션의 자세한 사항은 다루지 않겠다. 결과적으로 시스템의 임펄스 응답을 안다면 해당 시스템이 입력신호에 대해 어떤 작용을 하는지, 즉 시스템의 특성이 어떤지 파악할 수 있게 된다.

 

아래의 식은 델타함수를 이용하여 표현한 입력신호와 출력신호를 나타낸다. 

 

 

식 (14.1)와 (14.3)은 각각 이산시간(discrete time)에서의 입력과 출력신호를, (14.2)와 (14.4)는 연속시간(continuous time)에서 표현한 것이다. 

 

임펄스 응답은 이론적으로는 어떤 시스템을 미분방정식으로 모델링하고 입력값을 f(t)대신 δ(t)로 두어 해를 구한 뒤, Z변환(Z-Transform)을 통해 구할 수 있다. 그러나 실질적으로 임펄스 신호에 대한 응답을 기록한 뒤, 푸리에 방법을 적용하기도 한다.

 

 

 

 

6. 주기신호의 연속시간 푸리에 변환

 

- Continuous Time Fourier Transform for periodic signal

 

이제 주기신호(periodic signal)의 연속시간 푸리에 변환(continuous time Fourier Transform)에 대해 공부해보자. 먼저 앞에서 정리했던 연속시간 푸리에 급수(Fourier Series) 식을 다시 써보자. 

 

 

식 (15.1)과 (15.2)는 앞서 정리했던 주기신호(f tilde)의 연속시간 푸리에 급수를 정리한 것이다. $2\pi/T$는 $\omega_0$로 치환하여 정리하였다. 이 주기신호에 대한 푸리에 급수를  푸리에 변환하면 아래와 같이 정리할 수 있다. 

 

 

식 (16.1)은 주기신호의 푸리에 급수를 푸리에 변환시키는 모습이다. 푸리에 변환시에 계수 cn은 주파수에 대한 함수가 아니기 때문에 밖으로 뺄 수 있다. 계수를 빼서 정리하면 (16.2)와 같이 정리할 수 있고, 결국 지수함수부만 푸리에 변환을 하면 된다. (16.2)의 푸리에 변환을 수행하면 (16.3)과 같이 2pi와 델타함수가 나오게 되는데, 이 과정은 어떻게 이루어졌을까? 우리는 이 과정을 이해하기 위해 지금까지 델타함수에 대해 공부하였다. 다음의 식을 보자. 

 

 

식 (7.1)은 역푸리에 변환(Inverse Fourier Transform)을 다시 쓴것이다. 식 (17.1)은 주파수 도메인에서 델타함수를 역푸리에 변환시킨 것이고, 주파수 오메가가 0일 때만 1이고 나머지는 0이므로 결과값은 $1/2\pi$가 나왔다((13.1)을 생각해보자). 여기서 델타함수앞에 $2\pi$를 곱해준뒤 역푸리에 변환을 시키면 (17.2)와 같이 앞의 분수가 상쇄되어 없어지고 그 결과가 1이 나오게 된다. 여기에 다시 오메가를 $n\omega_0$만큼 shift시킨 델타함수를 역푸리에 변환해주면 (17.3)과 같이 $n\omega_0$가 포함된 복소지수함수가 나오게 된다. 이것은 식 (13.4)에서 다루었던 a만큼 shift된 델타함수의 푸리에 변환과 같은 개념이며 단지 시간 영역이 아닌 주파수 영역에서 적분을 해준 것이 다르다. 결과적으로 (17.4)와 같이 복소지수함수$e^{jn{\omega_0}t}$를 푸리에 변환하면 shift된 주파수 영역의 델타함수가 나오게 된다. 이 결과값을 (16.2)에 대입하면 (16.3)이 나오게된다. 

 

이렇게하여 우리는 주기신호(periodic signal)에 대한 푸리에 변환을 정의하였다. 비주기신호(Aperiodic signal)의 푸리에 변환식과 주기신호(periodic signal)의 푸리에 변환식을 함께 정리해보자. 

 

 

식 (4.2)는 비주기신호에 대한 푸리에 변환식을, (16.3)은 주기신호에 대한 푸리에 변환식을 각각 나타낸다. 두 식의 차이점이 보이는가? 식 자체가 물론 다르긴 하지만 가장 큰 차이점은 바로 연속(continuous)과 이산(discrete)이다. 비주기신호에 대한 푸리에 변환식 (4.2)는 계산자체를 적분(integral)으로 하기때문에 결과가 연속이다. 반면 주기신호에 대한 푸리에 변환식은 시그마(summation)을 통해 계산하기 때문에 결과값이 이산이다. 즉 비주기신호의 푸리에 변환결과는 연속이고, 주기신호의 푸리에 변환결과는 이산이라는 것이 가장 큰 차이점이다. shift된 델타함수가 곱해졌다는 것은 곧 일정 shift마다 값을 뽑아낸다는 것을 의미하며, 이는 이산적인 결과를 도출해낸다. 

 

(16.3)을 보면 $n\omega_0$만큼씩 shift된 델타함수가 푸리에 계수(Fourier coefficient)에 곱해지고, 거기에 다시 $2\pi$가 곱해진다. 즉 주기신호의 푸리에 변환의 결과는 주파수들의 분포가 $\omega_0$의 간격으로 존재하며, $2\pi$배 만큼 증가된 결과가 나오게된다. 이들의 관계를 정리하면 아래와 같다. 

 



  비주기 신호(Aperiodic Signal)의 푸리에 변환 결과 ---> 연속(Continuous)


  주기 신호(Periodic Signal)의 푸리에 변환 결과 ---> 이산(Discrete)



 

 

- Continuous Time Inverse Fourier Transform for periodic signal

 

우리는 앞서 주기신호에 대한 푸리에 변환(Fourier Transform)을 정의했다. 이를 이용하여 역푸리에 변환(Inverse Fourier Transform)을 정의해보자. 역푸리에 변환식의 유도는 기존의 비주기신호의 역푸리에 변환식에 주기신호의 푸리에 변환식을 대입하여 정리하면 간단히 해결할 수 있다. 

 

 

식 (18.1)은 기존의 비주기신호의 푸리에 변환식에 주기신호 푸리에 변환식(F tilde)을 대입하여 주기신호의 역푸리에 변환식을 만든것이다. F tilde를 풀어서 정리하면 (18.2)와 같이 되고, 여기서 시그마를 푸리에 계수와 함께 앞쪽으로 빼고 적분기호를 뒤쪽으로 보내서 정리하면 (18.3)과 같이 된다. 앞의 $2\pi$는 상쇄되어 없어지고, 뒤의 적분은 (17.3)과 동일하기 때문에 $n\omega_0$를 기반으로하는 복소지수함수가 나오게된다. 최종적으로 식을 정리하면 (18.4)와 같이 쓸 수 있다. 

 

그런데 식을 정리하고보니 어디서 많이 본 형태이다. 그렇다. 주기신호의 역푸리에 변환식은 푸리에 급수(Fourier Series)식과 동일하다. 앞서 정리했던 푸리에 급수식 (15.1)과 비교해보면 완전히 동일한 것을 알 수 있다. 주기신호의 푸리에 변환식을 이용하여 역푸리에 변환식을 유도하였고, 그 결과 주기신호를 sin과 cos함수의 여러 주파수의 조합으로 표현할 수 있는 푸리에 급수식과 동일함을 확인하였다. 

 

 

- Fourier Transform of periodic square wave

 

주기신호의 푸리에 변환을 MATLAB을 이용하여 구현해 보도록 하자. 아래 그림은 사각파의 푸리에 변환을 주기신호에 대한 식을 이용하여 구현한 모습이다. 

 

 

Fig. 9 주기 신호인 사각파의 푸리에 변환

 

 

Fig. 9는 주기신호인 사각파를 푸리에 변환한 모습이다. 왼쪽은 약 T=12.56의 주기를 갖는 사각파형이고 오른쪽은 푸리에 변환을 통해 주파수 영역에서 신호를 분석한 모습이다. 이전의 비주기신호의 푸리에 변환과 달리 임펄스 신호들이 일렬로 나열되어있는 형태의 그래프를 얻을 수 있다. 임의의 펄스(pulse)가 지속적으로 나타나는 형태의 신호를 펄스 트레인(pulse train)이라 하는데, 펄스대신 임펄스 신호들이 나열되어있다면 이를 임펄스 트레인(Impulse train)이라 한다. 신호가 기차와같이 연결되어 나타난다고 생각하면된다. Fig. 9에서와 같이 주기신호의 푸리에 변환은 이산적인 임펄스 트레인 형태의 결과를 얻을 수 있음을 확인하였다. 

 

아래 그림은 MATLAB 구현코드이다. 

  • File name: "dd.m"

 

  • File name: "dds.m"

 

 

 

 

7. 마치며

 

이번 강의에서는 주기신호에대한 연속시간 푸리에 변환 방법을 공부하였다. 델타함수에 관한 내용을 공부하고, 이것의 역푸리에 변환을 통해 주기신호의 푸리에 변환을 유도하였다. shift된 델타함수가 식에 존재함으로인해 그 결과는 매 shift마다 값을 추출하는 이산(discrete)적인 결과를 보이게되고, 임펄스 트레인(Impulse train)형태의 주파수 영역 신호가 나타난다. 

푸리에 변환은 푸리에 급수로부터 유도된 개념이다. 이미 배웠듯이 푸리에 급수는 주기신호만 다룰 수 있고 비주기신호는 다루지 못하였다. 그러나 여기에 수학적 트릭을 더해서 비주기신호의 주파수 성분을 분석할 수 있는 푸리에 변환 방법을 유도하였고, 다시 여기서 주기신호를 다룰 수 있는 푸리에 변환 방법을 얻을 수 있었다. 또한 역푸리에 변환을 통해 주파수 영역의 데이터로부터 원래의 신호를 복원할 수 있는 방법까지 알게되었다. 결과적으로 우리는 주기신호와 비주기신호 모두를 다룰 수 있는 수학적 도구를 만든것이다. 

주기신호와 비주기신호를 다룰 수 있는 수학적 방법론을 하나의 프레임워크(framework)에 담아내는 것, 그것이 푸리에 변환이 갖는 중요한 의미 중 하나이다. 

 

+ Recent posts