CN102831099A - 一种3072点fft运算的实现方法 - Google Patents
一种3072点fft运算的实现方法 Download PDFInfo
- Publication number
- CN102831099A CN102831099A CN2012102644610A CN201210264461A CN102831099A CN 102831099 A CN102831099 A CN 102831099A CN 2012102644610 A CN2012102644610 A CN 2012102644610A CN 201210264461 A CN201210264461 A CN 201210264461A CN 102831099 A CN102831099 A CN 102831099A
- Authority
- CN
- China
- Prior art keywords
- data
- fft
- block interleaving
- output
- time
- 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.)
- Granted
Links
Images
Landscapes
- Complex Calculations (AREA)
Abstract
本发明公开了一种3072点FFT运算的实现方法,3072点输入数据利用块交织完成数据索引顺序的调整,经过调整后的数据依次进行1024点FFT运算,然后经过系数调整以及解交织,恢复数据顺序。最后同样经过3点的DFT运算以及块交织完成最终3072点FFT运算结果的顺序输出。本发明采用串行的实现结构,减少了FPGA中IPcore的使用数量,大大降低了资源利用率。
Description
技术领域
本发明涉及一种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变换
cooley-tukey算法将变换长度N分解为任意两个因子的乘积,N=N1×N2,将时域输入信号索引n表示成:
令A=N2B=1,则n=N2n1+n2
将频域输出序列索引k表示成:
令C=1D=N1,则k=k1+N1k2
此时输入输出映射关系如下:
得到cooley-tukey算法DFT公式:
根据公式(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运算结果;
(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(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运算结果;
(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)。
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 true CN102831099A (zh) | 2012-12-19 |
CN102831099B 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) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105045766A (zh) * | 2015-06-29 | 2015-11-11 | 深圳市中兴微电子技术有限公司 | 基于3072点快速傅里叶变换的数据处理方法及处理器 |
CN108205517A (zh) * | 2016-12-20 | 2018-06-26 | 中国航天科工集团八五研究所 | 一种fft复用方法 |
CN112054976A (zh) * | 2020-09-15 | 2020-12-08 | 中电科仪器仪表有限公司 | 一种超宽带多信道信号并行处理分析方法及*** |
CN112506087A (zh) * | 2019-09-16 | 2021-03-16 | 阿里巴巴集团控股有限公司 | Fpga加速***和方法、电子设备以及计算机可读存储介质 |
CN115080503A (zh) * | 2022-07-28 | 2022-09-20 | 中国人民解放军63921部队 | 一种针对fft基模块映射的脉动阵列可重构处理器 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010105887A2 (en) * | 2009-03-18 | 2010-09-23 | International Business Machines Corporation | Processing array data on simd multi-core processor architectures |
-
2012
- 2012-07-27 CN CN201210264461.0A patent/CN102831099B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010105887A2 (en) * | 2009-03-18 | 2010-09-23 | International Business Machines Corporation | Processing array data on simd multi-core processor architectures |
Non-Patent Citations (3)
Title |
---|
BUM SIK KIM 和 LEE-SUP KIM: "《Low Power Pipelined FFT Architecture for Synthetic Aperture Radar Signal Processing》", 《IEEE 39TH MIDWEST SYMPOSIUM ON CIRCUITS AND SYSTEMS》 * |
苏涛,庄德靖: "《大点数FFT算法的改进及其实现》", 《现代雷达》 * |
鲁欣,陈进,付宇卓: "《基于FPGA的4096点FFT模块的实现》", 《***工程与电子技术》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105045766A (zh) * | 2015-06-29 | 2015-11-11 | 深圳市中兴微电子技术有限公司 | 基于3072点快速傅里叶变换的数据处理方法及处理器 |
CN108205517A (zh) * | 2016-12-20 | 2018-06-26 | 中国航天科工集团八五研究所 | 一种fft复用方法 |
CN108205517B (zh) * | 2016-12-20 | 2021-06-08 | 中国航天科工集团八五一一研究所 | 一种fft复用方法 |
CN112506087A (zh) * | 2019-09-16 | 2021-03-16 | 阿里巴巴集团控股有限公司 | Fpga加速***和方法、电子设备以及计算机可读存储介质 |
CN112054976A (zh) * | 2020-09-15 | 2020-12-08 | 中电科仪器仪表有限公司 | 一种超宽带多信道信号并行处理分析方法及*** |
CN115080503A (zh) * | 2022-07-28 | 2022-09-20 | 中国人民解放军63921部队 | 一种针对fft基模块映射的脉动阵列可重构处理器 |
Also Published As
Publication number | Publication date |
---|---|
CN102831099B (zh) | 2015-04-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102831099A (zh) | 一种3072点fft运算的实现方法 | |
CN103970718A (zh) | 一种快速傅里叶变换实现装置及方法 | |
CN101834581B (zh) | 滤波装置、滤波方法、程序和环绕处理器 | |
CN102419741A (zh) | 一种基于同址同序素因子算法的3780点离散傅里叶变换处理装置和方法 | |
KR20090018042A (ko) | 파이프라인 고속 푸리에 변환 구조 및 방법 | |
CN102073621B (zh) | 一种应用于fft/ifft的基4蝶形单元电路及其处理方法 | |
CN100390782C (zh) | 一种实时快速傅立叶变换电路 | |
CN112351434B (zh) | 一种5g小区并行搜索频点的方法、装置以及存储介质 | |
CN101894096A (zh) | 一种适用于cmmb和dvb-h/t的fft运算电路结构 | |
CN102025676A (zh) | 一种1536点的fft/ifft实现方法及装置 | |
Sundararajan et al. | Multicarrier spread spectrum modulation schemes and efficient FFT algorithms for cognitive radio systems | |
CN101582059A (zh) | 基于fpga实现并行结构fft处理器的方法 | |
CN117235420B (zh) | 一种信号处理电路、方法、处理器、存储介质及芯片 | |
CN103544111B (zh) | 一种基于实时性处理的混合基fft方法 | |
CN103020015A (zh) | 点数为非2次幂的离散傅里叶变换快速计算的实现方法 | |
CN101937332B (zh) | 基于基-24算法的多路fft处理器中乘法器的复用方法 | |
CN101540749B (zh) | 可配置变换长度dft的前处理单元的实现方法及装置 | |
CN105553890A (zh) | 一种mf-tdma非均匀多载波的整体解调方法 | |
CN105791197B (zh) | 一种偏移正交多载波***的脉冲成形滤波器 | |
Kim et al. | Novel shared multiplier scheduling scheme for area-efficient FFT/IFFT processors | |
Badar et al. | High speed FFT processor design using radix− 4 pipelined architecture | |
CN101764778B (zh) | 一种基带处理器和基带处理方法 | |
CN101741801B (zh) | 一种32路并行数据dft的实现结构 | |
CN108205517B (zh) | 一种fft复用方法 | |
CN201993753U (zh) | 一种应用于fft/ifft的基4蝶形单元电路 |
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 |