FFT海浪模拟——理论部分(二)

由于使用标准傅里叶变换计算海面计算量过大,所以使用离散形式的傅里叶变换(DFT)代替

1.离散傅里叶变换

1)定义式

X [ k ] = ∑ n = 0 N − 1 x [ n ] e − j 2 π k N n , 0 ≤ k ≤ N − 1 X[k]=\sum_{n=0}^{N-1}x[n]e^{-j\frac{2\pi k}{N}n},0 \leq k \leq N-1 X[k]=n=0N1x[n]ejN2πkn,0kN1

为简化表达,令
W N = e − j 2 π N W_N=e^{-j\frac{2\pi}{N}} WN=ejN2π
则定义式可化为
X [ k ] = ∑ n = 0 N − 1 x [ n ] W N k n X[k]=\sum_{n=0}^{N-1}x[n]W_{N}^{kn} X[k]=n=0N1x[n]WNkn

2)性质

i.对于带有e的指数项W,有如下性质:
W N k ( 2 n ) = e − j 2 π k N 2 n = e − j 2 π k N 2 n = W N 2 k n ( 代换 ) W_{N}^{k(2n)}=e^{-j\frac{2\pi k}{N}2n}=e^{-j\frac{2\pi k}{\frac{N}{2}}n}=W_{\frac{N}{2}}^{kn} (代换) WNk(2n)=ejN2πk2n=ej2N2πkn=W2Nkn(代换)

W N k n = W N k ( n + N ) = W N ( k + N ) n ( 周期性 ) W_{N}^{kn}=W_{N}^{k(n+N)}=W_{N}^{(k+N)n}(周期性) WNkn=WNk(n+N)=WN(k+N)n(周期性)

3)计算方式

采用了分治算法的思想,将一个长度为N的信号分为两个长度为N/2的信号进行计算,一个为偶数信号,另一个为奇数信号,表示如下:

首先将x[n]分解为奇数项和偶数项

偶数项:x[2n]

奇数项:x[2n+1]

此处的n取值范围为
n ∈ { 0 , 1 , . . . , N 2 − 1 } n \in \{0,1,...,\frac{N}{2}-1 \} n{0,1,...,2N1}

则可将DFT定义式分解为
X [ k ] = ∑ n = 0 N 2 − 1 x [ 2 n ] W N k ( 2 n ) + ∑ n = 0 N 2 − 1 x [ 2 n + 1 ] W N k ( 2 n + 1 ) = ∑ n = 0 N 2 − 1 x [ 2 n ] W N k ( 2 n ) + W N k ∑ n = 0 N 2 − 1 x [ 2 n + 1 ] W N k ( 2 n ) ∑ n = 0 N 2 − 1 x [ 2 n ] W N 2 k n + W N k ∑ n = 0 N 2 − 1 x [ 2 n + 1 ] W N 2 k n X[k]=\sum_{n=0}^{\frac{N}{2}-1}x[2n]W_{N}^{k(2n)}+\sum_{n=0}^{\frac{N}{2}-1}x[2n+1]W_{N}^{k(2n+1)}\\ =\sum_{n=0}^{\frac{N}{2}-1}x[2n]W_{N}^{k(2n)}+W_{N}^{k}\sum_{n=0}^{\frac{N}{2}-1}x[2n+1]W_{N}^{k(2n)}\\ \sum_{n=0}^{\frac{N}{2}-1}x[2n]W_{\frac{N}{2}}^{kn}+W_{N}^{k}\sum_{n=0}^{\frac{N}{2}-1}x[2n+1]W_{\frac{N}{2}}^{kn} X[k]=n=02N1x[2n]WNk(2n)+n=02N1x[2n+1]WNk(2n+1)=n=02N1x[2n]WNk(2n)+WNkn=02N1x[2n+1]WNk(2n)n=02N1x[2n]W2Nkn+WNkn=02N1x[2n+1]W2Nkn
再令偶数项和奇数项分别为
E v e n : E [ k ] = ∑ n = 0 N 2 − 1 x [ 2 n ] W N 2 k n O d d : O [ k ] = ∑ n = 0 N 2 − 1 x [ 2 n + 1 ] W N 2 k n Even:E[k]=\sum_{n=0}^{\frac{N}{2}-1}x[2n]W_{\frac{N}{2}}^{kn}\\ Odd:O[k]=\sum_{n=0}^{\frac{N}{2}-1}x[2n+1]W_{\frac{N}{2}}^{kn} Even:E[k]=n=02N1x[2n]W2NknOdd:O[k]=n=02N1x[2n+1]W2Nkn
根据W式的周期性,有
E [ k ] = E [ k + N 2 ] O [ k ] = O [ k + N 2 ] E[k]=E[k+\frac{N}{2}]\\ O[k]=O[k+\frac{N}{2}] E[k]=E[k+2N]O[k]=O[k+2N]
这样我们就可以将定义式表示成
X [ k ] = E [ k ] + W N k O [ k ] , 0 ≤ k ≤ N − 1 X[k]=E[k]+W_{N}^{k}O[k],0 \leq k \leq N-1 X[k]=E[k]+WNkO[k],0kN1

2.一种计算示例(蝶形图表示)

取N=8,则计算过程如下(从最终结果反推初始输入):

第1次分解(4上4下):

在这里插入图片描述

第二次(2上2下):

在这里插入图片描述

第三次(1上1下):

在这里插入图片描述
以上公式推导过程来自

1.fft海面模拟(二)
2.如何快速理解傅里叶变换的计算和概念?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hunnybub

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值