前篇讲解了傅里叶变换和采样定理,这一节我们来说说离散傅里叶变换,DFT这个东西我前后看了好几遍,不过看一次忘一次,都是因为理解的不到位。不过这一次,我又有了点新理解。
采样定理的应用非常广泛,比如ccd成像就是采样定理的一个很好的应用,我们通过ccd的每个像素对一副图像进行采样。
所以现实生活中我们要处理的数据很多都是通过采样产生的离散数据,如果我们想对离散数据进行频域的处理,那么我们就需要离散傅里叶变换。
离散数据是通过采样产生的,而采样通常采用冲激函数来进行:
f(t)~=f(t)sΔT(t)=∑n=−∞∞f(t)δ(t−nΔT)(1)f(t)~=f(t)sΔT(t)=∑n=−∞∞f(t)δ(t−nΔT)(1)
上述函数就是我们所采样得到的离散数据。
然后对其进行傅里叶变换:
F(u)~=F{f(t)~}=F{f(t)sΔT(t)}=F(u)⋆S(u)(2)F(u)~=F{f(t)~}=F{f(t)sΔT(t)}=F(u)⋆S(u)(2)
F(u)~=1ΔT∑n=−∞∞F(u−nΔT)(3)F(u)~=1ΔT∑n=−∞∞F(u−nΔT)(3)
以上公式表明我们对f(x)以ΔTΔT的周期进行采样,其傅里叶变化为f(x)的傅里叶变换以1/ΔT1/ΔT为周期进行延展所得到的函数,这与我们采样定理描述的一致。
以上是利用卷积定理得到的结果,接下来我们直接利用傅里叶公式对其进行计算得到:
F~(u)=∫∞−∞∑n=−∞∞f(t)δ(t−nΔT)exp(−j2πut)dt=∑n=−∞∞f(n)exp(−j2πunΔT)(4)F~(u)=∫−∞∞∑n=−∞∞f(t)δ(t−nΔT)exp(−j2πut)dt=∑n=−∞∞f(n)exp(−j2πunΔT)(4)
以上就是对离散数据的傅里叶变换,我们知道其是F(u)延拓产生的函数,而我们真正想要的只是一个周期的函数,因为这才是f(x)真正的频域函数。
这里我们选择的一段周期为u=0u=0到u=1ΔTu=1ΔT,然后我们对这段函数进行采样将其切分为M段,于是有
u=mMΔTm=1,2,3,4,5,6...,M−1(5)u=mMΔTm=1,2,3,4,5,6...,M−1(5)
将(5)带入(4)即可得到傅里叶离散变换如下:
Fm=∑n=0M−1fnexp(−j2πmn/M)(6)Fm=∑n=0M−1fnexp(−j2πmn/M)(6)
这里的n本来是从负无穷变到正无穷的,但是我们的fnfn一般都是从坐标轴原点开始才有值,其余地方都是0(比如一副图像我们定义其左上角坐标为其起始坐标(0,0))所以n从0开始,而我们一般将f(x)分成M份,所以我们的数据最多有M-1份,所以fn+1fn+1及以后都为0。而我们之所以将一个周期分为M分是因为我们的f(x)是被分成了M份。
所以傅里叶离散变换只不过是对离散数据进行傅里叶连续变换后对其中一个周期进行采样的结果而已。
不过这里要注意我们只是规定我们的F(u)要取0,1,2,…,M-1但并不是F(u)只能取这些数值,F(u)取的其他值是其他周期的值,这时我们要注意的一个事情。