已知离散傅里叶变换(DFT)为:
由于许多要处理的信号都是实信号,在使用DFT时由于傅里叶变换时由于实信号傅立叶变换的共轭对称性导致DFT后在频域中有一半的数据冗余。
离散余弦变换(DCT)是对实信号定义的一种变换,变换后在频域中得到的也是一个实信号,相比DFT而言,DCT可以减少一半以上的计算。DCT还有一个很重要的性质(能量集中特性):大多书自然信号(声音、图像)的能量都集中在离散余弦变换后的低频部分,因而DCT在(声音、图像)数据压缩中得到了广泛的使用。由于DCT是从DFT推导出来的另一种变换,因此许多DFT的属性在DCT中仍然是保留下来的。
推导N点长实序列的DCT,首先来定义一个新的长度为2N的序列:
可看作是将周期为N的序列x[m]做一个周期延拓成一个周期为2N的序列。如图1中第一张图。
再来看图1中第一张图是关于 x = -1/2 对称的,要让他关于x = 0对称需要将其向右平移1/2个单位,得到 x’[m] = x’[m – 1/2] 就是关于 x = 0对称的周期序列了(如图1中第二张图)。
然后求这个2N序列的DFT:
就是DCT-2型离散余弦变换.从上面的过程也可以直接看出, 离散余弦变换相当于一个长度大概是它两倍的离散傅里叶变换.
变换后的x[n]是以2N为周期,偶对称的序列: X[N+n] = X[N+n-2N] = X[n-N] = x[N-n]
定义变换矩阵C[n,m]:
用计算机计算DCT-2 ( 用的是O(n^2)朴素算法,用于验证正交特性以及观察其频域数据):
DCT的结果:
对相同序列FFT的结果:
比较DFT和FFT的结果可以观察出DCT变换只有实部,而DFT变换后有虚部。在这个例子中DCT在频域中只用3个点就可以表示这个信号,而DFT变换后在频域中需要5个点来表示信号。
Form
配套代码实现