离散傅立叶变换DFT
一维DFT
在文献1的第四章中,式(4.2.5)和式(4.2.6)分别给出了(单变量的)一维离散傅立叶变换和反变换:
F(u)=1M∑x=0M−1f(x)e−j2πux/Mu=0,1,2,…,M−1
f(x)=∑u=0M−1F(u)ej2πux/Mx=0,1,2,…,M−1
有时候,前边的系数 1M 会发生变化,但其乘积仍然为 1M ,常见的情况如下:
F(u)=1M−−√∑x=0M−1f(x)e−j2πux/Mu=0,1,2,…,M−1
f(x)=∑u=0M−11M−−√F(u)ej2πux/Mx=0,1,2,…,M−1
在此,我们可以以第一组变换对为主来记忆
DFT。
二维DFT
同时,文献2中接着给出了式(4.2.16)和式(4.2.17)所示的二维离散傅立叶变换和反变换:
F(u,v)=1MN∑x=0M−1∑y=0N−1f(x,y)e−j2π(ux/M+vy/N)
其中u=0,1,2,…,M−1;v=0,1,2…,N−1 。
f(x,y)=∑u=0M−1∑v=0N−1F(u,v)ej2π(ux/M+vy/N)
其中x=0,1,2,…,M−1;y=0,1,2…,N−1 。对应地,前边的系数
1MN 也可以发生变化,但其乘积要保持为
1MN 。
离散余弦变换DCT
根据Wiki百科3以及文献4可知,离散余弦变换有4~5种定义,我们仅给出最常用的DCT-II的定义。
一维DCT
在文献5的第九章中,式(9.2.1)和式(9.2.2)分别给出了一维离散余弦变换和反变换,具体如下所示:
C(u)=a(u)∑x=0N−1f(x)cos(2x+1)uπ2Nu=0,1,2,…,N−1
f(x)=∑u=0N−1a(u)C(u)cos(2x+1)uπ2Nx=0,1,2,…,N−1
其中,系数
a(u) 的表达式为:
a(u)=⎧⎩⎨⎪⎪1N−−√,2N−−√,u=0u=1,2,…,N-1
然而在
MATLAB等软件中矩阵下标是从1(而非0)开始,因此在
MATLAB中该公式又被表述为:
y(k)=w(k)∑n=0N−1x(n)cosπ(2n−1)(k−1)2Nk=1,2,3,…,N
x(n)=∑k=0N−1w(k)y(k)cosπ(2n−1)(k−1)2Nn=1,2,3,…,N
其中,系数
w(k) 的表达式为:
w(k)=⎧⎩⎨⎪⎪1N−−√,2N−−√,k=1k=2,3,…,N
二维DCT
在文献6的第九章中,式(9.2.4)和式(9.2.5)又分别给出了二维离散余弦变换和反变换,具体如下所示:
C(u,v)=a(u)a(v)∑x=0M−1∑y=0N−1f(x,y)cos(2x+1)uπ2Mcos(2y+1)uπ2N
其中u=0,1,2,…,M−1;v=0,1,2,…,N−1 。
f(x,y)=∑u=0M−1∑v=0N−1a(u)a(v)C(u,v)cos(2x+1)uπ2Mcos(2y+1)uπ2N
其中x=0,1,2,…,M−1;y=0,1,2,…,N−1 。
上式和原文相比存在略微的不同(我们把其中一个
N替换成了
M),在该文献中并未给出系数的表达式,不过我们可以通过下边的一组变换对得到其系数表达式。对应地,在
MATLAB中将二维
DCT表述为下式:
Bpq=αpαq∑m=0M−1∑n=0N−1Amncosπ(2m+1)p2Mcosπ(2n+1)p2N其中0≤p≤M−1;0≤q≤N−1
Amn=∑p=0M−1∑q=0N−1αpαqBpqosπ(2m+1)p2Mcosπ(2n+1)p2N其中0≤m≤M−1;0≤n≤N−1
其中,系数
αp 与
αq 的表达式分别为:
αp=⎧⎩⎨⎪⎪1M−−√,2M−−√,p=0p=1,2,…,M-1
和
αq=⎧⎩⎨⎪⎪1N−−√,2N−−√,k=0k=1,2,…,N-1
参考文献