1、第五章 快速傅里叶变换2 2本章目录n n直接计算DFT的问题及改进的途径n n按时间抽取的基2-FFT算法 n n按频率抽取的基2-FFT算法 n n快速傅里叶逆变换(IFFT)算法 n nMatlab实现3 35.1 引言 n nDFTDFT在实际应用中很重要在实际应用中很重要:可以计算信号的频可以计算信号的频谱、功率谱和线性卷积等。谱、功率谱和线性卷积等。n n直接按直接按DFTDFT变换进行计算,当序列长度变换进行计算,当序列长度N N很大很大时,计算量非常大,所需时间会很长。时,计算量非常大,所需时间会很长。n nFFTFFT并不是一种与并不是一种与DFTDFT不同的变换,而是不同的
2、变换,而是DFTDFT的一种快速计算的算法。的一种快速计算的算法。4 45.2 直接计算DFT的问题及改进的途径 n nDFTDFT的运算量的运算量 设复序列x(n)长度为N点,其DFT为k=0,N-1(1)计算一个X(k)值的运算量复数乘法次数:N复数加法次数:N15 55.2.1 DFT的运算量(2)计算全部N个X(k)值的运算量复数乘法次数:N2复数加法次数:N(N1)(3)对应的实数运算量6 6一次复数乘法:4次实数乘法 2次实数加法 一个X(k):4N次实数乘法2N+2(N-1)=2(2N-1)次实数加法 所以 整个N点DFT运算共需要:N2(2N-1)=2N(2N-1)实数乘法次数
3、:4 N2实数加法次数:7 7DFT运算量的结论N点DFT的复数乘法次数举例NN2NN22464404941612816384864256 65 536 16256512 262 144 3210281024 1 048 576 结论:当N很大时,其运算量很大,对实时性很强的信号处理来说,要求计算速度快,因此需要改进DFT的计算方法,以大大减少运算次数。8 8 5.2.2 减少运算工作量的途径 主要原理是利用系数 的以下特性对DFT进行分解:(1)对称性(2)周期性(3)可约性 另外,9 95.3 按时间抽取的基2-FFT算法 n n算法原理n n按时间抽取基-2FFT算法与直接计算DFT运算
4、量的比较n n按时间抽取的FFT算法的特点n n按时间抽取FFT算法的其它形式流程图10105.3.1 算法原理 设N2L,将x(n)按 n 的奇偶分为两组:r=0,1,则1111式中,X1(k)和X2(k)分别是x1(n)和x2(n)的N/2的DFT。另外,式中k的取值范围是:0,1,N/21。1212因此,只能计算出X(k)的前一半值。后一半X(k)值,N/2,N/2 1,N?利用可得到 同理可得1313考虑到 因此可得后半部分X(k)及前半部分X(k)k=0,1,N/21k=0,1,N/211414蝶形运算蝶形运算式蝶形运算信号流图符号 因此,只要求出2个N/2点的DFT,即X1(k)和
5、X2(k),再经过蝶形运算就可求出全部X(k)的值,运算量大大减少。1515以8点为例第一次按奇偶分解以N=8为例,分解为2个4点的DFT,然后做8/2=4次蝶形运算即可求出所有8点X(k)的值。1616蝶形运算量比较复数乘法次数:N2复数加法次数:N(N1)复数乘法次数:2*(N/2)2+N/2=N2/2+N/2复数加法次数:2*(N/2)(N/21)+2*N/2=N2/2nN点DFTDFT的运算量的运算量 n n分解一次后所需的运算量分解一次后所需的运算量2 2个个N/2N/2的的DFTDFTN/2N/2蝶形:蝶形:n n因此通过一次分解后,运算工作量减少了差因此通过一次分解后,运算工作量
6、减少了差不多一半。不多一半。1717进一步按奇偶分解 由于N2L,因而N/2仍是偶数,可以进一步把每个N/2点子序列再按其奇偶部分分解为两个N/4点的子序列。以N/2点序列x1(r)为例 则有 k=0,1,1818且k=0,1,由此可见,一个N/2点DFT可分解成两个N/4点DFT。同理,也可对x2(n)进行同样的分解,求出X2(k)。1919以8点为例第二次按奇偶分解2020算法原理 对此例N=8,最后剩下的是4个N/4=2点的DFT,2点DFT也可以由蝶形运算来完成。以X3(k)为例。k=0,1即这说明,N=2M的DFT可全部由蝶形运算来完成。2121以8点为例第三次按奇偶分解N=8按时间
7、抽取法FFT信号流图 22225.3.2 5.3.2 按时间抽取基按时间抽取基2-FFT2-FFT算法与直接计算算法与直接计算DFTDFT运算量的比较运算量的比较 由按时间抽取法FFT的信号流图可知,当N=2L时,共有 级蝶形运算;每级都由 个蝶形运算组成,而每个蝶形有 次复乘、次复加,因此每级运算都需 次复乘和 次复加。LN/2 N/2 12N2323这样 级运算总共需要:L复数乘法:复数加法:直接DFT算法运算量 复数乘法:复数加法:N2N(N1)直接计算DFT与FFT算法的计算量之比为M2424FFT算法与直接DFT算法运算量的比较NN2计算量之比M NN2计算量之比M 2414.012
8、816 38444836.641644.025665 5361 02464.0864125.4512262 1442 304113.816256328.010241 048 5765 120204.83210288012.820484 194 30411 264372.464404919221.425255.3.3 按时间抽取的FFT算法的特点n序列的逆序排列n同址运算(原位运算)n蝶形运算两节点间的距离n 的确定2626序列的逆序排列 由于 x(n)被反复地按奇、偶分组,所以流图输入端的排列不再是顺序的,但仍有规律可循:因为 N=2M,对于任意 n(0n N-1),可以用M个二进制码表示为:
9、n 反复按奇、偶分解时,即按二进制码的“0”“1”分解。n序列的逆序排列2727倒位序的树状图(N=8)2828码位的倒位序(N=8)自然自然顺顺序序 n二二进进制数制数倒位序二倒位序二进进制数制数倒位序倒位序顺顺序数序数00000000100110042010010230111106410000115101101561100113711111172929倒位序的变址处理(N=8)3030同址运算(原位运算)某一列任何两个节点k 和j 的节点变量进行蝶形运算后,得到结果为下一列k、j两节点的节点变量,而和其他节点变量无关。这种原位运算结构可以节省存储单元,降低设备成本。运算前运算后例n同址运算
10、(原位运算)3131观察原位运算规律3232蝶形运算两节点间的距离 以N=8为例:第一级蝶形,距离为:第二级蝶形,距离为:第三级蝶形,距离为:规律:对于共L级的蝶形而言,其m级蝶形运算的节 点间的距离为124n蝶形运算两节点间的距离 3333 的确定 以N=8为例:n 的确定 34345.4 按频率抽取的基2-FFT算法 n n算法原理 再把输出X(k)按k的奇偶分组先把输入按n的顺序分成前后两半设序列长度为N=2L,L为整数 前半子序列x(n)后半子序列 0n0n35355.4.1 算法原理由DFT定义得k=0,1,N3636由于 所以则 k=0,1,N3737然后按k的奇偶可将X(k)分为
11、两部分 r=0,1,则式 可转化为 3838令 n=0,1,代入 r=0,1,可得为2个N/2点的DFT,合起来正好是N点X(k)的值。3939蝶形运算将称为蝶形运算与时间抽选基2FFT算法中的蝶形运算符号略有不同。4040例 按频率抽取(N=8)例 按频率抽取,将N点DFT分解为两个N/2点DFT的组合(N=8)4141 与时间抽取法的推导过程一样,由于 N=2L,N/2仍然是一个偶数,因而可以将每个N/2点DFT的输出再分解为偶数组与奇数组,这就将N/2点DFT进一步分解为两个N/4点DFT。N=842425.4.2 频率抽取法与时间抽取法的异同 n n频率抽取法输入是自然顺序,输出是倒位
12、序频率抽取法输入是自然顺序,输出是倒位序的;时间抽取法正好相反。的;时间抽取法正好相反。n n频率抽取法的基本蝶形与时间抽取法的基本频率抽取法的基本蝶形与时间抽取法的基本蝶形有所不同。蝶形有所不同。n n频率抽取法运算量与时间抽取法相同。频率抽取法运算量与时间抽取法相同。n n频率抽取法与时间抽取法的基本蝶形是互为频率抽取法与时间抽取法的基本蝶形是互为转置的。转置的。43435.5 快速傅里叶逆变换(IFFT)算法IDFT公式 DFT公式 比较可以看出,IDFT多出M个1/2可分解到M级蝶形运算中。4444例 频率抽取IFFT流图(N=8)4545快速傅里叶逆变换另一种算法46465.8 Ma
13、tlab实现n n用用FFTFFT进行谱分析的进行谱分析的MatlabMatlab实现实现n n用用CZTCZT进行谱分析的进行谱分析的MatlabMatlab实现实现n在Matlab中使用的线性调频z变换函数为czt,其调用格式为nX=czt(x,M,W,A)n其中,x是待变换的时域信号x(n),其长度为N,M是变换的长度,W确定变换的步长,A确定变换的起点。若M=N,A=1,则CZT变成DFT。47475.8.1 用FFT进行谱分析的Matlab实现例5.1 设模拟信号 ,以 t=0.01n(n=0:N-1)进行取样,试用fft函数对其做频谱分析。N分别为:(1)N=45;(2)N=50;
14、(3)N=55;(2)N=60。程序清单如下%计算N=45的FFT并绘出其幅频曲线N=45;n=0:N-1;t=0.01*n;q=n*2*pi/N;x=2*sin(4*pi*t)+5*cos(8*pi*t);y=fft(x,N);figure(1)subplot(2,2,1)plot(q,abs(y)title(FFT N=45)4848例5.1程序清单%计算N=50的FFT并绘出其幅频曲线N=50;n=0:N-1;t=0.01*n;q=n*2*pi/N;x=2*sin(4*pi*t)+5*cos(8*pi*t);y=fft(x,N);figure(1)subplot(2,2,2)plot(q
15、,abs(y)title(FFT N=50)4949%计算N=55的FFT并绘出其幅频曲线N=55;n=0:N-1;t=0.01*n;q=n*2*pi/N;x=2*sin(4*pi*t)+5*cos(8*pi*t);y=fft(x,N);figure(1)subplot(2,2,3)plot(q,abs(y)title(FFT N=55)5050%计算N=60的FFT并绘出其幅频曲线N=60;n=0:N-1;t=0.01*n;q=n*2*pi/N;x=2*sin(4*pi*t)+5*cos(8*pi*t);y=fft(x,N);figure(1)subplot(2,2,4)plot(q,abs(y)title(FFT N=60)5151例5.1程序运行结果从图中可以看出,这几种情况下均有较好的精度。5252例5.1程序运行结果分析分析:由t=0.01n进行取样可得,采样频率fs=100Hz。而连续信号的最高模拟角频率为8 ,由2 f可得,最高频率为8 /2=4Hz。因此,满足采样定理的要求。采样序列为即为周期序列,周期N=50。将程序中plot改为stem函数,则可以更清楚地看出频谱。5353例5.1修改程序运行结果
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100