按时间抽取的基2FFT算法分析

合集下载

FFT快速傅里叶变换(蝶形算法)详解概要

FFT快速傅里叶变换(蝶形算法)详解概要
第五章 快速傅里叶变换
本章目录

直接计算DFT的问题及改进的途径 按时间抽取的基2-FFT算法 按频率抽取的基2-FFT算法 快速傅里叶逆变换(IFFT)算法 Matlab实现
2
5.1 引言

DFT在实际应用中很重要: 可以计算信号的频
谱、功率谱和线性卷积等。

直接按DFT变换进行计算,当序列长度N很

9
5.3.1 算法原理
设N=2L,将x(n)按 n 的奇偶分为两组:
x(2r ) x1 (r )
x(2r 1) x2 (r )
r
N =0,1,…, 1 2

X (k ) DFT [ x(n)] x(n)WNnk
n 0
N 1

n 0 n为偶数
x(n)W
N 1
x1 (r )W
r ( N 2 k ) N 2
rk x1 (r )WN 2 X 1 (k ) r 0
N 2 1
同理可得
N k ) X 2 (k ) 2
12
考虑到 及前半部分X(k)
( N 2 k ) N 2 k k WN WN WN WN
k X (k ) X 1 (k ) WN X 2 (k )
运算前
A(k ) X 1 (k ) X (k )
运算后
A(k )
A(k
N ) X 2 (k ) 2
k WN
N A(k N ) X (k ) 2 2
30
观察原位运算规律
31
蝶形运算两节点间的距离

蝶形运算两节点间的距离
以N=8为例: 第一级蝶形,距离为: 第二级蝶形,距离为: 第三级蝶形,距离为: 1 2 4

常用FFT算法

常用FFT算法

常用FFT 算法总结一、DFT 及IDFT 的定义对于N 点有限长序列)(n x ,其DFT 及IDFT 定义如下: DFT :∑-==10)()(N n nk N W n x k XIDFT :∑-=-=1)(1)(N k nk NWk X Nn x其中,Np j p NeW/2π-=称为旋转因子,p 称为旋转因子的指数。

二、基2-FFT 算法 设序列)(n x 的长度N 满足MN2=,M 为自然数。

1、时间域抽取FFT (DIT-FFT ) (1)算法原理按n 的奇偶把)(n x 分解为两个N/2点的子序列:)12()()2()(21+==r x r x r x r x则)(n x 的DFT 为)()()12()2()(2112/0)12(12/02k X W k X Wr x Wr x k X kN N r k r NN r rk N+=++=∑∑-=+-=其中)(1k X 和)(2k X 分别为)(1r x 和)(2r x 的N/2点DFT 。

利用)(1k X 和)(2k X 的周期性,)(k X 可以表示为⎪⎩⎪⎨⎧-=++=)()()2()()()(2121k X W k X N k X k X W k X k X kN k N 上式表明一个N 点的DFT 可以用两个N/2点的DFT 来表示。

(2)运算量 当MN2=时,共有M 级蝶形,每级N/2个蝶形,每个蝶形有1次复数乘法2次复数加法。

复数乘法:NN M N mF2log22==复数加法:NN NM a F2log==NN NN NFFT m DFT m F F 222log2log 2)()(==(3)蝶形运算⎪⎩⎪⎨⎧-=+=----)()()()()()(1111j X W k X j X j X W k X k X m pN m m m pN m m m表示第m 级迭代,k 和j 表示数据所在的行数,12-+=m k j ,m M k p -⋅=2。

按时间抽取的基二FFT运算

按时间抽取的基二FFT运算

7
思考题
§3.3.1 按时间抽取的FFT
FFT算法比DFT算法快在哪里?
基二按时间抽取FFT流图的画法和运算量
8
三、N点按时间抽取基二FFT算法运算量
§3.3.1 按时间抽取的FFT
一个基本蝶形运算的复乘次数:1次,复加次数:2次
基二按时间抽取FFT流图的画法和运算量
9
三、N点按时间抽取基二FFT算法运算量
基二按时间抽取FFT流图的画法和运算量
14
基二按时间抽取FFT运算
谢谢
§3.3.1 按时间抽取的FFT
15
基二按时间抽取FFT流图的画法和运算量
3
§3.3.1 按时间抽取的FFT
本节授课内容:
1、复习基本蝶形运算 2、演示N=8点的按时间抽取的基二FFT运算的算法过程 3、学习按时间抽取的基二FFT的运算量(即复乘复加 次数) 4、了解FFT的一些实际应用
重点、难点:
按时间抽取的基二FFT运算量的分析与计算
11
三、N点按时间抽取基二FFT算法运算量
§3.3.1 按时间抽取的FFT
基二按时间抽取FFT流图的画法和运算量
12
基二按时间抽取FFT运算
§3.3.1 按时间抽取的FFT
单元小结
13
四、作业要求
§3.3.1 按时间抽取的FFT
1. 3-13 , 3-22(可参考P107页例题)
2. teamwork的报告,题目自拟或上述应用 中的FFT应用分析
4
一、复习基本蝶形运算
§3.3.1 按时间抽取的FFT
基二按时间抽取FFT流图的画法和运算量
5
一、复习基本蝶形运算
§3.3.1 按时间抽取的FFT

按时间抽取的基2FFT算法分析

按时间抽取的基2FFT算法分析

按时间抽取的基2FFT算法分析基2FFT算法是一种快速傅里叶变换算法,它通过将傅里叶变换的计算复杂度从O(n^2)降低到O(nlogn),大大提高了傅里叶变换的效率。

基2FFT算法的核心思想是将一个长度为n的序列分成长度为n/2的两个子序列,并分别做傅里叶变换。

然后将两个子序列的傅里叶变换结果合并起来,得到原始序列的傅里叶变换结果。

具体来说,基2FFT算法的步骤如下:1.如果输入序列长度为1,则返回输入序列作为傅里叶变换结果。

2.将输入序列按奇偶位置分为两个子序列。

3.对两个子序列分别递归地应用基2FFT算法,得到它们的傅里叶变换结果。

4.根据蝶形算法,将子序列的傅里叶变换结果合并起来,得到原始序列的傅里叶变换结果。

基2FFT算法通过不断将序列分成两半的方式,将傅里叶变换的计算复杂度从O(n^2)降低到O(nlogn)。

在每一层递归中,需要进行O(n)次计算,而递归的层数为logn,因此总的时间复杂度为O(nlogn)。

基2FFT算法的关键之一是蝶形算法。

蝶形算法是一种合并子序列傅里叶变换结果的方法。

在每一层递归中,对于每个位置k,需要计算一个长度为n的序列上的k点DFT。

根据蝶形算法,可以将这个计算分成两个部分:计算序列中偶数位置上的点DFT和计算序列中奇数位置上的点DFT,并通过一些乘法和加法操作合并起来。

这样做可以大大减少计算量,提高计算效率。

基2FFT算法还可以通过多线程或并行处理来进一步提高效率。

由于基2FFT算法具有递归结构,可以将不同的递归层分配给不同的线程或处理器来并行进行计算,从而加快计算速度。

基2FFT算法在数字信号处理、图像处理、通信系统和科学计算等领域有着广泛的应用。

它的高效性和快速运算速度使得它成为处理大规模数据的重要工具。

综上所述,基2FFT算法通过将傅里叶变换的计算复杂度从O(n^2)降低到O(nlogn),大大提高了傅里叶变换的效率。

它采用递归分治的思想,通过分解和合并操作来实现傅里叶变换的计算。

fft的C语言实现

fft的C语言实现

算法原理:按时间抽取(DIT)FFT算法将时间序列x(n)的次序重排,并利用W i n函数的特性,将长序列的离散傅里叶变换运算逐渐分解成较短序列的离散傅里叶变换计算,从而提高运算效率。

基2DIT FFT的特点(1)倒位序输出频谱抽样值X(K)是按照顺序出现的,但是输入时间序列x(n)的顺序被打乱了。

可以使用“二进制码位倒置法”对输入的时间序列x(n)进行排序。

比如对N=8,用三位二进制码n2n1n0表示。

对于正序来说,十进制数序号n的二进制数的关系为n=22n2+2n1+n0倒位序的序号为n=22n0+2n1+n2(2)运算结构FFT的运算结构式由大量的蝶形流图组成的。

基2DIT FFT运算是将N点的DFT先分成2个N/2点DFT,再是4个N/4点DFT,直至N/2个2点DFT。

每分一次,称为一“级”运算,前一级的输出时候一级的输入。

在编程过程中要解决码位到序、级数级数、旋转因子计算及蝶形运算流图的编程实现。

程序流程图。

利用WIN-TC测试程序,对一三角波序列进行FFT。

将得到的结果与matable的结果进行比较,判断其正确性。

对三角波序列x(n)={0,1,2,3,4,5,6,5,4,3,2,1,0}在WIN-TC进行128点FFT,得到前6个结果Matable仿真的前6个结果是XKN2 =Columns 1 through 636.0000 34.2084 -10.3770i 29.1007 -19.4445i 21.4292 -26.1115i 12.2946 -29.6817i 2.9501 -29.9525i前半段波形对比显示WIN-TC结果能保证小数点后2位的精度。

对方波序列x(n),长度为64,前32为1,幅值为1的序列在WIN-TC进行128点FFT,得到前6个结果Matable仿真的前6个结果是Columns 1 through 632.0000 20.8677 -19.8677i 1.0000 -20.3555i -6.2783 - 7.2783i 04.5539 - 3.5539i仿真波形对比显示WIN-TC结果能保证小数点后2位的精度。

4-2按时间抽取(DIT)的FFT算法

4-2按时间抽取(DIT)的FFT算法
2
其中,
X 2 (k ) =

r =0
−1 rk x 2 ( r )W N =
2

r =0
−1 rk x ( 2 r + 1)W N
2
ห้องสมุดไป่ตู้
2.两点结论: (1) X1(k),X 2(k)均为N/2点的DFT。 k (2) X(k)=X 1(k)+WN X 2(k)只能确定出 X(k)的k= 0,1,L, N − 1 个; 2 即前一半的结果。
构成N/4点DFT,从而得到X6(0), X6(1)。
(5)由 X3(0), X3(1), X4(0), X4(1)进行碟形运算,
得到X1(0), X1(1), X1(2), X1(3)。
(6)由 X5(0), X5(1), X6(0), X6(1)进行碟形运算,
得到X2(0), X2(1), X2(2), X2(3)。
k N/2
例如,N=8时的DFT可分解为四个N/4的DFT, 具体步骤如下:
(1) 将原序列x(n)的“偶中偶”部分:
x3 (l ) = x1 (r ) = x(n) x3 (0) = x1 (0) = x(0) x3 (1) = x1 (2) = x(4)
构成N/4点DFT,从而得到X3(0), X3(1)。
因此,X (k ) =
DFT[ x(n)] = ∑ x(n)W
n −0
N −1
nk N
X (k ) = = =
∑ x ( n )W
N 2
N −1
n = 0 (n为偶数) −1
nk N
+ ∑ x ( n )W
n=0
N 2
N −1
nk N

按时间抽选的基2-FFT算法

按时间抽选的基2-FFT算法
W0 8 W1 8 W2 8 W3 8
X(0) X(1) X(2) X(3) X(4) X(5) X(6) X(7)
因为4点 还是比较麻烦, 因为 点DFT还是比较麻烦,所以再继续分解。 还是比较麻烦 所以再继续分解。 若将N/2(4点)子序列按奇 偶分解成两个 点 子序列按奇 偶分解成两个N/4点(2点)子 子序列按奇/偶分解成两个 若将 点 点子 分解成奇、 序列。即对将x 和 序列。即对将 1(r)和x2(r)分解成奇、偶两个 分解成奇 偶两个N/4点(2点) 点 点 点的子序列。 点的子序列。
n=0
nk x ( n )W N
=
N / 2 −1 r =0
2 x ( 2r )W N rk + ∑
N / 2 −1 r =0
( x ( 2r + 1)W N2 r +1) k ∑
=
N / 2 −1 r =0
2 k x1 (r )WN rk + WN ∑
N / 2 −1 r =0
2 x2 (r )WN rk ∑
后半部分
k = X 1 (k ) − W N X 2 (k )
k = 0,1, L , N 2 − 1
k X (k ) = X 1 (k ) + W N X 2 (k )
前半部分
k X ( N / 2 + k ) = X 1 (k ) − W N X 2 (k )
k = 0,1, L , N 2 − 1
N=8点的直接 点的直接DFT的计算量为: 的计算量为: 点的直接 的计算量为 复乘: 复乘:N2次 = 64次 次 复加: 复加:N(N-1)次 = 8×7=56次 次 × 次
X(k) = X1(k) +Wk X2(k) N X(k + N/ 2) = X1(k) −W X2(k)

范例FFT算法程序及分析

范例FFT算法程序及分析

FFT 算法程序及分析摘 要:《FFT 的算法程序分析》主要分析了按时间抽取(DIT)的快速傅立叶变换的基2FFT 算法,通过对基2FFT 算法的原理的分析及与DFT 算法运算量的比较,进一步推导出了基rFFT 算法,重点是基rFFT 算法的推导。

在具体的实例中,我们重点分析了FFT 过程中幅值大小与FFT 选用点数N 的关系,验证FFT 变换的可靠性,考察在FFT 中数据样本的长度与DFT 的点数对频谱图的影响。

关键字: 基2FFT 算法,基rFFT 算法,样本长度,选用点数要求:● 学习书上第六节的内容,自己编程实现FFT 算法 . ● 给出典型信号的时域和频域图,并加以分析。

● 可尝试实现分段卷积程序。

● 论文内容含原程序、运行结果,理论分析和典型信号时域图。

一.快速傅立叶变换(FFT )简介离散傅立叶变换(DFT )是信号分析与处理中的一种重要的变换。

因直接计算DFT 的计算量与变换区间长度N 的平方成正比,当N 较大时,计算量太大。

所以在快速傅立叶变换(FFT )出现以前,直接用DFT 算法进行频谱分析和信号的实时处理是不切实际的。

1965年,库利(J.W.Cooley )和图基(J.W.Tukey )在《计算数学》杂志上发表了“机器计算傅立叶级数的一种算法”的文章,这是一篇关于计算DFT 的一种快速有效的计算方法的文章。

它的思路建立在对DFT 运算内在规律的认识之上。

这篇文章的发表使DFT 的计算量大大减少,并导致了许多计算方法的发现。

这些算法统称为快速傅立叶变换(Fast Fourier Transform),简称FFT.1984年,法国的杜哈梅尔(P.Dohamel )和霍尔曼(H.Hollmann )提出的分裂基快速算法,使运算效率进一步提高。

快速傅立叶变换(FFT )不是一种新的变换,而是离散傅立叶变换(DFT )的一种快速算法。

FFT 分成两大类,即按时间抽取(decimation —in —time,缩写为DIT )法和按频率抽取(decimation —in —frequency ,缩写为DIF)法。

按时间抽取的基2FFT算法分析

按时间抽取的基2FFT算法分析

第四章 快速傅里叶变换有限长序列可以通过离散傅里叶变换(DFT)将其频域也离散化成有限长序列.但其计算量太大,很难实时地处理问题,因此引出了快速傅里叶变换(FFT). 1965年,Cooley 和Tukey 提出了计算离散傅里叶变换(DFT )的快速算法,将DFT 的运算量减少了几个数量级。

从此,对快速傅里叶变换(FFT )算法的研究便不断深入,数字信号处理这门新兴学科也随FFT 的出现和发展而迅速发展。

根据对序列分解与选取方法的不同而产生了FFT 的多种算法,基本算法是基2DIT 和基2DIF 。

FFT 在离散傅里叶反变换、线性卷积和线性相关等方面也有重要应用。

快速傅里叶变换(FFT )是计算离散傅里叶变换(DFT )的快速算法。

DFT 的定义式为)(k X =)()(10k R W n x N N n knN∑-= 在所有复指数值knN W 的值全部已算好的情况下,要计算一个)(k X 需要N 次复数乘法和N -1次复数加法。

算出全部N 点)(k X 共需2N 次复数乘法和)1(-N N 次复数加法。

即计算量是与2N 成正比的。

FFT 的基本思想:将大点数的DFT 分解为若干个小点数DFT 的组合,从而减少运算量。

N W 因子具有以下两个特性,可使DFT 运算量尽量分解为小点数的DFT运算:(1) 周期性:kN n N kn N nN k N W W W )()(++== (2) 对称性:k N N k NW W -=+)2/(利用这两个性质,可以使DFT 运算中有些项合并,以减少乘法次数。

例子:求当N =4时,X(2)的值)()]3()1([)]2()0([)()]3()1([)]2()0([)3()2()1()0()()2(04240464442404324对称性-=周期性W x x x x W x x W x x W x W x W x W x W n x X n n +++++=+++==∑=通过合并,使乘法次数由4次减少到1次,运算量减少。

按时间抽取的FFT算法讲义

按时间抽取的FFT算法讲义

按时间抽取的FFT算法讲义1. 引言FFT(快速傅里叶变换)算法是一种高效的计算离散傅里叶变换(DFT)的方法,被广泛应用于信号处理、图像处理和科学计算等领域。

在本讲义中,我们将按照时间的顺序介绍FFT 算法的基本原理和步骤。

2. DFT的定义离散傅里叶变换(DFT)将离散时间域的信号转换为频域的复数信号,其定义为:X(k) = Σ[x(n) * exp(-j*2πnk/N)]其中,X(k) 表示频域的复数信号,x(n) 是输入的离散时间域信号,N 是信号的样本点数,k 是频率索引(0 ≤ k < N)。

3. DFT的计算DFT的直接计算方法是通过遍历所有频率索引 k,并计算上述公式。

但这种方法的时间复杂度为 O(N^2),当样本点数较大时计算开销较大。

4. 快速傅里叶变换的思想FFT算法的核心思想是将 DFT 的计算过程分解为多个规模较小的 DFT 计算,以降低计算的复杂度。

具体而言,FFT算法利用了信号的周期性质,将输入信号划分为奇数索引和偶数索引的两个子序列,分别进行 DFT 的计算。

5. 雷德算法(Radix-2)雷德算法是FFT算法的一种常用实现方式,其基本思路是将DFT 计算递归地分解为规模为 M/2 的子问题,并利用旋转因子求解。

6. FFT算法的步骤(1)输入信号 x(n) 的样本点数为 N,其中 N 必须为2的幂次,否则需要进行零填充。

(2)将输入信号分解为奇数索引和偶数索引的两个子序列。

(3)对两个子序列分别进行 FFT 的计算。

(4)通过旋转因子和蝶形结构计算两个子序列的 DFT。

(5)将两个子序列的 DFT 结果合并得到整个信号的 DFT。

7. FFT算法的优势相较于直接计算DFT,FFT算法具有以下优势:- 时间复杂度为 O(NlogN),较直接计算的 O(N^2) 更高效。

- 适用于样本点数为2的幂次的信号。

- 算法实现简单易懂,且可以通过并行计算进一步提高效率。

按时间抽取的基2FFT算法分析及MATLAB实现

按时间抽取的基2FFT算法分析及MATLAB实现

按时间抽取的基2FFT算法分析及MATLAB实现基2FFT算法是一种快速傅里叶变换(Fast Fourier Transform,FFT)的算法,在信号处理、图像处理等领域有着广泛的应用。

该算法通过将N个输入值分解成两个长度为N/2的DFT(离散傅里叶变换)来实现快速的计算。

本文将对基2FFT算法进行分析,并给出MATLAB实现。

基2FFT算法的主要思路是将输入序列分解成奇偶两个子序列,然后分别对这两个子序列进行计算。

具体步骤如下:1.将输入序列拆分成奇数位和偶数位两个子序列。

比如序列x[0],x[1],x[2],x[3]可以拆分成x[0],x[2]和x[1],x[3]两个子序列。

2. 对两个子序列分别进行DFT计算。

DFT的定义为:X[k] = Σ(x[n] * exp(-i * 2π * k * n / N)),其中k为频率的索引,N为序列长度。

3.对得到的两个DFT结果分别进行合并。

将奇数位子序列的DFT结果和偶数位子序列的DFT结果合并成一个长度为N的DFT结果。

4.重复以上步骤,直到计算结束。

基2FFT算法的时间复杂度为O(NlogN),远远小于直接计算DFT的时间复杂度O(N^2)。

这是因为基2FFT算法将问题的规模逐步减半,从而实现了快速的计算。

下面是MATLAB中基2FFT算法的简单实现:```matlabfunction X = myFFT(x)N = length(x);if N == 1X=x;%递归结束条件return;endeven = myFFT(x(1:2:N)); % 偶数位子序列的FFT计算odd = myFFT(x(2:2:N)); % 奇数位子序列的FFT计算W = exp(-1i * 2 * pi / N * (0:N/2-1)); % 蝶形因子temp = W .* odd; % 奇数位子序列的DFT结果乘以蝶形因子X = [even + temp, even - temp]; % 合并得到一个长度为N的DFT结果end```上述代码中,函数myFFT为基2FFT算法的MATLAB实现。

按时间抽取基2的FFT算法的实现

按时间抽取基2的FFT算法的实现

按时间抽取基2的FFT算法的实现
杜义君
【期刊名称】《塔里木大学学报》
【年(卷),期】2007(19)2
【摘要】详细介绍按时间抽取的傅立叶快速变换算法的基本原理,深入分析其特点,介绍了其程序实现的思想和具体内容.
【总页数】3页(P85-87)
【作者】杜义君
【作者单位】塔里木大学信息工程学院,新疆,阿拉尔,843300
【正文语种】中文
【中图分类】TP314
【相关文献】
1.按频率抽取的基-2FFT算法的矩阵形式 [J], 左大海;常安定;马良
2.基于FPGA的混合基FFT算法设计与实现 [J], 侯晓晨;孟骁;陈昊
3.基于FPGA的混合基FFT算法设计与实现 [J], 侯晓晨;孟骁;陈昊
4.按频率抽取的基4FFT算法在FPGA中实现 [J], 刘学梅;孙志坚
5.一种按时间抽取的混合基实序列高效FFT算法 [J], 张卉;刘永刚;阎跃鹏
因版权原因,仅展示原文概要,查看原文内容请购买。

(完整word版)按时间抽取的基2FFT算法分析

(完整word版)按时间抽取的基2FFT算法分析

第四章 快速傅里叶变换有限长序列可以通过离散傅里叶变换(DFT)将其频域也离散化成有限长序列.但其计算量太大,很难实时地处理问题,因此引出了快速傅里叶变换(FFT). 1965年,Cooley 和Tukey 提出了计算离散傅里叶变换(DFT )的快速算法,将DFT 的运算量减少了几个数量级。

从此,对快速傅里叶变换(FFT )算法的研究便不断深入,数字信号处理这门新兴学科也随FFT 的出现和发展而迅速发展。

根据对序列分解与选取方法的不同而产生了FFT 的多种算法,基本算法是基2DIT 和基2DIF 。

FFT 在离散傅里叶反变换、线性卷积和线性相关等方面也有重要应用。

快速傅里叶变换(FFT )是计算离散傅里叶变换(DFT )的快速算法。

DFT 的定义式为)(k X =)()(10k R W n x N N n knN∑-= 在所有复指数值knN W 的值全部已算好的情况下,要计算一个)(k X 需要N 次复数乘法和N -1次复数加法。

算出全部N 点)(k X 共需2N 次复数乘法和)1(-N N 次复数加法。

即计算量是与2N 成正比的。

FFT 的基本思想:将大点数的DFT 分解为若干个小点数DFT 的组合,从而减少运算量。

N W 因子具有以下两个特性,可使DFT 运算量尽量分解为小点数的DFT运算:(1) 周期性:k N n N kn N nN k N W W W )()(++== (2) 对称性:k N N k NW W -=+)2/(利用这两个性质,可以使DFT 运算中有些项合并,以减少乘法次数。

例子:求当N =4时,X(2)的值)()]3()1([)]2()0([)()]3()1([)]2()0([)3()2()1()0()()2(04240464442404324对称性-=周期性W x x x x W x x W x x W x W x W x W x W n x X n n +++++=+++==∑=通过合并,使乘法次数由4次减少到1次,运算量减少。

FFT算法思想

FFT算法思想

一.FFT 算法思想:1.DFT 的定义:对于有限长离散数字信号{x[n]},0 ≤ n ≤ N-1,其离散谱{x[k]}可以由离散付氏变换(DFT )求得。

DFT 的定义为:21[][]N jnk Nn X k x n eπ--==∑,k=0,1,…N-1通常令2jNN eW π-=,称为旋转因子。

2.直接计算DFT 的问题及FFT 的基本思想:由DFT 的定义可以看出,在x[n]为复数序列的情况下,完全直接运算N 点DFT 需要(N-1)2次复数乘法和N (N-1)次加法。

因此,对于一些相当大的N 值(如1024)来说,直接计算它的DFT 所作的计算量是很大的。

FFT 的基本思想在于,将原有的N 点序列分成两个较短的序列,这些序列的DFT 可以很简单的组合起来得到原序列的DFT 。

例如,若N 为偶数,将原有的N 点序列分成两个(N/2)点序列,那么计算N 点DFT 将只需要约[(N/2)2 ·2]=N 2/2次复数乘法。

即比直接计算少作一半乘法。

因子(N/2)2表示直接计算(N/2)点DFT 所需要的乘法次数,而乘数2代表必须完成两个DFT 。

上述处理方法可以反复使用,即(N/2)点的DFT 计算也可以化成两个(N/4)点的DFT (假定N/2为偶数),从而又少作一半的乘法。

这样一级一级的划分下去一直到最后就划分成两点的FFT 运算的情况。

3.基2按时间抽取(DIT )的FFT 算法思想:设序列长度为2L N =,L 为整数(如果序列长度不满足此条件,通过在后面补零让其满足)。

将长度为2L N =的序列[](0,1,...,1)x n n N =-,先按n 的奇偶分成两组:12[2][][21][]x r x r x r x r =+=,r=0,1,…,N/2-1DFT 化为:1/21/212(21)0/21/21221200/21/211/22/2[]{[]}[][2][21][][][][]N N N nkrk r kNNNn r r N N rk k rk NNN r r N N rk k rk N NN r r X k DFT x n x n Wx r Wx r W x r W Wx r W x r WWx r W ---+===--==--=====++=+=+∑∑∑∑∑∑∑上式中利用了旋转因子的可约性,即:2/2rkrkNN W W =。

FFT算法分析

FFT算法分析

FFT算法分析FFT 算法分析FFT 算法的基本原理是把长序列的DFT 逐次分解为较短序列的DFT 。

按照抽取方式的不同可分为DIT-FFT (按时间抽取)和DIF-FFT (按频率抽取)算法。

按照蝶形运算的构成不同可分为基2、基4、基8以及任意因子(2n,n 为大于1的整数),基2、基4算法较为常用。

基2、DIT-FFT (按时间抽取):-10/21/212(21)/21/21/2/2()() ()()(2)(21)(2)(21)N knNn knknN Nn n N N k r k r NNr n N N kr k kr N NN r n X k x n W x n W x n W x r Wx r Wx r WWx r W ===--+==--====+=++=++∑∑∑∑∑∑∑偶数奇数000令/211/2(2)()N kr N r x r WX k -==∑0,/212/2(21)()N kr N r x r WX k -=+=∑0,则有:1212()()()(/2)()()kN kNX k X k W X k X k N X k W X k =++=-蝶形运算单元如下所示:基2、DIF-FFT (按频率抽取):-10/211/2/21/21(/2)/21/2/21/2()() ()()()(/2)[()(/2)](2)[()(/2)](21)[()(N knN n N N kn knNN n n N N N knk n N NNn n N kN kn NNn N rn N n X k x n W x n W x n W x n W x n N W x n Wx n N WX r x n x n N WX r x n x n N =--==--+==-=-===+=++=++=+++=-+∑∑∑∑∑∑∑000/21/2/2)]N n rn NN n W W-=∑0则有:12()()(/2)()[()(/2)]n Nx n x n x n N x n x n x n N W=++=-+蝶形运算单元如下所示:由前面的分析可知,DIT (按时间抽取)算法与DIF (按频率抽取)算法没有本质上的区别,只是复数加减法与旋转因子乘法的次序有区别,两种方法的运算量是一样的。

基--2按频率抽取的FFT算法Decimation-in-Frequency(DIF)

基--2按频率抽取的FFT算法Decimation-in-Frequency(DIF)

4.结论1
• 一个N点的DFT被分解为两个N/2点DFT。 X1(k),X2(k)这两个N/2点的DFT按照:
X (k ) X (2k ' ) X (2k '1) N点DFT N / 2点 N / 2点 即先求出X 1 (k ' ),X 2 (k ' ) k ' 0,1 N / 2 1 再用k 2k ' , k 2k '1分别代入 X (k ) X 1 (2k ' ) X 2 (2k '1) , k 0,1, N 1 又合成N点DFT
一利用fft计算ifft的思路1?将下列两式进行比较idftfftnwwdftwnxnxdftkxwkxnkxidftnxnknnknnknknnk?nkn算法都可以拿来运算或频率抽取抽取那么以上讨论的时间3将运算结果都除以改成运算中的每个系数只要把2111010??????????二利用fft计算ifft的思路2?利用fft计算ifft时在命名上应注意
N n nk ' X (2k '1) x(n) x(n )WN WN / 2 2 n 0 x(n)前一半序列 x(n)后一半序列
N / 2 1
N k ' 0,1, 1 2
N N n 设一个新序列:x2 (n) [ x(n) x(n )]WN , n 0,1,2 1 2 2 N / 2 1 N nk ' 则X (2k '1) x2 (n)WN / 2 X(k ' ) k ' 0,1, 1 2 2 n 0 可见:x(n)的频域X (k )的奇数部分 可以通过x2 (n)序列的DFTX(k )求得。 2 N 由于x2 (n)序列只有 点,所以其运算量降低一半。 2

基2时域频域FFT算法

基2时域频域FFT算法

X[m] X1[m] WNm X 2[m]
X[m N / 2] X1[m]WNm X2[m] m 0,1 N / 2 1
8点FFT流图
第一级 x[0]
x[4]
-1
x[2]
x[6]
-1
x[1]
x[5]
-1
x[3]
x[7]
-1
第二级
W40 W41 -1
-1
W40 W41 -1
-1
第三级
X[0]
X[1]
X[2]
W80 W81 W82 W83
X[3]
-1 X[4] -1 X[5] -1 X[6] -1 X[7]
(二 ) 算法工作量
x1[k]
x2[l]
a
-1
x1[k]a x2[l]
x1[k]a x2[l]
一个蝶形计算量: 复数乘法 1,复数加法 2
N=2M时,分解级数为 M,每级蝶形数 N/2
如计算1024点DFT: 复数乘法次数: N2 =10242 = 220 = 1048576
解决问题的思路
1.将长序列DFT分解为短序列的DFT
2.利用旋转因子 WNkm的周期性、对称性、可约性。
WNkm 的性质
1)周期性(periodicity)
WN(kN)m WNk(mN) WNkm
2)复共轭对称性(complex conjugate)
X1[m] WNm X 2[m]
N=2基2时域FFT流图的推导
X [m]
X1[m] WNm X 2[m]
X[m N / 2] X1[m] WNm X 2[m] m 0,1 N / 2 1
例:N 2, m 0, X1[0] x[0], X 2[0] x[1]

按时间抽取的FFT算法

按时间抽取的FFT算法

按时间抽取的FFT算法按时间抽取的FFT算法(Time-Domain Convolution and Overlap-Add),是一种用于计算长时信号的快速傅里叶变换(FFT)的算法。

该算法通常用于音频和语音处理领域,能够将长时间的信号分解成短时间的频谱表示,从而进行频域分析和处理。

常规的FFT算法将输入信号整体进行FFT变换,需要将整个信号加载到内存中。

然而,对于长时间信号,这可能会消耗大量的计算资源和内存空间。

为了解决这个问题,按时间抽取的FFT算法采用了分段处理的策略。

具体而言,它将长时间信号分成固定长度的小段,然后对每一小段进行FFT计算,最后将这些小段的频谱结果叠加在一起得到最终的频谱表示。

1.分帧:将长时间信号划分成固定长度的小段,通常称为帧。

每一帧的长度通常为2的幂,例如256或512个样本。

为了避免帧与帧之间的不连续性,通常会采用重叠的方法。

常见的重叠比例为50%或75%,即两帧之间有一半或三分之一的重叠。

2. 加窗:为了减少边界效应(窗口泄漏),对每一帧信号进行加窗处理。

常用的窗口函数包括汉宁窗(Hanning)、汉明窗(Hamming)等。

窗函数的作用是在帧的开始和结束处逐渐减小信号的幅度,以平滑信号边界。

3. FFT计算:对每一帧进行FFT变换,将时域信号转换到频域。

常用的FFT算法有快速傅里叶变换(Fast Fourier Transform,FFT)和快速海森伯变换(Fast Hartley Transform,FHT)。

这些算法能够高效地计算信号的频谱。

4.频谱叠加:将每一帧的频谱结果叠加在一起,得到整个信号的频谱表示。

对于重叠的帧,通常通过加权平均的方法进行叠加,以避免频谱结果的引入误差。

5.后处理:对得到的频谱结果进行后处理,例如进行滤波、谱减、时频转换等操作。

这些后处理步骤能够进一步优化信号的频谱表示。

总结起来,按时间抽取的FFT算法通过分帧、加窗、FFT计算和频谱叠加等步骤,有效地处理长时间信号的频谱表示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第四章 快速傅里叶变换有限长序列可以通过离散傅里叶变换(DFT)将其频域也离散化成有限长序列.但其计算量太大,很难实时地处理问题,因此引出了快速傅里叶变换(FFT). 1965年,Cooley 和Tukey 提出了计算离散傅里叶变换(DFT )的快速算法,将DFT 的运算量减少了几个数量级。

从此,对快速傅里叶变换(FFT )算法的研究便不断深入,数字信号处理这门新兴学科也随FFT 的出现和发展而迅速发展。

根据对序列分解与选取方法的不同而产生了FFT 的多种算法,基本算法是基2DIT 和基2DIF 。

FFT 在离散傅里叶反变换、线性卷积和线性相关等方面也有重要应用。

快速傅里叶变换(FFT )是计算离散傅里叶变换(DFT )的快速算法。

DFT 的定义式为)(k X =)()(10k R W n x N N n knN∑-= 在所有复指数值knN W 的值全部已算好的情况下,要计算一个)(k X 需要N 次复数乘法和N -1次复数加法。

算出全部N 点)(k X 共需2N 次复数乘法和)1(-N N 次复数加法。

即计算量是与2N 成正比的。

FFT 的基本思想:将大点数的DFT 分解为若干个小点数DFT 的组合,从而减少运算量。

N W 因子具有以下两个特性,可使DFT 运算量尽量分解为小点数的DFT运算:(1) 周期性:k N n N kn N nN k N W W W )()(++== (2) 对称性:k N N k NW W -=+)2/(利用这两个性质,可以使DFT 运算中有些项合并,以减少乘法次数。

例子:求当N =4时,X(2)的值)()]3()1([)]2()0([)()]3()1([)]2()0([)3()2()1()0()()2(04240464442404324对称性-=周期性W x x x x W x x W x x W x W x W x W x W n x X n n +++++=+++==∑=通过合并,使乘法次数由4次减少到1次,运算量减少。

FFT 的算法形式有很多种,但基本上可以分为两大类:按时间抽取(DIT )和按频率抽取(DIF )。

4.1 按时间抽取(DIT )的FTT为了将大点数的DFT 分解为小点数的DFT 运算,要求序列的长度N 为复合数,最常用的是MN 2=的情况(M 为正整数)。

该情况下的变换称为基2FFT 。

下面讨论基2情况的算法。

先将序列x(n)按奇偶项分解为两组 ⎩⎨⎧=+=)()12()()2(21r x r x r x r x 12,,1,0-=Nr Λ将DFT 运算也相应分为两组==)]([)(n x DFT k X ∑-=1)(N n knNWn x∑∑-=-==1n 010)()(N n kn NN n n kn NWn x Wn x 为奇数为偶数+∑∑-=+-=++12/0)12(12/02)12()2(N r k r NN r rk NWr x Wr x =∑∑-=-=+12/02212/021)()(N r rkN k NN r rk NW r xWWr x =∑∑-=-=+12/02/212/02/1)()(N r rkN k NN r rkN W r xWWr x =(因为rk N rk N W W 2/2=) )()(21k X W k X kN +=其中)(1k X 、)(2k X 分别是)()(21n x n x 、的N/2点的DFT)(1k X 120,)2()(12/02/12/02/1-≤≤=∑∑-=-=N k W r x Wr x N r rk N N r rkN = )(2k X 120,)12()(12/02/12/02/2-≤≤+=∑∑-=-=N k Wr x Wr x N r rk N N r rk N = 至此,一个N 点DFT 被分解为两个N/2点的DFT 。

上面是否将全部N 点的)(k X 求解出来了?分析:)(1k X 和)(2k X 只有N/2个点(12,,1,0-=Nk Λ),则由)(k X )()(21k X W k X kN+=只能求出)(k X 的前N/2个点的DFT ,要求出全部N 点的)(k X ,需要找出)(1k X 、)(2k X 和)2/(N k X +的关系,其中12,,1,0-=N k Λ。

由式子)(k X )()(21k X W k X kN+=可得 )2/(N k X +)2/()2/(22/1N k X W N k X N k N+++=+化简得 )2/(N k X +=)()(21k X W k X kN-=,12,,1,0-=Nk Λ 这样N 点DFT 可全部由下式确定出来:⎪⎩⎪⎨⎧-=++=)()()2/()()()(2121k X W k X N k X k X W k X k X kN kN 12,,1,0-=N k Λ (*) 上式可用一个专用的碟形符号来表示,这个符号对应一次复乘和两次复加运算。

abkNWbW a kN +bW a kN --1图 蝶形运算符号通过这样的分解以后,每一个N /2点的DFT 只需要4)2(22N N =次复数乘法,两个N/2点的DFT 需要2)2(222N N =次复乘,再加上将两个N /2点DFT 合并成为N 点DFT 时有N /2次与W 因子相乘,一共需要22222N N N ≈+次复乘。

可见,通过这样的分解,运算量节省了近一半。

因为MN 2=,N/2仍然是偶数,因此可以对两个N/2点的DFT 再分别作进一步的分解,将两个N/2点的DFT 分解成两个N/4点的DFT 。

例如对)(1r x ,可以在按其偶数部分及奇数部分进行分解:⎩⎨⎧=+=)()12()()2(4131l x l x l x l x 14,,1,0-=Nl Λ则的运算可相应分为两组:)(1k X ∑∑-=+-=++14/0)12(2/114/022/1)12()2(N l k l N N l lkN Wl x Wl x =∑∑-=-=+14/04/42/14/04/3)()(N l lkN k N N l lk N W l xWWl x =)()(42/3k X W k X kN += 14,,1,0-=Nk Λ将系数统一为以N为周期,即kN k N W W 22/=,可得⎪⎩⎪⎨⎧-=++=)()()4/()()()(42314231k X W k X N k X k X W k X k X kN kN 14,,1,0-=N k Λ 同样,对)(2k X 也可进行类似的分解。

一直分解下去,最后是2点的DFT ,2点DFT 的运算也可用碟形符号来表示。

这样,对于一个823==N 的DFT 运算,其按时间抽取的分解过程及完整流图如下图所示。

这种方法,由于每一步分解都是按输入序列在时域上的次序是属于偶数还是奇数来抽取的,故称为“时间抽取法”。

分析上面的流图,MN 2=,一共要进行M 次分解,构成了从x(n)到X(k)的M 级运算过程。

每一级运算都是由N/2个蝶形运算构成,因此每一级运算都需要N/2次复乘和N 次复加,则按时间抽取的M 级运算后总共需要复数乘法次数:N NM N m F 2log 22=⋅=复数加法次数:N N M N a F 2log =⋅=根据上面的流图,分析FFT算法的两个特点,它们对FFT的软硬件构成产生很大的影响。

(1) 原位运算也称为同址运算,当数据输入到存储器中以后,每一级运算的结果仍然存储在原来的存储器中,直到最后输出,中间无需其它的存储器。

根据运算流图分析原位运算是如何进行的。

原位运算的结构可以节省存储单元,降低设备成本。

(2) 变址分析运算流图中的输入输出序列的顺序,输出按顺序,输入是“码位倒置”的顺序。

见图。

码位倒置顺序码位倒置的变址处理在实际运算中,直接将输入数据x(n)按码位倒置的顺序排好输入很不方便,一般总是先按自然顺序输入存储单元,然后通过变址运算将自然顺序的存储换成码位倒置顺序的存储,这样就可以进行FFT的原位运算。

变质的功能如图所示。

用软件实现是通用采用雷德(Rader)算法,算出I的倒序J以后立即将输入数据X(I)和X(J)对换。

尽管变址运算所占运算量的比例很小,但对某些高要求的应用(尤其在实时信号处理中),也可设法用适当的电路结构直接实现变址。

例如单片数字信号处理器TMS320C25就有专用于FFT的二进制码变址模式。

4.2 按频率抽取(DIF )的FTT除时间抽取法外,另外一种普遍使用的FFT 结构是频率抽取法。

频率抽取法将输入序列不是按奇、偶分组,而是将N点DFT 写成前后两部分:==)]([)(n x DFT k X ∑-=1)(N n knN W n x ∑∑-=-==12/1)2/(0)()(N N n kn NN n knNWn x Wn x +∑∑-=+-=++12/0)2/(12/0)2/()(N n k N n NN n nk NWN n x Wn x =nkN N n k N N W N n x W n x ∑-=++12/0)2/()]2/()([=因为k k N N N NW W )1(,1)2/(2/-=-=,k 为偶数时1)1(=-k ,k 为奇数时1)1(-=-k ,由此可将X(k)分解为偶数组和奇数组:nkN N n kW N n x n x k X ∑-=+-+12/0)]2/()1()([)(=nrN N n nrNN n WN n x n x W N n x n x r X 2/12/0212/0)]2/()([)]2/()([)2(∑∑-=-=++=++=nr N nN N n nr NN n W WN n x n x W N n x n x r X 2/12/0)12(12/0)]2/()([)]2/()([)12(∑∑-=+-=+-=+-+=令⎩⎨⎧+-=++=nNW N n x n x n x N n x n x n x )]2/()([)()2/()()(21 12/,,1,0-=N n Λ这两个序列都是N/2点的序列,对应的是两个N/2点的DFT 运算:nrN N n W n x r X 2/12/01)]()2(∑-==rn N N n W n x r X 2/12/02)()12(∑-=+=这样,同样是将一个N 点的DFT 分解为两个N/2点的DFT 了。

频率抽选法对应的碟形运算关系图如下:abn NW ba +nNW b a )(--1对于N=8时频率抽取法的FFT 流图如下:这种分组的办法由于每次都是按输出X(k)在频域的顺序上是属于偶数还是奇数来分组的,称为频率抽取法。

与前面按时间抽取的方法相比,相同点 问题:如何利用快速算法计算IDFT ? 分析IDFT 的公式:1,,1,0,)(1)]([)(1-===∑-=-N n Wk X Nk X IDFT n x N k nk NΛ比较DFT 的公式:1,,1,0,)()]([)(1-===∑-=N k Wn x n x DFT k X N n nk NΛ得知可用两种方法来实现IDFT 的快速算法:(1)只要把DFT 运算中的每一个系数nkN W 该为nkNW -,并且最后再乘以常数N1,就可以用时间抽取法或频率抽取的FFT 算法来直接计算IDFT 。

相关文档
最新文档