快速傅里叶变换(FFT)
4.2 基2FFT算法
直接计算DFT DFT的特点及减少运算量的基本途径 4.2.1 直接计算DFT的特点及减少运算量的基本途径 1.直接计算DFT 1.直接计算DFT 直接计算 长度为N的有限长序列x(n)的DFT为 长度为N的有限长序列x(n)的DFT为: x(n) 考虑x(n)为复数序列 考虑x(n)为复数序列 x(n) 的一般情况, 的一般情况,对某一 个k值,直接按上式 计算X(k)值需要N次 计算X(k)值需要N X(k)值需要 复数乘法、(N-1)次复 复数乘法、(N-1)次复 数加法。 数加法。
r=0 n=r=0
∑
x(2r)W2kr + N
r=0
N /2−1
r=0 n= r=0
∑
x(2r +1)Wk(2r+1) N
r=0
Wx(2reW2kr N= e WN = WN kr =r) 1 Wk(2r 1) 2kr e 2 / 2 = = ∑ x(2r)W r) +W x (r)W ( + N) + ∑ ∑ = x∑ )+W ∑∑ x 1(r x (
k N
4.2 基2FFT算法
(3)第二次分解: 第二次分解: (r)按 取奇、偶可分解成2个长度为N/ N/4 将x1(r)按r取奇、偶可分解成2个长度为N/4的子序列 l)、 x3(l)= x1(2l)、 l=0,1,…,N/4-1; (2l+1), x4(l) = x1(2l+1), (k), k=0,1,…,N/2 ,N/2根据上面推导可得: 根据上面推导可得:X1 (k)= X3(k)+ WN/2k⋅X4(k), k=0,1, ,N/2-1 X1 (k)=X3(k)+WN/2k⋅X4(k), k=0,1,…,N/4-1; X1 (k+N/2)=X3(k)−WN/2k⋅X4(k), k=0,1,…,N/4-1; (r)按 取奇、偶可分解成2个长N/4 N/4的子序列 将x2(r)按r取奇、偶可分解成2个长N/4的子序列 l=0,1,…, x5(l)= x2(2l) , l=0,1, ,N/4 x6(l) = x2(2l+1) ; 同理得 X2(k) = X5(k)+ WN/2k⋅X6(k), k=0,1,…,N/4-1 ; X2(k+N/2) = X5(k)− WN/2k⋅X6(k), k=0,1,…,N/4-1;
第4章 快速傅里叶变换(FFT)
本章主要内容
引言 基2FFT算法 2FFT算法 进一步减少运算量的措施
4.1 引言
DFT是信号分析与处理中的一种重要变换。但直接计算DFT的 DFT是信号分析与处理中的一种重要变换。 直接计算DFT的 是信号分析与处理中的一种重要变换 DFT 较大时, 计算量与变换区间长度N的平方成正比, 计算量与变换区间长度N的平方成正比,当N较大时,计算量 太大,直接用DFT DFT算法进行谱分析和信号的实时处理是不切 太大 , 直接用 DFT 算法进行谱分析和信号的实时处理是不切 实际的。 实际的。 的一种快速算法, 1965年发现了DFT的一种快速算法,使DFT的运算效率提高1-2 个数量级, 个数量级 ,为数字信号处理技术应用于各种信号的实时处理 创造了条件,推动了数字处理技术的发展。 创造了条件,推动了数字处理技术的发展。 1984年 提出了分裂基快速算法,使运算效率进一步提高; 1984年,提出了分裂基快速算法,使运算效率进一步提高; 分裂基快速算法
4.2 基2FFT算法
(2)用N/2点 (k)和 (k)表示序列x(n)的 表示序列x(n) (2)用N/2点X1(k)和X2(k)表示序列x(n)的N点DFT X(k)
kn kn X ( k ) = ∑ x ( n )WN + ∑ x ( n )WN n = 偶数 n= n = 奇数 n=
=
N /2−1
完成一个蝶形运算需要 一次复数乘和两次复数 加法运算, 加法运算,经过一次分 解后, 解后,共需要复数乘和 复数加的次数为 2(N/2)2+N/2和N2/2
对上式的运算用下图所示的流图符号来表示 对上式的运算用下图所示的流图符号来表示 流图符号
X1(k) X2(k) WNk X1(k)+ WNk⋅X2(k) X1(k)−WNk⋅X2(k)
m = −WN
不断地把长序列的DFT分解成几个短序列的DFT, 分解成几个短序列 不断地把长序列的DFT分解成几个短序列的DFT,并利用旋转 长序列 因子的周期性和对称性来减少DFT的运算次数。 因子的周期性和对称性来减少DFT的运算次数。 周期性 来减少DFT的运算次数
4.2 基2FFT算法
时域抽取法基2FFT基本原理 4.2.2 时域抽取法基2FFT基本原理 FFT算法基本上分为两大类:时域抽取法FFT(简称DIT FFT)和 FFT(简称DITFFT算法基本上分为两大类:时域抽取法FFT(简称DIT-FFT)和 算法基本上分为两大类 频域抽取法FFT(简称DIF―FFT)。 频域抽取法FFT(简称DIF―FFT)。 FFT(简称DIF 1、时域抽取法FFT的算法思想: 时域抽取法FFT的算法思想: FFT的算法思想 将序列x(n)按 n 为奇 、 偶数分为 x1(n) 、 x2(n) 两组序列 ; 用 2 两组序列; 将序列 x(n)按 为奇、偶数分为x (n)、 (n)两组序列 x(n)
N/2 的计算。 个N/2点DFT来完成一个N点DFT的计算。
设序列x(n)的长度为N 且满足: 设序列x(n)的长度为N,且满足: N = 2M , x(n)的长度为 的奇偶把x(n) x(n)分解为两个 (1) 按n的奇偶把x(n)分解为两个N/2点的子序列
M 为自然数
{
x1(r) = x(2r), r = 0,1 ⋅⋅⋅ N−1 , x (r) = x(2r +1), r = 0,1 ⋅⋅⋅ −1 , x2(r) = x(2r +1), r = 0,1 ⋅⋅⋅ 2 −1 ,
m =周期性: WNlN = e WN +lN e WN m =m 周期性:
e
e e =
[W W
N Nm m∗ ∗ −− NN
= WN em
] == W W
mm NN
m WN
对称性:W == W 对称性: W W 3、FFT算法思想 FFT算法思想
− mm − NN
N Nm m −− NN
WN
m+
N 2
X (0) X (1) X (2) X (3) X (4) X (5) X (6) X (7)
N/2 点DFT
N=8点的DIT-2FFT(时域抽取图)一次分解图
{
N X(k) = X1(k) +W X2(k) k = 0,1 ⋅⋅⋅ −1 , 2 N N k X(k + ) = X1(k) −W X2(k) k = 0,1 ⋅⋅⋅ −1 , N 2 2
1
X1(0) X1(1) X1(2) X1(3) X2(0) X2(1) X2(2) X2(3) WN 0 WN1 WN2 WN3
X (0) X (1) X (2) X (3) X (4) X (5) X (6) X (7)
N=8点DFT的二次时域抽取分解图
X1 (k)=X3(k)+WN/2k⋅X4(k) X1 (k+N/2)=X3(k)−WN/2k⋅X4(k) X2(k) = X5(k)+ WN/2k⋅X6(k) X2(k+N/2) = X5(k)− WN/2k⋅X6(k)
k=0,1,…,N/4-1 ;
4.2 基2FFT算法
再次分解,对N=8点,可分解三次。
x(0) x(4) x(2) x(6) x(1) x(5) x(3) x(7) WN0 WN0 WN0 WN0 X3(0) X3(1) X4(0) X4(1) X5(0) X5(1) X6(0) X6(1) WN/20 WN/21 WN/20 WN/2
X(k) = ∑ x(n)Wkn, k = 0,1,⋅⋅⋅, N −1 N
n=0
N−1
2、减少运算量的思路和方法
思路:N 点 DFT的复乘次数等于N2 。 把 N 点 DFT分解为几个 思路 : DFT的复乘次数等于N DFT分解为几个 的复乘次数等于
较短的DFT, 可使乘法次数大大减少。另外,旋转因子W 较短的 DFT, 可使乘法次数大大减少 。 另外 , 旋转因子 WmN DFT 具有周期性和对称性。 具有周期性和对称性。
图:蝶形运算符号
4.2 基2FFT算法
A
A + BC
B
C
A - BC
蝶形运算符号
4.2 基2FFT算法
x(0) x(2) x(4) x(6) x(1) x(3) x(5) x(7)
N/2 点DFT
X1(0) X1(1) X1(2) X1(3) X2(0) X2(1) X2(2) X2(3) WN0 WN1 WN2 WN3
4.2 基2FFT算法
x(0) x(4) x(2) x(6) x(1) x(5) x(3) x(7) X3(0) N/4 点 X3(1) DFT X4(0) N/4 点 0 X4(1) WN/2 DFT WN/2 X5(0) 1 N/4 点 X5(1) DFT X6(0) N/4 点 WN/20 X6(1) DFT WN/2
{
X(k) = X1(k) +Wk X2(k) k = 0,1 ⋅⋅⋅ −1这样将N点DFT分 , 这样将N DFT分 N N 解为两个N/2 N/2点的 X(k) = X (k) +W X (k) k = 0,1 ⋅⋅⋅ −1 解为两个N/2点的 , 2 N DFT N k X(k + ) = X1(k) −W X2(k) k = 0,1 ⋅⋅⋅ −1 , N 2 2
4.2 基2FFT算法 方法: 方法: