本公开属于数字信号处理领域,尤其涉及一种优化fft混合基算法的对称二叉树分解方法。
背景技术:
快速傅里叶变换fft(fastfouriertransform)作为数字信号处理领域中最基本的时频变换算法,广泛应用于通信、图像和语音等各类信号处理应用中。
运算吞吐率、所占资源面积和功耗作为衡量fft算法在硬件上实现的关键指标,三者存在互相制约的关系。如通常高运算吞吐率的fft是通过增加数据处理的并行度获得,作为一种典型“空间换时间”的设计思想,其所需的资源面积和功耗基本与设计并行度成正比。
经典cooley-tukey算法利用旋转因子的对称性和周期性,将n点fft分解成更小的n1点和n2点的先后两次fft,n=n1n2,表达式如公式(1)所示:
其中n1,k1∈[0,n1-1],n2,k2∈[0,n2-1],
可见,不同的算法实现fft时需要的硬件开销和性能是不相同的,如何通过优化fft的实现算法来降低其运算复杂度,这在高速高性能fft中显得尤其重要。
公开内容
(一)要解决的技术问题
有鉴于此,为克服现有技术中存在的不足,本公开提出了一种优化fft混合基算法的对称二叉树分解方法,针对任意2的整数次幂点fft的混合基实现算法进行优化,使其乘法运算复杂度降至最低,降低fft算法在实现过程中的时间与资源开销,从而提高高速fft的各项综合性能指标。
(二)技术方案
本公开提供了一种优化fft混合基算法的对称二叉树分解方法,包括:步骤1:获取原始输入的fft的待分解点数;步骤2:由待分解点数获取待分解级数;步骤3:根据待分解点数进行一次分解过程,获取该次分解后p值以及下一次分解的待分解点数;步骤4:进行该次分解的基底循环替换过程;步骤5:将下一次分解的待分解点数返回步骤2执行,继续进行下一次分解过程,直至输出所有次分解经过基底循环替换优化后的全部基底序列。步骤6:由待分解级数小于4时底序列、以及所有次分解经过基底循环替换优化后的全部基底序列,得到n点fft最终的优化混合基算法。
在本公开的一些实施例中,在所述步骤2中,在第一次分解的待分解点数nn取原始输入的fft的待分解点数n;在第二次及以上分解时,待分解点数nn由步骤5提供。
在本公开的一些实施例中,所述待分解级数s=log2nn。
在本公开的一些实施例中,所述步骤3包括:子步骤3.1:判断待分解级数s是否小于4;当待分解级数s小于4时,输出对应的基底序列并执行步骤6;子步骤3.2:当待分解级数s大于等于4时,判断待分解级数s是否为偶数;如果s为偶数,执行子步骤3.3,如果s为奇数,执行子步骤3.4;子步骤3.3:将2s点fft分解成两个级联的n1点和n2点fft的实现,其中n1=n2=2p,p=s/2;子步骤3.4:将2s点fft分解成两个级联的n1点和n2点fft的实现,其中n1=2p,n2=2p+1,p=(s-1)/2。
在本公开的一些实施例中,所述步骤4包括:子步骤4.1:判断p是否大于4;如果p小于等于4,执行子步骤4.2;如果p大于4,执行子步骤4.3;子步骤4.2:如果原始输入p小于等于4,直接输出经过基底循环替换优化后的基底序列;子步骤4.3:进行一次基底替换;子步骤4.4:p自减2,更新后的p值返回至步骤4.1执行,直至输出该次分解经过基底循环替换优化后的全部基底序列。
在本公开的一些实施例中,所述子步骤4.3包括:第(p-2)和(p-1)子级的基底在替换前分别为2p-1和2p,经过替换后,分别为2p和4。
在本公开的一些实施例中,在所述步骤5中,将子步骤3.3和子步骤3.4对称分解后的n2作为下一次分解的待分解点数,将n2输出至步骤2中。
(三)有益效果
从上述技术方案可以看出,本公开具有以下有益效果:
(1)本公开提出的对称二叉树分解方法,可针对任意2整数次幂fft进行实现算法优化,提供了一种针对基2k混合基算法进行优化的快速高效方法,减小在实际工程中推导归纳fft优化实现算法的时间。
(2)本公开针对fft运算过程中旋转因子引入的乘法计算量,进行优化,有效减少了与旋转因子相关的乘法运算复杂度,降低fft实际运算过程中的时间与资源开销。
附图说明
图1是本公开实施例的优化fft混合基算法的对称二叉树分解方法流程图。
具体实施方式
下面将结合实施例和实施例中的附图,对本公开实施例中的技术方案进行清楚、完整的描述。显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
本公开实施例提供了一种优化fft混合基算法的对称二叉树分解方法,请见图1,包括如下步骤:
步骤1:获取原始输入的fft的待分解点数。
对所给的n点fft,进行迭代对称分解,使其通过若干个小点数基2k的级联运算实现,以降低乘法运算复杂度。
步骤2:由待分解点数获取待分解级数s。
在本步骤中,在第一次分解时,待分解点数nn取原始输入的fft的待分解点数n;在第二次及以上分解时,待分解点数nn由后续迭代分解步骤提供。
由于采用基2算法实现基本蝶形运算,待分解级数s=log2nn,只针对2的整数次幂点数fft进行算法优化。
步骤3:根据待分解点数进行一次分解过程,获取该次分解后p的值以及下一次分解的待分解点数。
步骤3包括:
子步骤3.1:首先判断待分解级数s是否小于4;当待分解级数s小于4时,对于待分解点数n小于16的情况,即2点、4点、8点fft,由于这三种点数在本实施例中属于最基本的运算对象,不存在优化的空间,无需优化可跳过后续步骤,输出待分解级数s小于4时基底序列并执行步骤6。
子步骤3.2:当待分解级数s大于等于4时,判断待分解级数s是否为偶数;如果s为偶数,执行子步骤3.3,如果s为奇数,执行子步骤3.4。
子步骤3.3:将2s点fft分解成两个级联的n1点和n2点fft的实现,其中n1=n2=2p,p=s/2。
子步骤3.4:将2s点fft分解成两个级联的n1点和n2点fft的实现,其中n1=2p,n2=2p+1,p=(s-1)/2。
子步骤3.3和子步骤3.4的每次分解过程相当于将完一个完整点数的fft一分为二,拆分成两个小点数先后进行运算,称为一次对称分解。
步骤4:进行该次分解的基底循环替换过程。
经过步骤3得到一次对称分解后的n1点fft,实现算法已确定,获取p的值作为后续基底循环替换过程的输入。因此,在一次分解过程中,n1=2p,当s为偶数p=s/2,s为奇数时p=(s-1)/2。此步骤针对该次对称分解后的2p点fft实现进行优化。2p点fft通过基2k算法实现,需要p个子级进行级联运算。从前往后,第1个子级到第p个子级的旋转因子可分别表示成w4,w8,w16,…,
步骤4包括:
子步骤4.1:判断p是否大于4;如果p小于等于4,执行子步骤4.2;如果p大于4,执行子步骤4.3。
子步骤4.2:如果原始输入p小于等于4,则无需后续优化,可终止基底循环替换过程,输出经过基底循环替换优化后的基底序列。
子步骤4.3:进行一次基底替换。
第(p-2)和(p-1)子级的基底在替换前分别为2p-1和2p,经过替换后,分别为2p和4。即原本第(p-2)级旋转因子
子步骤4.4:p自减2,更新后的p值返回至步骤4.1执行,直至输出该次分解经过基底循环替换优化后的全部基底序列。
步骤5:将获取的下一次分解的待分解点数返回步骤2执行,继续进行下一次分解过程,直至输出所有次分解经过基底循环替换优化后的全部基底序列。
将子步骤3.3和子步骤3.4对称分解后的n2,作为下一次分解的待分解点数,将n2输出至步骤2中。因此,当s为偶数时,n2=2p,p=s/2,否则n2=2p+1,p=(s-1)/2。
步骤6:由子步骤3.1获得的待分解级数s小于4时基底序列、以及由步骤5得到的所有次分解经过基底循环替换优化后的全部基底序列,得到n点fft最终的优化混合基算法。
为使本公开的技术方法更加清楚,针对不同点数的fft,表1中给出了采用本公开的方法所推导出的优化算法。对于64点fft,通过一次对称分解,可利用两个8点fft的级联形式实现,算法记为23-23,其对应前5个子级旋转因子的基底分别为4,8,64,4,8。对于4096点fft,通过两次对称分解,可利用三个64点、8点、8点fft的级联形式实现,算法记为26-23-23,其前6个子级旋转因子的基底经过两次基底循环替换,分别为4,16,4,64,4,4096,其他子级的基底分别为4,8,64,4,8。
表1
至此,已经结合附图对本实施例进行了详细描述。依据以上描述,本领域技术人员应当对本公开有了清楚的认识。
需要说明的是,在附图或说明书正文中,未绘示或描述的实现方式,均为所属技术领域中普通技术人员所知的形式,并未进行详细说明。此外,上述对各元件的定义并不仅限于实施例中提到的各种具体结构、形状或方式,本领域普通技术人员可对其进行简单地更改或替换,例如:
(1)实施例中提到的方向用语,例如“上”、“下”、“前”、“后”、“左”、“右”等,仅是参考附图的方向,并非用来限制本公开的保护范围;
(2)上述实施例可基于设计及可靠度的考虑,彼此混合搭配使用或与其他实施例混合搭配使用,即不同实施例中的技术特征可以自由组合形成更多的实施例。
以上所述的具体实施例,对本公开的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本公开的具体实施例而已,并不用于限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。