第4章 快速傅里叶变换(FFT)

合集下载

matlab 快速傅里叶变换

matlab 快速傅里叶变换

快速傅里叶变换(Fast Fourier Transform,FFT)是一种在数字信号处理和数值分析中广泛应用的算法,它能够高效地计算离散傅里叶变换(Discrete Fourier Transform,DFT),从而在频域中分析信号的频谱特性。

而在matlab中,使用FFT函数可以方便地进行快速傅里叶变换的计算和处理。

1. FFT的基本原理在介绍matlab中的FFT函数之前,我们先来了解一下FFT的基本原理。

FFT算法是一种分治法的思想,在计算傅里叶变换时通过将原始信号分解为奇偶部分,然后递归地进行计算,最终得到傅里叶变换的结果。

这种分治的思想使得FFT算法的计算复杂度降低到了O(n log n),比直接计算DFT的O(n^2)复杂度要低很多,因此在实际应用中得到了广泛的应用。

2. matlab中的FFT函数在matlab中,可以使用fft函数来进行快速傅里叶变换的计算。

fft函数的基本语法如下:```Y = fft(X)```其中,X表示输入的信号序列,可以是实数或复数序列;Y表示经过FFT变换后得到的频谱结果。

在使用fft函数时,最常见的是对时域信号进行FFT变换,然后得到其频谱特性。

3. FFT在信号处理中的应用FFT算法在信号处理中有着广泛的应用,其中最常见的就是对信号的频谱特性进行分析。

通过对信号进行FFT变换,可以得到其频谱图,从而可以直观地了解信号的频域特性,包括频率成分、幅度特性等。

这对于音频处理、振动分析、通信系统等领域都是非常重要的。

4. FFT在图像处理中的应用除了在信号处理中的应用,FFT算法也在图像处理中有着重要的地位。

在图像处理中,FFT可以用来进行频域滤波,包括低通滤波、高通滤波、带通滤波等操作。

通过FFT变换,我们可以将图像从空域转换到频域,在频域中进行滤波操作,然后再通过逆FFT变换将图像恢复到空域,从而达到图像增强、去噪等效果。

5. FFT在数学建模中的应用除了在信号处理和图像处理中的应用外,FFT算法还在数学建模和仿真计算中有着重要的作用。

快速傅里叶变换 FFT

快速傅里叶变换 FFT

因为
,所以:
上式中X1(k)和X2(k)分别为x2(r)和x2(r)的N/2点DFT, 即
由于X1(k)和X2(k)均以N/2为周期,且 X(k)又可表示为:
,以
即将一个N点的DFT分解成为两个N/2点的DFT。 上述运算可用右下图来表示,称为蝶形运算符号。
从右图可知,要完成一 个蝶形运算需要进行一 次复数相乘和两次复数 相加运算。
对于象雷达、通信、声纳等需要实时处理的信号, 因为其运算量更大,所以无法满足信号处理的实时 性要求。迫切需要有新的算法。
二、DFT运算的特点
实际上,DFT运算中包含有大量的重复运算。在WN
矩阵中,虽然其中有N2个元素,但由于WN的周期
性,其中只有N个独立的值,即
,且
这N个值也有一些对称关系。总之,WN因子具有如 下所述周期性及对称性:
N 1
X (k) x(n)WNkn n0
x(n)
1 N
N 1
X (k)WNkn
k 0
k 0,1,2, , N 1 n 0,1,2, , N 1
计算X(k)的运算量:需要N2次复数乘法,N(N-1)
次复数加法。在N较大时计算量很大。
例如:N=1024时, 需要1,048,576次复数乘法, 即 4,194,304次实数乘法
1.对称性
2.周期性 由上述特性还可得出:
利用上述对称特性,可使DFT运算中有些项可以合 并,这样,可使乘法次数减少大约一半;利用WN 矩阵的对称性及周期性,可以将长序列的DFT分解 为短序列的DFT,N越小,运算量能够减少。 例如,对于四点的DFT,直接计算需要16次复数乘 法,根据上述特性可以有以下形5年,J. W. Cooley和J. W. Tukey巧妙应用DFT中 W因子的周期性及对称性提出了最早的FFT,这是 基于时间抽取的FFT。具有里程碑式的贡献(运算量 缩短两个数量级)

快速傅里叶变换作用

快速傅里叶变换作用

快速傅里叶变换作用
快速傅里叶变换(FFT)是一种重要的数学工具,它被广泛应用于信号处理、图像处理、通信等领域。

FFT可以将一个信号从时域转换到频域,并且可以在计算效率上有大幅度的
提升,因此被称为“快速”。

FFT的作用可以用以下几个方面来描述:
1. 信号频域分析
FFT可以将一个信号从时域转换到频域,得到信号的频谱图。

在频谱图上,可以直观
地观察信号中不同频率成分的大小和性质。

因此,在信号处理领域,FFT被广泛应用于信
号的频域分析。

例如,在音频信号处理中,可以通过FFT找到音频信号的频率成分,从而
实现声音的去噪、滤波、均衡等效果。

2. 信号降噪
FFT可以将一个信号从时域转换到频域,并将频谱图中小于某个阈值的频率部分过滤掉,从而实现信号的降噪。

这种方法被称为频域降噪。

频域降噪比时域降噪的效果更好,
因为在频域上可以更精确地过滤掉噪声。

3. 图像处理
在图像处理领域,FFT可以将一个图像从空间域转换到频域,并在频域上对图像进行
处理。

例如,可以对图像的高频部分进行滤波,从而实现图像的锐化。

同时,FFT也可以
将多个图像叠加在一起,得到一个合成图像。

这种方法被广泛应用于合成图像、匹配图像
等领域。

《快速傅里叶变换》课件

《快速傅里叶变换》课件
FFT算法的出现极大地推动了数字信号 处理技术的发展和应用。
FFT的历史背景
01
1960年代,Cooley和Tukey提 出了基于“分治”思想的FFT 算法,为快速傅里叶变换的实 用化奠定了基础。
02
随后,出现了多种FFT算法的 变种和优化,如Radix-2、 Radix-4等。
03
随着计算机技术的发展,FFT 算法在硬件实现上也得到了广 泛应用,如FPGA、GPU等。
《快速傅里叶变换》ppt课件
contents
目录
• FFT简介 • FFT基本原理 • FFT实现 • FFT的应用 • FFT的优化与改进 • FFT的挑战与未来发展
01 FFT简介
FFT的定义
快速傅里叶变换(FFT):一种高效计算离散傅里叶变换(DFT)及其逆变换的 算法。它将复杂度为$O(N^2)$的DFT计算降低到$O(Nlog N)$,大大提高了计 算效率。
详细描述
混合基数FFT算法结合了基数-2和基数-4算法的特点,利用两者在计算过程中的 互补性,减少了计算量,提高了计算效率。同时,该算法在处理大规模数据时 ,能够保持较高的精度。
分段FFT算法
总结词
分段FFT算法将输入数据分成若干段,对每一段进行快速傅里叶变换,以降低计算复杂度和提高计算效率。
详细描述
02 FFT基本原理
离散傅里叶变换(DFT)
定义
应用
DFT是时间域信号到频域的变换,通 过计算信号中各个频率成分的幅度和 相位,可以分析信号的频谱特性。
DFT在信号处理、图像处理、频谱分 析等领域有广泛应用。
计算量
DFT的计算量随着信号长度N的增加 而呈平方关系增长,因此对于长信号 ,计算量巨大。

数字信号处理DSP第4章

数字信号处理DSP第4章
G[3] 1
k 0,1, , N 1
2
13
4.2 按时间抽取(DIT)的基2–FFT算法
将系数统一为 WNk 2 WN2k ,则可得
x[0]
N 4点
x[4]
DFT
G[0]
X [0]
G[1]
X [1]
x[2]
N 4点
WN0
x[6]
DFT
WN2
G[2]
1 G[3]
1
X [2] X [3]
x[1]
N 4点
X m1[i] WNr X m1[ j] , X m1[i] WNr X m1[ j]
m 1, 2 ,
每一个蝶形需要一次复数乘法和两次复数加法。
17
4.2 按时间抽取(DIT)的基2–FFT算法
N点的DIT-FFT计算量为
复数乘法:
1
N 2
log2
N
N 2
复数加法:
2
N 2
log2
N
N
例: 如果每次复数乘法需要100us,每次复数加法需要20us,来 计算N=1024点DFT,则需要
12
4.2 按时间抽取(DIT)的基2–FFT算法
同理
( N 4)1
( N 4)1
G[k] DFT[g[r]]
g[2l]WN2lk2
g[2l 1]WN(22l1)k
l 0
l 0
( N 4)1
( N 4)1
g[2l]WNlk 4 WNk 2
g[2l 1]WNlk 4 ,
l 0
l 0
k 0,1,
(3) WN0 WN4 WN8 WN12 WN16 WN20 WN24 WN28
或 WN4i i 0,1, 2, 3, 4, 5, 6, 7 (dm 1)

数字信号处理课后答案+第4章(高西全丁美玉第三版)

数字信号处理课后答案+第4章(高西全丁美玉第三版)

6*. 按照下面的IDFT算法编写MATLAB语言 IFFT程 序, 其中的FFT部分不用写出清单, 可调用fft函数。 并分 别对单位脉冲序列、 矩形序列、 三角序列和正弦序列进行 FFT和IFFT变换, 验证所编程序。
解: 为了使用灵活方便, 将本题所给算法公式作为函 数编写ifft46.m如下: %函数ifft46.m %按照所给算法公式计算IFET function xn=ifft46(Xk, N) Xk=conj(Xk); %对Xk取复共轭 xn=conj(fft(Xk, N))/N; %按照所给算法公式计算IFFT 分别对单位脉冲序列、 长度为8的矩形序列和三角序列 进行FFT, 并调用函数ifft46计算IFFT变换, 验证函数 ifft46的程序ex406.m如下:
快速卷积时, 需要计算一次N点FFT(考虑到H(k)= DFT[h(n)]已计算好存入内存)、 N次频域复数乘法和 一次N点IFFT。 所以, 计算1024点快速卷积的计算时间Tc 约为
Fs <
1024 = 15 625 次 /秒 65536 × 10−6
Fs 15625 = = 7.8125 kHz 2 2
1 x ( n) = IDFT[ X ( k )] = [DFT[ X * ( k )]]* N
%程序ex406.m %调用fft函数计算IDFT x1n=1; %输入单位脉冲序列x1n x2n=[1 1 1 1 1 1 1 1]; %输入矩形序列向量x2n x3n=[1 2 3 4 4 3 2 1]; %输入三角序列序列向量x3n N=8; X1k=fft(x1n, N); X2k=fft(x2n, N); X3k=fft(x3n, N); %计算x1n的N点DFT %计算x2n的N点DFT %计算x3n的N点DFT

《快速傅里叶变换(FFT) 第四章》

《快速傅里叶变换(FFT) 第四章》

方法: 分解N为较小值:把序列分解为几个较短的 序列,分别计算其DFT值; 利用旋转因子WNk的周期性、对称性、可 约性进行合并、归类处理,以减少DFT的运 算次数。 k ( kn WN m WNN m WN ( nlN ) WNk lN ) n WN 周期性: N m m N m N m m m m 对称性:Wm WNm [W WN N WNN [WNNN m ]] WN WN 2 WN WN 可约性:W mN N W knmW kn / m W kn m kmn ,m 2 2
x ( r ) W x ( r )W x ( r ) W x ( r )W e (r W x r) xxr) W( r ) W (WW (r )W W e W (2 ) x x x(2 r 1)
W e
2 j 2 kr 2 kr N N /2
N 2
2 这样将N点DFT分解为两个N/2点的DFT
N X (k ) X 1 (k ) W X 2k(k ) k 0,1, 1 N X (k ) X 1 (k ) WN X 2 (k ) k 0,1, N 1 2 k X (kN X 1 (k ) WN X 2 (k ) k 0,1, 2 1 ) N2 k X (k N X 1 (k ) WN X 2 (k ) k 0,1, 1 N ) k X (k 2 N X 1 (k ) WN X 2 (k ) k 0,1, N 1 ) 2 k 2 X (k ) X (k ) W X (k ) k 0,1, 2 1
4.1 离散傅里叶变换的高效计算思路 DFT是信号分析与处理中的一种重要变换。但直接 计算DFT的计算量与变换区间长度N的平方成正比, 当N较大时,计算量太大,直接用DFT算法进行谱分 析和信号的实时处理是不切实际的。

信号与系统(第四章)-离散傅里叶变换与快速傅里叶变换

信号与系统(第四章)-离散傅里叶变换与快速傅里叶变换
解:变量n用k替代
反转,并取主值区间序列
周期延拓
反转后
向右平移1位 向右平移3位
向右平移2位
于是,由
y
(n)
3
x(k
)h((n
k
))
4
G4
(n)
,得
k 0
y(0) 1114 13 02 8
y(1) 1 2 1114 03 7
y(2) 1312 11 04 6
y(3) 14 1312 01 9
➢ 线卷积与圆周卷积
• 线卷积的移位是平移,圆周卷积的移位是周期位 移。
• 线卷积不要求两序列长度一致。若 x(n)与h(n)的长度分别为M和N,则 y(n)=x(n)*h(n)的长度为M+N-1。 圆周卷积要求两序列长度一致,否则短序列须补 零,使两序列等长后,才可进行圆周卷积。
DFT ax1(n) bx2(n) aDFT x1(n) bDFT x2(n)
(4.9)
当序列x1(n)和x2(n)长度不一致时,则可通过将较 短序列补零,使两序列长度一致,此时,式(4.9)成立。
2、圆周位移特性 圆周时移:圆周时移指长度为N的序列x(n),以N 为周期做周期延拓生成xp(n),位移m位后,得序 列xp(n-m),在此基础上取其主值区间上序列。
于是
x(n)
x(t)
t nTs
k
X e jk1nTs k
X e X e
j
2 T1
knTs
k
j 2 nk N
k
(4.3)
k
k
式(4.3)两边同乘
e
j 2 N
nm
,再取合式
N 1
,得
n0

精品课件-数字信号处理(第四版)(高西全)-第4章

精品课件-数字信号处理(第四版)(高西全)-第4章

点DFT和(4.2.10)式或(4.2.11)式所示的N/4个蝶形运算,
如图4.2.3所示。依次类推,经过M次分解,最后将N点DFT
分解成N个1点DFT和M级蝶形运算,而1点DFT就是时域序列
本身。一个完整的8点DIT-FFT运算流图如图4.2.4所示。
图中用到关系式
。W图N中k / m输入W序Nmk列不是顺序排
In Time FFT,简称DIT-FFT ); 频域抽取法FFT (Decimation In Frequency FFT,简称DIF-FFT)。本节介 绍DIT-FFT
设序列x(n)的长度为N,且满足N=2M,M为自然数。按n 的奇偶把x(n)分解为两个N/2点的子序列
x1(r) x(2r), x2 (r) x(2r 1),
x1
(2l
1)WNk
( /
2l 2
1)
l 0
l 0
N / 41
N / 41
x3 (l)WNkl/ 4 WNk / 2
x4
(l
)WNk
l /
4
l 0
l 0
X 3 (k ) WNk/ 2 X 4 (k )
k 0, 1, , N 1 2
(4.2.9)
第4章 快速傅里叶变换(FFT)
式中
N / 41
r0
2
(4.2.6)
由于X1(k)和X2(k)均以N/2为周期,
kN
WN 2
WNk

,因此X(k)又可表示为
第4章 快速傅里叶变换(FFT)
X (k) X1(k) WNk X 2 (k),
X
(k
N 2
)
X1(k)
WNk
X

数字信号处理_程佩青_PPT第四章

数字信号处理_程佩青_PPT第四章
第四章 快速傅里叶变换 (FFT)
主要内容
DIT-FFT算法 DIF-FFT算法 IFFT算法 Chirp-z算法 线性卷积的FFT算法
§4.0 引言
FFT: Fast Fourier Transform
1965年,Cooley&Turky 发表文章《机器计算傅 里叶级数的一种算法》,提出FFT算法,解决 DFT运算量太大,在实际使用中受限制的问题。 FFT的应用。频谱分析、滤波器实现、实时信 号处理等。 DSP芯片实现。TI公司的TMS 320c30,10MHz 时钟,基2-FFT1024点FFT时间15ms。
又WN
k
N 2
W
N /2 N
W W
k N
k N
k X (k ) X1 (k ) WN X 2 (k ),k 0,1,2,...N / 2 1 (2) X ( N k ) X ( N k ) W ( N / 2 k ) X ( N k ) 1 N 2 2 2 2 k X1 (k ) WN X 2 (k ),k 0,1,2,...N / 2 1


n为偶
n为奇
N / 2 1

rk k rk x ( r ) W W x ( r ) W 1 N /2 N 2 N /2 r 0 r 0 X1 ( k )
N / 2 1
2 rk rk (这一步利用: WN WN /2
) r , k 0,1,...N / 2 1
N为2的整数幂的FFT算法称基-2FFT算法。
将序列x(n)按n的奇偶分成两组:
x1 (r ) x(2r ) ,r 0, 1, 2, ...N/ 2 1 x2 (r ) x(2r 1)

【知识总结】快速傅里叶变换(FFT)

【知识总结】快速傅里叶变换(FFT)

【知识总结】快速傅⾥叶变换(FFT )这可能是我第五次学FFT 了……菜哭qwq 先给出⼀些个⼈认为⾮常优秀的参考资料:快速傅⾥叶变换(FFT )⽤于计算两个n 次多项式相乘,能把复杂度从朴素的O (n 2)优化到O (nlog 2n )。

⼀个常见的应⽤是计算⼤整数相乘。

本⽂中所有多项式默认x 为变量,其他字母均为常数。

所有⾓均为弧度制。

⼀、多项式的两种表⽰⽅法我们平时常⽤的表⽰⽅法称为“系数表⽰法”,即A (x )=n∑i =0a i x i上⾯那个式⼦也可以看作⼀个以x 为⾃变量的n 次函数。

⽤n +1个点可以确定⼀个n 次函数(⾃⾏脑补初中学习的⼆次函数)。

所以,给定n +1组x 和对应的A (x ),就可以求出原多项式。

⽤n +1个点表⽰⼀个n 次多项式的⽅式称为“点值表⽰法”。

在“点值表⽰法”中,两个多项式相乘是O (n )的。

因为对于同⼀个x ,把它代⼊A 和B 求值的结果之积就是把它带⼊多项式A ×B 求值的结果(这是多项式乘法的意义)。

所以把点值表⽰法下的两个多项式的n +1个点的值相乘即可求出两多项式之积的点值表⽰。

线性复杂度点值表⽰好哇好但是,把系数表⽰法转换成点值表⽰法需要对n +1个点求值,⽽每次求值是O (n )的,所以复杂度是O (n 2)。

把点值表⽰法转换成系数表⽰法据说也是O (n 2)的(然⽽我只会O (n 3)的⾼斯消元qwq )。

所以暴⼒取点然后算还不如直接朴素算法相乘……但是有⼀种神奇的算法,通过取⼀些具有特殊性质的点可以把复杂度降到O (nlog 2n )。

⼆、单位根从现在开始,所有n 都默认是2的⾮负整数次幂,多项式次数为n −1。

应⽤时如果多项式次数不是2的⾮负整数次幂减1,可以加系数为0的项补齐。

先看⼀些预备知识:复数a +bi 可以看作平⾯直⾓坐标系上的点(a ,b )。

这个点到原点的距离称为模长,即√a 2+b 2;原点与(a ,b )所连的直线与实轴正半轴的夹⾓称为辐⾓,即sin −1ba 。

fx第4章 FFT

fx第4章 FFT
T
2.蝶形运算
N x(n)和x(n + )进行如下碟形运算: 2 N x(n)
x(n) + x(n + 2
)
N x(n + ) 2
n = 0,1 L, N −1 , 2
-1
W
n N
N n x(n) − x(n + 2 )WN
四、DIF法与DIT法的异同 DIF法与DIT法的异同 法与DIT
(k = 0,1,L, N − 1) 2 (k = N ,L, N − 1) 2
return
FFT的运算量为 3. N点的FFT FFT 复乘:
(N/2) log2 N N/ )
复加:
L=N log2 N
三、DIF的FFT算法 DIF的FFT算法 1.算法原理(基2FFT) 1.算法原理( 算法原理
1.相同点 1. (1)进行原位运算; (1) (2)运算量相同,均为(N/2) Log2N次 (2) , 复乘,N Log2N次复加。 , 2.不同点 2. (1)DIT输入为倒位序,输出为自然顺 (1)DIT 序; DIF正好与此相反。但DIT DIT也有输入 DIF DIT 为自然顺序,输出为倒位序的情况。 (2)蝶形运算不同
按时间抽取(DIT) FFT算法 (DIT)的 二、按时间抽取(DIT)的FFT算法 1.算法原理( 1.算法原理(基2FFT) 算法原理

x(n)
按n的奇偶分为两组作DFT, N=2L ,不足时,可补些零。 DFT,设N=2 DFT,
2.蝶形运算 2.蝶形运算
k X (k) = X1(k) +WN X2 (k) 前一半 k X (k) = X1(k) −WN X2 (k) 后一半

快速傅里叶变换

快速傅里叶变换

第四章 快速傅里叶变换(FFT )快速傅里叶变换并不是一种新的变换,而是离散傅里叶变换的一种快速算法。

DFT 的计算在数字信号处理中非常有用,但是由于DFT 的计算量较大,即使采用计算机也很难对问题进行实时处理,通过引入其快速算法FFT ,使DFT 的计算大大简化,运算时间一般可缩短一、二个数量级。

4.1 FFT 算法的基本思想一、直接计算DFT 的问题设)(n x 为N 点有限长序列,其DFT 为:10)()]([)(10-≤≤==∑-=N k W n x n x DFT k X N n knNIDFT 为:10)(1)]([)(10-≤≤==∑-=-N n W k X N k X IDFT n x N k knN二式的差别仅在于N W 的指数符号不同,以及相差一个常数因子N /1,所以,我们只对DFT 正变换的算法进行讨论。

将)(k X 可以展开如下:)1()2()1()0()1()1()2()1()0()2()1()2()1()0()1()1()2()1()0()0()1)(1()2)(1()1)(1()0)(1()1(2)2(2)1(2)0(2)1(1)2(1)1(1)0(1)1(0)2(0)1(0)0(0-++++=--++++=-++++=-++++=--------N x W x W x W x W N X N x W x W x W x W X N x W x W x W x W X N x W x W x W x W X N N NN N N NN NN NNNNN NNNN N N N N N一般来说,)(n x 和knN W 都是复数,因此,完成每一个频率分量的计算需要作N 次复数乘法和1-N 次复数加法,完成)(k X 的N 个频率分量的计算需要作2N 次复数乘法和)1(-N N 次复数加法。

我们知道,复数运算实际上是由实数运算来完成的。

一次复数乘法包括四次实数乘法和二次实数加法,即:)()())((ad bc j bd ac jd c jb a ++-=++一次复数加法包括二次实数加法,即:)()()()(d b j c a jd c jb a +++=+++因此,完成一个)(k X 需要N 4次实数乘法和)12(2)1(22-=-+N N N 次实数加法,整个DFT (N 点)(k X )运算需要24N 次实数乘法和)12(2-N N 次实数加法。

第4章 快速傅里叶变换(FFT)

第4章  快速傅里叶变换(FFT)
DIF-FFT)。
第4章 快速傅里叶变换(FFT)
4.2.2 时域抽取法基2FFT基本原理
先设序列点数为N=2M,M为整数。如果不满足这个条 件,可以人为地加上若干零值点,使之达到这一要求。 这种N为2的整数幂的FFT称基-2 FFT。
(一)N/2点DFT
按n的奇偶把x(n)分解为两个N/2点的子序列
第4章 快速傅里叶变换(FFT)
(3)对X1(k)和X 2 (k)进行蝶形运算,前半部为
X(0)~X(3),后半部分为 X(4) ~ X(7) 整个过程如图4.2.2 所示:
x(0 )
X1(0 )
X(0 )
x(2 )
N/2点 X1(1 )
X(1 )
x(4 )
X1(2 )
X(2 )
DFT
x(6 )
X1(3 )
WNk
X2(k)
X(N 2

k)

X1(k) WNk
X 2 (k )
(后一半)
计算X(k)包含N/2个蝶形运算和两个N/2点DFT运算
计算工作量分析
第4章 快速傅里叶变换(FFT)
(1)1个N/2点的DFT运算量:
复乘次数: ( N )2 N 2 复加次数: N ( N 1)
24
22
(2)两个N/2点的DFT运算量:
例如,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)
第4章 快速傅里叶变换(FFT)
第4章 快速傅里叶变换(FFT)
4.1 引言 4.2 基2FFT算法 4.3 进一步减少运算量的措施

快速傅里叶变换(FFT)详解

快速傅里叶变换(FFT)详解

⽂中内容均为个⼈理解,如有错误请指出,不胜感激前⾔先解释⼏个⽐较容易混淆的缩写吧FMT 快速莫⽐乌斯变化—>感谢stump提供多项式复数在介绍复数之前,⾸先介绍⼀些可能会⽤到的东西(好像画的不是很标准。

)设$a,b$为实数,$i^2=-1$,形如$a+bi$的数叫复数,其中$i$被称为虚数单位,复数域是⽬前已知最⼤的域在复平⾯中,$x$代表实数,$y$轴(除原点外的点)代表虚数,从原点$(0,0)$到$(a,b)$的向量表⽰复数$a+bi$模长:从原点$(0,0)$到点$(a,b)$的距离,即$\sqrt{a^2+b^2}$幅⾓:假设以逆时针为正⽅向,从$x$轴正半轴到已知向量的转⾓的有向⾓叫做幅⾓运算法则加法:因为在复平⾯中,复数可以被表⽰为向量,因此复数的加法与向量的加法相同,都满⾜平⾏四边形定则(就是上⾯那个)乘法:⼏何定义:复数相乘,模长相乘,幅⾓相加代数定义:$$(a+bi)*(c+di)$$$$=ac+adi+bci+bdi^2$$$$=ac+adi+bci-bd$$$$=(ac-bd)+(bc+ad)i$$单位根下⽂中,默认$n$为$2$的正整数次幂在复平⾯上,以原点为圆⼼,$1$为半径作圆,所得的圆叫单位圆。

以圆点为起点,圆的$n$等分点为终点,做$n$个向量,设幅⾓为正且最⼩的向量对应的复数为$\omega_n$,称为$n$次单位根。

根据复数乘法的运算法则,其余$n-1$个复数为$\omega_n^2,\omega_n^3,\ldots,\omega_n^n$注意$\omega_n^0=\omega_n^n=1$(对应复平⾯上以$x$轴为正⽅向的向量)那么如何计算它们的值呢?这个问题可以由欧拉公式解决$$\omega_{n}^{k}=\cos\ k *\frac{2\pi}{n}+i\sin k*\frac{2\pi}{n}$$例如图中向量$AB$表⽰的复数为$8$次单位根单位根的幅⾓为周⾓的$\frac{1}{n}$在代数中,若$z^n=1$,我们把$z$称为$n$次单位根单位根的性质$\omega _{n}^{k}=\cos k\dfrac{2\pi}{n}+i\sin k\dfrac {2\pi }{n}$(即上⾯的公式)$\omega _{2n}^{2k}=\omega _{n}^{k}$证明:$$\omega _{2n}^{2k}=\cos 2k*\frac{2\pi}{2n}+i\sin2k*\frac{2\pi}{2n}$$$$=\omega _{n}^{k}$$$\omega _{n}^{k+\frac{n}{2}}=-\omega _{n}^{k}$$$\omega _{n}^{\frac{n}{2}}=\cos\frac{n}{2}*\frac{2\pi}{n}+i\sin\frac{n}{2}*\frac{2\pi}{n}$$$$=\cos \pi+i\sin\pi$$$$=-1$$$\omega _{n}^{0}=\omega _{n}^{n}=1$讲了这么多,貌似跟我们的正题没啥关系啊。

快速傅里叶变换fft变换

快速傅里叶变换fft变换

快速傅里叶变换FFT的C语言算法彻底研究LED音乐频谱显示的核心算法就是快速傅里叶变换,FFT的理解和编程还是比较难的,特地撰写此文分享一下研究成果。

一、彻底理解傅里叶变换快速傅里叶变换(Fast Fourier Transform)是离散傅里叶变换的一种快速算法,简称FFT,通过FFT可以将一个信号从时域变换到频域。

模拟信号经过A/D转换变为数字信号的过程称为采样。

为保证采样后信号的频谱形状不失真,采样频率必须大于信号中最高频率成分的2倍,这称之为采样定理。

假设采样频率为fs,采样点数为N,那么FFT结果就是一个N点的复数,每一个点就对应着一个频率点,某一点n(n 从1开始)表示的频率为:fn=(n-1)*fs/N。

举例说明:用1kHz的采样频率采样128点,则FFT结果的128个数据即对应的频率点分别是0,1k/128,2k/128,3k/128,…,127k/128 Hz。

这个频率点的幅值为:该点复数的模值除以N/2(n=1时是直流分量,其幅值是该点的模值除以N)。

二、傅里叶变换的C语言编程1、对于快速傅里叶变换FFT,第一个要解决的问题就是码位倒序。

假设一个N 点的输入序列,那么它的序号二进制数位数就是t=log2N.码位倒序要解决两个问题:①将t位二进制数倒序;②将倒序后的两个存储单元进行交换。

如果输入序列的自然顺序号i用二进制数表示,例如若最大序号为15,即用4位就可表示n3n2n1n0,则其倒序后j对应的二进制数就是n0n1n2n3,那么怎样才能实现倒序呢?利用C语言的移位功能!程序如下,我不多说,看不懂者智商一定在180以下!复数类型定义及其运算#define N 64 //64点#define log2N 6 //log2N=6/*复数类型*/typedef struct{float real;float img;}complex;complex xdata x[N]; //输入序列/*复数加法*/complex add(complex a,complex b){complex c;c.real=a.real+b.real;c.img=a.img+b.img;return c;}/*复数减法*/complex sub(complex a,complex b){complex c;c.real=a.real-b.real;c.img=a.img-b.img;return c;}/*复数乘法*/complex mul(complex a,complex b){complex c;c.real=a.real*b.real - a.img*b.img;c.img=a.real*b.img + a.img*b.real;return c;}/***码位倒序函数***/void Reverse(void){unsigned int i,j,k;unsigned int t;complex temp;//临时交换变量for(i=0;i<N;i++)//从第0个序号到第N-1个序号{k=i;//当前第i个序号j=0;//存储倒序后的序号,先初始化为0for(t=0;t<log2N;t++)//共移位t次,其中log2N是事先宏定义算好的{j<<=1;j|=(k&1);//j左移一位然后加上k的最低位k>>=1;//k右移一位,次低位变为最低位}if(j>i)//如果倒序后大于原序数,就将两个存储单元进行交换(判断j>i是为了防止重复交换){temp=x[i];x[i]=x[j];x[j]=temp;}}}2、第二个要解决的问题就是蝶形运算①第1级(第1列)每个蝶形的两节点“距离”为1,第2级每个蝶形的两节点“距离”为2,第3级每个蝶形的两节点“距离”为4,第4级每个蝶形的两节点“距离”为8。

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

N /2 1

r 0
x1 (r )WN2 kr WNk
j 2 2 kr N j
N /2 1

r 0
2 kr WN e
e
2 kr N 2
kr WN /2
所以
X (k )
N / 2 1

r 0
x1 ( r )W
kr N /2
W
k N
N / 2 1

r 0
kr k x2 ( r )WN X ( k ) W /2 1 N X 2 (k )
(4)如果在某一支路上信号需要进行 相乘运算,则在该支路上标以箭头, 将相乘的系数标在箭头旁。
第4章 快速傅里叶变换(FFT)
(2).蝶形运算
由X1(k)、X 2(k)表示X(k)的运算是一种特殊的运算-碟形运算
k X (k ) X 1 (k ) WN X 2 (k )
前一半 (k 0,1,, N 1)
2
N k X (k ) X 1 (k ) WN X 2 (k ) 2
后一半 (k 0,1,, N 1) 2 (前一半)
实现上式运算的流图称作蝶形运算 (N/2个蝶形)
X1(k)
k X (k ) X 1 (k ) WN X 2 (k )
W
X2(k)
k N
N k X ( k ) X 1 (k ) WN X 2 (k ) (后一半) 2
第4章 快速傅里叶变换(FFT)
4.2 基 2 FFT算法
4.2.1 直接计算DFT的特点及减少运算量的基本途 径
一.DFT运算的特点: 设x(n)为N点有限长序列,其DFT正变换为
nk X (k ) x(n)WN , n 0 N 1
k 0,1,, N 1
(4.2.1)
其反变换(IDFT)
同样对n为奇数时,N/2点分为两个N/4点的序列进行DFT,则有:
x5 (l ) x2 (2l ), 0,1,, N 4 1 x6 (l ) x2 (2l 1), 0,1,, N 4 1
第4章 快速傅里叶变换(FFT)
则x(n)的DFT为
X (k ) x(n)WNkn x(n)WNkn
n
(n为偶数)
n
(n为奇数)
N /2 1

由于
N /2 1

r 0
x(2r )W
2 kr N


r 0
x(2r 1)WNk (2 r 1) x2 (r )WN2 kr
计算X(k)包含N/2个蝶形运算和两个N/2点DFT运算
计算工作量分析
(1)1个N/2点的DFT运算量:
第4章 快速傅里叶变换(FFT)
复乘次数:
复乘次数:
N 2 N2 ( ) 2 4
N2 2
复加次数:
复加次数:
N N ( 1) 2 2 N( N 1) 2
(2)两个N/2点的DFT运算量: (3)1个蝶形运算的运算量: 复乘次数: 1 复乘次数:
k N
( A BC)
(1)左边两路为输入 (2)右边两路为输出
W
k N
(C )
X2(k)
( B)
X 1 (k ) W X 2 (k )
( A BC)
k N
(3)中间以一个小圆表示加、 减运算(右上路为相加输 出、右下路为相减输出) (5)当支路上没有箭头及系 数时,则该支路的传输比 为1。
第4章 快速傅里叶变换(FFT)
(3)对X1(k)和X 2 (k)进行蝶形运算,前半部为 X(0)~ X(3),后半部分为 X(4) ~ X(7)
整个过程如图4.2.2 所示:
X1 (0) N/2 点 X1 (1) X1 (2) DFT X1 (3) X2 (0) N/2 点 X2 (1) X2 (2) DFT X2 (3)
X 2 (k ) x2 (r )W4rk x(2r 1)W4rk
r 0 r 0 3 3
k 0,1,2,3
k X ( k ) X 1 ( k ) WN X 2 (k ) k X (k 4) X 1 (k ) WN X 2 (k ), k 0,1,2,3
1 x ( n) N
nk X ( k ) W N , k 0
N 1
n 0,1,, N 1
两者的差别仅在指数的符号和因子1/N.
第4章 快速傅里叶变换(FFT)
一个X(k)的值的工作量,如X(1)
0 1 2 X (1) x(0)WN x(1)WN x(2)WN x( N 1)WNN 1
(1)x(n)中n为偶数时,即 x(0), x(2), x(4), x(6);
分别记作:
x1 (0) x (0), x1 (1) x ( 2), x1 (2) x ( 4), x1 (3) x (6);
进行N / 2 4点的DFT,得X 1 (k )
X 1 (k ) x1 (r )W4rk x(2r )W4rk
N 2
复加次数: 2 复加次数: 复乘: 复加:
N 2 N 2
(4)N/2个蝶形运算的运算量:
计算1个X(k)总 共运算量:
N2 N N2 N N2 2 2 2 2 N N2 N ( 1) N 2 2
与直接计算的计 算工作量比较
第4章 快速傅里叶变换(FFT)
例如 N=8 时的DFT,可以分解为两个N/2=4点的 DFT. 具体方法如下:
第4章 快速傅里叶变换(FFT)
第4章 快速傅里叶变换(FFT)
4.1 引言
4.2 基2FFT算法
4.3 进一步减少运算量的措施
第4章 快速傅里叶变换(FFT)
4.1 引言
• 快速傅立叶变换(FFT)并不是一种新的变换,而是离散傅 立叶变换(DFT)的一种快速算法。 • DFT的计算在数字信号处理中非常有用。例如在FIR滤波器 设计中会遇到从 h(n) 求 H(k) 或由 H(k) 计算 h(n) ,这就要计算 DFT;信号的谱分析对通信、图像传输、雷达等都是很重要 的,也要计算DFT。因直接计算DFT的计算量与变换区间长 度N的平方成正比,当N较大时,计算量太大。 • 自从1965年图基(J. W. Tukey)和库利(T. W. Coody)在 《计算数学》杂志上发表了著名的《机器计算傅立叶级数 的一种算法》论文后,桑德(G. Sand)-图基等快速算法相继 出现,又经人们进行改进,很快形成一套高效运算方法, 这就是快速傅立叶变换简称FFT(Fast Fourier Transform)。这 种算法使DFT的运算效率提高1~2个数量级。
第4章 快速傅里叶变换(FFT)
二. 改进的途径
1.
nk 的对称性和周期性 WN
对称性: 周期性: 可约性: 得:
nk * nk (WN ) WN , nk ( n N ) k n(k N ) WN WN WN ;
nk mnk nk / m WN WmN WN /m ;
第4章 快速傅里叶变换(FFT)
利用上述特性,可以将有些项合并,并将DFT分解为短 序列,从而降低运算次数,提高运算速度.1965年,库利
(cooley)和图基(Tukey)首先提出FFT算法.对于N点DFT,
仅需(N/2)log2N 次复数乘法运算.例如N=1024=210 时, 需要(1024/2)log2 210 =512*10=5120次。 5120/1048576=4.88% ,速度提高20倍
k N
第4章 快速傅里叶变换(FFT)
A
A+ BC
B
C
A- BC
图4.2.1 蝶形运算符号
第4章 快速傅里叶变换(FFT)
4.蝶形运算
(1)蝶形结构
即蝶式计算结构也即为蝶式信号流图 上面频域中前/后半部分表示式可以用蝶形信号流图表示。 作图要素:
X1(k)
( A)
X 1 (k ) W X 2 (k )
(4.2.3) (4.2.2)
n( N k ) ( N n) k nk WN WN WN (WNNk e
j
2 Nk N
e j 2k 1),
W
N /2 N
1(WN 2 e j 1),
N
( k N / 2) k WN WN .
N 1 4 N 1 4 N 1 4 N 1 4
(偶中偶)
lk (2l 1) k X 4 (k ) x4 (l )WN x (2 l 1) W DFT [ x4 (l )]N /4 (偶中奇) 1 /4 N /2 l 0 l 0
第4章 快速傅里叶变换(FFT)
从而可得到 前N/4的X1(k)
(4.2.4)
第4章 快速傅里叶变换(FFT)
其中X1(k)和X2(k)分别为x1(r)和x2(r)的N/2点DFT,

X 1 (k ) X 2 (k )
N / 2 1

r 0
kr x1 ( r )WN / 2 DFT [ x1 ( r )]
(4.2.5) (4.2.6)
N / 2 1
x(0) x(2) x(4) x(6) x(1) x(3) x(5) x(7)
X(0) X(1) X(2) X(3)
WN
WN
1
0
X(4) X(5) X(6) X(7)
WN WN
3
2
第4章 快速傅里叶变换(FFT)
(二) N/4点DFT
由于N=2 L ,所以 N/2仍为偶数,可以进一步把每个N/2点
第4章 快速傅里叶变换(FFT)
快速傅立叶变换算法正是基于这样的思路而发展
相关文档
最新文档