이산 시간 푸리에 급수 (Discrete Time Fourier Series)
학교 수업에서는 연속 함수에 대한 변환 까지만 강의하는 경우가 부지기수다. 하지만 실제로는 거의 대부분 이산 신호를 다루기 때문에 졸업하고 실무에 들어가면 멘붕이 오고 뭔가 배우긴 했던 것 같은데 어떻게 써야하는지 갈피를 잡을 수 없게 된다. 사실 배운적이 없으니 그럴 수 밖에!
우리는 보통 컴퓨터나 데이터 수집 보드(Data Acquisition Board)를 이용해 신호를 수집하고 그 결과로 일정한 시간 간격마다 숫자로 이루어진 측정값들의 나열을 얻는다. 따라서 이산 신호를 처리하는 방법의 출발인 이산 시간 푸리에 급수(Discrete Time Fourier Series, DTFS)를 반드시 알아 둘 필요가 있다. 특히 우리가 최종적으로 사용하게 될 고속 푸리에 변환(Fast Fourier Transform)과 같은 이산 푸리에 변환(Discrete Fourier Transform, DFT)은 그 결과가 DTFS와 같아지기 때문에 DTFS를 알아두는 것은 생각보다 더 중요하다고 할 수 있다. 다행스럽게도 DTFS는 연속 시간 푸리에 급수(CTFS)와 거의 비슷하기 때문에 미리 겁먹을 필요는 없다.
1. 이산 시간 신호 (Discrete time signal)
시간 표본 추출 또는 시간 샘플링은 신호에서 어떤 시간 간격마다 신호를 추출하는 것이다. 이 시간 간격을 샘플링 주기라 하고 $T_s$라고 쓴다. 원래의 연속 신호 $f(t)$에서 각 샘플링 주기마다 추출된 신호는 $f[n]$으로 나타낸다. 여기에서 n은 샘플의 순서를 나타내는 정수이다. 연속 신호는 ()로 표현하고 이산 신호는 구분을 위해 []로 표현한다. 연속 신호와 이산 신호의 관계는 아래와 같다.
$$ f(nT_s) = f[n]$$
2. 연속 시간 푸리에 급수 (Continuous Time Fourier Series)
연속 시간을 도메인으로 갖는 주기 $T$인 함수 $f(t)$가 있다고 하자.
$$ f(t) = f(t+T) $$
연속 시간 푸리에 급수의 복소 표현은 아래 식과 같다. 최소 단위 주기는 $T$이고 기저는 $e^{jk\omega_0t}$이다.
$$ \omega_0 = 2\pi f_0 = \frac{2\pi}{T} $$
\begin{align} f(t) &= \sum_{k=-\infty}^{ \infty } F_{k}e^{j\frac{2\pi k}{T}t} \\ F_k &= \frac{1}{T} \int_{-T/2}^{T/2} { f(t) e^{-j\frac{2\pi k}{T}t} dt } \end{align}
3. 이산 시간 푸리에 급수 (Discrete Time Fourier Series)
이산 시간을 도메인으로 갖는 주기 $N$인 함수 $f[n]$이 있다고 하자.
$$ f[n] = f[n+N] $$
이산 시간 푸리에 급수의 복소 표현은 아래 식과 같다. 최소 단위 주기는 $T$이고 기저는 $e^{jk\Omega_0t}$이다.
$$ \Omega_0 = 2\pi f_0 = \frac{2\pi}{T} $$
\begin{align} f[n] &= \sum_{k=\langle N \rangle} F_{k}e^{j\frac{2\pi k}{N}n} \\\\ F_k &= \frac{1}{N} \sum_{n=\langle N \rangle} { f[n] e^{-j\frac{2\pi k}{N}n} } \end{align}
여기에서 $\langle N \rangle$의 의미는 한 주기가 되는 $N$개의 데이터를 골라서 사용하라는 의미이다. 취향에 따라 $0$ ~ $N-1$을 쓸 수도 있고 $1$ ~ $N$을 쓸 수도 있다. 성격이 이상하면 $11$ ~ $N+10$을 사용해도 좋다.
$N$개 데이터만 선택하는 이유는 주기가 $N$일 때 $k$번째 기저와 $k+N$번째 기저가 동일하기 때문이다.
\begin{align} \exp\left(j\frac{2\pi(k+N)}{N}\right) &= \exp\left( j\frac{2\pi k}{N} \right) \exp\left( j\frac{2\pi N}{N} \right) \\\\ &= \exp\left( j\frac{2\pi k}{N} \right) \exp\left( j2\pi \right) \\\\ &= \exp\left( j\frac{2\pi k}{N} \right) \end{align}
4. 이산 시간 푸리에 급수의 계수 유도
이산 시간 푸리에 급수의 계수 $F_k$를 구해보자. 어떤 이산화 된 신호 $f[n]$의 푸리에 급수 표현에 새로운 기저를 내적한다. 복소수의 내적이므로 켤레를 곱하고 이산화 되어 있으니 벡터처럼 모든 n에 대해 원소끼리 곱하고 더하면 아래처럼 표현할 수 있다.
$$ f[n] = \sum_{k=\langle N \rangle} F_{k}\exp\left(j\frac{2\pi k}{N}n\right) $$
\begin{align} \sum_{n=\langle N \rangle} f[n]\exp\left(-j\frac{2\pi r}{N}n\right) &= \sum_{n=\langle N \rangle} \sum_{k=\langle N \rangle} F_k \exp\left(j\frac{2\pi k}{N}n\right) \exp\left(-j\frac{2\pi r}{N}n\right) \\\\ &= \sum_{k=\langle N \rangle } F_k \exp\left(j\frac{2\pi (k-r)}{N}n\right) \end{align}
위 식의 우변에서 $k \neq r $인 경우를 생각해보자. $k-r$은 0이 아닌 어떤 정수가 될 것이므로 $2\pi(k-r)$은 $2\pi$의 정수배가 된다. 이 각도를 $N$ 등분한 뒤 $n$배 각도가 되는 벡터를 생각해보자. $2\pi$의 정수배만큼 몇 바퀴 빙빙 돌고 $2\pi$보다 작은 나머지 각도에서 멈출 것이라는 것을 상상해볼 수 있다.
예를 들어 720도를 3 등분하는 경우 720/3 = 240이 되어 3개의 벡터는 240도와 480도, 720도가 된다. 여기에서 480도 벡터는 한 바퀴(360도)를 돌고 120도에서 멈출 것이고 720도 벡터는 두 바퀴를 돌고 0도에서 멈출 것이다. 따라서 0도와 120도, 240도 벡터가 될 것이라는 것을 알 수 있다.
이제 빙빙 도는 것은 무시하고 $2\pi$를 $N$등분한 것만 생각하면 된다. 이것을 복소평면에서 벡터로 그려보면 그림 1, 그림 2와 같다. 어떤 경우에도 복소평면에서 $n$개 벡터들의 합은 0이 된다. 따라서 $k \neq r $인 경우에 우변의 총합은 0이 된다.


위 식의 우변에서 $k = r$일 때를 생각해보면 지수함수 내부는 0이 되므로 지수함수는 1이 되어 사라지고 $F_k$만 남게 된다. summation에 의해 단순히 $F_r$ 또는 $F_k$를 $N$번 더하게 되므로 우변은 $NF_k$가 된다.
$$ \sum_{k=\langle N \rangle} f[n]\exp\left(-j\frac{2\pi r}{N}n\right) = NF_k $$
따라서 양변을 $N$으로 나누게 되면 $F_k$는 아래와 같이 구할 수 있다.
$$ F_k = \frac{1}{N} \sum_{k=\langle N \rangle } f[n]\exp\left(-j\frac{2\pi k}{N}n\right) $$