Discrete Cosine Transform

离散余弦变换

因为实信号傅立叶变换的共轭对称性,致使DFT后在频域中有一半的数据冗余。离散余弦变换(DCT)在处理实信号时比离散傅立叶(DFT)变换更具优点。在处理声音信号这类实信号时,DFT获得的结果是复功率谱,其结果中的一半数据是没利用价值的。相比之下,DCT获得的结果是实谱,从而节省了没必要要的运算。html

一个序列的DFT就是将其周期拓展后取其DFS系数的一个周期。若是序列的开始及结尾处的幅值差别较大,那么这个周期拓展的序列便会有较多的高频份量。node

而序列的DCT(实序列)至关于一个长度是它两倍的实偶序列的DFT(普通序列的DFT=实序列+虚序列),在储存一样个数的数据的状况下,DCT的能量更集中在低频。算法

DCT还有一个很重要的性质(能量集中特性):大多书天然信号(声音、图像)的能量都集中在离散余弦变换后的低频部分,于是DCT在(声音、图像)数据压缩中获得了普遍的使用。因为DCT是从DFT推导出来的另外一种变换,所以许多DFT的属性在DCT中仍然是保留下来的。(归一化以后,会在高频产生不少0系数,说明DCT比FFT变换具备更好的能量汇集度。)函数

DCT在图像处理中优于DFT的性质是更高的能量汇集度,根本缘由是二维DCT和二维DFT变换空间的基底不一样。二维DFT的变换空间基底(谐平面波份量)是由sin和cos平面波共同构成的。而二维DCT的变换空间基底(谐平面波份量)是由cos单独构成的。性能

图像通过二维DFT变换后,大部分能量集中在频谱空间的四个角落(低频份量);而图像通过二维DCT变换后,大部分能量集中在频谱空间的左上角(低频份量)。此所谓DCT的能量集中度优于DFT者也。编码

DCT的几条特色,即:实数变换、肯定的变换矩阵、准最佳变换性能外,二维DCT仍是一种可分离的变换,能够用两次一维变换获得二维变换结果。spa

推导

推导N点长实序列的DCT,首先来定义一个新的长度为2N的序列: 3d

DCT可看做是将周期为N的序列x[m]作一个周期延拓成一个周期为2N的序列。以下图orm

再来看第一张图是关于 x = -1/2 对称的,要让其关于x = 0对称须要将其向右平移1/2个单位,获得  x’[m] = x’[m – 1/2] 就是关于 x = 0对称的周期序列了(如第二张图)。视频

 上述 2N 点的偶对称序列的 DFT计算过程为:

 

其中是偶对称的,分别是偶数和奇数。将替换为,能够获得DCT为:

 

系数定义为c[n, m] ,则

有DCT系数矩阵C∈RN×N,上述为C的第n行第m列的元素。又由于在n=2N的周期内,X[n]=X[-n]是偶对称的。进一步有:

则n从N,...,2N-1的期间,X[n]是多余的,can be dropped。则n的范围变为0,...,N-1。除了第一个n=0,C的全部行向量都是正交归一化的:

为了使得DCT是正交变换,定义系数:

其中c[n, m]被a[n]修正。余弦变换矩阵为:

      其中  是DCT变换矩阵C的第i行。

 

上述行向量都是正交的:,则变换矩阵C也是正交的:,且

 

则DCT变换能够表示为矩阵形式:,两边左乘C获得:

逆DCT有:,也能够表示为:

参考:http://fourier.eng.hmc.edu/e161/lectures/dct/node1.html

去相关性

在图像处理中,一般来讲,正交变换具备去相关性。其中最理想的是KLT,DCT是KLT最大程度上的近似,在视频图像处理中被普遍应用。
从数学的角度上来看,去相关性就是把原取样点的自相关矩阵经过DCT变换,变成一个对角矩阵,并且对角线上的值是取样点自相关矩阵的特征值。这样一来,去相关后的矩阵保留了原矩阵的重要信息(特征值),而过滤到了一些不相关的量。这对后续的处理(好比量化、编码)都很是有意义,它使得矩阵变“瘦”,而关键信息不变,这样一来算是对原关键信息的一种加强,提升了后续的图像还原质量。

并且当信号具备接近马尔科夫过程(Markov processes)的统计特性时,离散余弦变换的去相关性接近于K-L变换(Karhunen-Loève 变换--它具备最优的去相关性)的性能。

经过研究发现,DCT除了具备通常的正交变换性质外,其变换阵的基向量很近似于Toeplitz矩阵的特征向量,后者体现了人类的语言、图像信号的相关特性。所以,在对语音、图像信号变换的肯定的变换矩阵正交变换中,DCT变换被认为是一种准最佳变换。在近年颁布的一系列视频压缩编码的国际标准建议中,都把 DCT 做为其中的一个基本处理模块。

计算复杂度

尽管直接使用公式进行变换须要进行O(n2)次操做,可是和快速傅里叶变换相似,有复杂度为O(nlog(n))的快速算法,这就是经常被称作蝶形变换的一种分解算法。另一种方法是经过快速傅里叶变换来计算DCT,这时候须要O(n)的预操做和后操做。

二维DCT

离散余弦变换(DCT)公式:

离散余弦变化(IDCT)公式:

总结

与 DFT 相比,DCT 有两个主要优势:

  • 它是一种比 DFT 具备更好的计算效率的实变换,DFT的定义是一个复变换。
  • 它不引入间断,同时在时域信号中施加周期性。在 DFT 中,当时间信号被截断并假定为周期性时,在时域中引入了不连续性,并引入了相应的频域操做。可是,当截断时域信号时,即便假设对称性,也不会在 DCT 中引入不连续性和相关操做。

 

扩展

 离散时间傅里叶变换(DTFT,Discrete Time Fourier Transform)使咱们可以在频域(数字频域)分析离散时间信号的频谱和离散系统的频响特性。但还存在两个实际问题。
1.数字频率是一个模拟量,为了便于从此用数字的方法进行分析和处理,仅仅在时域将时间变量t离散化还不够,还必须在频域将数字频率离散化。
2.实际的序列大多为无限长的,为了分析和处理的方便,必须把无限长序列截断或分段,化做有限长序列来处理。

FT, LT, ZT

傅立叶变换的FT物理意义是将一个在时间域当中的信号所包含的全部频率份量(主要指其各频率份量的幅度和相位)用一个以角频率为自变量的函数表示出来,称其频谱。傅里叶分析包含傅里叶级数与傅里叶变换。傅里叶级数用于对周期信号转换,傅里叶变换用于对非周期信号转换。

                    

 

FT是傅立叶变换,它主要用于分析连续非周期信号,因为信号是非周期的,它必包含了各类频率的信号,因此具备时域连续非周期对应频域连续非周期的特色。

可是对于不收敛信号,傅里叶变换无能为力,只能借助拉普拉斯变换。(主要用于计算微分方程)

而z变换则能够算做离散的拉普拉斯变换。(主要用于计算差分方程)

从复平面来讲,傅里叶分析直注意虚数部分,拉普拉斯变换则关注所有复平面,而z变换则是将拉普拉斯的复平面投影到z平面,将虚轴变为一个圆环。

fourier变换是将连续的时间域信号转变到频率域;它能够说是laplace变换的特例,laplace变换是fourier变换的推广,存在条件比fourier变换要宽,是将连续的时间域信号变换到复频率域(整个复平面,而fourier变换此时可当作仅在jΩ轴);z变换则是连续信号通过理想采样以后的离散信号的laplace变换,再令z=e^sT时的变换结果(T为采样周期),所对应的域为数字复频率域,此时数字频率ω=ΩT。 ——参考郑君里的《信号与系统》。

离散傅里叶变换

DFT公式:

                          

              

 

 

拉普拉斯变换

拉普拉斯变换是工程数学中经常使用的一种积分变换,又名拉氏变换。拉氏变换是一个线性变换,可将一个有参数实数t(t≥ 0)的函数转换为一个参数为复数s的函数。

拉普拉斯变换解决了不知足绝对可积条件的连续信号,变换到频率域的问题,同时也对“频率”的定义进行了扩充。

                               

因此拉普拉斯变换与连续时间傅里叶变换的关系是:
拉普拉斯变换将频率从实数推广为复数,于是傅里叶变换变成了拉普拉斯变换的一个特例。

当s为纯虚数时,x(t)的拉普拉斯变换,即为x(t)的傅里叶变换(当s=jw时,拉普拉斯变换便等于傅立叶变换)。

你们都承认傅立叶变换的本质是一个信号能够表示成正弦信号的叠加,即没法进行傅立叶变换。在拉普拉斯变换的收敛域内有无数条纵轴,在每一条纵轴上均可以写成一个不等幅正弦信号的叠加。

从这个角度来看,傅立叶变换只不过是s=0纵轴上,信号分解成等幅(特别强调这个等幅概念)正弦信号的叠加

拉普拉斯变换的本质就是矩阵对角化,由于复指数信号是线性系统的特征向量。详情可看《神奇的矩阵第二季》爱上积分变换部分。

z变换

Z变换解决了不知足绝对可和条件的离散信号,变换到频率域的问题,同时也一样对“频率”的定义进行了扩充。

因此Z变换与离散时间傅里叶变换(DTFT)的关系是:

  • Z变换将频率从实数推广为复数,于是DTFT变成了Z变换的一个特例。
  • 当z的模为1时,x[n]的Z变换即为x[n]的DTFT。

                      

                               

FFT

FFT是离散傅立叶变换的快速算法,能够将一个信号变换到频域。

假设采样频率为Fs,信号频率F,采样点数为N。那么FFT以后结果就是一个为N点的复数。每个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。具体跟原始信号的幅度有什么关系呢?假设原始信号的峰值为A,那么FFT的结果的每一个点(除了第一个点直流份量以外)的模值就是A的N/2倍。 而第一个点就是直流份量,它的模值就是直流份量的N倍。而每一个点的相位呢,就是在该频率下的信号的相位。第一个点表示直流份量(即0Hz),而最后一个点 N的再下一个点(实际上这个点是不存在的,这里是假设的第N+1个点,能够看作是将第一个点分作两半分,另外一半移到最后)则表示采样频率Fs,这中间被 N-1个点平均分红N等份,每一个点的频率依次增长。

Fn所能分辨到频率为 Fs/N,若是采样频率Fs为1024Hz,采样点数为1024点,则能够分辨到1Hz。1024Hz的采样率采样1024点,恰好是1秒,也就是说,采样1秒时间的信号并作FFT,则结果能够分析到1Hz,若是采样2秒时间的信号并作FFT,则结果能够分析到0.5Hz。若是要提升频率分辨力,则必须增长采样点数,也即采样时间。频率分辨率和采样时间是倒数关系。

假设采样频率为Fs,采样点数为N,作FFT以后,某一点n(n从1开始)表示的频率为:Fn=(n-1)*Fs/N;该点的模值除以N/2就是对应该频率下的信号的幅度(对于直流信号是除以N);该点的相位便是对应该频率下的信号的相位。相位的计算可用函数atan2(b,a)计算。atan2(b,a)是求坐标为(a,b)点的角度值,范围从-pi到pi。要精确到xHz,则须要采样长度为1/x秒的信号,并作FFT。要提升频率分辨率,就须要增长采样点数,这在一些实际的应用中是不现实的,须要在较短的时间内完成分析。解决这个问题的方法有频率细分法,比较简单的方法是采样比较短期的信号,而后在后面补充必定数量的0,使其长度达到须要的点数,再作FFT,这在必定程度上可以提升频率分辨力。

相关文章
相关标签/搜索