大连理工大学信号第5章_离散傅里叶变换与快速傅里叶变换
2_傅里叶级数与傅里叶变换
• 傅里叶的主要贡献
– 任何周期信号可以用成谐波关系的正弦函数级数表 示。
2012/10/21
大连理工大学
7
• 傅里叶理论的发展历程
• 傅里叶之前周期性现象的研究
– 古代巴比伦(Babylonians)时代,利用这一理论来 研究天体运动。 – —1748年,欧拉(Euler)用于研究弦的振动,其 结论为: – 如果某一时刻,振动弦的形状是这些标准振荡模式 的线性组合,则其后任何时刻,振动的弦的形状也 都是这些振荡模式的线性组合。
2012/10/21 大连理工大学 9
• 傅里叶理论的意义
– 在数学、科学、工程上产生巨大影响,是电子信息 与通信技术的基石之一。 • 有了傅里叶理论,才有: – 信号的频域分析处理; – 通信的频率划分与复用; – 其他科学与工程问题的分析与解决。 – 近年来,傅里叶理论有新发展: • 本部分介绍4种:FS,DFS,FT,DTFT • 近年来:STFT与WT (第V部分介绍),FRFT
大连理工大学硕士研究生校管课程 信号分析与数据处理
第2章
傅里叶级数与傅里叶变换
电子信息与电气工程学部 邱天爽 2012年9月
2012/10/21 大连理工大学 1
内容概要
• §2.1 • §2.2 • §2.3 • §2.4 • §2.5 概述 周期性连续时间信号的傅里叶级数 周期性离散时间信号的傅里叶级数 连续时间信号的傅里叶变换 离散时间信号的傅里叶变换
a0 1/ 2
2012/10/21 大连理工大学 14
2012/10/21
周期性连续时间信号的频谱
大连理工大学 15
• 3.狄利赫莱条件(收敛问题)
快速离散傅里叶变换.wps
第5 章快速离散傅里叶变换 5 . 1 引言DFT 是离散时间信号分析和处理中的一种重要变换,应用广泛。
但因直接计算DFT 的计算量与变换区间长度N 的平方成正比,当N 较大时,计算量太大,从而限制了DFT 在信号频谱分析和实时信号处理中的应用。
1965 年库利(J , W 。
Cooley )和图基(J . W . Tukey )在《 计算机数学》 (Math . computation , Vol . 19 , 1965 )杂志上发表了著名的《 机器计算傅里叶级数的一种算法》 论文后,桑德(G . Sallde )一图基等快速算法相继出现,又经人们进行改进,很快形成一套DFT 的高效算法,这就是快速傅里叶变换,简称FFT ( fast Fourier transform )。
FFT 算法使DFT 的运算效率提高了很多,为数字信号处理技术应用于各种实时处理创造了条件,大大推动了数字信号处理技术的发展。
DFT 快速算法的类型很多,但其基本数学原理是相似的。
本章主要介绍基2 时域抽取和基2 频域抽取FFT 快速算法原理,并在此基础上介绍基4 时域抽取FFT 算法。
还将介绍简称为IFFT ( inverse fast Fourier transform )的离散傅里叶逆变换快速算法。
5 . 2 基2FFT 算法5.2.1 直接计算D 畔的运算量及减少运算量的基本途径长度为N 的有限长序列x (n),其DFT 和IDFT 分别定义为()10N-10(),01(5.2.1)1()X ,01(5.2.2)N N knN n knN k X x n W k N x n k W n N -=-==≤≤-=≤≤-∑∑ 考虑x(n)为复序列的一般情况,对每一个k 值,直接按(5.2.1)式计算X(k)值,需要N 次复数乘法,( N 一1 )次复数加法。
因此,对所有N 个k 值,共需2N 次复数乘法和N ( N 一1 )次复数加法运算。
05快速傅里叶变换
X1(0 )
X1(1 ) N点 2 X1(2 ) DFT
X1(3 )
N点 2 DFT
X2(0 ) WN0 X2(1 ) WN1
X2(2 ) WN2 X2(3 ) WN3
X(0 ) X(1 )
X(2 ) X(3 )
-
X(4 ) 1
-
X(5 ) 1
-
X(6 ) 1
-
X(7 ) 1
图 5-2 按时间抽取将一个N点DFT分解为两个N/2点DFT(N=8)
情况,其中输出值X(0)到X(3)由式(5-11)给出,而输出值X(4)到X(7)由式 (5-12)给出。
x1(0 )=x(0 ) x1(1 )=x(2 )
x1(2 )=x(4 ) x1(3 )=x(6 )
x2(0 )=x(1 ) x2(1 )=x(3 )
x2(2 )=x(5 ) x2(3 )=x(7 )
W
N 2
k
N
WNN / 2WNk
WNk
(5-10)
这样,把式(5-8)、式(5-9)、式(5-10)代入式(5-5),就
可将X(k)表达为前后两部分:
X (k) X1(k) WNk X 2(k)
k 0,1,, N 1 2
(5-11)
X
k
N 2
X
1
k
N 2
WN
k
N 2
X
2
二者的差别只在于WN的指数符号不同,以及差一个常数乘 因子1/N,所以IDFT与DFT具有相同的运算工作量。 下面 我们只讨论DFT的运算量。
2020/12/24
信息学科立体化教材
X
5.1.1 直接计算DFT的运算量
5
5_离散傅里叶变换与快速傅里叶变换
6 X (k ) X * (( N k )) N RN (k ), 若 x(n) imagenary
2016/6/2 大连理工大学 26
• 【满足圆周共轭对称性的序列】
2016/6/2
大连理工大学
27
• 【圆周卷积和性质】
– 若: DFT x1(n) X1(k ), DFT x2 (n) X 2 (k )
* * 2 DFT x (( n )) R ( n ) X (k ) N N 1 * 3 DFTRe x(n) X ep (k ) X (( k )) X (( N k )) N RN ( k ) N 2 1 * 4 DFT jIm x(n) X op (k ) X (( k )) X (( N k )) N RN ( k ) N 2 5 X (k ) X * (( N k )) N RN (k ), 若 x(n) real
( n) 和 a k 分别表示周期性信号和频谱。 –定义新符号: x
–定义矩形序列符号 RN (n) 和
RN (k )
为
1, 0 n N 1 1, 0 k N 1 RN (n) 或 RN (k ) 0, 其它 n 0, 其它 k
( n) 和 a k –有限长序列 x(n) 和 ak 可以认为是周期性序列 x 的一个周期。
谱或系统的频率响应也是数字化的。 –实际应用中的信号总是有限时宽的、且为非周期的。希 望信号频谱也是有限频宽、且非周期的。 –考察前面介绍的4种傅里叶级数或傅里叶变换,没有任
何一种能够满足这种需求。
–因此,发展新的傅里叶变换方法以适应数字信号处理实 际应用的要求称为数字信号处理理论的一个重要任务。 –这就为DFT的发展提供了需求和动力。
离散快速傅里叶变换
离散快速傅里叶变换
离散快速傅里叶变换(DFT)是一种在数字信号处理中广泛使用的
算法。
它将一段时间域信号转换为频域信号,可以用于信号滤波、频域分析以及图像处理等领域。
离散快速傅里叶变换的实现有多种方法,其中著名的有Cooley-Tukey算法和Stockham自适应算法。
这些算法的共同点是通过利用信号的对称性和周期性,将DFT的计算复杂度从O(N^2)降到O(NlogN)。
在实际应用中,离散快速傅里叶变换的速度
和精度往往是关键因素,因此算法的优化和实现显得尤为重要。
- 1 -。
信号与系统讲义第五章1引言及无失真传输条件
v1 (t )
C v2 (t)
RC低通网络
1
1
H (s) sC RC
R
1 sC
s
1 RC
H ( j) 1
j
RC
V1(
j)
E
Sa
2
e
j
2
E
s
in(
2
)
e
j
2
2
E (1 e j )
j
V2
(
j)
H
(
j)V1(
j)
j
E
s
in(
2
2
)
e
j
2
V2
(
j)
j
E (1 e j )
第五章 傅里叶变换应用于通信系统
——滤波、调制与抽样
1、利用系统函数H( jw)求响应。 2、系统的频率响应特性
无失真传输、理想低通滤波器
3、系统的物理可实现性
因果系统、佩利—维纳准则、希尔伯特变换
4、信号的调制与解调、带通滤波器的运用 5、从抽样信号恢复连续时间信号 6、通信系统中的通信技术简介
5.1 引言
r(t) e(t)*h(t)
R( j) E( j)H( j) H ( j) LT[h(t)] H ( j) R( j)
E( j)
对稳定系统
H (s)
H ( j) H (s) s j
系统函数还可以通过对微分方程取傅氏变换而得到
求矩形脉冲通过低通滤波器的响应
v1 (t )
E
t
0
输入信号波形
R
权
拉氏变换将信号分解为无穷多项复指数函数est的叠加
利用频域系统函数可以求解系统的响应,但通常 求解周期信号作用下的响应(稳态响应)
快速傅里叶变换原理
计算离散傅里叶变换的一种快速算法,简称FFT。
快速傅里叶变换是1965年由J.W.库利和T.W.图基提出的。
采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。
当用数字计算机计算信号序列x(n)的离散傅里叶变换时,它的正变换(1)反变换(IDFT)是(2)式中、x(n)和X(k)可以是实数或复数。
由上式可见,要计算一个抽样序列就需要做N次复数乘法运算及N-1次复数加法运算。
计算离散傅里叶变换的快速方法,有按时间抽取的FFT算法和按频率抽取的FFT算法。
前者是将时域信号序列按偶奇分排,后者是将频域信号序列按偶奇分排。
它们都借助于的两个特点:一是的周期性;另一是的对称性,这里符号*代表其共轭。
这样,便可以把离散傅里叶变换的计算分成若干步进行,计算效率大为提高。
时间抽取算法令信号序列的长度为N=2M,其中M是正整数,可以将时域信号序列x(n)分解成两部分,一是偶数部分x(2n),另一是奇数部分x(2n+1),其中。
于是信号序列x(n)的离散傅里叶变换可以用两个N/2抽样点的离散傅里叶变换来表示和计算。
考虑到和离散傅里叶变换的周期性,式(1)可以写成(3)其中(4a)(4b)由此可见,式(4)是两个只含有N/2个点的离散傅里叶变换,G(k)仅包括原信号序列中的偶数点序列,H(k)则仅包括它的奇数点序列。
虽然k=0,1,2,…,N-1,但是G(k)和H(k)的周期都是N/2,它们的数值以N/2周期重复。
因为于是由式(3)和式(4)得到(5a)(5b)因此,一个抽样点数为N的信号序列x(n)的离散傅里叶变换,可以由两个N/2抽样点序列的离散傅里叶变换求出。
依此类推,这种按时间抽取算法是将输入信号序列分成越来越小的子序列进行离散傅里叶变换计算,最后合成为N点的离散傅里叶变换。
通常用图1中蝶形算法的信号流图来表示式(5)的离散傅里叶变换运算。
离散傅里叶变换公式
离散傅里叶变换公式离散傅里叶变换(DiscreteFourierTransform,简称DFT)是一种重要的数学工具,在生活中有广泛的应用。
它的发明者是法国数学家傅里叶,现在也被称为“傅里叶变换”。
本文的目的是提供有关离散傅里叶变换的概述,以及它的重要应用。
一、离散傅里叶变换的概念简单来说,离散傅里叶变换(DFT)是通过求解微积分方程来计算信号函数的值的一种数学工具。
它可以用来表示信号函数在时间域上的内容,也可以用来表示信号函数在频率域上的内容。
离散傅里叶变换对正交函数求值有很大的优势,因为它把正交函数分解为一个和平方和的形式。
DFT的计算公式如下:$$ X_k=sum_{n=0}^{N-1} x_ncdot e^{-frac{2{pi}ink}{N}} $$ 其中,$x_n$是信号函数的采样值,$X_k$是信号函数时域上和频率域上的系数,$N$是信号函数的采样频率,$k$是离散傅里叶变换后的频率系数,$n$是信号函数在时域上每个采样点的标号。
二、离散傅里叶变换的重要应用1.频处理离散傅里叶变换的强大的数学特性使它成为音频处理的理想工具。
它可以用来将音频信号从时域转换成频域。
换句话说,它可以用来把声音转换成不同的频率的峰值。
因此,离散傅里叶变换可以用来调节、增强或者减弱各个频率的信号,从而获得更好音质的音频信号。
2.像处理离散傅里叶变换也可以用来处理图像,比如,将图像从时域转换成频域。
它可以把图像拆分成不同的频率部分,从而将图像模糊处理、滤除噪声或增强图像。
三、结论离散傅里叶变换是一种强大的数学工具,它可以用来处理音频信号和图像信号,从而获得更好的效果。
它的应用范围可能会扩展到其他领域,例如信号处理,它将会成为更多的工程应用中的绝佳选择。
快速傅里叶变换(FFT)的原理及公式
快速傅里叶变换(FFT)的原理及公式原理及公式非周期性连续时间信号x(t)的傅里叶变换可以表示为式中计算出来的是信号x(t)的连续频谱。
但是,在实际的控制系统中能够得到的是连续信号x(t)的离散采样值x(nT)。
因此需要利用离散信号x(nT)来计算信号x(t)的频谱。
有限长离散信号x(n),n=0,1,…,N-1的DFT定义为:可以看出,DFT需要计算大约N2次乘法和N2次加法。
当N较大时,这个计算量是很大的。
利用WN的对称性和周期性,将N点DFT分解为两个N/2点的DFT,这样两个N/2点DFT总的计算量只是原来的一半,即(N/2)2+(N/2)2=N2/2,这样可以继续分解下去,将N/2再分解为N/4点DFT等。
对于N=2m点的DFT都可以分解为2点的DFT,这样其计算量可以减少为(N/2)log2N 次乘法和Nlog2N次加法。
图1为FFT与DFT-所需运算量与计算点数的关系曲线。
由图可以明显看出FFT算法的优越性。
将x(n)分解为偶数与奇数的两个序列之和,即x1(n)和x2(n)的长度都是N/2,x1(n)是偶数序列,x2(n)是奇数序列,则其中X1(k)和X2(k)分别为x1(n)和x2(n)的N/2点DFT。
由于X1(k)和X2(k)均以N/2为周期,且WN k+N/2=-WN k,所以X(k)又可表示为:上式的运算可以用图2表示,根据其形状称之为蝶形运算。
依此类推,经过m-1次分解,最后将N点DFT分解为N/2个两点DFT。
图3为8点FFT的分解流程。
FFT算法的原理是通过许多小的更加容易进行的变换去实现大规模的变换,降低了运算要求,提高了与运算速度。
FFT不是DFT的近似运算,它们完全是等效的。
关于FFT精度的说明:因为这个变换采用了浮点运算,因此需要足够的精度,以使在出现舍入误差时,结果中的每个组成部分的准确整数值仍是可辨认的。
为了FFT的舍入误差,应该允许增加几倍log2(log2N)位的二进制。
《快速傅里叶变换》word版
快速傅里叶变换快速傅里叶变换在信号处理等领域有着广泛的应用。
在竞赛中,TTF 主要用途是求两个多项式的乘积,即给定两个阶小于n 的多项式∑-==1)(n k kk xa x A ,∑-==1)(n k kk xb x B ,需要求解)()()(220x B x A x C x C n k k k==∑-=。
注意)(x C 的阶是不超过n 2,而不是n 。
朴素算法依次计算)(x C 的各个系数∑=-=ki ik i k ba C 0,复杂度为)(2n O ,而通过FFT 可以做到)log (n n O 。
在FFT 中需要应用到一些复数的知识。
方程1=nx 在复数域上一共有n 个不同的解,可以表示为nk i n k ππ2sin 2cos+或是等价的)1..0(/2-=n k e ni k π。
记n i e /2π为n ω,则这n 个解也可以表示成1...-n n n ωω。
n ω被称为单位根。
从几何的角度来看,这n 个解对应到的是复平面上单位圆的n 等分点。
对于一个小于n 阶的多项式,如果给出它在n 个不同位置的取值,则该多项式的系数是唯一确定的 。
例如若已知一个小于3阶的多项式)(x F 满足1)0(=F 、3)1(=F 、1)1(=-F ,则可以知道1)(2++=x x x F 。
如果已知一个小于n 阶多项式的系数,则可以在)(2n O 的时间内求得它在任意n 个不同位置上的取值。
如果已知一个小于n 阶的多项式在n 个不同位置上的取值,则可以通过拉格朗日插值公式()(2n O 的复杂度)或是求解线性方程组()(3n O 的复杂度)得到它的系数。
若n 为偶数,则kn k n 2/2ωω=。
FFT 基本思路是通过计算)(x A 在n 2个不同位置上的取值以及)(x B 同样在这n 2个位置上的取值之后,将这两组取值按位置相乘,就得到了)(x C 在这n 2个位置上去取值。
最后再将)(x C 的系数推出来。
离散傅里叶变换基础知识
离散傅里叶变换基础知识离散傅里叶变换基础知识傅里叶是一位法国数学家,他发现任何周期函数都可以用正弦函数和余弦函数构成的无穷级数做为基函数来表示,也就是我们数学上面学到的傅里叶级数,设一个周期函数f(t),其周期为T,则其角频率为w0=2πT,则该函数可以展开为一系列三角函数的累加:f(t)=a0+a1cosw0t+b1sinw0t+a2cos2w0t+b2sinw2t+?=a02+∑a n cosnw0t+b n sinnw0t ∞n=1其中,上式中的各个系数:a0=2T∫f(t)dtT2T2a n=2T∫f(t)cosnw0tdt T2T2b n=2T∫f(t)sinnw0tdt T2T2但这个形式不太好用,因为正弦和余弦项是分开的,我们要考虑把他们两个整合起来,这样对每一个频率nw0我们就可以得到一个系数项(比如上式的a n或者b n),这其实就是该频率对应的幅值。
然后我们以频率为X轴,以其对应的幅值为Y轴,就可以得到该函数在频域里面的图像了。
对于周期函数,其频域里面的图像是不连续的,只在w=0,±w0,±2w0…才有图像。
那么我们该如何将上面的正弦项和余弦项整合到一块呢?答案是欧拉公式。
下面就是鼎鼎大名的欧拉公式:e iwt=coswt+isinwt换个表达方式:coswt=12(e iwt+e?iwt)sinwt=12i(e iwt?e?iwt)将上面的公式代入傅里叶级数中:f(t)=a0+a1cosw0t+b1sinw0t+a2cos2w0t+b2sinw2t+?=a02+∑a n cosnw0t+b n sinnw0t ∞n=1=a02+∑{a ne inw0t+e?inw0t+b ne inw0t?e?inw0t2i}∞n=1=a02+∑{a n?b n i2e inw0t+a n+b n i2e?inw0t}∞n=1=a02+∑{c n e inw0t+c?n e?inw0t}∞n=1我们将上面的a n和b n的计算式代入,可以发现:c n=1T∫f(t)(cosnw0t?isinnw0t)dt=1T∫f(t)e?inw0t dtT2T2T2T2c?n=1T∫f(t)(cosnw0t+isinnw0t)dt=1T∫f(t)e inw0t dtT2T2T2T2所以我们可以将级数中的累计范围变为-∞到∞,这样就可以将c n 和c?n给统一起来,即:f(t)=∑c n e inw0t∞∞其中c n=1T∫f(t)e?inw0t dt T2T2上式的c n就是我们在频域所需要的,它是关于频率w的函数,其函数值为频率w对应的幅值。
快速傅里叶变换
快速傅里叶变换快速傅里叶变换(FFT )是根据计算量的最小化原理来设计和实施离散傅里叶变换(DFT)计算的方法。
1965年,库利(T.W.Cooley )和图基(J.W.tukey )发表了著名的《计算机计算傅里叶级数的一种算法》论文。
从此掀起了快速傅里叶变换计算方法研究的热潮。
快速傅里叶变换(FFT )的出现,实现了快速、高效的信号分析和信号处理,为离散傅里叶变换(DFT)的广泛应用奠定了基础。
1.1离散傅里叶变换(DFT)的计算设x(n)是一个长度为M 的有限长序列, 则定义x(n)的N 点离散傅里叶变换为∑-===10)()]([)(N n kn NW n x n x DFT k X 其中由于计算一个X(k)值需要N 次复乘法和(N-1)次复数加法,因而计算N 个X(k)值,共需N2次复乘法和N(N-1)次复加法。
每次复乘法包括4次实数乘法和2次实数加法,每次复加法包括2次实数加法,因此计算N 点的DFT 共需要4N2次实数乘法和(2N2+2N ·(N-1))次实数加法。
当N 很大时,这是一个非常大的计算量。
1.2减少DFT 计算量的方法减少DFT 的计算量的主要途径是利用k N W 的性质和计算表达式的组合使用,其本质是减少DFT 计算的点数N 以便减少DFT 的计算量。
k N W 的性质:(1)对称性: (2)周期性: (3) 可约性: (4) 特殊点: 选择其中一个证明N N j k N j N k N j N k N e e e W 222)2(22πππ--+-+==ππj k N j e e --=2k N j e π2--=k N W -=FFT 算法是基于可以将一个长度为N 的序列的离散傅里叶变换逐次分解为较短的离散傅里叶变换来计算这一基本原理的。
这一原理产生了许多不同的算法,但它们在计算速度上均取得了大致相当的改善。
0,1,,1k N =-()*nk nk N N W W -=()()nk N n k n N k N N NW W W ++==nk mnk N mN W W =//nk nk m N N mW W =01N W =/21N N W =-(/2)k N k N NW W +=-在这里讨论两类基本的FFT 算法。
第五章 快速傅里叶变换
例子
• 例1:当N=1024点时,直接计算DFT需要: N2=220=1048576次,即一百多万次的复乘运算 这对实时性很强的信号处理(如雷达信号处理)来 讲,它对计算速度有十分苛刻的要求-->迫切 需要改进DFT的计算方法,以减少总的运算次 数。 • 例2:石油勘探,24道记录,每道波形记录长 度5秒,若每秒抽样500点/秒, 每道总抽样点数=500*5=2500点 24道总抽样点数=24*2500=6万点 DFT运算时间=N2=(60000)2=36*108次
5.1直接计算DFT 的问题及改进的 基本途径
一、直接计算DFT计算量
• 问题提出: 设有限长序列x(n),非零值长度为N,计 算对x(n)进行一次DFT运算,共需多 大的运算工作量?
1.比较DFT与IDFT之间的运算量
x(n) X (k ) x(n)W
DFT n 0 N 1 IDFT N 1 kn N
• 快速付里时变换(FFT)就是在此特性基础上 发展起来的,并产生了多种FFT算法,其基 本上可分成两大类: • 按抽取方法分: 时间抽取法(DIT);频率抽取法(DIF) • 按“基数”分:基-2FFT算法;基-4FFT算 法;混合基FFT算法;分裂基FFT算法 • 其它方法:线性调频Z变换(CZT法)
+
N 2
N
2
N 2 ( ) 2
X (k )
N 4
N 2 ( ) 2
X (k )
=
N 2
2
X (k ) N 4 N 2 N 2 N 2 N 2 N ( ) + ( ) + ( ) + ( ) = 4 4 4 4 4 这样一直分下去,剩下两点的变换。 X (k )
快速傅里叶变换(FFT)详解
快速傅⾥叶变换(FFT)详解快速傅⾥叶变换(FFT)详解 (这是我第⼀次写博,不喜勿喷...) 关于FFT已经听闻已久了,这次终于有机会在Function2的介绍下来了解⼀下FFT了。
快速傅⾥叶变换(Fast Fourier Transformation)简称FFT。
在各⼤OI竞赛中也常有⽤到,也是⼀个⼗分优秀的可以装逼的好算法 在这篇blog中,有⼤量数学推导,因为我懒得写公式(好复杂,逃),所以⽤图⽚代替了╮(╯▽╰)╭,如有不适,望见谅(逃~~)。
基础知识:多项式的度数:多项式的线性空间系数表达向量的卷积分治乘法(如果你急着和MM约会或机房要关门了,那跳过也⽆妨)点值表达插值点值计算分析单位复数根单位复数根的性质1. 消去引理 2.折半引理 3.求和引理铺垫都铺完了,让我们⼀起进⼊DFT,FFT,IDFT的美妙世界吧!离散傅⾥叶变换(Discrete Fourier Transform 简称DFT)快速傅⾥叶变换(FFT)(终于等到你~~)逆离散傅⾥叶变换(Inverse Discrete Fourier Transform 简称IDFT)FFT的迭代实现我们类似于需要像这样实现FFT:知识点终于讲完了,接下来我们就要开始写板⼦了板⼦题:代码附上~~1 #include<cstdio>2 #include<iostream>3 #include<cmath>4 #include<cstring>5 #include<algorithm>6 #include<cstdlib>7using namespace std;8const int mod=1e9+7;9const double pi=acos(-1);10struct cn11 {12double x,y;13 cn (double x=0,double y=0):x(x),y(y) {}14 }a[300005],b[300005],c[300005];15 cn operator + (const cn &a,const cn &b) {return cn(a.x+b.x,a.y+b.y);}16 cn operator - (const cn &a,const cn &b) {return cn(a.x-b.x,a.y-b.y);}17 cn operator * (const cn &a,const cn &b) {return cn(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);} 18void fft(cn a[],int n,int l,int f)19 {20int rev[n+5];21 rev[0]=0;22for (int i=1; i<n; i++){23 rev[i]=(rev[i>>1]>>1)|((i&1)<<l-1);24if (i<rev[i]) swap(a[i],a[rev[i]]);25 }26for (int i=1; i<n; i<<=1){27 cn wi(cos(pi/i),f*sin(pi/i));28for (int j=0; j<n; j+=i*2){29 cn w(1,0);30for (int k=0; k<i; k++){31 cn x=a[j+k],y=w*a[j+k+i];32 a[j+k]=x+y;33 a[j+k+i]=x-y;34 w=w*wi;35 }36 }37 }38if (f==-1)39for (int i=0; i<n; i++){40 a[i].x/=n; a[i].y/=n;41 }42 }43int main()44 {45int n,m;46 scanf("%d%d",&n,&m); n++; m++;47for (int i=0; i<n; i++) scanf("%lf",&a[i].x);48for (int i=0; i<m; i++) scanf("%lf",&b[i].x);49int l=0,N=1;50while (N<n+m-1) N<<=1,l++;51 fft(a,N,l,1);52 fft(b,N,l,1);53for (int i=0; i<N; i++) c[i]=a[i]*b[i];54 fft(c,N,l,-1);55for (int i=0; i<n+m-1; i++) printf("%d ",(int)(c[i].x+0.5)); 56return0;57 }鸣谢:LLX⼤佬(Ps:⼀个巨搞笑的东西:)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
( n) 的一个周期, (n) x(n) , 其时间长度为 N ,x ( n) 的 DTFT 为 X (e j ) 。 将 x ( n) 考虑为 x 对x
k 。取 a k 的一个周期,即得到离散傅里叶变换 DFT,表示为 X ( k ) 。 X ( k ) 与 做 DFS,得到 a
( n) 的一个周期即 x ( n) 对应,如表 5.1 中最后一行图中的虚线所示。 x
ak
1 N
n N
x(n)e
k N k
jk0 n
1 N
k N
x(n)e
k
jk (2 / N ) n
x( n)
3. 连续时间信号的傅里叶变换
ae
jk0n
k N
ae
(5.2)
jk (2 / N ) n
对于任意满足狄利赫莱条件的连续时间信号 x (t ) ,其傅里变换(FT)为
x (t ) 另一方面, x ( n) 可以看作 x(t ) 的采样序列, X ( k ) 也可以看作是 X ( j ) 的采样序列。
和 X ( j ) 是由 FT 联系的,而 x ( n) 和 X ( k ) 则是由 DFT 联系的。 3. 离散傅里叶变换与其他傅里叶变换的关系 (1)DFT 与 FT 的关系 如前所述,参与 DFT 计算的离散时间信号 x ( n) 可以看作参与 FT 计算的 x(t ) 的时域采 样,而 DFT 得到的离散频谱 X ( k ) 一额可以看作 FT 得到的连续频谱 X ( j ) 的频域采样。 (2)DFT 与 DFS 的关系
k 表示周期性离散时间信号和频谱, (n) 和 a 而以 x ( n) 和 ak 表示有限长时间和频谱序 我们用 x
列。 定义矩形序列符号 RN ( n) 为
1, 0 n N 1 1, 0 k N 1 RN ( n) 或 RN ( k ) 0, 其它 N 0, 其它 N
5.2 离散傅里叶变换
5.2.1 已有傅里叶变换的简要回顾
1
为了便于本章关于傅里叶变换的介绍和研究, 本节简要回顾一下第 2 章介绍的 4 种傅里 叶级数和傅里叶变换的概况。 1. 连续时间周期信号的傅里叶级数 对于满足狄利赫莱条件的连续时间周期信号 x (t ) ,其傅里叶级数(FS)为
ak
(5.6) (5.7)
表示 n 对 N 取余数 (或 k 对 N 取余数) , 这样, 利用 RN ( n) 和 x (( n )) N 式中,(( n)) N(或 ( k ) N )
k 表示 (n) 和 a (或对应的 RN ( k ) 和 ( k ) N ) ,可以将有限长序列 x ( n) 和 ak 与对应的周期序列 x
2
信号处理技术对信号和频谱特性的基本要求, 需要有一种变换, 在时间域适合于有限长时间 序列,在频率域适合有限长频谱序列。这个变换就是离散傅里叶变换,简称为 DFT。
5.2.2 由离散傅里叶级数到离散傅里叶变换 1. 离散傅里叶变换的导出与定义 根据 5.2.1 节的分析,在已经给出的 4 种傅里叶级数与变换中,只有 DFS 在时域和频域 都是离散时间序列, 分别用 x ( n) 和 ak 表示。 进一步地, 我们知道 x ( n) 和 ak 均为周期性序列, 且周期均为 N 。DFS 的以上特点,为 DFT 的推导准备了条件。为了便于说明,在本小节中
第 5 章 离散傅里叶变换与快速傅里叶变换
5.1 引言
本书第 2 章已经集中研究了关于傅里叶级数和傅里叶变换的理论与方法, 可以统称为傅 里叶理论。其中包括连续时间周期信号的傅里叶级数(FS) ,离散时间周期信号的傅里叶级 数(DFS) ,连续时间信号的傅里叶变换(FT)和离散时间傅里叶变换(DTFT) 。从某种意 义上来说, 以上傅里叶理论已经相对完备和完善了。 那么我们为什么还要研究离散傅里叶变 换(discrete Fourier transform,简称为 DFT)呢?究竟什么是离散傅里叶变换呢?离散傅里 叶变换域第 2 章介绍的傅里叶理论有什么相同和不同呢? 大家知道,20 世纪 60 年代以来,随着计算机技术和信息技术的发展,数字信号处理技 术应运而生,并逐步由理论走向实际应用。经过半个世纪的发展,数字信号处理技术已经广 泛应用于语音图像、雷达声纳、地质勘探、通信系统、自动控制、遥感遥测、航空航天、生 物医学和信息检测处理等诸多领域, 一方面有力推动了这些领域的发展域进步, 另一方面也 不断是数字信号处理技术得到不断的发展域完善。 对于基于数字计算机的数字信号处理应用来说, 我们总是希望时间信号是离散的或数字 化的,同时也希望经过傅里叶变换的频谱或频率响应也是离散的或数字化的。在者,实际应 用中的信号总是有限时宽的、且为非周期的。因此,实际应用的需求迫切希望有一种傅里叶 变换方法能够对有限时宽非周期离散时间信号进行变换, 得到的信号频谱也是离散的、 有限 频宽、且非周期的。但是考察一下本书第 2 章介绍的 4 种傅里叶级数或傅里叶变换,尚没有 任何一种能够满足这种需求。 因此, 发展新的傅里叶变换方法以适应数字信号处理实际应用 的要求称为数字信号处理理论的一个重要任务。 正是在这种背景下, 离散傅里叶变换应运而 生,为数字信号处理提供了强有力的支持,同时也进一步丰富发展了傅里叶变换的理论。 离散傅里叶变换是将有限时宽离散时间信号 (常称为有限长序列) 变换为有限长离散频 谱的变换。 或者说, 离散傅里叶变换是信号在时域和频域都呈离散形式且非周期的傅里叶变 换。 离散傅里叶变换是数字信号处理领域最重要的变换之一, 是对信号进行时域和频域处理 的最重要的技术手段。 本章详细介绍傅里叶变换的基本理论与基本方法,包括其定义、性质、与已有傅里叶理 论框架中各种方法的关系、相关应用域需要注意的技术问题、以及傅里叶变换的快速算法, 称为快速傅里叶变换(fast Fourier transform)等,以期使读者进一步掌握傅里叶变换的理论 体系,并掌握实际应用中信号频域分析处理的基本技术和方法。
(5.5)
显然, RN ( n) (或 RN ( k ) )是两个单位阶跃信号的组合。考虑到有限长序列 x ( n) 和 ak 可以
k 的一个周期,再定义 (n) 和 a 认为是周期性序列 x ( n) x (n 模 N ) x (( n)) N x
k a( k 模 N ) a( k ) N a
1 x ( t )e jk 0t dt x (t )e jk ( 2 /T ) t dt T T T
k
x (t )
ae
kHale Waihona Puke jk 0t
k
ae
k
(5.1)
jk (2 / T ) t
2. 离散时间周期信号的傅里叶级数 对于任意离散时间周期信号 x ( n ) ,其离散傅里叶级数(DFS)为
表 5.1 DFT 的图形解释 序 号 时间信号
(t ) x
频谱
ak
说明
(t ) , 连续时间周期信号 x
其 FS 为 ak 。
1
T
T
t
k
x (t )
X ( j )
(t ) 截取一个周期,得 对x
到非周期信号 x (t ) ,其 FT 为 X ( j) 。
2
T
x( n)
t
C
C
3
X ( k ) DFT[ x ( n)] x ( n)e
n 0
N 1
j
2 nk N
nk x ( n )WN , k =0, 1 , ,N 1 n 0
N 1
(5.10)
x ( n) IDFT[ X ( k )]
2 j nk 1 N 1 1 N 1 N ( )e 1 X k , ,N 1 X (k )WN nk , n=0, N k 0 N k 0
X (e j )
对 x (t ) 采样,得到 x( n) , 其 DTFT 为 X (e j ) 。
3
N 1
n
s
C
C
s
(n) 的 一 个 考 虑 x( n) 为 x
(n) x
k a
( n ) 做 DFS,得 周期,对 x
k 。取 a k 的一个周期, 到a
4
成如下关系:
( n) RN ( n) x ((n)) N RN ( n) x( n) x
k RN ( k ) a( k ) N RN ( k ) ak a
(5.8) (5.9)
由式(5.3)给出的 DFS 的定义来看,离散傅里叶级数求和是限定在一个周期内的,例 如限定为 0 到 N 1 ,称这个求和区间为主值区间,这样,DFS 的求和也完全适用于对有限 长序列 x ( n) 和 ak 的求和。这样,我们得到离散傅里叶变换的定义如下: 定义 5.1(离散傅里叶变换)有限长离散时间信号(称为有限长序列) x ( n) 的离散傅里 叶变换定义为
(5.11)
式(5.10)和式(5.11)分别为离散傅里叶变换的正变换和逆变换。式中, k 为数字频率变 量,无量纲,具有相对意义。 x ( n) 为有限长序列,长度为 N 。 X ( k ) 为离散傅里叶变换的频 谱,也是有限长序列,长度也为 N 。式中
WN e
j
2 N
(5.12)
显然,DFT 并不是一个新的傅里叶变换形式,其源于 DFS,只不过在时域和频域都仅 取一个周期而已。在实际应用中,对于长度为 N 的有限长序列 x ( n) ,可以通过求 DFT 而得
N 1
得到 DFT x( k ) 。 x( k ) 与
n
N 1 k
( n) 的 一 个 周 期 即 x( n) x
对应,如图中虚线所示。 4
(t ) 截取一 (t ) ,周期为 T ,其 FS 为 ak 。对 x 如表 5.1 所示。现考虑连续时间周期信号 x