概述
文章目录
- FFT的由来
- 降低运算量的途径
- 基2FFT算法
- 时域抽取基2FFT算法
- 第一次分解
- 第二次分解
- 蝶形运算
- DIT-FFT与直接计算DFT运算量比较
- 频域抽取基2FFT算法
- IDFT的快速算法
- 旋转因子指数变极性法
- 直接调用FFT子程序:方法1
- 直接调用FFT子程序:方法2
FFT的由来
DFT的计算量
因此当N比较大时,计算量太大,所以在快速傅里叶变换出现以前,直接用DFT算法进行谱分析和信号的实时处理是不切实际的
降低运算量的途径
把N点DFT分解为几个较短的DDFT,可使乘法次数大大减少,另外,利用旋转因子
W
N
m
W_N^m
WNm的周期性、对称性和可约性来减少DFT的运算次数
W
N
m
+
l
N
=
e
−
j
2
π
N
(
m
+
l
N
)
=
e
−
j
2
π
N
(
m
)
<
−
周
期
性
W_N^{m+lN}=e^{-jfrac{2pi}N(m+lN)}=e^{-jfrac{2pi}N(m)}<-周期性
WNm+lN=e−jN2π(m+lN)=e−jN2π(m)<−周期性
W N − m = W N N − m , [ W N N − m ] ∗ = W N m , W N m + N 2 = − W N m < − 对 称 性 W_N^{-m}=W_N^{N-m},[W_N^{N-m}]*=W_N^{m},W_N^{m+frac N2}=-W_N^m<-对称性 WN−m=WNN−m,[WNN−m]∗=WNm,WNm+2N=−WNm<−对称性
W N m = W N / n m / n , N / n , m / n 为 整 数 < − 可 约 性 W_N^m=W_{N/n}^{m/n},N/n,m/n为整数<-可约性 WNm=WN/nm/n,N/n,m/n为整数<−可约性
基2FFT算法
设序列点数 N = 2 L N=2^L N=2L,L为正整数。若不满足,则补零,使N为2的整数幂的FFT算法称为基-2FFT算法
-
基2时间抽取DIT-FFT
x ( n ) − > { x ( 2 r ) x ( 2 r + 1 ) r = 0 , 1 , . . . N 2 − 1 x(n)->begin{cases} x(2r)\x(2r+1) end {cases}r=0,1,...frac N2-1 x(n)−>{x(2r)x(2r+1)r=0,1,...2N−1 -
基2频域抽取DIF-FFT
X ( k ) − > { X ( 2 m ) X ( 2 m + 1 ) m = 0 , 1 , . . . , N 2 − 1 X(k)->begin{cases}X(2m)\X(2m+1) end{cases}m=0,1,...,frac N2-1 X(k)−>{X(2m)X(2m+1)m=0,1,...,2N−1
时域抽取基2FFT算法
第一次分解
将序列x(n)按n的奇偶分两组
{
x
(
2
r
)
=
x
1
(
r
)
x
(
2
r
+
1
)
=
x
2
(
r
)
r
=
0
,
1
,
.
.
.
N
2
−
1
begin{cases} x(2r)=x_1(r)\x(2r+1)=x_2(r) end {cases}r=0,1,...frac N2-1
{x(2r)=x1(r)x(2r+1)=x2(r)r=0,1,...2N−1
X
(
k
)
=
D
F
T
[
x
(
n
)
]
=
∑
n
=
0
N
−
1
x
(
n
)
W
N
n
k
=
∑
n
=
e
v
e
n
x
(
n
)
W
N
k
n
+
∑
n
=
o
d
d
x
(
n
)
W
N
k
n
X(k)=DFT[x(n)]=sum_{n=0}^{N-1}x(n)W_N^{nk}=sum_{n=even}x(n)W_N^{kn}+sum_{n=odd}x(n)W_N^{kn}
X(k)=DFT[x(n)]=∑n=0N−1x(n)WNnk=∑n=evenx(n)WNkn+∑n=oddx(n)WNkn
= ∑ r = 0 N 2 − 1 x ( 2 r ) W N 2 k r + ∑ r = 0 N 2 − 1 x ( 2 r + 1 ) W N k ( 2 r + 1 ) =sum_{r=0}^{frac N2-1}x(2r)W_N^{2kr}+sum_{r=0}^{frac N2-1}x(2r+1)W_N^{k(2r+1)} =∑r=02N−1x(2r)WN2kr+∑r=02N−1x(2r+1)WNk(2r+1)
= ∑ r = 0 N 2 − 1 x 1 ( r ) W N 2 k r + W N k ∑ r = 0 N 2 − 1 x 2 ( r ) W N 2 k r =sum_{r=0}^{frac N2-1}x_1(r)W_N^{2kr}+W_N^{k}sum_{r=0}^{frac N2-1}x_2(r)W_N^{2kr} =∑r=02N−1x1(r)WN2kr+WNk∑r=02N−1x2(r)WN2kr
= ∑ r = 0 N 2 − 1 x 1 ( r ) W N 2 k r + W N k ∑ r = 0 N 2 − 1 x 2 ( r ) W N 2 k r =sum_{r=0}^{frac N2-1}x_1(r)W_{frac N2}^{kr}+W_N^{k}sum_{r=0}^{frac N2-1}x_2(r)W_{frac N2}^{kr} =∑r=02N−1x1(r)W2Nkr+WNk∑r=02N−1x2(r)W2Nkr
因为 X 1 ( k ) = ∑ r = 0 N 2 − 1 x 1 ( r ) W N 2 k r = D F T [ x 1 ( r ) ] , X 2 ( k ) = ∑ r = 0 N 2 − 1 x 2 ( r ) W N 2 k r = D F T [ x 2 ( r ) ] X_1(k)=sum_{r=0}^{frac N2-1}x_1(r)W_{frac N2}^{kr}=DFT[x_1(r)],X_2(k)=sum_{r=0}^{frac N2-1}x_2(r)W_{frac N2}^{kr}=DFT[x_2(r)] X1(k)=∑r=02N−1x1(r)W2Nkr=DFT[x1(r)],X2(k)=∑r=02N−1x2(r)W2Nkr=DFT[x2(r)]
所以上式 = X 1 ( k ) + W N k X 2 ( k ) , k = 0 , 1 , . . N / 2 − 1 =X_1(k)+W_N^{k}X_2(k),k=0,1,..N/2-1 =X1(k)+WNkX2(k),k=0,1,..N/2−1
∵ X ( k ) = X 1 ( k ) + W N k X 2 ( k ) , 0 ≤ k ≤ N − 1 because X(k)=X_1(k)+W_N^{k}X_2(k),0leq kleq N-1 ∵X(k)=X1(k)+WNkX2(k),0≤k≤N−1
上式只是求出 0 ≤ k ≤ N 2 − 1 0leq kleq frac N2-1 0≤k≤2N−1时的X(k),即前半部分的X(k),对于 N 2 ≤ k ≤ N frac N2leq kleq N 2N≤k≤N如何求?
利用周期性求X(k)的后半部分
∵ X 1 ( k ) , X 2 ( k ) 是 以 N / 2 为 周 期 的 because X_1(k),X_2(k)是以N/2为周期的 ∵X1(k),X2(k)是以N/2为周期的
∴ X 1 ( k + N 2 ) = X 1 ( k ) , X 2 ( k + N 2 ) = X 2 ( k ) therefore X_1(k+frac N2)=X_1(k),X_2(k+frac N2)=X_2(k) ∴X1(k+2N)=X1(k),X2(k+2N)=X2(k)
又
W
N
k
+
N
2
=
W
N
N
2
W
N
k
=
−
W
N
k
W_N^{k+frac N2}=W_N^{frac N2}W_N^k=-W_N^k
WNk+2N=WN2NWNk=−WNk,所以后半个序列的求法如下:
X
(
k
+
N
/
2
)
=
X
1
(
k
+
N
/
2
)
+
W
N
k
+
N
/
2
X
2
(
k
+
N
/
2
)
=
X
1
(
k
)
−
W
N
k
X
2
(
k
)
,
0
≤
k
≤
N
2
−
1
X(k+N/2)=X_1(k+N/2)+W_N^{k+N/2}X_2(k+N/2)=X_1(k)-W_N^kX_2(k),0leq kleq frac N2-1
X(k+N/2)=X1(k+N/2)+WNk+N/2X2(k+N/2)=X1(k)−WNkX2(k),0≤k≤2N−1
第二次分解
X 1 ( k ) = ∑ l = 0 N / 4 − 1 x 1 ( 2 l ) W N / 2 2 k l + ∑ l = 0 N / 4 − 1 x 1 ( 2 l + 1 ) W N / 2 k ( 2 l + 1 ) X_1(k)=sum_{l=0}^{N/4-1}x_1(2l)W_{N/2}^{2kl}+sum_{l=0}^{N/4-1}x_1(2l+1)W_{N/2}^{k(2l+1)} X1(k)=∑l=0N/4−1x1(2l)WN/22kl+∑l=0N/4−1x1(2l+1)WN/2k(2l+1)
= ∑ l = 0 N / 4 − 1 x 3 ( l ) W N / 4 k l + W N / 2 k ∑ l = 0 N / 4 − 1 x 4 ( l ) W N / 4 k l =sum_{l=0}^{N/4-1}x_3(l)W_{N/4}^{kl}+W_{N/2}^ksum_{l=0}^{N/4-1}x_4(l)W_{N/4}^{kl} =∑l=0N/4−1x3(l)WN/4kl+WN/2k∑l=0N/4−1x4(l)WN/4kl
= X 3 ( k ) + W N / 2 k X 4 ( k ) , 0 ≤ k ≤ N / 4 − 1 =X_3(k)+W_{N/2}^kX_4(k),0leq kleq N/4-1 =X3(k)+WN/2kX4(k),0≤k≤N/4−1
X 1 ( k ) = X 3 ( k ) + W N / 2 k X 4 ( k ) , 0 ≤ k ≤ N / 4 − 1 X_1(k)=X_3(k)+W_{N/2}^kX_4(k),0leq kleq N/4-1 X1(k)=X3(k)+WN/2kX4(k),0≤k≤N/4−1
X 1 ( k + N / 4 ) = X 3 ( k ) − W N / 2 k X 4 ( k ) , 0 ≤ k ≤ N / 4 − 1 X_1(k+N/4)=X_3(k)-W_{N/2}^kX_4(k),0leq kleq N/4-1 X1(k+N/4)=X3(k)−WN/2kX4(k),0≤k≤N/4−1
X 2 ( k ) = X 5 ( k ) + W N / 2 k X 6 ( k ) , 0 ≤ k ≤ N / 4 − 1 X_2(k)=X_5(k)+W_{N/2}^kX_6(k),0leq kleq N/4-1 X2(k)=X5(k)+WN/2kX6(k),0≤k≤N/4−1
X 2 ( k + N / 4 ) = X 5 ( k ) − W N / 2 k X 6 ( k ) , 0 ≤ k ≤ N / 4 − 1 X_2(k+N/4)=X_5(k)-W_{N/2}^kX_6(k),0leq kleq N/4-1 X2(k+N/4)=X5(k)−WN/2kX6(k),0≤k≤N/4−1
其中
x 3 ( l ) = x 1 ( 2 l ) , 0 ≤ l ≤ N / 4 − 1 x_3(l)=x_1(2l),0leq lleq N/4-1 x3(l)=x1(2l),0≤l≤N/4−1
x 4 ( l ) = x 1 ( 2 l + 1 ) , 0 ≤ l ≤ N / 4 − 1 x_4(l)=x_1(2l+1),0leq lleq N/4-1 x4(l)=x1(2l+1),0≤l≤N/4−1
X 3 ( k ) = ∑ l = 0 N / 4 − 1 x 3 ( l ) W N / 4 k l = D F T [ x 3 ( l ) ] X_3(k)=sum_{l=0}^{N/4-1}x_3(l)W_{N/4}^{kl}=DFT[x_3(l)] X3(k)=∑l=0N/4−1x3(l)WN/4kl=DFT[x3(l)]
X 4 ( k ) = ∑ l = 0 N / 4 − 1 x 4 ( l ) W N / 4 k l = D F T [ x 4 ( l ) ] X_4(k)=sum_{l=0}^{N/4-1}x_4(l)W_{N/4}^{kl}=DFT[x_4(l)] X4(k)=∑l=0N/4−1x4(l)WN/4kl=DFT[x4(l)]
x 5 ( l ) = x 2 ( 2 l ) , 0 ≤ l ≤ N / 4 − 1 x_5(l)=x_2(2l),0leq lleq N/4-1 x5(l)=x2(2l),0≤l≤N/4−1
x 6 ( l ) = x 2 ( 2 l + 1 ) , 0 ≤ l ≤ N / 4 − 1 x_6(l)=x_2(2l+1),0leq lleq N/4-1 x6(l)=x2(2l+1),0≤l≤N/4−1
X 5 ( k ) = ∑ l = 0 N / 4 − 1 x 5 ( l ) W N / 4 k l = D F T [ x 5 ( l ) ] X_5(k)=sum_{l=0}^{N/4-1}x_5(l)W_{N/4}^{kl}=DFT[x_5(l)] X5(k)=∑l=0N/4−1x5(l)WN/4kl=DFT[x5(l)]
X 6 ( k ) = ∑ l = 0 N / 4 − 1 x 6 ( l ) W N / 4 k l = D F T [ x 6 ( l ) ] X_6(k)=sum_{l=0}^{N/4-1}x_6(l)W_{N/4}^{kl}=DFT[x_6(l)] X6(k)=∑l=0N/4−1x6(l)WN/4kl=DFT[x6(l)]
蝶形运算
⇒
Rightarrow
⇒
蝶形单元需要一次复数乘法,两次复数加法
利用蝶形运算得到N=8点时的DIT-FFT运算流图
分析:N点DIT-FFT包含
M级蝶形运算,每一级包含N/2个蝶形单元
一个蝶形单元需要一次复数乘法,两次复数加法,因此:
C M = M ⋅ N 2 = N 2 l o g 2 N , C A = M ⋅ N 2 × 2 = N l o g 2 N C_M=Mcdot frac N2=frac N2log_2N,C_A=Mcdot frac N2×2=Nlog_2N CM=M⋅2N=2Nlog2N,CA=M⋅2N×2=Nlog2N
DIT-FFT与直接计算DFT运算量比较
直接计算: 需要 N 2 N^2 N2次复数乘法,N(N-1)次复数加法
DIT-FFT { C M = M ⋅ N 2 = N 2 l o g 2 N 复 数 乘 法 C A = M ⋅ N 2 × 2 = N l o g 2 N 复 数 加 法 begin{cases} C_M=Mcdot frac N2=frac N2log_2N&复数乘法\ C_A=Mcdot frac N2×2=Nlog_2N&复数加法 end{cases} {CM=M⋅2N=2Nlog2NCA=M⋅2N×2=Nlog2N复数乘法复数加法
加速: R = N 2 ( N / 2 ) l o g 2 N = 2 N l o g 2 N R=frac {N^2}{(N/2)log_2N}=frac{2N}{log_2N} R=(N/2)log2NN2=log2N2N
MATLAB快速傅里叶变换调用格式: X k = f f t ( x n , N ) Xk=fft(xn,N) Xk=fft(xn,N)
频域抽取基2FFT算法
x(n), N = 2 M N=2^M N=2M,M为正整数
按序列号n的自然排序将x(n)前后对半分
X ( k ) = D F T [ x ( n ) ] = ∑ n = 0 N − 1 x ( n ) W N n k = ∑ n = 0 N / 2 − 1 x ( n ) W N n k + ∑ n = N / 2 N − 1 x ( n ) W N n k X(k)=DFT[x(n)]=sum_{n=0}^{N-1}x(n)W_N^{nk}=sum_{n=0}^{N/2-1}x(n)W_N^{nk}+sum_{n=N/2}^{N-1}x(n)W_N^{nk} X(k)=DFT[x(n)]=∑n=0N−1x(n)WNnk=∑n=0N/2−1x(n)WNnk+∑n=N/2N−1x(n)WNnk
= ∑ n = 0 N / 2 − 1 x ( n ) W N n k + ∑ n = 0 N / 2 − 1 x ( n + N 2 ) W N k ( n + N / 2 ) =sum_{n=0}^{N/2-1}x(n)W_N^{nk}+sum_{n=0}^{N/2-1}x(n+frac N2)W_N^{k(n+N/2)} =∑n=0N/2−1x(n)WNnk+∑n=0N/2−1x(n+2N)WNk(n+N/2)
= ∑ n = 0 N / 2 − 1 [ x ( n ) + W N k N / 2 x ( n + N 2 ) ] W N k n =sum_{n=0}^{N/2-1}[x(n)+W_N^{kN/2}x(n+frac N2)]W_N^{kn} =∑n=0N/2−1[x(n)+WNkN/2x(n+2N)]WNkn
∵ W N k N / 2 = e − j 2 π N k N 2 = e − j k π = { 1 k = e v e n ( 偶 数 ) − 1 k = o d d ( 奇 数 ) because W_N^{kN/2}=e^{-jfrac{2pi}Nkfrac N2}=e^{-jkpi}=begin{cases}1&k=even(偶数)\-1&k=odd(奇数)end{cases} ∵WNkN/2=e−jN2πk2N=e−jkπ={1−1k=even(偶数)k=odd(奇数)
∴ X ( k ) = D F T [ x ( n ) ] = { X ( 2 r ) = ∑ n = 0 N / 2 − 1 [ x ( n ) + x ( n + N 2 ) ] ⋅ W N 2 r n k = e v e n X ( 2 r + 1 ) = ∑ n = 0 N / 2 − 1 [ x ( n ) − x ( n + N 2 ) ] ⋅ W N n W N 2 r n k = o d d therefore X(k)=DFT[x(n)]=begin{cases}X(2r)=sum_{n=0}^{N/2-1}[x(n)+x(n+frac N2)]cdot W_N^{2rn}&k=even\X(2r+1)=sum_{n=0}^{N/2-1}[x(n)-x(n+frac N2)]cdot W_N^{n}W_N^{2rn}&k=oddend{cases} ∴X(k)=DFT[x(n)]={X(2r)=∑n=0N/2−1[x(n)+x(n+2N)]⋅WN2rnX(2r+1)=∑n=0N/2−1[x(n)−x(n+2N)]⋅WNnWN2rnk=evenk=odd
令
{
x
1
(
n
)
=
x
(
n
)
+
x
(
n
+
N
2
)
x
2
(
n
)
=
[
x
(
n
)
−
x
(
n
+
N
2
)
]
W
N
n
begin{cases}x_1(n)=x(n)+x(n+frac N2)\x_2(n)=[x(n)-x(n+frac N2)]W_N^nend{cases}
{x1(n)=x(n)+x(n+2N)x2(n)=[x(n)−x(n+2N)]WNn
∴
X
(
k
)
=
D
F
T
[
x
(
n
)
]
=
{
D
F
T
[
x
1
(
n
)
]
D
F
T
[
x
2
(
n
)
]
=
{
X
(
2
r
)
=
∑
n
=
0
N
/
2
−
1
x
1
(
n
)
⋅
W
N
2
r
n
k
=
e
v
e
n
X
(
2
r
+
1
)
=
∑
n
=
0
N
/
2
−
1
x
2
(
n
)
⋅
W
N
2
r
n
k
=
o
d
d
therefore X(k)=DFT[x(n)]=begin{cases}DFT[x_1(n)]\DFT[x_2(n)]end{cases}=begin{cases}X(2r)=sum_{n=0}^{N/2-1}x_1(n)cdot W_N^{2rn}&k=even\X(2r+1)=sum_{n=0}^{N/2-1}x_2(n)cdot W_N^{2rn}&k=oddend{cases}
∴X(k)=DFT[x(n)]={DFT[x1(n)]DFT[x2(n)]={X(2r)=∑n=0N/2−1x1(n)⋅WN2rnX(2r+1)=∑n=0N/2−1x2(n)⋅WN2rnk=evenk=odd
∴
X
(
k
)
=
D
F
T
[
x
(
n
)
]
=
{
D
F
T
[
x
1
(
n
)
]
D
F
T
[
x
2
(
n
)
]
=
{
X
(
2
r
)
=
∑
n
=
0
N
/
2
−
1
x
1
(
n
)
⋅
W
N
/
2
r
n
=
X
1
(
r
)
k
=
e
v
e
n
X
(
2
r
+
1
)
=
∑
n
=
0
N
/
2
−
1
x
2
(
n
)
⋅
W
N
/
2
r
n
=
X
2
(
r
)
k
=
o
d
d
therefore X(k)=DFT[x(n)]=begin{cases}DFT[x_1(n)]\DFT[x_2(n)]end{cases}=begin{cases}X(2r)=sum_{n=0}^{N/2-1}x_1(n)cdot W_{N/2}^{rn}=X_1(r)&k=even\X(2r+1)=sum_{n=0}^{N/2-1}x_2(n)cdot W_{N/2}^{rn}=X_2(r)&k=oddend{cases}
∴X(k)=DFT[x(n)]={DFT[x1(n)]DFT[x2(n)]={X(2r)=∑n=0N/2−1x1(n)⋅WN/2rn=X1(r)X(2r+1)=∑n=0N/2−1x2(n)⋅WN/2rn=X2(r)k=evenk=odd
利用蝶形运算得到N=8点时的DIF-FFT运算流图
运算量: C M = M ⋅ N 2 = N 2 l o g 2 N , C A = M ⋅ N 2 × 2 = N l o g 2 N C_M=Mcdot frac N2=frac N2log_2N,C_A=Mcdot frac N2×2=Nlog_2N CM=M⋅2N=2Nlog2N,CA=M⋅2N×2=Nlog2N
仔细观察基2DIF-FFT运算流图和基2DIT-FFT运算流图会发现,将频域抽取法的运算流图反转,并将输入变输出,输出变输入,正好得到时域抽取法的运算流图
对于实序列进行FFT:把实序列x(n)看作虚部为零的复序列,直接调用fft
IDFT的快速算法
旋转因子指数变极性法
比较DFT和IDFT的运算公式:
X
(
k
)
=
D
F
T
[
x
(
n
)
]
=
∑
n
=
0
N
−
1
x
(
n
)
e
−
j
2
π
N
k
n
,
k
=
0
,
1
,
.
.
.
,
N
−
1
X(k)=DFT[x(n)]=sum_{n=0}^{N-1}x(n)e^{-jfrac{2pi}Nkn},k=0,1,...,N-1
X(k)=DFT[x(n)]=n=0∑N−1x(n)e−jN2πkn,k=0,1,...,N−1
x ( n ) = I D F T [ X ( k ) ] = 1 N ∑ k = 0 N − 1 X ( k ) e j 2 π N k n , n = 0 , 1 , . . . , N − 1 x(n)=IDFT[X(k)]=frac1Nsum_{k=0}^{N-1}X(k)e^{jfrac{2pi}Nkn},n=0,1,...,N-1 x(n)=IDFT[X(k)]=N1k=0∑N−1X(k)ejN2πkn,n=0,1,...,N−1
所以,如果将基2DIT-FFT或基2DIF-FFT算法中的旋转因子 W N p W_N^p WNp改为 W N − p W_N^{-p} WN−p,为X(k)作为输入序列,运算结果乘以1/n,就可以用来快速计算IDFT,得到输出序列x(n)
直接调用FFT子程序:方法1
x ( n ) = 1 N ∑ k = 0 N − 1 X ( k ) W N − k n , 0 ≤ n ≤ N − 1 x(n)=frac 1Nsum_{k=0}^{N-1}X(k)W_N^{-kn},0leq nleq N-1 x(n)=N1∑k=0N−1X(k)WN−kn,0≤n≤N−1
x ∗ ( n ) = 1 N ∑ k = 0 N − 1 X ∗ ( k ) W N k n , 0 ≤ n ≤ N − 1 x^*(n)=frac 1Nsum_{k=0}^{N-1}X^*(k)W_N^{kn},0leq nleq N-1 x∗(n)=N1∑k=0N−1X∗(k)WNkn,0≤n≤N−1
上式两边取共轭得:
x ( n ) = 1 N [ ∑ k = 0 N − 1 X ∗ ( k ) W N k n ] ∗ = 1 N { D F T [ X ∗ ( k ) ] } ∗ , 0 ≤ n ≤ N − 1 x(n)=frac1N[sum_{k=0}^{N-1}X^*(k)W_N^{kn}]^*=frac1N{DFT[X^*(k)]}^*,0leq nleq N-1 x(n)=N1[∑k=0N−1X∗(k)WNkn]∗=N1{DFT[X∗(k)]}∗,0≤n≤N−1
因此,将X(k)取共轭后得到 X ∗ ( k ) X^*(k) X∗(k),输入FFT算出 D F T [ X ∗ ( k ) ] DFT[X^*(k)] DFT[X∗(k)],对其取共轭,再乘以1/N得x(n)
直接调用FFT子程序:方法2
X(k)的DFT g ( n ) = ∑ k = 0 N − 1 X ( k ) W N k n = D F T [ X ( k ) ] , 0 ≤ n ≤ N − 1 g(n)=sum_{k=0}^{N-1}X(k)W_N^{kn}=DFT[X(k)],0leq nleq N-1 g(n)=∑k=0N−1X(k)WNkn=DFT[X(k)],0≤n≤N−1
根据DFT的时域移位性质得
1 N g ( N − m ) = 1 N ∑ k = 0 N − 1 X ( k ) W N k ( N − n ) = 1 N ∑ k = 0 N − 1 X ( k ) W N k N W N − k n frac 1Ng(N-m)=frac 1Nsum_{k=0}^{N-1}X(k)W_N^{k(N-n)}=frac 1Nsum_{k=0}^{N-1}X(k)W_N^{kN}W_N^{-kn} N1g(N−m)=N1∑k=0N−1X(k)WNk(N−n)=N1∑k=0N−1X(k)WNkNWN−kn
= 1 N ∑ k = 0 N − 1 X ( k ) W N − k n = x ( n ) , 0 ≤ n ≤ N − 1 =frac 1Nsum_{k=0}^{N-1}X(k)W_N^{-kn}=x(n),0leq nleq N-1 =N1∑k=0N−1X(k)WN−kn=x(n),0≤n≤N−1
因此, x ( n ) = 1 N g ( N − m ) , 0 ≤ n ≤ N − 1 x(n)=frac 1Ng(N-m),0leq nleq N-1 x(n)=N1g(N−m),0≤n≤N−1
将X(k)作为FFT的输入,求出g(n),将g(n)进行移位的g(N-m),再乘以1/n,得x(n),即求出X(k)的逆IDFT
最后
以上就是细腻烧鹅为你收集整理的数字信号处理(五)快速傅里叶变换FFT的由来基2FFT算法IDFT的快速算法的全部内容,希望文章能够帮你解决数字信号处理(五)快速傅里叶变换FFT的由来基2FFT算法IDFT的快速算法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复