离散傅里叶变换公式推导
先抛变换公式:
F
m
=
∑
n
=
0
N
−
1
f
n
e
−
2
π
i
m
n
/
N
↔
f
n
=
1
N
∑
m
=
0
N
−
1
F
m
e
2
π
i
m
n
/
N
F_m=\sum_{n=0}^{N-1}f_ne^{-2\pi imn/N}\leftrightarrow f_n=\frac{1}{N}\sum_{m=0}^{N-1}F_me^{2\pi imn/N}
Fm=n=0∑N−1fne−2πimn/N↔fn=N1m=0∑N−1Fme2πimn/N
式中的N是数据点个数
讲道理一开始完全看不懂公式这么来的,一顿百度后我学到了很多,但就是没学到怎么推公式。好吧只能自己推。
先来看一下DFT的物理意义:
(图我网上随便下的)
离散傅里叶变换是把周期性离散信号变换到频域上,大家知道,周期信号变到频域上是离散的。离散就是在个别点
{
x
n
}
\{x_n\}
{xn}有值。我是学物理的,物理里面离散的可以这么表示:
f
(
x
)
=
∑
n
=
0
N
−
1
f
n
δ
(
x
−
x
n
)
f(x)=\sum_{n=0}^{N-1}f_n\delta(x-x_n)
f(x)=n=0∑N−1fnδ(x−xn)
δ
(
x
)
\delta(x)
δ(x)是个在
x
=
0
x=0
x=0处无穷大,其余位置为0且全空间积分为1的函数
∫
−
∞
∞
δ
(
x
)
d
x
=
1
\int_{-\infty}^{\infty}\delta(x)dx=1
∫−∞∞δ(x)dx=1
周期性信号变到频域上,那不就是傅里叶级数吗。自然有公式
F
m
=
∫
−
T
T
∑
n
=
0
N
−
1
f
n
δ
(
x
−
x
n
)
e
−
i
x
k
m
d
x
=
∑
n
=
0
N
−
1
∫
f
n
δ
(
x
−
x
n
)
e
−
i
x
k
m
d
x
=
∑
n
=
0
N
−
1
f
n
e
−
i
x
n
k
m
\begin{aligned} F_m &= \int_{-T}^{T}\sum_{n=0}^{N-1}f_n\delta(x-x_n)e^{-ixk_m}dx \\&=\sum_{n=0}^{N-1}\int f_n\delta(x-x_n)e^{-ixk_m}dx \\&=\sum_{n=0}^{N-1}f_ne^{-ix_nk_m} \end{aligned}
Fm=∫−TTn=0∑N−1fnδ(x−xn)e−ixkmdx=n=0∑N−1∫fnδ(x−xn)e−ixkmdx=n=0∑N−1fne−ixnkm
接下来我们假设
d
x
,
d
k
dx,dk
dx,dk分别是
{
x
n
}
\{x_n\}
{xn},
{
k
n
}
\{k_n\}
{kn}的间距,那么:
x
n
=
n
d
x
,
k
m
=
m
d
k
x_n=ndx,\qquad k_m = mdk
xn=ndx,km=mdk
代入上式:
F
m
=
∑
n
=
0
N
−
1
f
n
e
−
i
x
n
k
m
=
∑
n
=
0
N
−
1
f
n
e
−
i
m
n
d
x
d
k
\begin{aligned} F_m &=\sum_{n=0}^{N-1}f_ne^{-ix_nk_m} \\&=\sum_{n=0}^{N-1}f_ne^{-imndxdk} \end{aligned}
Fm=n=0∑N−1fne−ixnkm=n=0∑N−1fne−imndxdk
是不是和最上面的式子很接近了?还差最后一步,确定
d
x
d
k
dxdk
dxdk的值。
下面我懒得写了,只说一下做法吧
- 先写出
F
m
F_m
Fm到
f
n
f_n
fn的逆变换,
f n = c ∑ n = 0 N − 1 F m e i m n d x d k f_n = c\sum_{n=0}^{N-1}F_me^{imndxdk} fn=cn=0∑N−1Fmeimndxdk
c c c是个系数,之后应该能计算出是 1 / N 1/N 1/N - 把上面的 F m F_m Fm表达式带进去,就能得到用 f n ′ f_{n'} fn′求和表达的 f n f_n fn,这要求 d x d k dxdk dxdk满足一定关系,其实就是满足 d x d k = 2 π N dxdk = \frac{2\pi}{N} dxdk=N2π
- 最后把公式里的 d x d k dxdk dxdk替换就完事了
这个公式推导倒是不难,主要问题是理解不要出现偏差。所谓离散傅里叶变换是把周期离散信号变换到周期离散频谱,这是真的离散信号。一开始我以为是连续信号在某些给定点采样得到的值呢(没有学过信号相关的内容,在计算物理中遇到了这个离散傅里叶变换)。