DSP - DFT 离散余弦变换
离散余弦变换(DCT for Discrete Cosine Transform)是与傅里叶变换相关的一种变换,它类似于离散傅里叶变换(DFT for Discrete Fourier Transform),但是只使用实数。离散余弦变换相当于一个长度大概是它两倍的离散傅里叶变换,这个离散傅里叶变换是对一个实偶函数进行的(因为一个实偶函数的傅里叶变换仍然是一个实偶函数),在有些变形里面需要将输入或者输出的位置移动半个单位(DCT有8种标准类型,其中4种是常见的)。
DCT(离散余弦变换)是 N 输入序列 x(n) ,0≤n≤N-1 ,作为线性变换或复指数的组合。因此,即使 x(n) 是实数,DFT 系数通常也是复数。
假设,我们试图找出一个具有 N×N 结构的正交变换,将实数序列 x(n) 表示为余弦序列的线性组合。我们已经知道 −
$X(K) = \displaystyle\sum\limits_{n = 0}^{N-1}x(n)cos\frac{2\Pi kn}{N}0\leq k \leq N-1$
并且 $x(n) = \frac{1}{N}\sum_{k = 0}^{N-1}x(k)cos\frac{2\Pi kn}{N}0\leq k \leq N-1$
如果 N 点序列 x(n) 是实数且偶数,则这是可能的。因此,$x(n) = x(N-n),0\leq n \leq (N-1)$。得到的 DFT 本身是实数且偶数。这些事情清楚地表明,我们可以通过对序列的"偶数扩展"取 2N 点 DFT,为任何 N 点实数序列设计离散余弦变换。
DCT 主要用于图像和语音处理。它还用于图像和语音信号的压缩。
$DFT[s(n)] = S(k) = \sum_{n = 0}^{2N-1}s(n)W_{2N}^{nk},\quad where\quad 0\leq k \leq 2N-1$
$S(k) = \displaystyle\sum\limits_{n = 0}^{N-1}x(n)W_{2N}^{nk}+\displaystyle\sum\limits_{n = N}^{2N-1}x(2N-n-1)W_{2N}^{nk};\quad where\quad 0\leq k\leq 2N-1$
$\Rightarrow S(k) = W_{2N}^{-k/2}+\sum_{n = 0}^{N-1}x(n) [W_{2N}^{nk}W_{2N}^{k/2}+W_{2N}^{-nk}W_{2N}^{-k/2}];\quad where\quad 0\leq k\leq 2N-1$
$\Rightarrow S(k) = W_{2N}^{\frac{k}{2}}\sum_{n = 0}^{N-1}x(n)\cos [\frac{\pi}{N}(n+\frac{1}{2})k];\quad where\quad 0\leq k\leq 2N-1$
DCT 定义为,
$V(k) = 2\sum_{n = 0}^{N-1}x(n)\cos [\frac{\pi}{2}(n+\frac{1}{2})k]\quad 其中\quad 0\leq k\leq N-1$
$\Rightarrow V(k) = W_{2N}^{\frac{k}{2}}S(k)\quad 或\quad S(k) = W_{2N}^{\frac{k}{2}}V(k),\quad 其中\quad 0\leq k\leq N-1$
$\Rightarrow V(k) = 2R[W_{2N}^{\frac{k}{2}}\sum_{n = 0}^{N-1}x(n)W_{2N}^{nk}],\quad 其中\quad 0\leq k\leq N-1$