CN102831099B - 一种3072点fft运算的实现方法 - Google Patents

一种3072点fft运算的实现方法 Download PDF

Info

Publication number
CN102831099B
CN102831099B CN201210264461.0A CN201210264461A CN102831099B CN 102831099 B CN102831099 B CN 102831099B CN 201210264461 A CN201210264461 A CN 201210264461A CN 102831099 B CN102831099 B CN 102831099B
Authority
CN
China
Prior art keywords
data
fft
block interleaving
serial
parallel
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201210264461.0A
Other languages
English (en)
Other versions
CN102831099A (zh
Inventor
许鹏飞
樊宁波
胡向晖
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xian Institute of Space Radio Technology
Original Assignee
Xian Institute of Space Radio Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Xian Institute of Space Radio Technology filed Critical Xian Institute of Space Radio Technology
Priority to CN201210264461.0A priority Critical patent/CN102831099B/zh
Publication of CN102831099A publication Critical patent/CN102831099A/zh
Application granted granted Critical
Publication of CN102831099B publication Critical patent/CN102831099B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Complex Calculations (AREA)

Abstract

本发明公开了一种3072点FFT运算的实现方法,3072点输入数据利用块交织完成数据索引顺序的调整,经过调整后的数据依次进行1024点FFT运算,然后经过系数调整以及解交织,恢复数据顺序。最后同样经过3点的DFT运算以及块交织完成最终3072点FFT运算结果的顺序输出。本发明采用串行的实现结构,减少了FPGA中IPcore的使用数量,大大降低了资源利用率。

Description

一种3072点FFT运算的实现方法
技术领域
本发明涉及一种FFT运算的实现方法。
背景技术
在宽带卫星通信系统中,为了有效提高系统容量,上行传输体制大多数会采用FDMA或MF-TDMA的体制。在这种情况下,由于上行包含多个载波,星上处理时必须首先完成多路频分信号的分离,然后进一步完成各路信号的解调、译码等。多路信号分离时采用数字方式实现分路,在灵活性以及处理器的功耗和体积上都具有很大的优势。构成多路信号的信道间隔相等且均匀有序排列,数字分路可以采用多相阵列FFT滤波器组分路法。
由于采样率设为30.72MHz,分路间隔为10KHz,因此需要利用3072点的DFT(离散傅立叶变换)完成数字分路。若按照DFT变换的公式直接计算DFT的运算量与变换区间长度N的平方成正比,当N较大时,运算量相当巨大,N点DFT的乘法和加法次数均与N2成正比,这对于要求实时信号处理来说,必将对计算速度提出难以实现的要求。而快速傅立叶变换(FFT)通过各种算法可以使DFT的计算效率提高几个数量级,能够很好的应用于各种信号的实时处理技术。由于FPGA中有FFT的IPCore资源,直接引用能够简化编程,但是FFT的IPCore只能支持2N阶的FFT运算,因此3072点FFT运算必须采用混合基FFT实现。
通常利用cooley-tukey算法完成3072点FFT的运算。
cooley-tukey算法的原理如下:
DFT变换 X [ k ] = DFT [ x ( n ) ] = Σ n = 0 N - 1 x ( n ) W N kn , k = 0,1 , . . . , N - 1
cooley-tukey算法将变换长度N分解为任意两个因子的乘积,N=N1×N2,将时域输入信号索引n表示成:
n = An 1 + Bn 2 mod N 0 ≤ n 1 ≤ N 1 - 1 0 ≤ n 2 ≤ N 2 - 1 - - - ( 1 )
令A=N2B=1,则n=N2n1+n2
将频域输出序列索引k表示成:
k = Ck 1 + Dk 2 mod N 0 ≤ k 1 ≤ N 1 - 1 0 ≤ k 2 ≤ N 2 - 1 - - - ( 2 )
令C=1D=N1,则k=k1+N1k2
此时输入输出映射关系如下:
n = N 2 n 1 + n 2 0 ≤ n 1 ≤ N 1 - 1 0 ≤ n 2 ≤ N 2 - 1 - - - ( 3 )
k = k 1 + N 1 k 2 0 ≤ k 1 ≤ N 1 - 1 0 ≤ k 2 ≤ N 2 - 1 - - - ( 4 )
得到cooley-tukey算法DFT公式:
X [ k 1 , k 2 ] = Σ n 2 = 0 N 2 - 1 W N 2 n 2 k 2 W N n 2 k 1 Σ n 1 = 0 N 1 - 1 x [ n 1 , n 2 ] W N 1 n 1 k 1 0 ≤ k 1 ≤ N 1 - 1 0 ≤ k 2 ≤ N 2 - 1 - - - ( 5 )
W N k = exp ( - j 2 πk / N )
根据公式(5)得到该算法的具体实现步骤:
<1>输入序列根据公式(3)的映射关系,对其进行索引变换;
<2>计算N2个变换长度为N1点的DFT;
<3>在第一级变换的输出上乘以相应的旋转因子W
<4>计算N1个变换长度为N2点的DFT;
<5>第二级的输出结果根据公式(4)的映射关系,对其进行索引变换。
针对3072点FFT,根据算法原理,首先利用因式分解(N=N1×N2),其中N=3072,N1=1024,N2=3,然后3072点输入数据(x(0),x(1),……,x(3071))被分为三组,进行第一级的3组1024点FFT变换,输出结果乘以调整因子进行系数调整,最后进行第二级1024组3点FFT变换输出最终结果(X(0),X(1),……,X(3071))。其过程如图1所示。
在具体实现时,按照算法结构可以采用并行结构实现。
在并行实现结构中,3072点输入数据首先进行串并转换,然后对并行的3组数据分别进行3个1024点的FFT,运算结果经过系数调整后再依次进行1024次3点DFT运算,即得到了并行输出的3072点FFT运算结果,后面通过并串转换以及块交织(3×1024)调整,完成3072点数据的依次输出。其实现过程如图2所示。
表11024点FFT IPCore资源
表1给出了1024点FFT的IPcore的资源占用情况,由于占用资源较多,如果采用并行结构实现,需要利用三个1024点的FFT IPcore,使得整个结构的资源占用率较高,因此需要简化结构,减少资源的占用率。
发明内容
本发明所要解决的技术问题是:提供一种结构简单,资源占用少的3072点FFT运算的实现方法。
本发明包括如下技术方案:
一种3072点FFT运算的实现方法,包括如下步骤:
(1)对串行输入的3072点数据x(0),x(1),……,x(3071)进行第一次块交织,第一次块交织输出的数据对应于原始数据的第0,3,……,3069点、第1,4,……,3070点、第2,5,……,3071点;
(2)第一次块交织处理后的数据利用FPGA中的FFT运算IPcore依次进行1024点FFT运算,获得三组1024点FFT运算结果;
(3)对三组1024点FFT运算结果分别乘以对应的调整因子得到运算结果X′(0),X′(1),……,X′(3071);其中前1024个数据的调整因子后2048个数据的调整因子分别为
(4)对步骤(3)得到的运算结果进行第二次块交织,第二次块交织输出的数据顺序是X′(0),X′(1024),X′(2048),……,X′(1023),X′(2047),X′(3071);
(5)对第二次块交织输出的数据进行串并变换,第二次块交织输出的数据经过串并变换后变成3路并行数据,第一路数据为X′(0),X′(1),……,X′(1023),第二路数据为X′(1024),X′(1025),……,X′(2047),第三路数据为X′(2048),X′(2049),……,X′(3071);
(6)对串并变换后的数据进行3点DFT运算,依次完成1024次3点DFT运算,并行输出三路数据,其中第一路数据依次对应3072点FFT运算结果的第0,1,……,1023点数据,第二路数据依次对应3072点FFT运算结果的第1024,1025,……,2047点数据,第三路数据依次对应3072点FFT运算结果的第2048,2049,……,3071点数据,
(7)对3点DFT运算后的数据进行并串变换,此时数据顺序变为X(0),X(1024),X(2048),X(1),……,X(1023),X(2047),X(3071);
(8)对并串变换后的数据进行第三次块交织实现3072点FFT运算结果的顺序输出,输出顺序为
X(0),X(1),……,,X(1024),X(1025),……,X(2047),X(2048),……,X(3071)。
本发明与现有技术相比具有如下优点:
为了实现星上多路信号的解调,需要利用FFT运算完成分路算法,本发明通过采用串行结构的cooley-tukey算法,有效的实现了资源复用,减少了FPGA中IPcore的使用量,大大减少了资源开销。
附图说明
图1为基于cooley-tukey算法的3072点FFT运算的原理示意图;
图2为现有的3072点FFT运算的实现方法示意图;
图3为本发明的3072点FFT运算的实现方法示意图;
图4为块交织(3×1024)过程示意图;
图5为3点DFT实现结构图。
具体实施方式
下面就结合附图对本发明做进一步介绍。
本发明利用FPGA中FFT的IPCore在实现3072点FFT的同时需要尽可能的降低星上的资源利用率。考虑到FFT的IPcore在Pipelined模式下支持连续输入,因此可以将第一级3组1024点FFT的输入数据调整顺序,依次进行1024点FFT运算,这样利用一个IPcore就可以完成3组FFT运算。图3给出了这种串行的实现结构。
在串行实现结构中,3072点输入数据利用块交织完成数据索引顺序的调整,经过调整后的数据依次进行1024点FFT运算,然后经过系数调整以及解交织,恢复数据顺序。最后同样经过3点的DFT运算以及块交织完成最终3072点FFT运算结果的顺序输出。串行的实现结构减少了IPcore的使用数量,大大降低了资源利用率。最终形成如图3所示的串行处理过程,具体包括如下步骤:
(1)首先当3072点数据(x(0),x(1),……,x(3071))串行输入时,对数据进行块交织(3×1024),以实现数据索引顺序的变化,交织输出数据对应于原始数据的第0,3,……,3069点、第1,4,……,3070点、第2,5,……,3071点,等价于将并行结构中分成的3组数据依次输出。图4给出了块交织的实现原理,在进行块交织时,都按照“列进行出”的原则进行交织,主要通过控制FPGA内部存储资源RAM的读写地址来实现,数据写入时写地址从0,1,2……3071顺序变化,当写满3072个数据时,开始读数,读数据时读地址按照0,3,6……3069,1,4,7……3070,2,5,8……3071的规律变化,此时输出数据就完成了“3×1024”的块交织,图中给出了相应的读写地址变化规律。
(2)交织输出数据依次送入1024点FFT IPcore,进行1024点FFT运算。
(3)IPcore输出数据依次经过系数调整模块对三组FFT运算结果乘以对应的旋转因子,此时需要设置一个计数器,其中前1024个数据不需要调整(调整因子后面2048个数据则需要利用ROM中预存的2048个调整因子依次进行复数乘法完成系数调整,各个调整因子的计算公式如下:其中N=3072,k=0,1.……,3072。调整后顺序输出第一级FFT运算的3072点运算结果X′(0),X′(1),……,X′(3071)。接着数据需要进行相应的块交织(1024×3),输出X′(0),X′(1024),X′(2048),……,X′(1023),X′(2047),X′(3071)。在进行块交织时,同样按照“列进行出”的原则进行交织。
(4)经过串并变换,数据变成3路并行数据,第一路数据为X′(0),X′(1),……,X′(1023),第二路数据为X′(1024),X′(1025),……,X′(2047),第三路数据为X′(2048),X′(2049),……,X′(3071),3路数据并行送入3点DFT运算模块中,依次完成1024次3点DFT运算。第一次3点DFT运算的输入为X′(0),X′(1024),X′(2048),输出为X(0),X(1024),X(2048);第二次3点DFT运算的输入为X′(1),X′(1025),X′(2049),输出为X(1),X(1025),X(2049);依次类推,第1024次3点DFT运算的输入为X′(1023),X′(2047),X′(3071),输出为X(1023),X(2047),X(3071)。
3点DFT运算可以根据DFT计算公式进行化简,采用流水线结构实现。
例如对于输入3点数据x(n)(n=0,1,2),X(k)(k=0,1,2)表示3点DFT计算结果,具体计算公式如下:
X [ k ] = DFT [ x ( n ) ] = &Sigma; n = 0 2 x ( n ) W 3 kn , k = 0,1,2
将上式展开,得到:
X(0)=x(0)+x(1)+x(2);
X(1)=x(0)+x(1)e-j2π/3+x(2)eJ2π/3
=x(0)-(x(1)+x(2))/2+0.866j(x(2)-x(1))
X(2)=x(0)+x(1)eJ2π/3+x(2)e-j2π/3
=x(0)-(x(1)+x(2))/2-0.866j(x(2)-x(1))
进一步化简分别得到实部和虚部计算公式:
XRe(0)=xRe(0)+xRe(1)+xRe(2);
XRe(1)=xRe(0)-(xRe(1)+xRe(2))/2-0.866(xIm(2)-xIm(1));
XRe(2)=xRe(0)-(xRe(1)+xRe(2))/2+0.866(xIm(2)-xIm(1));
XIm(0)=xIm(0)+xIm(1)+xIm(2);
XIm(1)=xIm(0)-(xIm(1)+xIm(2))/2+0.866(xRe(2)-xRe(1));
XIm(2)=xIm(0)-(xIm(1)+xIm(2))/2-0.866(xRe(2)-xRe(1));
其中数据除以2的运算可以使用移位来实现,而数据乘以0.866的运算可以看作数据与固定因子的乘法,将0.866转换成二进制数,然后使用两个固定因子的实数乘法器分别进行实部和虚部的运算,大大降低了资源占用率。图5给出了这种3点DFT的流水线实现结构。
(5)经过3点DFT运算后,即完成了3072点FFT的运算,此时并行输出三路数据,其中第一路数据依次对应3072点FFT运算结果的第0,1,……,1023点数据,第二路数据依次对应3072点FFT运算结果的第1024,1025,……,2047点数据,第三路数据依次对应3072点FFT运算结果的第2048,2049,……,3071点数据,需要进一步调整输出顺序,于是再经过并串变换,此时数据顺序变为X(0),X(1024),X(2048),X(1),……,X(1023),X(2047),X(3071),最后经过块交织(3×1024)实现3072点FFT  运算结果的顺序输出(X(0),X(1),……,,X(1024),X(1025),……,X(2047),X(2048),……,X(3071))。
上述各个步骤都是利用FPGA实现。
表2给出了输入数据是14bit的复数时并行和串行两种实现结构的3072点FFT资源占用情况对比。可以看出,串行结构只增加了少量的RAM资源,却大大减少了其它的资源占用量。
表2资源占用情况对比
本发明未详细说明部分属本领域技术人员公知常识。

Claims (1)

1.一种3072点FFT运算的实现方法,包括如下步骤:
(1)对串行输入的3072点数据x(0),x(1),……,x(3071)进行第一次块交织,第一次块交织输出的数据对应于原始数据的第0,3,......,3069点、第1,4,......,3070点、第2,5,......,3071点;
(2)第一次块交织处理后的数据利用FPGA中的FFT运算IPcore依次进行1024点FFT运算,获得三组1024点FFT运算结果;
(3)对三组1024点FFT运算结果分别乘以对应的调整因子得到运算结果X′(0),X′(1),……,X′(3071);其中前1024个数据的调整因子后2048个数据的调整因子分别为
(4)对步骤(3)得到的运算结果进行第二次块交织,第二次块交织输出的数据顺序是X′(0),X′(1024),X′(2048),……,X′(1023),X′(2047),X′(3071);
(5)对第二次块交织输出的数据进行串并变换,第二次块交织输出的数据经过串并变换后变成3路并行数据,第一路数据为X’(0),X′(1),……,X′(1023),第二路数据为X′(1024),X′(1025),……,X′(2047),第三路数据为X′(2048),X′(2049),……,X′(3071);
(6)对串并变换后的数据进行3点DFT运算,依次完成1024次3点DFT运算,并行输出三路数据,其中第一路数据依次对应3072点FFT运算结果的第0,1,......,1023点数据,第二路数据依次对应3072点FFT运算结果的第1024,1025,......,2047点数据,第三路数据依次对应3072点FFT运算结果的第2048,2049,......,3071点数据;
(7)对3点DFT运算后的数据进行并串变换,此时数据顺序变为X(0),X(1024),X(2048),X(1),……,X(1023),X(2047),X(3071);
(8)对并串变换后的数据进行第三次块交织实现3072点FFT运算结果的顺序输出,输出顺序为
X(0),X(1),……, X(1024),X(1025),……,X(2047),X(2048),……,X(3071)。
CN201210264461.0A 2012-07-27 2012-07-27 一种3072点fft运算的实现方法 Active CN102831099B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210264461.0A CN102831099B (zh) 2012-07-27 2012-07-27 一种3072点fft运算的实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210264461.0A CN102831099B (zh) 2012-07-27 2012-07-27 一种3072点fft运算的实现方法

Publications (2)

Publication Number Publication Date
CN102831099A CN102831099A (zh) 2012-12-19
CN102831099B true CN102831099B (zh) 2015-04-22

Family

ID=47334244

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210264461.0A Active CN102831099B (zh) 2012-07-27 2012-07-27 一种3072点fft运算的实现方法

Country Status (1)

Country Link
CN (1) CN102831099B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105045766B (zh) * 2015-06-29 2019-07-19 深圳市中兴微电子技术有限公司 基于3072点快速傅里叶变换的数据处理方法及处理器
CN108205517B (zh) * 2016-12-20 2021-06-08 中国航天科工集团八五一一研究所 一种fft复用方法
CN112506087B (zh) * 2019-09-16 2024-07-23 阿里巴巴集团控股有限公司 Fpga加速系统和方法、电子设备以及计算机可读存储介质
CN112054976A (zh) * 2020-09-15 2020-12-08 中电科仪器仪表有限公司 一种超宽带多信道信号并行处理分析方法及系统
CN115080503A (zh) * 2022-07-28 2022-09-20 中国人民解放军63921部队 一种针对fft基模块映射的脉动阵列可重构处理器

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8484276B2 (en) * 2009-03-18 2013-07-09 International Business Machines Corporation Processing array data on SIMD multi-core processor architectures

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
《Low Power Pipelined FFT Architecture for Synthetic Aperture Radar Signal Processing》;Bum Sik Kim 和 Lee-Sup Kim;《IEEE 39th Midwest symposium on Circuits and Systems》;19961231;全文 *
苏涛,庄德靖.《大点数FFT算法的改进及其实现》.《现代雷达》.2005,第27卷(第7期),全文. *
鲁欣,陈进,付宇卓.《基于FPGA的4096点FFT模块的实现》.《系统工程与电子技术》.2004,第26卷(第3期),全文. *

Also Published As

Publication number Publication date
CN102831099A (zh) 2012-12-19

Similar Documents

Publication Publication Date Title
CN102831099B (zh) 一种3072点fft运算的实现方法
CN101834581B (zh) 滤波装置、滤波方法、程序和环绕处理器
CN105045766B (zh) 基于3072点快速傅里叶变换的数据处理方法及处理器
CN100390782C (zh) 一种实时快速傅立叶变换电路
CN101553808A (zh) 流水线fft架构和方法
CN101894096A (zh) 一种适用于cmmb和dvb-h/t的fft运算电路结构
CN102170302A (zh) 基于fpga的智能天线抗干扰片上系统及方法
CN101354700B (zh) 一种蝶形运算fft处理器
CN105701068A (zh) 基于分时复用技术的cholesky矩阵求逆系统
CN101567701A (zh) 一种高效多路数字下变频器系统
CN102025676A (zh) 一种1536点的fft/ifft实现方法及装置
CN106803750A (zh) 一种多通道流水fir滤波器
CN104883238A (zh) 一种多载波时分复用调制/解调方法及系统
CN117235420B (zh) 一种信号处理电路、方法、处理器、存储介质及芯片
CN103270697A (zh) 数字滤波电路和数字滤波控制方法
CN104268124A (zh) 一种fft实现装置和方法
CN106339353B (zh) 一种支持4375点和3780点fft/ifft的处理器
CN105553890A (zh) 一种mf-tdma非均匀多载波的整体解调方法
CN101540749B (zh) 可配置变换长度dft的前处理单元的实现方法及装置
CN103634241B (zh) 一种支持多模式的并行fft信号处理器及方法
CN101764778B (zh) 一种基带处理器和基带处理方法
CN201993753U (zh) 一种应用于fft/ifft的基4蝶形单元电路
CN102255838B (zh) 一种用于sc-fdma的快速傅立叶处理方法
CN108205517B (zh) 一种fft复用方法
CN103188192A (zh) 应用于视频传感器的基带处理装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant