前置知识:离散傅里叶变换
傅里叶变换在上文中更多的是 OI 中的理解以及应用。但是傅里叶变换奥秘还很多。
回顾 $\omega_n$ 在傅里叶变换中的定义:$e^{i \frac {2\pi} n}$,存在 $\omega_n^n = 1$ 的性质。意味着离散傅里叶变换实际上是周期性的,这也变相的解释了为什么存在循环卷积的性质。
傅里叶级数
我们回顾什么是傅里叶级数。傅里叶断言,对于任何周期信号 $x(t)$ 都可以表示为成谐波关系的虚指数信号的线性组合,即:
$$x(t) = \sum_{k = - \infty}^{\infty} a_k e^{jk \omega_0 t} $$
虽然后来证明当 $x(t)$ 满足狄里赫利条件时才成立……
周期信号 $x(t)$ 满足存在一个正值 $T$ 满足:
$$\forall t, x(t) = x(t + T) $$
最小的 $T$ 称为基波周期,$w_0 = \frac {2\pi} T$ 称为基波频率。
如果我们知道了一个 $x(t)$ 该如何求 $a_k$ 呢?
利用积分:
$$\int_0^T x(t) e^{-jn \omega_0 t} dt = \int_0^T \sum_{k = - \infty}^{\infty} a_k e^{jk\omega_0 t} e^{-jn \omega_0 t} dt $$
将后面变形:
$$\int_0^T \sum_{k = - \infty}^{\infty} a_k e^{jk\omega_0 t} e^{-jn \omega_0 t} dt = \sum_k a_k \left[ \int_0^T e^{j(k - n)\omega_0 t} dt \right] $$
注意到:
$$\int_0^T e^{j(k - n)\omega_0 t} dt = \int_0^T \cos[(k - n)\omega_0 t] dt + i \int_0^T \sin[(k - n) \omega_0 t] dt $$
中,存在:
$$\int_0^T \sin[(k - n) \omega_0 t] dt = \begin{cases} T & k = n \\ 0 & k \ne n \end{cases} $$
所以:
$$a_k = \frac 1 T \int_0^T x(t) e^{-jk\omega_0 t} dt $$
DCT 变换与 DFT 的联系
DCT 实际上就是 DFT 的一种特殊形式。
在傅立叶级数的推导中:
$$\int_0^T \sin[(k - n) \omega_0 t] dt = \begin{cases} T & k = n \\ 0 & k \ne n \end{cases} $$
是非常有趣的。
这反映出了如果对一个周期为 $T$,并且周期内是个奇函数的函数 $\int_0^T$,结果一定 $= 0$,反之不为 $0$。
那么我们考虑将一个一般的周期信号变成一个周期内的偶函数,这样和 $\sin$ 这个奇函数相乘后还是奇函数,积分出来也就没了,从而使得 DFT 的虚部没了。
上面所说的连续的情况,但是实际上离散的情况也是一样。
考察 DFT 的式子:
$$b_k = \sum_{i = 0}^{n - 1} \omega_n^{ik}a_i $$
令 $m = 2n$,使得 $a_k = a_{m - k - 1}$,那么其 DFT:
$$b_k = \sum_{i = 0}^{m - 1} \omega_m^{ik} a_i = \sum_{i = 0}^{n - 1} a_i \left(\omega^{ik} + \omega^{(2n-k-1)k}\right) $$
发现并不优美,考虑将幂平移 $\frac k 2$:
$$\begin{aligned} b_k &= \sum_{i = 0}^{m - 1} a_j \omega^{kj + \frac k 2} \\ &= \sum_{i = 0}^{n - 1} a_j \left[ \left(\cos \frac {\pi k (n + \frac 12)} n + \cos \frac {- \pi k (n + \frac 12)} n \right) + i\left(\sin \frac {\pi k (n + \frac 12)} n + \sin \frac {- \pi k (n + \frac 12)} n \right) \right] \\ &= 2 \sum_{i = 0}^{n - 1} a_j \cos \frac {\pi k(n + \frac 12)} n \end{aligned} $$
中间是利用 $e^{ix} = \cos x + i \sin x$ 展开推导而来。
发现虚部直接没了,这符合前面得出的结论。
然后我们成功的学会了 DCT。
IDCT
由于 DCT 本质上就是 DFT,所以 IDCT 本质上就是 IDFT。所以理解是简单的了。