发明内容
本发明要解决的技术问题是提供一种基23频域取样快速傅立叶变换的硬件结构及方法,运算简单且控制流程简洁,可进一步的降低FFT变换对硬件资源的消耗。
为解决上述技术问题,本发明一种基23频域取样快速傅立叶变换的方法,对N点快速傅立叶变换定义为方程一:
对于方程一中标号n与标号k采用如下的方程二:
k=k1+2k2+4k3+8k4
将方程二代入方程一可得方程三:
其中:
基于上述方法本发明还提出了一种基23频域取样快速傅立叶变换的硬件结构,包括:三级流水线蝶形运算单元,即第一级、第二级和第三级;及一个串联的旋转单元;蝶形运算单元由数据FIFO、蝶形运算器和控制单元构成;且每一级的数据FIFO的深度均为前一级的1/2,对于第一级其FIFO的深度为频域取样快速傅立叶变换变换点数N的1/2。
本发明提出的基23DIF FFT方法每次可将N点FFT变换分解为8个N/8点变换,每次分解需要对应的3级蝶形运算和1级旋转运算硬件结构来实现(即本发明的基23频域取样快速傅立叶变换的硬件结构)。对于采样点数N=8z(z为正整数)的FFT变换,共需要进行log2N次蝶形运算和(log8N-1)次旋转运算。因此,基23DIF FFT方法及其对应硬件结构在减少旋转运算的次数的同时,并没有增加额外的蝶形运算次数,而且由于其采用的3级蝶形运算仅包含加减、(-j)乘法和常系数乘法运算,运算简单且控制流程简洁,因而可显著的降低FFT变换对硬件资源的消耗。
具体实施方式
下面结合附图对本发明作进一步详细的说明。
本发明原理:分析基22DIF FFT算法可知,对于N个采样点的FFT而言,该算法所需的旋转运算次数为(log4N-1)。当N较大时,仍需要多次的旋转运算,难以满足应用的要求。针对该问题,本发明提出了一种新的基23(Radix-23)DIF FFT算法,以及该算法的高性能硬件实现结构。对于N点的FFT运算,该算法仅需(log8N-1)次复数旋转运算和2log2N次加(减)法运算。相较于现有FFT算法,减少了复数旋转运算的次数,同时蝶形运算维持最低的规模,从而有效的降低了FFT硬件实现的复杂度。
首先来看基23DIF FFT算法。
N点离散傅立叶变换(Discrete Fourier Transform)定义:
对于标号n与标号k采用以下的分解方式:
k=k1+2k2+4k3+8k4
将(2)式代入(1)可得:
由(3)式可知,经过以上变换,原N点FFT变换被分解为8个N/8点的FFT变换。进一步分析每个N/8点FFT变换的系数:
由于分解标号k1、k2和k3取值均为0或1,故(4)式中的三重求和可化简为3级简单的蝶形运算:(-1)k项对应于加减运算,(-j)k项对应于实虚部交换,而e-j(∏/4)k项对应于45°旋转运算。每次参与运算的2个输入系数的相对位置始终是固定的,因此运算与数据存取的控制流程均很简洁。
综合以上(3)、(4)式可知,N点的DIF FFT变换被分解为8个N/8点的DIF FFT变换,并且每个N/8点变换的系数由输入系数经过三级蝶形运算和一次旋转运算即可获得。以上所述算法即为基23DIF FFT算法,图(4)所示为一个32点的基23DIF FFT算法信号流程图。
然后来看基23DIF FFT算法的硬件结构映射。
本发明中将基23DIF FFT算法映射为单数据反馈(Single-Datapath-Feedback)流水线(Pipeline)结构框图,见图(5)所示。每次分解的3级蝶形运算映射为3级流水线蝶形运算单元,再经过旋转单元得到最终的结果。每级的蝶形运算单元均由数据FIFO、蝶形运算器和控制单元构成。由于基23DIF FFT算法中每级的蝶形运算算法不同,因此对应的3级蝶形运算单元中的蝶形运算器的结构也不相同。
第一级:将加减运算映射为2个加法器;
第二级:将加减运算映射为2个加法器,同时将(-j)乘法运算映射为1个多路选择器,完成实部和虚部的交换;
第三级:将加减运算映射为2个加法器、将(-j)乘法运算映射为1个多路选择器,同时将45°旋转运算映射为2个常系数乘法器。
另外,每一级的数据FIFO的深度均为前一级的1/2。对于第一级,其FIFO的深度为DIF FFT变换点数N的1/2。
由以上分析可知,基23DIF FFT算法每次可将N点FFT变换分解为8个N/8点变换,每次分解需要3级蝶形运算和1级旋转运算来实现。对于采样点数N=8z(z为正整数)的FFT变换,共需要进行log2N次蝶形运算和(log2N-1)次旋转运算。因此,基23DIF FFT算法在减少旋转运算的次数的同时,并没有增加额外的蝶形运算次数,而且由于其采用的3级蝶形运算仅包含加减、(-j)乘法和常系数乘法运算,运算简单且控制流程简洁,因而可显著的降低FFT变换对硬件资源的消耗。
进一步推广可知,对于不满足N=8z(z为正整数)的FFT变换,仍可利用基23DIF FFT算法降低运算复杂度。首先将N分解为N=8x·4y·2z,其中x,y,z均为非负整数;然后分别用基23DIF FFT算法实现前x级分解、用基22DIF FFT算法实现之后的y级分解、用基2DIF FFT算法实现最后z级分解,从而得到N点FFT变换的结果。采用这种混和基变换结构,基23DIF FFT算法所减少的运算复杂度等于对N=8xFFT变换所减少的运算复杂度。
几种主要的DIF FFT架构所消耗的硬件资源如下表1所示。理论分析与试验均表明,对于相同的N点FFT,基23DIF FFT架构可达到最低的硬件复杂度。例如,若N=64,基-23DIF FFT需要1个复数旋转单元,比基-22DIF FFT少1个,比基-2DIF FFT少3个;若N=4096,基-23DIFFFT需要3个复数旋转单元,比基-22DIF FFT少2个,比基-2DIF FFT少7个。
分解算法 |
旋转变换次数 |
加减法次数 |
控制复杂度 |
Radix-2 |
log2N-2 |
2log2N |
简单 |
Radix-4 |
log4N-1 |
8log4N |
适中 |
Radix-22 |
log4N-1 |
2log2N |
简单 |
Radix-8 |
log8N-1 |
32log8N |
复杂 |
Radix-23 |
log8N-1 |
2log2N |
简单 |
表1主要DIF FFT算法的运算与控制复杂度
N点的基23DIF FFT算法的硬件实现主要分为以下4个阶段,其中输入、输出以及中间数据均为2进制补码格式:
1、第1级蝶形运算单元。由于DIF FFT算法对于数据相关性的要求,首先将前N/2点输入数据存入FIFO中,而蝶形运算从第(N/2+1)点数据输入开始;第1级的蝶形运算器仅为2个加(减)法器,每次从FIFO中顺序读出一个数据作为被加(减)数、以当前输入数据为加(减)数进行运算,并将差回写入数据FIFO中、将和输出至下一级蝶形运算单元,当所有N/2次加(减)运算结束后,再依次读出FIFO中的数据并输出至下一级蝶形运算单元;整个数据操作流程由控制单元所控制,该控制单元负责选择恰当的读写数据及产生输出数据有效信号,由于基23DIF FFT算法的规则性,只需通过简单的计数即可产生所有的控制信号。第1级蝶形运算单元的硬件结构如图6所示。
2、第2级蝶形运算单元。与第1级蝶形运算单元的结构相类似,主要包括数据FIFO、蝶形运算器和控制单元3个部分。但是对于第2级蝶形运算而言,只需缓存前N/4点输入数据即可开始运算,因此数据FIFO深度为N/4;同时蝶形运算分为两级,在进行加(减)运算之前,首先要选择是否对输入数据进行(-j)乘法。对于硬件而言,实现(-j)乘法是相当简单的,只需对输入的虚部数据取反并与实部交换即可。第2级蝶形运算单元硬件结构如图7。
3、第3级蝶形运算单元。与前两级蝶形运算单元的结构相类似,由数据FIFO、蝶形运算器和控制单元3个部分组成。其中数据FIFO的深度为N/8,也即缓存N/8点输入数据后开始运算;蝶形运算由3级运算构成,首先确定输入数据是否做π/4旋转,然后判断是否乘以(-j),最终做加(减)运算。第3级蝶形运算单元的硬件结构如图8所示,其中的π/4旋转可通过对输入数据z的实部α和虚部β做简单的常系数()乘法而实现,具体推导如下:
z·e-jπ/4
=(α+jβ)·(cosπ/4-jsinπ/4)
=[(α/2+β/2)+j(β/2-α/2)](5)
4、旋转单元。该单元实现对第3级蝶形运算单元输出的数据旋转一定角度,从而完成基23DIF FFT算法。对于每个输入数据,旋转角度如前述式(3)所示:
由于系数简单,通过一个计数器即可控制生成对应于每个输入数据的旋转角度,进而实现旋转变换。
综上所述,本发明的方法与硬件结构,可广泛应用于基于数字信号处理技术的图像与视频信号编码、音频与语音信号处理以及数字通信领域,并且本发明的基23DIF FFT方法及硬件结构在减少旋转运算的次数的同时,并没有增加额外的蝶形运算次数,而且由于其采用的3级蝶形运算仅包含加减、(-j)乘法和常系数乘法运算,运算简单且控制流程简洁,因而可显著的降低FFT变换对硬件资源的消耗。