mirror of
https://github.com/heqin-zhu/algorithm.git
synced 2024-03-22 13:30:46 +08:00
Replace mathjax formula with codecogs
This commit is contained in:
parent
fbd246cf27
commit
e20afa6485
192
docs/dft.md
192
docs/dft.md
|
@ -53,137 +53,84 @@ description:
|
||||||
### 连续
|
### 连续
|
||||||
积分形式
|
积分形式
|
||||||
如果一个函数的绝对值的积分存在,即
|
如果一个函数的绝对值的积分存在,即
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;\int_{-\infty}&space;^\infty&space;|h(t)|dt<\infty&space;)
|
||||||
\int_{-\infty} ^\infty |h(t)|dt<\infty
|
|
||||||
$$
|
|
||||||
并且函数是连续的或者只有有限个不连续点,则对于 x 的任何值, 函数的傅里叶变换存在
|
并且函数是连续的或者只有有限个不连续点,则对于 x 的任何值, 函数的傅里叶变换存在
|
||||||
- 一维傅里叶变换
|
- 一维傅里叶变换
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;H(f)=\int_{-\infty}&space;^\infty&space;h(t)e^{-j2\pi&space;ft}dt&space;)
|
||||||
H(f)=\int_{-\infty} ^\infty h(t)e^{-j2\pi ft}dt
|
|
||||||
$$
|
|
||||||
- 一维傅里叶逆变换
|
- 一维傅里叶逆变换
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;H(f)=\int_{-\infty}&space;^\infty&space;h(t)e^{j2\pi&space;ft}dt&space;)
|
||||||
H(f)=\int_{-\infty} ^\infty h(t)e^{j2\pi ft}dt
|
|
||||||
$$
|
|
||||||
同理多重积分
|
同理多重积分
|
||||||
### 离散
|
### 离散
|
||||||
实际应用中,多用离散傅里叶变换 DFT.
|
实际应用中,多用离散傅里叶变换 DFT.
|
||||||
- 一维傅里叶变换
|
- 一维傅里叶变换
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;F(u)=\sum_{x=0}&space;^{N-1}&space;f(x)e^{\frac{-2\pi&space;j}{N}&space;ux}&space;)
|
||||||
F(u)=\sum_{x=0} ^{N-1} f(x)e^{\frac{-2\pi j}{N} ux}
|
|
||||||
$$
|
|
||||||
- 一维傅里叶逆变换
|
- 一维傅里叶逆变换
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;f(x)=\frac{1}{N}\sum_{u=0}&space;^{N-1}&space;F(u)e^{\frac{2\pi&space;j}{N}&space;ux}&space;)
|
||||||
f(x)=\frac{1}{N}\sum_{u=0} ^{N-1} F(u)e^{\frac{2\pi j}{N} ux}
|
需要注意的是, 逆变换乘以 ![](https://latex.codecogs.com/gif.latex?\frac{1}{N}) 是为了**归一化**,这个系数可以随意改变, 即可以正变换乘以 ![](https://latex.codecogs.com/gif.latex?\frac{1}{N}), 逆变换就不乘,或者两者都乘以![](https://latex.codecogs.com/gif.latex?\frac{1}{\sqrt{N}})等系数。
|
||||||
$$
|
|
||||||
需要注意的是, 逆变换乘以 $\frac{1}{N}$ 是为了**归一化**,这个系数可以随意改变, 即可以正变换乘以 $\frac{1}{N}$, 逆变换就不乘,或者两者都乘以$\frac{1}{\sqrt{N}}$等系数。
|
|
||||||
- 二维傅里叶变换
|
- 二维傅里叶变换
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;F(u,v)=\frac{1}{N}\sum_{x=0}^{N-1}\sum_{y=0}&space;^{N-1}&space;f(x,y)e^{\frac{-2\pi&space;j}{N}&space;(ux+vy)}&space;)
|
||||||
F(u,v)=\frac{1}{N}\sum_{x=0}^{N-1}\sum_{y=0} ^{N-1} f(x,y)e^{\frac{-2\pi j}{N} (ux+vy)}
|
|
||||||
$$
|
|
||||||
- 二维傅里叶逆变换
|
- 二维傅里叶逆变换
|
||||||
|
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;f(x,y)=\frac{1}{N}\sum_{u=0}^{N-1}\sum_{v=0}&space;^{N-1}&space;F(u,v)e^{\frac{2\pi&space;j}{N}&space;(ux+vy)}&space;)
|
||||||
f(x,y)=\frac{1}{N}\sum_{u=0}^{N-1}\sum_{v=0} ^{N-1} F(u,v)e^{\frac{2\pi j}{N} (ux+vy)}
|
|
||||||
$$
|
|
||||||
|
|
||||||
幅度
|
幅度
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;|F(u,v)|&space;=&space;\sqrt{real(F)^2+imag(F)^2}&space;)
|
||||||
|F(u,v)| = \sqrt{real(F)^2+imag(F)^2}
|
|
||||||
$$
|
|
||||||
相位
|
相位
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;arctan{\frac{imag(F)}{real(F)}}&space;)
|
||||||
arctan{\frac{imag(F)}{real(F)}}
|
对于图像的幅度谱显示,由于 |F(u,v)| 变换范围太大,一般显示 ![](https://latex.codecogs.com/gif.latex?D=&space;log(|F(u,v)+1))
|
||||||
$$
|
|
||||||
对于图像的幅度谱显示,由于 |F(u,v)| 变换范围太大,一般显示 $D= log(|F(u,v)+1)$
|
|
||||||
|
|
||||||
用 `<=>` 表示傅里叶变换对
|
用 `<=>` 表示傅里叶变换对
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;f(x)<=>F(u)\\&space;f(x,y)<=>F(u,v)&space;)
|
||||||
f(x)<=>F(u)\\
|
|
||||||
f(x,y)<=>F(u,v)
|
|
||||||
$$
|
|
||||||
|
|
||||||
f,g,h 对应的傅里叶变换 F,G,H
|
f,g,h 对应的傅里叶变换 F,G,H
|
||||||
|
|
||||||
$F^*$ 表示 $F$ 的共轭
|
![](https://latex.codecogs.com/gif.latex?F^*) 表示 ![](https://latex.codecogs.com/gif.latex?F) 的共轭
|
||||||
## 性质
|
## 性质
|
||||||
### 分离性
|
### 分离性
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;\begin{aligned}&space;&F(x,v)=\sum_{y=0}&space;^{N-1}&space;f(x,y)e^{\frac{-2\pi&space;j}{N}&space;vy}\\&space;&F(u,v)=\frac{1}{N}\sum_{x=0}^{N-1}F(x,v)e^{\frac{-2\pi&space;j}{N}ux}&space;\end{aligned}&space;)
|
||||||
\begin{aligned}
|
|
||||||
&F(x,v)=\sum_{y=0} ^{N-1} f(x,y)e^{\frac{-2\pi j}{N} vy}\\
|
|
||||||
&F(u,v)=\frac{1}{N}\sum_{x=0}^{N-1}F(x,v)e^{\frac{-2\pi j}{N}ux}
|
|
||||||
\end{aligned}
|
|
||||||
$$
|
|
||||||
进行多维变换时,可以依次对每一维进行变换。 下面在代码中就是这样实现的。
|
进行多维变换时,可以依次对每一维进行变换。 下面在代码中就是这样实现的。
|
||||||
### 位移定理
|
### 位移定理
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;f(x,y)e^{\frac{2\pi&space;j}{N}(u_0x+v_0y)}&space;<=>F(u-u_0,v-v_0)&space;)
|
||||||
f(x,y)e^{\frac{2\pi j}{N}(u_0x+v_0y)} <=>F(u-u_0,v-v_0)
|
![](https://latex.codecogs.com/gif.latex?&space;f(x-x_0,y-y_0)<=>F(u,v)e^{\frac{-2\pi&space;j}{N}(ux_0+vy_0)}&space;)
|
||||||
$$
|
|
||||||
$$
|
|
||||||
f(x-x_0,y-y_0)<=>F(u,v)e^{\frac{-2\pi j}{N}(ux_0+vy_0)}
|
|
||||||
$$
|
|
||||||
|
|
||||||
### 周期性
|
### 周期性
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;F(u,v)&space;=&space;F(u+N,v+N)&space;)
|
||||||
F(u,v) = F(u+N,v+N)
|
|
||||||
$$
|
|
||||||
### 共轭对称性
|
### 共轭对称性
|
||||||
$$F(u,v) = F^*(-u,-v)$$
|
![](https://latex.codecogs.com/gif.latex?F(u,v)&space;=&space;F^*(-u,-v))
|
||||||
a)偶分量函数在变换中产生偶分量函数;
|
a)偶分量函数在变换中产生偶分量函数;
|
||||||
b)奇分量函数在变换中产生奇分量函数;
|
b)奇分量函数在变换中产生奇分量函数;
|
||||||
c)奇分量函数在变换中引入系数-j;
|
c)奇分量函数在变换中引入系数-j;
|
||||||
d)偶分量函数在变换中不引入系数.
|
d)偶分量函数在变换中不引入系数.
|
||||||
|
|
||||||
### 旋转性
|
### 旋转性
|
||||||
if $$
|
if ![](https://latex.codecogs.com/gif.latex?&space;f(r,\theta)<=>F(\omega,\phi)&space;)
|
||||||
f(r,\theta)<=>F(\omega,\phi)
|
then ![](https://latex.codecogs.com/gif.latex?f(r,\theta+t)<=>F(\omega,\phi+t)&space;)
|
||||||
$$
|
|
||||||
then $$f(r,\theta+t)<=>F(\omega,\phi+t)
|
|
||||||
$$
|
|
||||||
### 加法定理
|
### 加法定理
|
||||||
1.
|
1.
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;Fourier[f+g]=Fourier[f]+Fourier[g]&space;)
|
||||||
Fourier[f+g]=Fourier[f]+Fourier[g]
|
|
||||||
$$
|
|
||||||
2.
|
2.
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;af(x,y)<=>aF[u,v]&space;)
|
||||||
af(x,y)<=>aF[u,v]
|
|
||||||
$$
|
|
||||||
|
|
||||||
### 平均值
|
### 平均值
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;\frac{1}{N^2}\sum_{x=0}^{N-1}\sum_{y=0}&space;^{N-1}&space;f(x,y)&space;=&space;\frac{1}{N}F(0,0)&space;)
|
||||||
\frac{1}{N^2}\sum_{x=0}^{N-1}\sum_{y=0} ^{N-1} f(x,y) = \frac{1}{N}F(0,0)
|
|
||||||
$$
|
|
||||||
### 相似性定理
|
### 相似性定理
|
||||||
尺度变换
|
尺度变换
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;f(ax,by)<=>\frac{F(\frac{u}{a},\frac{v}{b})}{ab}&space;)
|
||||||
f(ax,by)<=>\frac{F(\frac{u}{a},\frac{v}{b})}{ab}
|
|
||||||
$$
|
|
||||||
|
|
||||||
### 卷积定理
|
### 卷积定理
|
||||||
卷积定义
|
卷积定义
|
||||||
1d
|
1d
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;f*g&space;=&space;\frac{1}{M}\sum_{m=0}^{M-1}f(m)g(x-m)&space;)
|
||||||
f*g = \frac{1}{M}\sum_{m=0}^{M-1}f(m)g(x-m)
|
|
||||||
$$
|
|
||||||
2d
|
2d
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;f(x,y)*g(x,y)&space;=&space;\frac{1}{MN}\sum_{m=0}^{M-1}\sum_{n=0}^{N-1}f(m,n)g(x-m,y-n)&space;)
|
||||||
f(x,y)*g(x,y) = \frac{1}{MN}\sum_{m=0}^{M-1}\sum_{n=0}^{N-1}f(m,n)g(x-m,y-n)
|
|
||||||
$$
|
|
||||||
|
|
||||||
卷积定理
|
卷积定理
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;f(x,y)*g(x,y)&space;<=>&space;F(u,v)G(u,v)&space;)
|
||||||
f(x,y)*g(x,y) <=> F(u,v)G(u,v)
|
![](https://latex.codecogs.com/gif.latex?&space;f(x,y)g(x,y)<=>F(u,v)*G(u,v)&space;)
|
||||||
$$
|
|
||||||
$$
|
|
||||||
f(x,y)g(x,y)<=>F(u,v)*G(u,v)
|
|
||||||
$$
|
|
||||||
|
|
||||||
离散卷积
|
离散卷积
|
||||||
用
|
用
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;\sum_{i=0}^{N-1}x(iT)h[(k-i)T]&space;<=>&space;X(\frac{n}{NT})H(\frac{n}{NT})&space;)
|
||||||
\sum_{i=0}^{N-1}x(iT)h[(k-i)T] <=> X(\frac{n}{NT})H(\frac{n}{NT})
|
|
||||||
$$
|
|
||||||
即两个周期为 N 的抽样函数, 他们的卷积的离散傅里叶变换等于他们的离散傅里叶变换的卷积
|
即两个周期为 N 的抽样函数, 他们的卷积的离散傅里叶变换等于他们的离散傅里叶变换的卷积
|
||||||
|
|
||||||
卷积的应用:
|
卷积的应用:
|
||||||
|
@ -191,93 +138,62 @@ $$
|
||||||
两个不同周期的信号卷积需要周期扩展的原因:如果直接进行傅里叶变换和乘积,会产生折叠误差(卷绕)。
|
两个不同周期的信号卷积需要周期扩展的原因:如果直接进行傅里叶变换和乘积,会产生折叠误差(卷绕)。
|
||||||
|
|
||||||
### 相关定理
|
### 相关定理
|
||||||
下面用$ \infty$ 表示相关。
|
下面用![](https://latex.codecogs.com/gif.latex?\infty) 表示相关。
|
||||||
相关函数描述了两个信号之间的相似性,其相关性大小有相关系数衡量
|
相关函数描述了两个信号之间的相似性,其相关性大小有相关系数衡量
|
||||||
|
|
||||||
- 相关函数的定义
|
- 相关函数的定义
|
||||||
离散
|
离散
|
||||||
$$f(x,y)\quad \infty \quad g(x,y) = \frac{1}{MN}\sum_{m=0}^{M-1}\sum_{n=0}^{N-1}f^*(m,n)g(x+m,y+n)
|
![](https://latex.codecogs.com/gif.latex?f(x,y)\quad&space;\infty&space;\quad&space;g(x,y)&space;=&space;\frac{1}{MN}\sum_{m=0}^{M-1}\sum_{n=0}^{N-1}f^*(m,n)g(x+m,y+n)&space;)
|
||||||
$$
|
|
||||||
连续
|
连续
|
||||||
$$z(t) = \int_{-\infty}^{\infty}x^*(\tau) h(t+\tau)d\tau$$
|
![](https://latex.codecogs.com/gif.latex?z(t)&space;=&space;\int_{-\infty}^{\infty}x^*(\tau)&space;h(t+\tau)d\tau)
|
||||||
- 定理
|
- 定理
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;f(x,y)\quad&space;\infty&space;\quad&space;g(x,y)<=>F^*(u,v)G(u,v)&space;)
|
||||||
f(x,y)\quad \infty \quad g(x,y)<=>F^*(u,v)G(u,v)
|
|
||||||
$$
|
|
||||||
### Rayleigh 定理
|
### Rayleigh 定理
|
||||||
能量变换
|
能量变换
|
||||||
对于有限区间非零函数 f(t), 其能量为
|
对于有限区间非零函数 f(t), 其能量为
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;E&space;=&space;\int_{-\infty}^{\infty}|f(t)|^2dt&space;)
|
||||||
E = \int_{-\infty}^{\infty}|f(t)|^2dt
|
|
||||||
$$
|
|
||||||
|
|
||||||
其变换函数与原函数有相同的能量
|
其变换函数与原函数有相同的能量
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;\int_{-\infty}^{\infty}|f(t)|^2dt&space;=&space;\int_{-\infty}^{\infty}|F(u)|^2dt&space;)
|
||||||
\int_{-\infty}^{\infty}|f(t)|^2dt = \int_{-\infty}^{\infty}|F(u)|^2dt
|
|
||||||
$$
|
|
||||||
## 快速傅里叶变换
|
## 快速傅里叶变换
|
||||||
由上面离散傅里叶变换的性质易知,直接计算 1维 dft 的时间复杂度维 $O(N^2)$。
|
由上面离散傅里叶变换的性质易知,直接计算 1维 dft 的时间复杂度维 ![](https://latex.codecogs.com/gif.latex?O(N^2))。
|
||||||
|
|
||||||
利用到单位根的对称性,快速傅里叶变换可以达到 $O(nlogn)$的时间复杂度。
|
利用到单位根的对称性,快速傅里叶变换可以达到 ![](https://latex.codecogs.com/gif.latex?O(nlogn))的时间复杂度。
|
||||||
|
|
||||||
|
|
||||||
### 复数中的单位根
|
### 复数中的单位根
|
||||||
我们知道, 在复平面,复数 $cos\theta +i\ sin\theta$k可以表示成 $e^{i\theta}$, 可以对应一个向量。$\theta$即为幅角。
|
我们知道, 在复平面,复数 ![](https://latex.codecogs.com/gif.latex?cos\theta&space;+i\&space;sin\theta)k可以表示成 ![](https://latex.codecogs.com/gif.latex?e^{i\theta}), 可以对应一个向量。![](https://latex.codecogs.com/gif.latex?\theta)即为幅角。
|
||||||
在**单位圆**中 ,单位圆被分成 $\frac{2\pi}{\theta}$ 份, 由单位圆的对称性
|
在**单位圆**中 ,单位圆被分成 ![](https://latex.codecogs.com/gif.latex?\frac{2\pi}{\theta}) 份, 由单位圆的对称性
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;e^{i\theta}&space;=&space;e^{i(\theta+2\pi)}&space;)
|
||||||
e^{i\theta} = e^{i(\theta+2\pi)}
|
现在记 ![](https://latex.codecogs.com/gif.latex?n&space;=\frac{&space;2\pi&space;}{\theta}) , 即被分成 n 份,幅度角为正且最小的向量称为 n 次单位向量, 记为![](https://latex.codecogs.com/gif.latex?\omega&space;_n),
|
||||||
$$
|
其余的 n-1 个向量分别为 ![](https://latex.codecogs.com/gif.latex?\omega_{n}^{2},\omega_{n}^{3},\ldots,\omega_{n}^{n}) ,它们可以由复数之间的乘法得来 ![](https://latex.codecogs.com/gif.latex?w_{n}^{k}=w_{n}^{k-1}\cdot&space;w_{n}^{1}\&space;(2&space;\leq&space;k&space;\leq&space;n))。
|
||||||
现在记 $ n =\frac{ 2\pi }{\theta}$ , 即被分成 n 份,幅度角为正且最小的向量称为 n 次单位向量, 记为$\omega _n$,
|
|
||||||
其余的 n-1 个向量分别为 $\omega_{n}^{2},\omega_{n}^{3},\ldots,\omega_{n}^{n}$ ,它们可以由复数之间的乘法得来 $w_{n}^{k}=w_{n}^{k-1}\cdot w_{n}^{1}\ (2 \leq k \leq n) $。
|
|
||||||
单位根的性质
|
单位根的性质
|
||||||
1. 这个可以用 e 表示出来证明
|
1. 这个可以用 e 表示出来证明
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;\omega_{2n}^{2k}=\omega_{n}^{k}&space;)
|
||||||
\omega_{2n}^{2k}=\omega_{n}^{k}
|
|
||||||
$$
|
|
||||||
2. 可以写成三角函数证明
|
2. 可以写成三角函数证明
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;\omega_{n}^{k+\frac{n}{2}}=-\omega_{n}^{k}&space;)
|
||||||
\omega_{n}^{k+\frac{n}{2}}=-\omega_{n}^{k}
|
|
||||||
$$
|
|
||||||
|
|
||||||
容易看出 $w_{n}^{n}=w_{n}^{0}=1 $。
|
容易看出 ![](https://latex.codecogs.com/gif.latex?w_{n}^{n}=w_{n}^{0}=1)。
|
||||||
|
|
||||||
对于$ w_{n}^{k}$ , 它事实上就是 $e^{\frac{2\pi i}{n}k}$ 。
|
对于![](https://latex.codecogs.com/gif.latex?w_{n}^{k}) , 它事实上就是 ![](https://latex.codecogs.com/gif.latex?e^{\frac{2\pi&space;i}{n}k}) 。
|
||||||
### 快速傅里叶变换的计算
|
### 快速傅里叶变换的计算
|
||||||
下面的推导假设 $n=2^k$,以及代码实现 FFT 部分也是 如此。
|
下面的推导假设 ![](https://latex.codecogs.com/gif.latex?n=2^k),以及代码实现 FFT 部分也是 如此。
|
||||||
|
|
||||||
利用上面的对称性,
|
利用上面的对称性,
|
||||||
将傅里叶计算进行奇偶分组
|
将傅里叶计算进行奇偶分组
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;\begin{aligned}&space;F(u)&=\sum_{i=0}^{n-1}\omega_n&space;^{iu}&space;a^i\\&space;&=&space;\sum_{i=0}^{\frac{n}{2}-1}\omega_n&space;^{2iu}&space;a^{2i}+\sum_{i=0}^{\frac{n}{2}-1}\omega_n&space;^{(2i+1)u}&space;a^{2i+1}\\&space;&=\sum_{i=0}^{\frac{n}{2}-1}\omega_{\frac{n}{2}}&space;^{iu}&space;a^{2i}+\omega_n^u\sum_{i=0}^{\frac{n}{2}-1}\omega_{\frac{n}{2}}&space;^{iu}&space;a^{2i+1}\\&space;&&space;=&space;F_{even}(u)+\omega_n^u&space;F_{odd}(u)&space;\end{aligned}&space;)
|
||||||
\begin{aligned}
|
![](https://latex.codecogs.com/gif.latex?F_{even})表示将 输入的次序中偶数点进行 Fourier 变换, ![](https://latex.codecogs.com/gif.latex?F_{odd}) 同理,这样就形成递推公式。
|
||||||
F(u)&=\sum_{i=0}^{n-1}\omega_n ^{iu} a^i\\
|
现在还没有减少计算量,下面通过将分别计算的 奇项,偶项利用起来,只计算 前 ![](https://latex.codecogs.com/gif.latex?\frac{n}{2}-1)项,后面的一半可以利用此结果马上算出来。每一次可以减少一半的计算量。
|
||||||
&= \sum_{i=0}^{\frac{n}{2}-1}\omega_n ^{2iu} a^{2i}+\sum_{i=0}^{\frac{n}{2}-1}\omega_n ^{(2i+1)u} a^{2i+1}\\
|
|
||||||
&=\sum_{i=0}^{\frac{n}{2}-1}\omega_{\frac{n}{2}} ^{iu} a^{2i}+\omega_n^u\sum_{i=0}^{\frac{n}{2}-1}\omega_{\frac{n}{2}} ^{iu} a^{2i+1}\\
|
|
||||||
& = F_{even}(u)+\omega_n^u F_{odd}(u)
|
|
||||||
\end{aligned}
|
|
||||||
$$
|
|
||||||
$F_{even}$表示将 输入的次序中偶数点进行 Fourier 变换, $F_{odd}$ 同理,这样就形成递推公式。
|
|
||||||
现在还没有减少计算量,下面通过将分别计算的 奇项,偶项利用起来,只计算 前 $\frac{n}{2}-1$项,后面的一半可以利用此结果马上算出来。每一次可以减少一半的计算量。
|
|
||||||
|
|
||||||
对于 $\frac{n}{2}\leq i+\frac{n}{2}\leq n-1$
|
对于 ![](https://latex.codecogs.com/gif.latex?\frac{n}{2}\leq&space;i+\frac{n}{2}\leq&space;n-1)
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;\begin{aligned}&space;F(\omega_{n}^{i+\frac{n}{2}})&=F_{even}(\omega_{n}^{2i+n})+\omega_{n}^{i+\frac{n}{2}}\cdot&space;F_{odd}(\omega_{n}^{2i+n})\\&space;&=F_{even}(\omega_{\frac{n}{2}}^{i+\frac{n}{2}})+\omega_{\frac{n}{2}}^{i+\frac{n}{2}}\cdot&space;F_{odd}(\omega_{\frac{n}{2}}^{i+\frac{n}{2}})\\&space;&&space;=F_{even}(\omega_{\frac{n}{2}}^{i})-\omega_{\frac{n}{2}}^{i}\cdot&space;F_{odd}(\omega_{\frac{n}{2}}^{i})&space;\end{aligned}&space;)
|
||||||
\begin{aligned}
|
|
||||||
F(\omega_{n}^{i+\frac{n}{2}})&=F_{even}(\omega_{n}^{2i+n})+\omega_{n}^{i+\frac{n}{2}}\cdot F_{odd}(\omega_{n}^{2i+n})\\
|
|
||||||
&=F_{even}(\omega_{\frac{n}{2}}^{i+\frac{n}{2}})+\omega_{\frac{n}{2}}^{i+\frac{n}{2}}\cdot F_{odd}(\omega_{\frac{n}{2}}^{i+\frac{n}{2}})\\
|
|
||||||
& =F_{even}(\omega_{\frac{n}{2}}^{i})-\omega_{\frac{n}{2}}^{i}\cdot F_{odd}(\omega_{\frac{n}{2}}^{i})
|
|
||||||
\end{aligned}
|
|
||||||
$$
|
|
||||||
现在很清楚了,在每次计算 a[0..n-1] 的傅里叶变换F[0..n-1],分别计算出奇 odd[0..n/2-1],偶even[0..n/2-1](可以递归地进行),
|
现在很清楚了,在每次计算 a[0..n-1] 的傅里叶变换F[0..n-1],分别计算出奇 odd[0..n/2-1],偶even[0..n/2-1](可以递归地进行),
|
||||||
那么傅里叶变换为:
|
那么傅里叶变换为:
|
||||||
$$
|
![](https://latex.codecogs.com/gif.latex?&space;F[i]&space;=&space;\begin{cases}&space;even[i]+&space;\omega^i&space;\cdot&space;odd[i],&space;\quad&space;i<\frac{n}{2}\\&space;even[i]-&space;\omega^i&space;\cdot&space;odd[i],&space;\quad&space;else&space;\end{cases}&space;)
|
||||||
F[i] = \begin{cases}
|
|
||||||
even[i]+ \omega^i \cdot odd[i], \quad i<\frac{n}{2}\\
|
|
||||||
even[i]- \omega^i \cdot odd[i], \quad else
|
|
||||||
\end{cases}
|
|
||||||
$$
|
|
||||||
|
|
||||||
## 代码
|
## 代码
|
||||||
下面是 python 实现
|
下面是 python 实现
|
||||||
一维用 FFT 实现, 不过 只实现了 2 的幂。/ 对于非 2 的幂,用 FFT 实现有点困难,还需要插值,所以我 用$O(n^2)$ 直接实现。
|
一维用 FFT 实现, 不过 只实现了 2 的幂。/ 对于非 2 的幂,用 FFT 实现有点困难,还需要插值,所以我 用![](https://latex.codecogs.com/gif.latex?O(n^2)) 直接实现。
|
||||||
|
|
||||||
二维的 DFT利用 分离性,直接调用 一维 FFT。
|
二维的 DFT利用 分离性,直接调用 一维 FFT。
|
||||||
[GitHub](https://github.com/mbinary/algorithm)
|
[GitHub](https://github.com/mbinary/algorithm)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user