지난 시간까진 연속시간(Continuous-Time)에서의 푸리에 변환에 대해 공부하였다. 이번 강의에서는 이산시간(Discrete-Time)에서의 푸리에 변환에 대해 공부해보자. 연속시간 푸리에 변환과 이산시간 푸리에 변환은 시간을 바라보는 관점에 있어서 큰 차이점이 있다. 즉 시간을 끊어지지 않고 연속적으로 이어져있는 형태로 보는지, 혹은 셀 수 있는 단위로 끊어서 이해하는지의 차이다. 쉽게 말해 아날로그로 보는지, 디지털로 보는지를 의미한다. 디지털로 본다는 관점은 결국 실세계에 존재하는 어떤 연속적인 형태의 문제를 일정한 크기의 단위로 쪼개서 근사해서 계산하겠다는 의지이다. 이러한 이산 시간에서의 푸리에 변환은 연속시간의 것과 어떤 공통점이 있고 차이점이 있는지 배워보자.
1. 이산시간 푸리에 급수(Discrete-Time Fourier Series)
- Discrete Time Fourier Series for periodic signal
우리는 지난 강의에서 연속시간에서의 푸리에 급수 및 푸리에 변환에 대해 배웠다. 이산시간에 대한 푸리에 변환에 대해 공부하기 전에 먼저 이산시간 푸리에 급수에 대해 배워보도록 하자. 아래의 식은 이전 강의에서 배웠던 연속시간 푸리에 급수에 대한 수식이다.
이미 알다시피 푸리에 급수는 주기신호(periodic signal)만 다룰 수 있기때문에 신호에 대한 함수 f(t)에 tilde를 붙여 표현하였다. 기존에 작성한 식과 한 가지 다른부분이 있는데 바로 기본진동수 앞에 곱해졌던 계수 n을 k로 바꾸었다. 이는 이산시간 푸리에 급수의 식과 비교할 때 혼동을 없애기 위함이다. 단지 표기만 바꾼것이므로 식에 문제는 없다. 이제 이 연속시간 푸리에 급수를 이산시간 푸리에 급수(Discrete-Time Fourier Series)로 표현해보자.
식 (2.1)은 이산시간 푸리에 급수의 합성방정식(synthesis equation)이고, (2.2)는 분석방정식(analysis equation)을 나타낸다. 이산시간 푸리에 급수는 수식을 표현함에 있어서 기호를 비롯해 몇 가지 달라지는 부분이 있다. 우선 기본진동수(fundamental frequency)를 보면 연속시간에서는 소문자 오메가(small omega) $\omega_0$를 사용했고, 주기로 알파벳 T를 사용한 반면 이산시간에서는 대문자 오메가(capital omega) $\Omega_0$와 주기는 N을 사용했다. 이산시간에서는 데이터를 셀 수 있기 때문에 t 대신 number의 앞글자를 따서 알파벳 n을 사용한다. 또한 함수를 살펴보면 연속시간에서는 소괄호를 이용하여 f(t)와 같이 표현했지만, 이산시간에서는 대괄호를 이용하여 f[n]과 같이 표현한다. 즉 연속시간에서는 주로 소문자 기호를, 이산시간에서는 대문자 기호를 사용하는 것이 눈에 보이는 차이점이다.
식 (2.1)의 우변을 보면 두 개의 상수 k와 n이 존재한다. k는 (1.1)의 k와 같은 역할을 하며 주파수에 대한 인덱스를 나타낸다. (2.1)의 n은 (1.1)의 t와 같은 의미이며 시간축에 대한 변수를 나타낸다. 연속시간 푸리에 급수에서는 k를 음의 무한대에서 부터 양의 무한대까지 변화시켜가며 합을 계산하는 반면, 이산시간 푸리에 급수에서 k는 0부터 k=0, 1, 2, .. 와 같이 증가해가며 계수 $a_k$와 지수함수의 곱의 선형조합으로 합성방정식이 정의된다. 여기서 $a_k$는 $k\Omega_0$의 주파수를 갖는 고조파(harmonic)가 해당 주기신호를 형성하는데에 얼마나 기여를 하는지를 의미한다. 즉 기본진동수 $\Omega_0$와 그의 정배수의 파형의 가중된 합(weighted sum)으로 정의할 수 있는 것이다. 사실 이 합성방정식의 k부분이 연속시간 푸리에 급수와 가장 큰 차이점을 만들게 되는데, 이 차이점에 대해선 잠시 후에 알아보도록 하자.
식 (2.2)의 이산시간 푸리에 급수의 분석방정식을 살펴보면 시그마 기호에 <N>으로 표시된 것을 볼 수 있는데, 이는 시그마의 합을 주기 N만큼 한다는 것이다. 즉 식 (1.2)의 한 주기 T의 구간에서 적분한것과 같은 의미를 갖는다.
이와 같이 연속시간 푸리에 급수는 이산시간 푸리에 급수와 기본적인 개념이 거의 동일하며, 수식의 형태도 거의 같기 때문에 연속시간 푸리에 급수를 이해한다면 따로 부연설명 없이도 이산시간 푸리에 급수를 이해할만하다. 그러나 앞서 잠깐 언급했듯이 연속시간과 이산시간 푸리에 급수 사이에는 큰 차이점이 존재한다. 그 차이점이 무엇인지 지금부터 알아보자.
- Difference between CTFS and DTFS
연속시간 푸리에 급수와 이산시간 푸리에 급수 사이에는 한 가지 큰 차이점이 존재한다. 바로 푸리에 계수의 반복성(repeatability)이다. 즉 연속시간과는 달리 이산시간 푸리에 급수의 계수는 주기 N마다 같은 값으로 반복된다는 것이 둘 사이의 차이점이다. 아래의 식을 보자.
식 (3)은 이산시간 푸리에 급수(Discrete-Time Fourier Series)의 복소지수함수부분을 나타낸 것이다. 이산시간 푸리에 급수의 주파수는 k를 변화시키면서 기본진동수(fundamental frequency) $\Omega_0$와 곱하여 정의할 수 있는데, 이때 k에 주기 N을 더한 (k+N)에 대한 주파수는 k에 대한 주파수와 같은 값을 가지게 된다. 즉 N의 주기로 반복된다는 것이다. 결국 이것이 의미하는 것은 우리가 이산시간 푸리에 급수를 정의할 때, 연속시간때 처럼 k를 무한대로 고려할 필요 없이 k=0~N-1구간만 고려하면 된다는 것이다. 0~N-1의 구간 밖에 존재하는 푸리에 계수는 어차피 반복되기 때문이다. 따라서 식 (2)에 정의했던 이산시간 푸리에 급수는 아래와 같이 다시 정의해야 한다.
식 (4.1)은 (2.1)을 다시 정의한 것이다. 달라진 부분은 시그마의 아래쪽에 존재하는 k인덱스인데, <N>의 구간으로 k가 한정된 것을 볼 수 있다. 다시말하면 이산시간 푸리에 급수의 합성방정식에서 계수 $a_k$는 k=0~N-1구간에서만 고려하면 된다는 것이다. 구간은 k=0~N-1이나 k=1~N과 같이 shift된 구간을 선택해도 무관하다. 반복되기 때문이다. 푸리에 급수(Fourier Series)의 계수가 반복된다는 것은 결국 푸리에 변환(Fourier Transform)을 했을 때의 주파수에 대한 스펙트럼이 동일한 패턴으로 반복된다는 것이다. 이러한 이산시간에서의 계수, 혹은 주파수 스펙트럼의 주기성(periodicity)이 연속시간 푸리에 급수와 이산시간 푸리에 급수의 가장 큰 차이점이다.
아래 그림은 연속시간과 이산시간 푸리에 변환의 주기성(periodicity)의 차이를 보여주는 그래프이다.
Fig. 1 연속시간 푸리에 변환과 이산시간 푸리에 변환의 주기성(periodicity)의 차이점.
Fig. 1의 왼쪽은 0~1의 값을 가지는 사각파(square wave)의 연속시간 푸리에 변환의 모습을, 오른쪽은 -1~1의 값을 가지는 사각파의 이산시간 푸리에 변환의 모습을 각각 나타낸다. 연속시간의 경우엔 푸리에 변환을 한 스펙트럼의 결과가 단일 패턴의 연속적인 그래프의 형태로 나타나는 것을 볼 수 있다. 반면 이산시간 푸리에 변환의 경우엔 주기 <N>에 해당하는 주파수 스펙트럼이 동일한 형태로 반복되는 것을 볼 수 있다. Fig. 1의 오른쪽 아래의 주파수 스펙트럼 그래프에서 <N>에 해당하는 구간이 바로 이산시간 푸리에 변환의 한 주기 동안의 주파수 스펙트럼이다. 이러한 스펙트럼의 주기 <N>은 shift가 되어도 동일하게 성립한다. 즉 <N>=[1~8]이나 <N>=[3~10]이나 주기성의 성질은 똑같이 성립한다는 것이다.
아래 표는 CTFS와 DTFS의 공통점과 차이점을 정리한 것이다.
Periodic in n( or t) | Periodic in k | |
CTFS |
O | X |
DTFS |
O | O |
연속시간이나 이산시간 푸리에 급수 모두 시간텀(t or n)에 대해서는 주기성을 가진다. CTFS에서 변수 t와 DTFS에서 n은 어떤 주기신호에서 시간, 혹은 순서(sequence)를 의미하고 이 시간축에 대해서 신호는 주기적으로 반복된 값을 갖게 된다.
반면 주파수에 대한 인덱스 k에 대해서는 서로 다른 특성을 보인다. 연속시간에서는 주파수 스펙트럼이 하나의 패턴으로 나타나는 반면, 이산시간에서는 주기 N에 대해 동일한 패턴의 주파수 스펙트럼이 반복적으로 나타나는 현상을 보인다. 즉 이산시간에서는 $a_k$가 반복적으로 나타나게 된다.
이와 같이 연속시간 푸리에 급수와 이산시간 푸리에 급수는 기본적인 개념은 동일하지만, 주파수 스펙트럼의 주기성(periodicity)이 가장 큰 차이점으로 나타난다. 주기성과 관련된 보다 자세한 사항이 궁금하다면 다음의 책[1]을 참고하기 바란다.
[1] : The Intuitive Guide to Fourier Analysis and Spectral Estimation: with Matlab
2. 이산시간 푸리에 변환(Discrete-Time Fourier Transform)
- Continuous and Discrete-Time Fourier Transform
우리는 지난 강의 Lecture 27-(1)에서 연속시간 푸리에 급수(Continuous Time Fourier Series)로부터 푸리에 변환(Fourier Transform)을 정의하는 방법을 배웠다. 푸리에 급수는 기본적으로 주기신호(periodic signal)만을 표현할 수 있으나, 두 가지 핵심 아이디어를 통해 비주기 신호(Aperiodic signal)를 다룰 수 있는 개념이 바로 푸리에 변환인 것이다.
두 가지 핵심 아이디어는 비주기 신호와 주기신호는 한 주기 내에선 동일하다는 것, 그리고 비주기 신호를 양쪽에 동일한 패턴의 신호를 더해 주기 신호로 만든뒤, 주기를 무한대로 보내면 원래의 비주기 신호와 같아진다는 것이다. 이 아이디어는 이산시간 푸리에 급수 및 변환에도 동일하게 적용되며 아래와 같이 유사한 형태로 식을 정리할 수 있다.
식 (5)와 (6)은 연속시간 푸리에 변환과 이산시간 푸리에 변환을 각각 나타낸 것이며, 실수부(real part)와 허수부(imaginary part), 혹은 크기(magnitude)와 각도(angle)로 각각 표현할 수 있음을 나타낸 것이다. 둘의 개념은 동일하며 단지 시간의 개념과 식에 사용된 기호가 다를 뿐이다.
그런데 식 (6.1)의 이산시간 푸리에 변환을 살펴보면 시그마의 인덱스 n이 무한대에 걸쳐 정의되었다. 분명 앞서 이산시간 푸리에 급수의 분석방정식(analysis equation)은 한 주기 구간인 <N>에서만 정의되었고, 이로부터 유도된 푸리에 변환도 n이 한 구간에서만 정의될 것으로 생각되는데 말이다. 이는 연속시간 푸리에 변환에서와 마찬가지로 비주기 신호를 푸리에 급수로 다루기 위한 아이디어로부터 유도될 수 있다. 다음의 그림을 살펴보자.
Fig. 2 이산시간 푸리에 변환의 아이디어
Fig. 2는 이산시간 푸리에 변환의 아이디어를 나타낸다. 최초의 비주기 신호(Aperiodic signal)에서 같은 패턴의 신호를 주기 T로 하여 더하여 주기신호(periodic signal)로 만들어주고, 다시 주기를 무한대로 보내면 비주기 신호를 푸리에 급수로 다룰 수 있다. 이 아이디어는 연속시간에서의 그것과 같다. 이를 식으로 나타내면 다음과 같다.
최초의 이산시간 비주기 신호 f[n]으로부터 주기신호를 만들면 식 (7.1)과 같이 표현할 수 있고, 여기서 주기 T를 무한대로 보내면 주기신호는 다시 비주기 신호가 되고, 기본진동수(fundamental frequency)가 무한히 작아지게 된다. 기본진동수가 무한히 작아진다면 k=1, 2, 3, ... 으로 가면서 $1\Omega_0, 2\Omega_0, 3\Omega_0, ...$의 변화값이 아주 작은 변화량으로 증가하게 된다. 따라서 $\Omega=k\Omega_0$와 같이 주파수를 연속변수로 정의할 수 있고 식 (7.2)와 같이 정리할 수 있다.
지금까지 공부한 내용을 토대로 연속시간 푸리에 변환과의 눈에 띄는 차이점을 정리하면 다음과 같다.
연속시간 푸리에 변환은 시간 영역(time domain)에서 정의하는 신호가 비주기적(Aperiodic)이고 신호의 시간이 연속적(continuous)이다. 반면 주파수 영역(frequency domain)에서 정의되는 신호는 비주기적(Aperiodic)이고 주파수 영역에서의 포락선 함수(envelope function)의 형태는 연속(continuous)이다. 이산시간 푸리에 변환은 시간 영역(time domain)에서 정의하는 신호가 비주기적(Aperiodic)이고 신호의 시간이 이산적(discrete)이다. 반면 주파수 영역(frequency domain)에서 정의되는 신호는 주기적(periodic)이고 주파수 영역에서의 포락선 함수(envelope function)의 형태는 연속(continuous)이다. |
연속시간과 이산시간의 푸리에 변환에 대한 공통점과 차이점을 잘 이해하도록 하자.
- Implementation of the Discrete-Time Fourier Transform
지금부터는 앞서 연속시간 푸리에 변환 구현에 사용했던 사각파를 이산시간 푸리에 변환으로 구현해보도록 하겠다. 우선 이산시간으로 나타낸 사각파와 푸리에 변환의 모습은 아래와 같다.
Fig. 3 서로 다른 주기에 따른 사각파 신호 및 푸리에 변환
Fig. 3은 사각파의 신호와 주기에 따른 푸리에 변환을 나타낸다. 주기가 커질 수록 푸리에 변환의 결과는 연속적으로 나타나는 것을 볼 수 있다. 연속시간과의 차이점은 앞서 언급했듯이 푸리에 변환 결과가 주기적인지 아닌지이다. 연속시간과는 달리 주파수 도메인으로의 변환 결과가 주기적으로 나타난다. 연속시간 푸리에 변환과 이론적인 배경은 같으므로 구체적인 설명은 하지 않도록 하겠다.
아래는 MATLAB구현 코드이다. 연속시간의 식보다 이산시간 푸리에 변환식이 이해하기 쉽고 코드로 구현하기 수월하므로 구현 코드와 수식을 비교하면서 본다면 이해에 도움이 될 것이다. 코드는 최적으로 구현하기 보단 이해하기 쉽고 직관적으로 구현하려고 하였다. 코드를 참조하여 다른 형태의 신호나 비주기 신호도 임의로 만들어서 변환해보며 감을 익히도록 하자.
3. 마치며
이번 강의에서는 이산시간 푸리에 변환(DTFT)에 대해서 공부하였다. 연속시간 푸리에 변환(CTFT)과 동일한 개념이지만 시간을 바라보는 관점, 그리고 주파수 도메인에서의 주기성이 가장 큰 차이점이라고 할 수 있다. 그러나 실무에서는 DTFT를 거의 사용하지 않는데 그 이유는 계산속도가 너무 느리기 때문이다. 샘플링한 신호가 많아질수록 계산량이 기하급수적으로 늘어나기 때문이다. 때문에 실무에서는 계산속도가 훨씬 빠른 고속푸리에변환(Fast Fourier Transform)을 이용하여 신호의 주파수 분석을 한다. 그러나 DTFT의 개념을 아는 것은 여전히 중요하므로 잘 공부하도록 하자.