490 likes | 670 Views
N 是组合数的 FFT 算法. §6.7.4. 对 N 不是 2 的整数幂的情况,有两种处理方法。. 方法一:将 x ( n ) 补零,使 N 成为 2 的整数幂。例 N =30. 可以加 2 点, N =32=2 5 ; N =1000 可以加 24 点,即. N =1024=2 10 。. 如果要获得准确的 N 点 DFT ,可以用任意基的 FFT 算法。. 其基本思路还是将大点 DFT 尽可能分解为小点的 DFT ,. 充分利用小点 DFT 的周期性。. 1 、. N 是组合数的 FFT 算法.
E N D
N是组合数的FFT算法 §6.7.4 对N不是2的整数幂的情况,有两种处理方法。 方法一:将x (n)补零,使N成为2的整数幂。例N=30 可以加2点, N =32=25 ;N=1000可以加24点,即 N =1024=210。 如果要获得准确的N点DFT,可以用任意基的FFT算法。 其基本思路还是将大点DFT尽可能分解为小点的DFT, 充分利用小点DFT的周期性。
1、 N是组合数的FFT算法 以时间抽取法为例,讨论N是组合数的FFT算法。 pi ——均为素数 设 N=p1p2pm 令 q1=p2pm N=p1q1 先将N点DFT分解为p1个q1点的DFT。即将x(n)分为 p1组,每组q1个元素。
将分组后的 一般式 r= 0,1, q11 l= 0,1, p11 (共有p1个 ,对每个k值有(p11)次复乘)
有(p11)次复乘 其中 q1点的DFT
计算量: p1个q1点的DFT复乘 p1(q1)2 每一个X(k)值有(p11)次复乘,N个X(k)值有N (p11) 次复乘 总的合成X(k)的复乘次数 (6-103) 继续对 再分 令: 每 个点DFT又可以分解为 个 点的DFT。
合成q1点的DFT复乘 代入(6-103) 一直分解到最后一个素数
最后总的计算量(类推) 计算效率:
可分为三组,每组5点,即 则 举例 p=3、q=5 一般项为
将x(n)分解为p=3组、q=5点的DFT,再利用Gl(k)的 周期性将3个5点的DFT合成一个15点的DFT, 其示意 图如图6-41 所示。
合成时, Gl(k)为5点, X(k)为15点,所以k5。对 Gl(k)有Gl((k))5(模运算)。 k=0 k=1 k=9 k=14
5点 DFT 5点 DFT 5点 DFT
2、 组合数为N=pM的FFT算法 将N=pM点DFT分解为p个pM1点DFT ; p M1点DFT 二次分解为p个pM2点的DFT ;……。 仍以时间抽取法为例,一次分解X(k)为p个pM1点的DFT 式中 为第l个pM1点DFT
继续分解 为p个pM2点DFT ,得 式中 为第l个pM2点DFT。 以此类推,最终分解最短为p点的DFT,即 式中Xlp(k)是第l个p点DFT。
经M次分解后以p为基的FFT复数乘法的计算量,利经M次分解后以p为基的FFT复数乘法的计算量,利 用(6-105)式得到: mF=N(p+ p+ p+ p+pM) M个 =N(p1) M= N(p1)logpN 特别的,当p=2 mF=N(p1) M =NM= N(p1)log2N
2 3 4 5 6 7 1 1.2681 1.5 1.7226 1.9342 2.1372 计算量与基2相比 可见,随着p效率 。
不过,当N=4M ,即以4为基(类推基8,基16)的 情况时,实际的计算量比上述计算量要小得多。下面 讨论基4 FFT算法。 首先将N=4M点DFT分解为四个N/4点的DFT
Xl(k) N/4点的DFT 式中X0(k), X1(k) ,X2(k) ,X3(k)均为N/4点的DFT。 由四个N/4点的DFT合成N点DFT,要利用N/4点 DFT的周期性,即
X0(k)= X0(k +N/4) =X2(k +N/2) =X3(k +3N/4) X1(k)= X1(k +N/4) =X1(k +N/2) =X1(k +3N/4) X2(k)= X2(k +N/4) =X2(k +N/2) =X2(k +3N/4) X4(k)= X4(k +N/4) =X4(k +N/2) =X4(k +3N/4) 这样, N点DFT为
基4计算式中的乘法系数与 有关,注意到 具有 的对称性,即 ,且 的对 而±j , ±1都不必作乘法运算,所以利用 称性,上式简化为
-j -1 j -1 -1 j -1 -j
上式是N=4M一级分解的结果。以此类推,后面的各级上式是N=4M一级分解的结果。以此类推,后面的各级 分解会有相同的运算量减少。与基2一样N越大,效率 越高。比较后,可知基4计算量比基2还少。同理,基8、 基16有类似的结果。例N =4096=212时,比较基2、 4、 8、16运算量 基 实乘数 实加数 2 89,924 139,266 4 57,348 126,978 8 49,156 126978 16 48,132 125,442
由表6-4可见,随着基数上升运算效率提高并不多。而基由表6-4可见,随着基数上升运算效率提高并不多。而基 数的增加会使算法结构复杂。并且基越大,蝶形结构越 复杂。运算量的减少是以程序(或硬件)复杂为代价, 基太大往往得不偿失。所以有人认为取大于8的基数没有 多大实际意义。上世纪八十年代法国人提出了将基2分解 与基4分解结合的分裂基算法,其运算量比基2少,运算 流图与基2FFT接近,运算程序也不长,是一种实用高效 算法,有兴趣的读者可以参考有关教材。
§6.8 线性调频z变换算法 在利用DFT作频率分析时,会遇到以下几种希望频率分 辨率得到改善的情况。 (1)求短序列DFT时,把较短序列的点均匀分布在单 位圆上,得到的频率分辨率是2 /N很低的。采用 补零的方法增加点数,可以提高频谱密度,但N的增 加意味着计算量的增加,是低效的算法。
(2)实际问题中往往会遇到包括两个或两个以上分段的(2)实际问题中往往会遇到包括两个或两个以上分段的 频谱,由于对各分段的兴趣不同,所以对各分段的采 样率要求并不一样。例如我们需要对 = ~之间 128点窄带信号频谱进行分析,按常规方法是计算1024 点的离散傅里叶变换,然后取出需要128点频谱采样值。
(3)由第五章频响函数的几何作图得知,极点离单位圆(3)由第五章频响函数的几何作图得知,极点离单位圆 越近,谐振峰越明显。而如图所示,当极点离单位圆较 远时,往往很难确定极点所对应的频率。 很难确定峰值频率 希望这样
如果不是在单位圆上采样,而是沿着如图所示靠近这些如果不是在单位圆上采样,而是沿着如图所示靠近这些 极点的弧线进行,那么在极点对应的频率上会出现明显 的尖峰,有利于谐振峰频率的识别。 总之,为了在不增加计算量的情况下,解决频率分辨率 的问题,人们提出了线性调频z变换算法。
式中 是数字频率 1、CZT定义(奥本海姆——CTA) 设x(n)为已知时间序列,时宽为N,其zT (6-109) 为实数
按上式频谱的计算必然是从z平面的实轴开始,以A=1按上式频谱的计算必然是从z平面的实轴开始,以A=1 为半径的圆上。但如果希望得到任意起始点和以螺线规 律变化的z值,可以设: (6-110) k=0,1,2,,M1 式中A0,W0为正实数。将k=0,1,2,,M1代入上式, 得到
是z平面上相邻 之间的夹角 ; 随着 螺线外伸趋向 单位圆。 0是A的起始角,由A可以确定频谱采样的起点; 随着 螺线内缩 趋向原点;
将zk代入z变换公式,得到 CZT定义 CZ[x(n)]=X(zk) k=0,1,2,,M1 M不需要等于N 由上式可以看到每计算一个 X(zk)值需要有N次复数乘 法,一共有M个 X(zk) ,所以直接计算CZT的计算量 为: mz=NM
当N 、M较大时,可以利用FFT减少运算量,提高 运算速度。 2、利用FFT的CZT算法 利用恒等式 (6-113)
令 则 (6-114) 是(6-113)式的一部分 即 k=0,1,2,,M1
k=0,1,2,,M1 上式的计算可以用图6-46的流图表示,即可以用一线 性系统实现。
CZT计算(算法)具体步骤 (1)加权 其中 ,为一 点序列; 按对应的 相乘得到 计算出 并与 (2)补零、位移 点循环卷积计算 为了用 的线性卷积,并得 点的正确结果,要对 到 作处理,变为
补零后为L点的 其中 一般取 ,为了利用FFT可以取 为一无限长序列,为了用循环卷积得到 前M点的正确值,要用 中的 点(当 时,在M-1的右侧补零)。
( 时有)
(3)FFT计算 、 的L点FFT得 、 (L点) 分别作 (4)相乘 L点 L点 IFFT (5)IFFT 只取k=0,1,2,,M1 (6)加权 k=0,1,2,,M1 一般 、 是事先计算做表存储好的(不必实时 计算) 。
补零L点 L点FFT 加权N点 (1) 补零L点 L点FFT L点IFFT 加权M点 L点相乘 取M点 CZT计算流图 (1)
计算量:两次加权 N+M次复乘; L次复乘; FFT、IFFT各一次 或 若 总共 计算量比较:直接计算M点的X(zk) mz=NM
例6-9 N =9、M=8 直接计算 mz=NM=72 用线性系统实现CZT的计算量 取 L =16=24 比直接计算量大。
例6-10 N =1024、M=128 ,比较CZT的两种方法 计算量。 mz=NM=131072 直接计算 用线性系统实现CZT的计算量 取 L =2048=211 mF=1024+128+2048+4096×11=48256
由两例可见,当N 、M不大时,最有效的方法是直接 算法。只有当N 、M较大时,FFT算法在速度上才有 较大的改进。 3、CZT的优点 (1)序列的长度可以随意,即原来时序为N点的序列经 CZT后可得到M点的X(zk) ,并不要求N与M具有某种 关系。
(2) X(zk)的频率分辨率可以随意选定,zk与zk+1之间的等 角间隔0是可以任意选定的,起始频率0也是可以任 意选定的。这样可以使窄带信号在频域中的M个点集中 在0 ~0 +(M1)0这一范围内,从而增加频率分辨率。 例如,(M1)0=/4,如果用一般的DFT要得到同样的 点才可以得到 分辨率,则需要计算 的相同效果。
(3)CZT不仅适用计算围线在单位圆(A0 =1)上的z变换, 也适用位于螺线上的z变换的情况,可使原本平缓的谐 振峰突出。