李洁《数字信号处理》2005? Digital Signal Processing__Jie Li 2005? 1 数字信号处理 第四章 快速 Fourier变换 (FFT) Digital Signal Processing 主讲教师:李洁 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换2 / 30 0 500 1000 1500 2000 0 10203040 Number of samples, N Number of Op era t ions DFT ∝ N 2 FFT ∝ N log 2 N 直直 接计算接计算 DFT 由于由于 W N kn 的的 周期性和对周期性和对 称性,会使计算过程出现许多冗余称性,会使计算过程出现许多冗余 直直接计算接计算DFT总共需要总共需要N 2 次次 复数乘法和复数乘法和N((N-1)次复数)次复数 加法!加法! V E R Y B A D ! 首先,首先, FFT并不是一种新的并不是一种新的 Fourier变换,只是变换,只是 DFT的一种快速算法。的一种快速算法。 1,,1,0)()]([)( 1 0 ?=== ∑ ? = NkWnxnxDFTkX N n kn N L W 8 0 W 8 4 W 8 2 W 8 5 W 8 6 W 8 3 W 8 7 W 8 1 512010485761024 44816384128 80102432 4164 Radix-2DFTN 李洁《数字信号处理》2005? Digital Signal Processing__Jie Li 2005? 2 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换3 / 30 例 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换4 / 30 § 4.2 基 2FFT算法 1. 的特性 m N W 周期性 22 ()jmlN jm mlN m NN NN We e W ππ ?+ ? + === 对称性 W 8 0 W 8 4 W 8 2 W 8 5 W 8 6 W 8 3 W 8 7 W 8 1 W 16 0 W 16 8 W 16 4 W 16 10 W 16 12 W 16 6 W 16 14 W 16 2 W 16 1 W 16 3 W 16 5 W 16 7 W 16 9 W 16 11 W 16 13 W 16 15 怎样减少怎样减少 DFT的计算量?的计算量? WWWWWW m N N m N m N mN N mN N m N ? === +??? 2 )*( 可约性 WWWW mnk mN nk N mnk mN nk N / / == 当当 当当 当当 N=2 M 时,???时,??? 李洁《数字信号处理》2005? Digital Signal Processing__Jie Li 2005? 3 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换5 / 30 2. 时域抽取法基 2FFT基本原理 1,,1,0)()]([)( 1 0 ?=== ∑ ? = NkWnxnxDFTkX N n kn N L W 8 0 W 8 4 W 8 2 W 8 5 W 8 6 W 8 3 W 8 7 W 8 1 0 1 2 3 4 5 6 7 8 9 10 n 0 N x(n) 1 3,2,1,0,)2()( 1 == rrxrx 3,2,1,0,)12()( 2 =+= rrxrx 3,2,1,0,)()( 3 0 4 11 == ∑ = krxkX n kn W 3,2,1,0,)()( 3 0 4 22 == ∑ = krxkX n kn W WWWWWWWWW kkkkkkkk n kn xxxxxxxxnxkX 7 8 5 8 3 8 1 8 6 8 4 8 2 8 0 8 7 0 8 )7()5()3()1()6()4()2()0()()( +++++++== ∑ = WW kn knjknj kn ee 2 8 2 8 2 4 2 4 === ?? ππ ))(()( ))7()5()3()1(())6()4()2()0(( ))7()5()3()1(())6()4()2()0(( 2 8 1 3 4 2 4 1 4 0 4 1 8 3 4 2 4 1 4 0 4 6 8 4 8 2 8 0 8 1 8 6 8 4 8 2 8 0 8 kXkX xxxxxxxx xxxxxxxx W WWWWWWWWW WWWWWWWWW k kkkkkkkkk kkkkkkkkk += +++++++= +++++++= 3,2,1,0,))(()())4(()4()4( 3,2,1,0,))(()()( 2 8 12 4 8 1 2 8 1 =?=+++=+ =+= + kkXkXkXkXkX kkXkXkX WW W kk k 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换6 / 30 ? 蝶形 WN k X 1 (k) X 1(k)+WN k X 2(k) X 1 (k)-W N k X 2 (k) X2(k) Butterfly 李洁《数字信号处理》2005? Digital Signal Processing__Jie Li 2005? 4 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换7 / 30 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换8 / 30 李洁《数字信号处理》2005? Digital Signal Processing__Jie Li 2005? 5 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换9 / 30 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换10 / 30 4. DIT-FFT的运算规律及编程思想 Ⅰ)原位计算 李洁《数字信号处理》2005? Digital Signal Processing__Jie Li 2005? 6 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换11 / 30 Ⅱ)旋转因子的变化规律 p N W N点点DIT――FFT运算流图中,每级都有运算流图中,每级都有N/2个蝶形。个蝶形。 每个蝶形都要乘以因子每个蝶形都要乘以因子W N p ,称其为旋转因子,,称其为旋转因子,p称为旋转因子的指数。称为旋转因子的指数。 观察图不难发现,第观察图不难发现,第L级共有级共有2 L-1 个不同的旋转因子。个不同的旋转因子。 LM Jp ? ?= 2 12,...,2,1,0 1 ?= ?L J 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换12 / 30 Ⅲ)蝶形运算规律 1 2 ? = L B 同一旋转因子对应着间隔为同一旋转因子对应着间隔为 2 L 点的点的 2 M-L 个蝶形。个蝶形。 李洁《数字信号处理》2005? Digital Signal Processing__Jie Li 2005? 7 MATLAB Ⅳ)编程思想及程序流程 从输入端第1级开始,逐级进 行,共M级,所以L=1:M 第L级中每个蝶形 相距B=2 L-1 个点 第L级共有2 L-1 个不 同的旋转因子, J=[0:B-1]则旋转 因子指数分别为 P=2 M-L *J 使用同一个旋 转因子的蝶 形相距2 L 个 点 function X = Myfft(x) [Xold,M,N]=Pinv(x); for L=1:M B=2.^(L-1); for J=0:B-1 P=(2.^(M-L)).*J; WNp=exp(-j*2*pi*P/N); for k=J:2.^L:N-1 X(k+1)=Xold(k+1)+Xold(k+B+1).*WNp; X(k+B+1)=Xold(k+1)-Xold(k+B+1).*WNp; end end Xold=X; end MATLAB function X = Myfft(x) [Xold,M,N]=Pinv(x); for L=1:M B=2.^(L-1); for J=0:B-1 P=(2.^(M-L)).*J; WNp=exp(-j*2*pi*P/N); for k=J:2.^L:N-1 X(k+1)=Xold(k+1)+Xold(k+B+1).*WNp; X(k+B+1)=Xold(k+1)-Xold(k+B+1).*WNp; end end Xold=X; end 李洁《数字信号处理》2005? Digital Signal Processing__Jie Li 2005? 8 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换15 / 30 (1)从输入端第从输入端第 1级开始,逐级进行,共级开始,逐级进行,共 M级,所以级,所以 L=1:M (2)第第 L级中每个蝶形相距级中每个蝶形相距 B=2 L-1 个点个点 (3)第第 L级共有级共有 2 L-1 个不同的旋转因子,个不同的旋转因子, J=[0:B-1]则旋则旋 转因子指数分别为转因子指数分别为 P=2 M-L *J (4)使用同一个旋转因子的蝶形相距使用同一个旋转因子的蝶形相距 2 L 个点,所以同个点,所以同 一组蝶形的起始下标为一组蝶形的起始下标为 k=J:2 L :N-1 流图解读流图解读 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换16 / 30 Ⅴ)序列的倒序 ? 倒序的规律 你能写出 N=16时的倒序数吗? 规律规律 1:写成:写成 M位位 2进制数后,将其倒置,再转换成相应的十进制数进制数后,将其倒置,再转换成相应的十进制数 李洁《数字信号处理》2005? Digital Signal Processing__Jie Li 2005? 9 MATLAB function [x,M,N]= Pinv(x) [N,o]=size(x); M=log2(N); for I=1:N-2 ser1=sscanf(dec2bin(I),'%c',inf); [ms,Ns]=size(ser1); while (M~=Ns) ser1=strcat('0',ser1); [ms,Ns]=size(ser1); end ser3=''; for K=M:-1:1 ser3=strcat(ser3,ser1(1,K)); end ser=bin2dec(ser3); if (I<ser) temp=x(ser+1); x(ser+1)=x(I+1); x(I+1)=temp; end end 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换18 / 30 7 6 5 4 3 2 1 0 n J 7 J 6 J 5 J 4 J 3 J 2 J 1 J 0 J n N/2 N/4 N/8 李洁《数字信号处理》2005? Digital Signal Processing__Jie Li 2005? 10 MATLAB Ⅴ)序列的倒序 function [X,M,N]= invM(X) [N,o]=size(X); LH=N/2; J=LH; for I=1:N-2 if(I<J) Temp=X(I+1); X(I+1)=X(J+1); X(J+1)=Temp; end K=LH; while(J>=K) J=J-K; K=K/2; end J=J+K; end J赋初值 J 1 =0+(N/2) J 0 和J N 不用 交换所以 I=[1:N-2] 为了保证只交换一 次,仅在I<J时交换 由J i 计算J i+1 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换20 / 30 5. 频率抽取法 FFT( DIF-FFT) 0 1 2 3 4 5 6 7 8 9 10 n 0 N x(n) 1 N/2点点 DFT 李洁《数字信号处理》2005? Digital Signal Processing__Jie Li 2005? 11 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换21 / 30 5. 频率抽取法 FFT ( DIF-FFT) 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换22 / 30 李洁《数字信号处理》2005? Digital Signal Processing__Jie Li 2005? 12 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换23 / 30 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换24 / 30 6. FFT的变形运算流图 李洁《数字信号处理》2005? Digital Signal Processing__Jie Li 2005? 13 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换25 / 30 6. FFT的变形运算流图 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换26 / 30 7.快速逆 DFT ∑ ? = == 1 0 )()]([)( N n kn N W nxnxDFTkX ∑ ? = ? == 1 0 )( 1 )]([)( N n kn N W kX N kXIDFTnx ∑∑ ? = ? = ? == 1 0 1 0 )(* 1 )*)(* 1 )(* ( N n kn N N n kn N W W kX N kX N nx *)]}(*[{ 1 ]*)(*[ 1 )( 1 0 kXDFT N kX N nx N n kn N W == ∑ ? = 上式两边同时取共轭上式两边同时取共轭 书上有错! 李洁《数字信号处理》2005? Digital Signal Processing__Jie Li 2005? 14 MATLAB 7. IFFT function X=ifftM(X) %利用 FFT实现 IDFT的子程序 [N,o]=size(X); if (~(rem(log2(N),1)==0)) error('序列长度不是 2的整数次幂!不能进行 IFFT! ') end X=conj(fft(conj(X)))/N; 习题5 *)]}(*[{ 1 ]*)(*[ 1 )( 1 0 kXDFT N kX N nx N n kn N W == ∑ ? = 李洁李洁--《《数字信号处理数字信号处理》》--第四章第四章快速快速Fourier变换变换28 / 30 § 4.3 实序列的 FFT 李洁《数字信号处理》2005? Digital Signal Processing__Jie Li 2005? 15 习题 习题 4 Page 习题开讲 习题 习题 3 Page 已知已知X(k)和和Y(k)分别是两个分别是两个N点实序列点实序列x(n)和和 y(n)的的N点点DFT,若要求,若要求x(n)和和y(n),为提高运,为提高运 算效率,试设计用一次算效率,试设计用一次N点点IFFT来完成。来完成。 )()()()()( kFkFkjYkXkF opep +=+= 习题开讲 )](Im[)](Re[)]([)( nfjnfkFIFFTnf +== )()](Re[)]([)]([ nxnfkFIDFTkXIDFT ep === )()](Im[)]([)]([ njynfjkFIDFTkjYIDFT op === )](*)([ 2 1 )( nfnfnx += )](*)([ 2 1 )( nfnf j ny ?=