离散余弦变换(DCT)

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

离散余弦变换(DCT)及其C++实现:1.定义:离散余弦是一种基于实数的正交变换。一维离散余弦的

定义如下:

式中,F(u)为第u个余弦变换系数,u为广义频率分量,f(x)为时域中N点序列,x=0,1,2,…N-1。

对于二维的离散余弦变换的定义如下:

2.基本算法

二维的DCT可分解为两个一维的DCT,即现对图像信号(二维数据)的行进行一位DCT,然后再对列进行一维DCT。

基本算法描述如下:

1)求对行进行一位DCT的变换矩阵系数coefa

2)求系数矩阵coefa的转置矩阵coefb用来对列进行一维DCT

3)利用系数矩阵coefa和coefb对二维信号data先近行行变换,再进行列变换。

3.快速算法

利用快速傅立叶变换可以得到DCT的快速算法。首先,将f(x)进行延拓:

按照上述定义,f e(x)的离散余弦变换为:

式中,R e{}表示取复数的实部。

由上式知,为f e(x)的2N点离散傅立叶变换。以此,对于快速离散余弦变换,可以把长度为N的序列f(x)的长度延拓为2N的序

列f e(x),然后再对延拓的结果

f e(x)进行离散傅立叶变换,最后取离散傅立叶变换的实部便是离散余弦变换的结果,完成快速的DCT。

4.程序说明

采用C++语言编写,共有三个函数:

主函数void main()完成DCT变换;

子函数void FFT_1D(complex *TD, complex *FD, int r)完成快速傅立叶变换;

子函数void dct(double *f, double *F, int r)完成快速DCT。

参数说明见源程序注释。

相关文档
最新文档