第二章离散傅里叶变换及其快速算法(下)
第2章 离散傅里叶变换和快速算法.ppt
杨毅明 第2章 离散傅里叶变换和快速算法
2.1.1 离散傅里叶级数
离散傅里叶级数的定义:
X~ (k )
N 1 ~x (n)e
j 2 N
kn
n0
~x (n)
杨毅明 第2章 离散傅里叶变换和快速算法
2.2 利用DFT做连续信号的频谱分析
离散傅里叶变换可以用来分析连续时间信号的频谱,其 原理如下:
这种方法存在如下问题: 混叠,泄漏,栅栏效应,分辨率,周期效应。 根据例6(书上63页)说明上面5个问题。
杨毅明 第2章 离散傅里叶变换和快速算法
clear;close all; f=10;a=4;T=1/(a*f);t=0:T:3; x=sin(2*pi*f*t); subplot(211);plot(t,x);xlabel('t/s');ylabel('x(t)'); N=length(t);n=0:N-1;k=n; W=exp(-j*2*pi/N*k'*n); X=W*conj(x'); subplot(212);stem(k,abs(X),'.');xlabel('k');ylabel('X(k)');
N 1 ~x1 (m) ~x2 (n rL m) RN (n)
m0
r
yL (n rL) RN (n) r
杨毅明 第2章 离散傅里叶变换和快速算法
yL(n)和yC(n) 的关系
yC (n) yL (n rL) RN (n) r
离散傅里叶变换(DFT)
尾补L-M
(2) 第1行以后的各行均是前一行向右循环移1位
(3) 矩阵的各主对角线上的序列值均相等。
y(0)c x(0) x(L1) x(L2)
y(1)c
x(1)
x(0) x(L1)
y(2)c
= x(2)
x(1)
x(0)
y(L1)c x(L1) x(L2) x(L3)
m0
n'm
精选课件
N1
N1
X(k) x1(m)WN km x2(n')WN kn '
m0
n'0
X1(k)X2(k), 0kN1
由于 X ( k ) D F T [ x ( n ) ] X 1 ( k ) X 2 ( k ) X 2 ( k ) X 1 ( k ), 因此
x (n ) ID F T [X (k)] x 1 (n ) x2(n)x2(n) x 1 ( n )
精选课件
若 则
且
D[F x(n)T ]X (k) D [ x ( F n (m T )N R )N ( n ) ] W N m X ( k k ) ID [X (k F ( l)T N ) R N ( k ) ] W N n x ( ln )
证明:
N 1
N 1
Y ( k ) D F T [ y ( n ) ] N x ( ( n m ) ) N R N ( n ) W N k n x ( ( n m ) ) N W N k n
m0
(3.2.5)
yc(n)=h(n) x(n)
L称为循环卷积区间长度,L≥max[N,M]。
精选课件
信号实验报告( 离散傅里叶变换及其快速算法及IIR数字滤波器的设计)
信号实验一离散傅里叶变换及其快速算法一、实验目的1、掌握计算序列的离散傅里叶变换(FFT)的方法;2、掌握实现时间抽取快速傅里叶变换(FFT)编程方法;3、加深对DFT与序列的傅里叶变换和Z变换之间的关系的理解;4、复习复数序列的运算方法。
二、程序设计框图1.码位倒置程序框图2.蝶形图运算程序框图三、实验程序实验程序的源代码如下:#include"math.h"#include"stdio.h"/*------------------------------------------------------------------------------------------子函数部分------------------------------------------------------------------------------------------*/ void swap(float *a,float *b)//交换变量子函数{float T;T=*a;*a=*b;*b=T;}void fft (float A [],float B [],unsigned M)//数组A为序列的实部, 数组B为序列的虚部{unsigned long N,I,J,K,L,LE,LE1,P,Q,R;float Wr,Wi,W1r,W1i,WTr,WTi,theta,Tr,Ti;N=1<<M;J=0;for(I=0;I<N-1;I++){if(J>I){swap(&A [I],&A [J]);swap(&B [I],&B [J]);}K=N>>1;while(K>=2&&J>=K){J-=K;K>>=1;}J+=K;}for(L=1;L<=M;L++){LE=1<<L;LE1=LE/2;Wr=1.0;Wi=0.0;theta=(-1)*3.1415926536/LE1;W1r=cos (theta);W1i=sin (theta);for(R=0;R<LE1;R++){for(P=R;P<N-1;P+=LE){Q=P+LE1;//基本蝶形图的复数运算Tr=Wr*A[Q]-Wi*B[Q];Ti=Wr*B[Q]+Wi*A[Q];A[Q]=A[P]-Tr;B[Q]=B[P]-Ti;A[P]+=Tr;B[P]+=Ti;}WTr=Wr;WTi=Wi;Wr=WTr*W1r-WTi*W1i;Wi=WTr*W1i+WTi*W1r;}}return;}/*------------------------------------------------------------------------------------------主函数部分------------------------------------------------------------------------------------------*/ void main(){float A[20],B[20];char t1,t2,file_name[20];int M,N,i,iiff;FILE *fp;/*************************************数据读取部分************************************/ printf("请输入文件名:");//输入数据文件名scanf("%s",file_name);printf("FFT变换还是IFFT变换?(FFT:1,IFFT:-1):");//输入变换方式, 1为FFT, -1为IFFTscanf("%d",&iiff);while(iiff!=1&&iiff!=-1)//检错: 检验上一步的输入是否有错, 有错则重新输入{printf("输入错误, 请重新输入! ");printf("FFT or IFFT?(FFT:1,IFFT:-1):");scanf("%d",&iiff);}fp=fopen(file_name,"r");//打开文件并读入数据fscanf(fp,"%d",&M);N=pow(2,M);//计算序列总数for(i=0;i<N;i++)//读取文件中的数据{fscanf(fp,"%f%c%c%f",&A[i],&t1,&t2,&B[i]);if(iiff==-1)//根据FFT或IFFT修正BB[i]=B[i]*-1;if(t2!='j')//检错: 检验读取格式是否有错{printf("输入格式错误\n");break;}if(t1=='+')//判断虚部的正负号B[i]=B[i];else if(t1=='-')B[i]=-B[i];}/****************************************变换部分****************************************/ fft(A,B,M);//FFT变换/**************************************数据输出部分**************************************/ fp=fopen("fft_result.txt","w"); //输出结果if(iiff==-1)fprintf(fp,"IFFT变换的输出结果是: \n");elsefprintf(fp,"FFT变换的输出结果是: \n");for(i=0;i<N;i++){if(iiff==-1) //根据FFT或IFFT修正B{B[i]=B[i]*-1/N;A[i]=A[i]/N;}if(B[i]>=0)//修正虚部的输出格式fprintf(fp,"%f+j%f\n",A[i],B[i]);else if(B[i]<0)fprintf(fp,"%f-j%f\n",A[i],-B[i]);else if(B[i]==0)fprintf(fp,"%f\n",A[i]);}fclose(fp);}四、程序运行结果检验(1) 1.对序列进行FFT变换输入文件fft_input.txt:21+j02+j0-1+j04+j0控制台输入:请输入文件名: fft_input.txtFFT变换还是IFFT变换?(FFT:1,IFFT:-1): 1输出文件fft_result.txt:FFT变换的输出结果是:6.00000+j0.000002.00000+j2.00000-6.00000+j0.000002.00000+j-2.00000运行结果分析:程序运行输出结果与计算结果相同, 表示傅里叶正变换(FFT)成功。
第2章 离散傅里叶变换(DFT)及其快速算法(FFT)
电信系信息技术教研室
2.1.1 离散傅里叶级数DFS
信号特性的时频域对应关系 连续 离散 周期
非周期 周期 离散
电信系信息技术教研室
2.1.1 离散傅里叶级数DFS
?如何对周期为N的周期序列进行频域分析……
如: ~(n) ~(n kN ) x x 周期序列不能进行Z变换,因为其在 n=-到+ 都 周而复始永不衰减,即 z 平面上没有收敛域,所以 其DTFT亦不存在。但是,如同连续时间周期信号可用 傅氏级数表达,周期序列也可用离散的傅氏级数来表 示。
2 1 2 1
X (2) 0 X (6) 0
X (3) 1 j X (7 ) 1 j
2 1 2 1
电信系信息技术教研室
解法二:公式解
N 1 j 2 N 7 j 2 8 kn
X
k
DFS x n
mk
ki mk ~ ~ x (i ) wN wN X ( k ) i 0
N 1
电信系信息技术教研室
3)共轭对称性
x 对于复序列 ~n ,其共轭序列为
~* ~* DFS x n X k
* *
~* x n
,则:
~ ~ DFSx n X k
解:上述序列的基本周期为 N=4,因而
W4 = e-j2π /4 = -j,
~ X (k )
~ X (0) ~ X (1 ) ~ X (2) ~ X (3)
n0
3
nk ~ x ( n )W 4
3
n0
3
~ ( n )W x 4
离散傅里叶变换及其快速算法
离散傅里叶变换及其快速算法离散傅里叶变换(Discrete Fourier Transform,DFT)是一种将离散信号转换为频域表示的数学工具。
它在信号处理、图像处理、通信等领域有广泛的应用。
而快速傅里叶变换(Fast Fourier Transform,FFT)是一种能够高效计算DFT的算法,大大减少了计算量。
首先,我们来看一下DFT的原理。
给定一个有限长度的离散信号序列x(n),DFT将其转换为频谱X(k),其中k为频率索引,取值范围为0到N-1,N为序列的长度。
DFT的定义公式如下:X(k) = Σ x(n) * exp(-j * 2π * nk / N)其中,exp为自然指数函数,j为虚数单位。
DFT将信号分解为了N个复数的和,这些复数代表了不同频率分量在信号中的贡献。
然而,直接计算DFT的时间复杂度非常高,为O(N^2)。
为了提高计算效率,Cooley和Tukey于1965年提出了FFT算法。
FFT算法基于以下性质:若N为2的整数次幂,则DFT可以被分解为两个较小长度的DFT的线性组合。
具体来说,将N个点的DFT拆分为长度为N/2的两个DFT,然后再对这两个子序列进行DFT,最后将两个子序列的结果组合起来。
这个过程可以递归地进行,直到序列长度为1,即可得到最终的DFT结果。
FFT算法的时间复杂度为O(NlogN),远远小于直接计算DFT的复杂度。
这使得FFT成为了处理大规模数据的首选方法之一、此外,FFT还有其他一些优点,如可并行化计算、对称性质等。
FFT算法可以采用不同的实现方式,最著名的是基于蝶形运算的Cooley-Tukey算法。
这种实现方式将FFT过程分为了两个阶段:置换阶段和蝶形运算阶段。
置换阶段通过将信号重新排序,将原始序列分为奇偶两个子序列,并计算每个子序列的DFT。
这个过程可以递归地应用于子序列,直到长度为1蝶形运算阶段是FFT算法的核心部分。
蝶形运算是指将两个频域上的复数进行运算,得到新的复数。
第二章 离散傅里叶变换及其快速算法02
8
3、循环(圆周)卷积 循环(圆周)
若 X 3 (k ) = X 1 (k ) X 2 (k )
则 x3 (n) = x1(n) x2 (n) = ∑ x1(m)x2 ((n m))N RN (n)
m=0
N 1
= ∑ x2 (m)x1((n m))N RN (n)
m=0
N 1
可以看做是两个周期序列做周期卷积后 可以看做是两个周期序列做周期卷积后,再取其主 周期卷积 值序列。 值序列。
故
因此, 具有共轭对称性, 共轭偶对称分量。 因此,Xe(k)具有共轭对称性,称为X(k)的共轭偶对称分量。
16
* 用同样的方法可得到 X o ( k ) = X o ( N k )
Xo(k)具有共轭反对称特性, 称其为X(k)的共轭奇对称分量。 具有共轭反对称特性,
对于纯实数序列x(n),即x(n)=xr(n),X(k)只有共轭 偶对称部分, ),表明实数序列的DFT满足 表明实数序列的DFT 偶对称部分,即X(k)=Xe(k),表明实数序列的DFT满足 共轭对称性。 共轭对称性。
,离散傅里叶变换算法实质上对频率具有选择性。 离散傅里叶变换算法实质上对频率具有选择性。
2π 例3 求余弦序列 x ( n) = cos( qn ), 0 ≤ n ≤ N 1 N
20
的
解:
2π 2π j qn qn j 2π 1 N N x ( n) = cos( qn ) = (e ) +e N 2
在涉及DFT的场合,有限长序列总是表示成 的场合, 在涉及 的场合 周期序列的一个周期。 周期序列的一个周期。
N 1
二、DFT性质 性质
1、线性 、
4
DFT[ax( n) + by( n)] = aX ( k ) + bY ( k )
离散傅里叶变换及快速算法
(5-5)
W e N
j
2 N
的性质:
正交性,周期性,
共轭对称性(偶序列),可约性。
§5.离散傅里叶变换及快速算法
1.离散傅里叶级数
1.2离散傅里叶级的计算
例5-1 求出下面周期序列的DFS
x(n) 0 ,1,2,3, 0 ,1,2,3, 0,1,2,3
n0
为改进嵌套循环计算的效率,将循环结构改为矩阵形式计算
§5.离散傅里叶变换及快速算法
0.概述
离散时间傅里叶变换(DTFT)是通过周期频谱 来描述一个离散信号序列,即DTFT是连续变 量w的连续函数。离散傅里叶变换(DFT)则是 针对有限长序列,是对DTFT采样后得到的离 散序列。 此种表示方法非常有利于数值计算以及数字信 号处理算法的DSP硬件实现。 本章将研究离散傅里叶级数,离散傅里叶变换 (DFT),及离散傅里叶变换的快速算法FFT。
(5-3)
n0
称之为离散傅里叶级数DFS的系数。是一个基波周期为N的 周期序列。
X (k) X (k N)
§5.离散傅里叶变换及快速算法
W e 在DFS变换中引入复数 N
j
2 N
将DFS正反变换描述为
N 1
X (k) x(n)WNnk
n0
x (n)
1 N
N 1
X (k )WNnk
k 0
n0
x(n)
1 N
N 1
X (k )WNnk
k 0
x
1 N
WN* X
WN WNkn 0
k,n
N
1
1 1
1
WN1
1
W ( N 1) N
1
W ( N 1) N
信号处理傅里叶变换.
▪周期性 WNkn WN(k N )n WNk (nN )
▪对称性
W kn N
WNkn
* WN(N k )n WNk (N n)
▪正交性
N 1 j 2 kn N n=mN, m为整数
eN
k 0
0 其他n
上述特性为离散傅里叶变换的分析与计算提供了方便
➢ 周期序列(N)可以用离散傅里叶级数来表示,即用周期为N的
DFS[x%(n)]
N 1
j 2 nk
x%(n)e N
N 1
x%(n)WNnk
n0
n0
比较上面两式,可以得到
X%(k) X (z) , j2 k ze N
X%(k) X (e j ) 2 k , N
0 k N -1 0 k N -1
第2章 离散傅里叶变换
▪ 结论: X%(k ) X (z) , j2 k ze N
0 k N-1
• X~ (k ) 也可解释为 ~x(n) 的一个周期x(n)的傅里叶变换的等间隔
采样。 采样频率为2π/N
第2章 离散傅里叶变换
2.3 离散傅里叶级数(DFS)的性质
离散博里叶级数的某些性质已成功地应用于信号处理问题
2.3.1 线性
DFS [a~x1(n) b~x2(n)] aX~1(k) bX~2(k)
1/T 1/T 周期和连续
-o
o
|X( ejks)| |X( ejks)|
周期和离散
o N点
o
n
N点
(d) n
(d-)
-o N点
s
o N点
s
▪ 结论
第2章 离散傅里叶变换
• 一个域的离散对应另一个域的周期延括 • 一个域的连续对应另一个域的非周期
离散傅里叶变换及其快速计算方法
X N (k ) X '( z )
z WN k
n
x '(n)WNkn
24
X '( z ) Z [ x '(n)]
X N (k ) X '( z )
xN ( n)
z WN k
x '(n rN )
r
频域抽样序列 的得到的
是原来非周期序列 ′ 基于
j
2
mk
N
~
X (k )
2
j
mk ~
~
mk ~
N
DFS [ x ( n m)] WN X (k ) e
X (k )
Note:时域延迟,频域有线性相移
3、调制性质
~
DFS [WNln x(n)] X (k l )
13
4、周期卷积和(时域)
~
~
~
若 Y (k ) X 1 (k ) X 2 (k )
N 1
1
nk
x ( n) x ( n) R ( n)
X ( k )W N RN ( n)
N
N k 0
x(n),X(k)
代替
( , (
DFT变换对(标准形式):
2
N 1
N 1
j nk
nk
N
X
(
k
)
DFT
[
x
(
n
)]
x
(
n
)
W
=
x
(
周期为点的周期延拓
离散傅里叶变换及其快速算法
1 N
N 1
X
(k
)W
nk N
z
n
k 0
1
N
N 1
N 1
X (k)
k 0
n0
WNnk z n
=
1
N
N 1 k 0
X
(k
)
1 WNNk 1 WNk
z z
N 1
其中
= = 1 z N N1 X (k) N k0 1 WNk z 1
N 1
X (k)k (z)
k 0
k (z)
1 N
1 zN 1 WNk z 1
DFT[x (n) ] X ( ( N k) ) N RN (k)
证明:DFT[x (n)] N 1 x (n)WNnk RN (k) n0
N 1
x(n)WNnk RN (k )
n0
N 1
x(n)WN(N
k
)n
RN (k) X (N k)RN (k)
n0
四.共轭对称性
x(n) xr (n) jxi (n)
令X (k) X (e jk )
并采用记号 N
j 2
e N
可得有限长序列{x(n)}(n=0,1,2,…,N-1)旳 离散正反傅立叶变换
离散傅立叶变换,简称DFT
N 1
X (k) DFT x(n) n0 x(n)WNnk (k=0,…,N-1)
傅立叶反变换,简称IDFT
x(n)
IDFT X
由上式可知,xN (n) 是原序列 x(n) 旳周期延拓周期 为N,然后取主值,如图3-3-1所示。
结论:若序列长度为L,频域采样点数(或DFT 旳长度)为N,且L<N,则频域采样后可不失真
实验四 离散傅里叶变换及其快速算法
实验四 离散傅里叶变换及其快速算法一、 实验目的掌握快速傅立叶变换的应用方法;二、 实验仪器:电脑一台,MATLAB6.5或更高级版本软件一套。
三、 实验原理和实例分析 (一)离散傅里叶变换离散傅立叶级数变换是周期序列,仍不便于计算机计算。
但离散傅立叶级数虽是周期序列,却只有N 个独立的数值,所以它的许多特性可以通过有限长序列延拓来得到。
对于一个长度为N 的有限长序列)(n x ,也即)(n x 只在)1(~0-=N n 个点上有非零值,其余皆为零,即⎩⎨⎧-≤≤=其他,010),()(N n n x n x把序列)(n x 以N 为周期进行周期延拓得到周期序列)(~n x ,则有:⎪⎩⎪⎨⎧-≤≤=其他,010),()(~N n n x n x所以,有限长序列)(n x 的离散傅立叶变换(DFT)为:10,)()]([)(10-≤≤==∑-=-N n W n x n x DFT k X N n knN逆变换为:10,)(1)]([)(10-≤≤==∑-=-N n W k X N k X IDFT n x N n kn N若将DFT 变换的定义写成矩阵形式,则得到: X=A ﹒x ,其中DFT 变换矩阵A 为⎪⎪⎩⎪⎪⎨⎧=---2)1(111...1...............11...11N NN N N N N W W W W ADftmtx 函数:用来计算DFT 变换矩阵A 的函数A =dftmta (n ):返回n ×n 的DFT 变换矩阵A 。
若x 为给定长度的行向量,则y =x*A ,返回x 的DFT 变换y 。
Ai =conj (dftmtx (n ))/n ;返回n ×n 的IDFT 变换矩阵Ai 。
【实例4-1】 >> A=dftmtx(4) >> Ai=conj(dftmtx(4))/4 运行结果A =1.0000 1.0000 1.0000 1.0000 1.0000 0 - 1.0000i -1.0000 0 + 1.0000i1.0000 -1.0000 1.0000 -1.0000 1.0000 0 + 1.0000i -1.0000 0 - 1.0000i Ai =0.2500 0.2500 0.2500 0.2500 0.2500 0 + 0.2500i -0.2500 0 - 0.2500i0.2500 -0.2500 0.2500 -0.2500 0.2500 0 - 0.2500i -0.2500 0 + 0.2500i【实例4-2】如果)4/sin()8/sin()(ππn n n x +=是一个N =16的有限序列,用MATLAB 求其DFT 的结果,并画出其结果图,如图4-1所示。
离散傅里叶变换及其快速算法
第五章 离散傅里叶变换及其快速算法 1 离散傅里叶变换(DFT)的推导(1) 时域抽样:目的:解决信号的离散化问题。
效果:连续信号离散化使得信号的频谱被周期延拓。
(2) 时域截断:原因:工程上无法处理时间无限信号。
方法:通过窗函数(一般用矩形窗)对信号进行逐段截取。
结果:时域乘以矩形脉冲信号,频域相当于和抽样函数卷积。
(3) 时域周期延拓:目的:要使频率离散,就要使时域变成周期信号。
方法:周期延拓中的搬移通过与)(s nT t -δ的卷积来实现。
表示:延拓后的波形在数学上可表示为原始波形与冲激串序列的卷积。
结果:周期延拓后的周期函数具有离散谱。
(4)1。
图1 DFT 推导过程示意图(5) 处理后信号的连续时间傅里叶变换:∑∑∞-∞=-=π--δ⋅⎥⎥⎦⎤⎢⎢⎣⎡=k N n N kn j s kf f e nT h f H )()()(~010/2(i))(~f H 是离散函数,仅在离散频率点SNT kT k kf f ===00处存在冲激,强度为k a ,其余各点为0。
(ii) )(~f H 是周期函数,周期为ss T NT N T N Nf 100===,每个周期内有N 个不同的幅值。
(iii) 时域的离散时间间隔(或周期)与频域的周期(或离散间隔)互为倒数。
2 DFT 及IDFT 的定义(1) DFT 定义:设()s nT h 是连续函数)(t h 的N 个抽样值1,,1,0-=N n ,这N 个点的宽度为N 的DFT 为:[])1,...,1,0(,)()(10/2-=⎪⎪⎭⎫⎝⎛==∆-=π-∑N k NTk H enT h nT h DFT s N n Nnk j s s N (2) IDFT 定义:设⎪⎪⎭⎫⎝⎛s NT kH 是连续频率函数)(f H 的N 个抽样值1,,1,0-=N k , 这N 个点的宽度为N 的IDFT 为:())1,...,1,0(,110/21-==⎪⎪⎭⎫ ⎝⎛=⎥⎥⎦⎤⎢⎢⎣⎡⎪⎪⎭⎫⎝⎛∆-=π--∑N k nT h e NTkH NNT kH DFT s N k N nk j s sN (3) N nk j e /2π-称为N 点DFT 的变换核函数,N nk j e /2π称为N 点IDFT 的变换核函数。
知识2 离散傅里叶变换及其快速算法
用Fourier 变换来表示序列和线性时不变系统的频域特征,但是频谱()ωj e X 是ω的连续函书,用计算机处理和分析频谱是不方便的。
那么就需要像时序信号那样,通过采集把连续信号变为离散信号,也对连续频谱采样而得到离散频谱,然后用数字电路或计算机进行处理和分析。
有限长序列在应用中有重要的作用,通过它可以导出另一种Fourier 变换表达式,即离散傅里叶变换(DFT),此为解决频谱离散化的有效方法,同时DFT 的高效算法——快速傅里叶变换FFT 。
周期序列一个周期为N 的周期序列~x ,对于所有的n ,应该满足:()()为整数k kN n x x +=~~周期序列的周期N ,一般使用最小周期作为周期。
与连续时间周期函数相比,周期序列由于n 及N 均为整数,周期序列中应用最广泛的序列是:kn Njkn NeWπ2-=(2-1)ImRe1上图就是周期序列nN W (N=8),从n=0开始到8取完周期内的所有值。
令k = 1时,nN W 就是一个周期序列。
当n 从0依次加1到N-1时,序列nN W 取完周期内的所有值,这些值可以看成是Z 平面上以原点为圆心的单位圆被N 等分的交点的的坐标值。
k 为其他数值时,knN W 的最小周期也许不是N ,但是N 一定是knN W 的周期。
knN W 的性质很明显:周期性:knN W =nN k NW )(-=)(N n k NW -对称性:kn N W -=()*kn N W =nk N NW )(-=)(n N k NW -正交性:()()∑-=⎩⎨⎧==10n 0,N k knNr rN n N W其他为整数 或者 ()()∑-=⎩⎨⎧==1n 0,N n kn Nr rN k N W其他为整数 一个周期为N 的周期序列()n x ~,在n=∞-到n=+∞的范围内仅有N 个序列值是独立的其中一个周期内的N 个序列值足以表征整个序列的特征。
而对于长度为N 的有限长序列,只讨论n=0到N-1之间的N 个序列值,其余皆为0。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
X (2r) a(n)WNnr/2 n0 N / 21
X (2r 1) b2 (n)WNnr/2 n0
这正是两个N/2点的DFT运算,即将一个N点的DFT分解为两 个N/2点的DFT,上式的运算关系可用下图表示.
由
wrN / 2k N
wNrk
2
2
(k N )
WN 2
WNk
得:
X
(k
N 2
)
Gk WNk
H k,
k 0,1, N 1 2
可见,一个N点的DFT被分解为两个N/2点的DFT,这 两个N/2点的DFT再合成为一个N点DFT.
X k Gk WNk H k ,
k ,, , N
X
(k
N 2
从上面的分析看到,在DFT计算中,不论是乘法和 加法,运算量均与N2成正比。因此,N较大时,运 算量十分可观。例,计算N=10点的DFT,需要100 次复数相乘,而N=1024点时,需要1048576(一百 多万)次复数乘法,如果要求实时处理,则要求 有很高的计算速度才能完成上述计算量。
反变换IDFT与DFT的运算结构相同,只是多乘 一个常数1/N,所以二者的计算量相同。
1、DFT运算的特点:
首先分析有限长序列 x(n)进行一次DFT运算所需的运算量。
N 1
X (k ) DFT [x(n)] x(n)wNnk
n0
k 0,1, , N 1
一般,x(n)和wnkN都是复数,因此,每计算一个X(k)值,要进 行N次复数相乘,和N-1次复数相加,X(k)一共有N个点,故完成 全部DFT运算,需要N2次复数相乘和N(N-1)次复数相加,在 这些运算中,乘法比加法复杂,需要的运算时间多,尤其是复数 相乘,每个复数相乘包括4个实数相乘和2个实数相加,例
的运用,而频谱分析仍大多采用模拟信号滤波 的方法解决,直到1965年首次提出DFT运算的一
种快速算法以后,情况才发生了根本变化,人 们开始认识到DFT运算的一些内在规律,从而很 快地发展和完善了一套高速有效的运算方法— —快速付里变换(FFT)算法。FFT的出现,使 DFT的运算大大简化,运算时间缩短一~二个数 量级,使DFT的运算在实际中得到广泛应用。
• 第若组n一 序0=次 列0,分 :则偶为、偶奇序,列根;据n最0=低1则位为n0奇的序0、列1,状得态到来两分,
• 000 010 100 110 001 011 101 111 • 第二次对这两个偶、奇序列再分一次偶、奇序列,
这列就 ;n要1=根1则据为n1的奇0序、列1,状得态到。四若组n序1=列0,:则为偶序 • 000 100 010 110 001 101 011 111 • 同直高理 到 位, 不 ,再 能 最根 再 后据 分 一偶次n2的、分是,最
x(r
)W
rk N
WNk
x(r
)W
rk N
r
r
Gk WNk H k
其中
N /
Gk x(r)WNrk
r
N /
Hk
x(r
)W
rk N
r
注意到,H(k),G(k)有N/2个点,即k=0,1,…, N/2-1,还必须应用系数 wkN 的周期性和对称性
表示 X(k)的 N/2 ~N-1点:
n0
N / 21
X (2r 1) [x(n) x(n N / 2)]WNn(2r1)
n0
N / 21
[x(n) x(n N / 2)]WNnWNnr/2 n0
令 a(n)=x(n)+x(n+N/2) b(n)=[x(n)-x(n+N/2]wnN
这两个序列都是N/2点的序列,将其代入上两式,得
复乘 复加
N 2
•M
N 2
log 2
N
N • M N log2 N
而直接运算时则与N2 成正比。 例 N=2048 , N2=4194304 , (N/2)log2N=11264 , N2 / [(N/2)log2N]=392.4。FFT显然要比直接法快得多。
(2)原位计算 当数据输入到存储器中以后,每一级运算
(1)k
1, k为偶数 1奇数
把X(k)进一步分解为偶数组和奇数组:
N / 21
X (k) [x(n) (1)k x(n N / 2)]WNnk n0
N / 21
X (2r) [x(n) x(n N / 2)]WN2nr n0
N / 21
[
x(n)
x(n
N
/
2)]WN2
nr /2
N/4点 N/4点
N/4点 N/4点
由 四 个 2 点 DFT 组 成 8 点 DFT
最后剩下的是2点DFT,它可以用一个蝶形结表示:
X (0) x(0) W20x(1) x(0) WNo x(1) X (1) x(0) W21x(1) x(0) WNo x(1)
这样,一个8点的完整的按时间抽取运算的流图
N=2M,M:正整数
首先将序列x(n)分解为两组,一组为偶数项,一组为奇 数项,
x(2r) x1(r) x(2r 1) x2 (r
)
r 0,1,, N/2-1
将DFT运算也相应分为两组:
N 1
x(k ) DFT x(n) x(n)wNnk
n0
N 2
N 1
x(n)wNnk
x ( n) wNnk
0
000
1
001
2
010
3
011
4
100
5
101
6
110
7
111
码位倒置 000 100 010 110 001 101 010 111
码位倒置顺序 0 4 2 6 1 5 3 7
在实际运算中,一般直接将输入数据 x(n)按码位倒置的顺序 排好输入很不方便,总是先按自然顺序输入存储单元,然后再通 过变址运算将自然顺序的存储转换成码位倒置顺序的存储,然后 进行FFT的原位计算。目前有许多通用DSP芯片支持这种码位倒置 的寻址功能。
• 000 100 010 110 001 101 011 111
(4)蝶形类型随迭代次数成倍增加
观察8点FFT的三次迭代运算: 第一级迭代,有一种类型的蝶形运算系数W08, 两个数据点间隔为1 第二级迭代,有二种类型的蝶形运算系数W08、 W28,参加 运算的两个数据点间隔为2。 第 三 级 迭 代 , 有 四 类 蝶 形 运 算 系 数 W08 、 W18 、 W28、W38,参加运算的两个数据点间隔为4。
第二章 离散傅里叶变换 及其快速算法
§2.3 快速傅里叶变换 (FFT)
快速傅里叶变换(FFT)是计算DFT的一种 快速有效方法。 从前面的讨论中看到,有 限长序列在数字技术中占有很重要的地位。有 限长序列的一个重要特点是其频域也可以离散 化,即离散傅里叶变换(DFT)。
虽然频谱分析和DFT运算很重要,但在很长一 段时间里,由于DFT运算复杂,并没有得到真正
2)利用
w
nk N
的周期性和对称性,把长度为N点的大点数的
DFT运算依次分解为若干个小点数的DFT。因为DFT的计算量正
比于N2,N小,计算量也就小。
FFT算法正是基于这样的基本思想发展起来的。它有多种形式,
但基本上可分为两类:时间抽取法和频率抽取法。
2、按时间抽取的FFT(N点DFT运算的分解) 先从一个特殊情况开始,假定N是2的整数次方,
-1
X(5)
-1
X(6)
-1
X(7)
-1
两个4点DFT组成8点DFT
按照这个办法,继续把N/2用2除,由于N=2M,
仍然是偶数,可以被2整除,因此可以对两个 N/2 点 的 DFT 再 分 别 作 进 一 步 的 分 解 。 即 对 {G(k)}和{H(k)}的计算,又可以分别通过计算 两个长度为N/4=2点的DFT,进一步节省计算 量,见图。这样,一个8点的DFT就可以分解 为四个2点的DFT。
N / 21
N 1
X (k)
x(n)WNnk x(n)WNnk
n0
nN / 2
N / 21
x(n)WNnk
n0
N / 21
x(n
n0
N 2
(n
)WN
N 2
)k
N / 21
[x(n) WN(N / 2)k x(n N / 2)]WNnk n0
WNN / 2
1,WN(N / 2)k
FFT算法的基本思想:
考察DFT与IDFT的运算发现,利用以下两个特性可减少运
算量: 1)系数
wNnk
j 2 nk
e N 是一个周期函数,它的周期性和对称
性可用来改进运算,提高计算效率。
例
wn(N k) N
wk(N n) N
w nk N
又如
w
N N
/
2
1,
因此
w(kN / 2) N
wNk
利用这些周期性和对称性,使DFT运算中有些项可合并;
由于这种方法每一步分解都是按输入时间序列是属 于偶数还是奇数来抽取的,所以称为“按时间抽取法 ”或“时间抽取法”。
按时间抽取的8点FFT
时间抽取法FFT的运算特点:
(1)蝶形运算 (2)原位计算 (3)序数重排 (4)蝶形类型随迭代次数成倍增加
(1)蝶形运算 对于N=2M,总是可以通过M次分解最后成为2点的 DFT运算。这样构成从x(n)到X(k)的M级运算过程。 从上面的流图可看到,每一级运算都由N/2个蝶形运 算构成。因此每一级运算都需要N/2次复乘和N次复加 ,这样,经过时间抽取后M级运算总共需要的运算:
来相当杂乱,然而它也是有规律的。当用二进制