离散余弦变换

来自testwiki
imported>TangZhi2024年10月9日 (三) 10:41的版本 应用:​ 本次編輯內容來自現存的英文維基條目en:Discrete cosine transform;請參考該條目的歷史及格式。)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到导航 跳转到搜索

Template:NoteTA Template:For

2d DCT(type II) 與离散傅里叶变换的比較.

离散余弦变换Template:Lang-en)是与傅里叶变换相关的一种变换,类似于离散傅里叶变换,但是只使用实数。离散余弦变换相当于一个长度大概是它两倍的离散傅里叶变换,这个离散傅里叶变换是对一个实偶函数进行的(因为一个实偶函数的傅里叶变换仍然是一个实偶函数),在有些变形里面需要将输入或者输出的位置移动半个单位(DCT有8种标准类型,其中4种是常见的)。

最常用的一种离散余弦变换的类型是下面给出的第二种类型,通常我们所说的离散余弦变换指的就是这种。它的逆,也就是下面给出的第三种类型,通常相应的被称为「反离散余弦变换」,「逆离散余弦变换」或者「IDCT」。

有两个相关的变换,一个是离散正弦变换,它相当于一个长度大概是它两倍的实奇函数离散傅里叶变换;另一个是改进的离散余弦变换,它相当于对交叠的数据进行离散余弦变换。

应用

离散余弦变换,尤其是它的第二种类型,经常被信号处理图像处理使用,用于对信号图像进行有损数据压缩。这是由于离散余弦变换具有很强的「能量集中」特性:大多数的信号資訊(包括声音和图像)往往集中在离散余弦变换后的低频部分,而且当信号具有接近马尔可夫过程的统计特性时,离散余弦变换的去相关性接近于K-L变换Template:Lang变换——它具有最优的去相关性)的性能。

例如,在图像编码标准JPEG視訊编码标准MJPEGMPEG的各个标准中都使用了离散余弦变换。在这些标准制中都使用了二维的第二种类型离散余弦变换,并将结果进行量化之后进行熵编码。这时对应第二种类型离散余弦变换中的n通常是8,并用该公式对每个8x8块的每行进行变换,然后每列进行变换。得到的是一个8x8的变换系数矩阵。其中(0,0)位置的元素就是直流分量,矩阵中的其他元素根据其位置表示不同频率的交流分量。

一个类似的变换,改进的离散余弦变换被用在高级音频编码VorbisMP3音频压缩当中。

离散余弦变换也经常被用来使用谱方法来解偏微分方程,这时候离散余弦变换的不同的变量对应着数组两端不同的奇/偶边界条件。

常見應用


形式化定义

形式上来看,离散余弦变换是一个线性可逆函数F:RnRn其中R实数集,或者等价的说一个n×n方阵。离散余弦变换有几种变形的形式, 它们都是根据下面的某一个公式把n个实数x0,,xn1变换到另外n个实数f0,,fn1的操作。

DCT-I

fm=12(x0+(1)mxn1)+k=1n2xkcos[πn1mk]

有些人认为应该将x0xn1乘以2,相应的将f0fn1乘以12。这样做的结果是这种DCT-I矩阵变为了正交矩阵(再乘一个系数的话),但是这样就不能直接和一个实偶离散傅里叶变换对应了。

一个n=5的对实数abcde的DCT-I型变换等价于一个8点的对实数abcdedcb(偶对称)的DFT变换,结果再除以2(对应的,DCT-II~DCT-IV相对等价的DFT有一个半个抽样的位移)。需要指出的是,DCT-I不适用于n<2的情况(其它的DCT类型都适用于所有的整数n)。

所以,DCT-I暗示的边界条件是:xk相对于k=0点偶对称,并且相对于k=n1点偶对称; 对fm的情况也类似。

DCT-II

fm=k=0n1xkcos[πnm(k+12)]

DCT-II大概是最常用的一种形式,通常直接被称为DCT。

有些人更进一步的将f0再乘以12(参见下面的DCT-III型的对应修改)。这将使得DCT-II成为正交矩阵(再乘一个系数的话),但是这样就不能直接和一个有半个抽样位移的实偶离散傅里叶变换对应了。

所以,DCT-II暗示的边界条件是:xk相对于k=12点偶对称,并且相对于k=n12点奇对称; 对fm相对于m=0点偶对称,并且相对于m=n点奇对称。

DCT-III

fm=12x0+k=1n1xkcos[πn(m+12)k]

因为这是DCT-II的逆变换(再乘一个系数的话),这种变形通常被简单的称为逆离散余弦变换。

有些人更进一步的将x0再乘以2(参见上面的DCT-II型的对应修改),这将使得DCT-III成为正交矩阵(再乘一个系数的话),但是这样就不能直接和一个结果有半个抽样位移的实偶离散傅里叶变换对应了。

所以,DCT-III暗示的边界条件是:xk相对于k=0点偶对称,并且相对于k=n点奇对称; 对fm相对于m=12点偶对称,并且相对于m=n12点偶对称。

DCT-IV

fm=k=0n1xkcos[πn(m+12)(k+12)]

DCT-IV对应的矩阵是正交矩阵(再乘一个系数的话)。

一种DCT-IV的变形,将不同的变换的数据重叠起来,被称为改进的离散余弦变换

DCT-IV暗示的边界条件是:xk相对于k=12点偶对称,并且相对于k=n12点奇对称;对fm类似。

DCT V~VIII

上面提到的DCT I~IV是和偶数阶的实偶DFT对应的。原则上,还有四种DCT变换(Martucci, 1994)是和奇数阶的实偶DFT对应的,它们在分母中都有一个n+12的系数。但是在实际应用中,这几种变型很少被用到。

最平凡的和奇数阶的实偶DFT对应的DCT是1阶的DCT(1也是奇数),可以说变换-{}-只是乘上一个系数a而已,对应于DCT-V的长度为1的状况。

反变换

DCT-I的反变换是把DCT-I乘以系数2n1。 DCT-IV的反变换是把DCT-IV乘以系数2n。 DCT-II的反变换是把DCT-III乘以系数2n,反之亦然。

离散傅里叶变换类似,变化前面的归一化系数仅仅是常规而已,改变这个系数并不改变变换的性质。例如,有些人喜欢在DCT-II变换的前面乘以2n,这样反变换从形式上就和变换更相似,而不需要另外的归一化系数。

计算

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

以下簡單介紹兩種利用DFT來計算DCT-II的方法

方法一[8]

令輸入信號為x(n),n=0,1,...,N1


並將y(n)x(n)(2N1)/2處對稱表示


y(n)={x(n),if n=0,1,...,N1x(2Nn1),if n=N,N+1,...2N1


此時令W2N 表示 ej2π2N


y(n)之DFT為


Y(m)=Σn=02N1y(n)W2Nnm


Y(m) 做以下化簡


Y(m)=n=0N1y(n)W2Nnm+n=N2N1y(n)W2Nnm=n=0N1y(n)W2Nnm+n=N2N1x(2Nn1)W2Nnm=n=0N1y(n)W2Nnm+n=0N1x(n)W2N(2Nn1)m=n=0N1x(n)[W2Nnm+W2N(n+1)m],m=0,1,...,2N1


此時兩側同乘 12W2Nm/2


可得12W2Nm/2Y(m)=n=0N1x(n)cos[(2n+1)mπ2N],m=0,1,...,N1


此時右式即為欲求之DCT轉換,而左式可藉由2N點數的DFT來計算,使用快速演算法的情況下,運算之時間複雜度為O(NlogN)

方法二 [9]

第二個方法由Narasimha與Peterson在1978年提出,此方法係藉由巧妙的編排y(n)來達成,首先令


y(n)=x(2n) 並且 y(N1n)=x(2n+1),n=0,1,...,N21


此時X(m)可化簡為


X(m)=n=0N/21y(n)cos[(4n+1)mπ2N]+n=0N/21y(Nn1)cos[(4n+3)mπ2N],m=0,1,...,N1


令第二項之n改為 n=N1n,則兩式可合併為


X(m)=n=0N1y(n)cos[(4n+1)mπ2N],m=0,1,...,N1


右側為對y(n)之N點的scaled DFT


因此,X(m)=Re[Z(m)],其中


Z(m)=W4NmY(m)=W4Nmn=0N1y(n)WNnm,m=0,1,...,N1


其中Y(m) 是對y(n)之N點的DFT,並且可以簡單的驗證Z(m)具有如下性質


Z(Nm)=jZ(m)*


而因y(n) 為實數輸入,


因此欲求之X(m)=Re[Z(m)]X(Nm)=Im[Z(m)],m=0,1,...,N2


在使用FFT快速演算法的情況下,運算之時間複雜度同樣為O(NlogN)

但此方法較方法一直接運算2N點數的DFT快上約2倍。

参考

  • K. R. Rao and P. Yip, 离散余弦变换:算法、优点和应用Discrete Cosine Transform: Algorithms, Advantages, Applications) (Academic Press, Boston, 1990).
  • A. V. Oppenheim, R. W. Schafer, and J. R. Buck, 时间离散信号处理 (Discrete-Time Signal Processing), second edition (Prentice-Hall, New Jersey, 1999).
  • S. A. Martucci, 对称卷积和离散正弦余弦变换 (Symmetric convolution and the discrete sine and cosine transforms), IEEE Trans. Sig. Processing SP-42, 1038-1051 (1994).
  • Matteo Frigo and Steven G. Johnson: FFTW, -{R|http://www.fftw.org/}- Template:Wayback. 一个免费的C语言GPL,可以计算DCT-I~IV的1维到多维的任意大小的变换
  • M. Frigo and S. G. Johnson, "FFTW3的设计和实现 Template:Wayback," Proceedings of the IEEE 93 (2), 216–231 (2005).
  • On the Computation of the Discrete Cosine Transform. (1978, June 1). IEEE Journals & Magazine | IEEE Xplore. -{R|https://ieeexplore.ieee.org/document/1094144}- Template:Wayback

外部链接

  1. Template:Cite book
  2. 引用错误:<ref>标签无效;未给name(名称)为Luo的ref(参考)提供文本
  3. 3.0 3.1 3.2 3.3 Template:Cite book
  4. 4.0 4.1 引用错误:<ref>标签无效;未给name(名称)为Stankovic的ref(参考)提供文本
  5. 引用错误:<ref>标签无效;未给name(名称)为Britanak的ref(参考)提供文本
  6. 6.0 6.1 引用错误:<ref>标签无效;未给name(名称)为Hersent的ref(参考)提供文本
  7. 7.0 7.1 引用错误:<ref>标签无效;未给name(名称)为AppleInsider standards 1的ref(参考)提供文本
  8. Rao, R. K., & Yip, P. (1990). Discrete Cosine Transform: Algorithms, Advantages, Applications (1st ed.). Academic Press.
  9. On the Computation of the Discrete Cosine Transform. (1978, June 1). IEEE Journals & Magazine | IEEE Xplore. -{R|https://ieeexplore.ieee.org/document/1094144}- Template:Wayback