一种fft处理器的运算方法

文档序号:8361415阅读:388来源:国知局
一种fft处理器的运算方法
【技术领域】
[0001] 本发明涉及可编程处理器,特别涉及一种FFT处理器的运算方法。
【背景技术】
[0002] 在通讯和雷达信号处理中,FFT是一种常用的工具,在速度要求比较高或集成度较 高的情况下大多使用FPGA完成。绝大多数的处理器处理数据采用定点数据格式,这样虽然 使得处理结构相对简单,但是溢出现象则比较严重,而采用简单的定点截位又会将小信号 淹没在大信号之中,使结果数据失去必要的精度。随着对数据精度的要求越来越高,一般的 定点算法已经无法满足高精度的要求,需要求助于浮点处理器来进行运算,以避免应用中 的溢出问题。国外的FFTCore大多采用定点运算或块浮点运算,国外的FFTCore-般采 用小于24位定点或小于24位块浮点。但是浮点处理器消耗资源比较大,包含有复杂的硬 件结构(浮点执行单元),从而大大地增加了设计成本和功耗,降低了计算效率。在同样的 处理速度下,浮点处理器相对昂贵,功耗较大。浮点运算执行单元只能自行设计,在设计过 程还要考虑运算精度、运算速度、资源占用、设计复杂度的折衷等。因此相对定点运算而言, 浮点运算具有开发难度大、研发周期长、研制费用高等缺点。
[0003] 因此,针对相关技术中所存在的上述问题,目前尚未提出有效的解决方案。

【发明内容】

[0004] 为解决上述现有技术所存在的问题,本发明提出了一种FFT处理器的运算方法, 包括:
[0005] 在FPGA的程序中设置多级蝶形运算,每一级共用一个块浮点移位因子;通过数据 在每级运算前根据上一次的块浮点因子判决状态进行判断,来决定该次数据存储器输出时 的移位选择,通过对每级的移位之和来控制最后输出的增益。
[0006] 优选地,该方法还包括:
[0007] 在FFT运算之前,所有数据按照顺序地址的形式排列,每级蝶形运算前取数地址 和运算结束后存数地址相同;第一级所取每两个数地址相隔为总点数的一半,每一级是上 一级相隔点数的一半,每级蝶形运算是流水线操作,每个时钟都从存储器读取数据,通过在 主程序中定义一个时钟计数器和一个级数计数器,级数计数器随级数的增加自加,在每完 成一个FFT之后清零,时钟计数器随每一个时钟自加,在每完成一级FFT之后清零,通过将 时钟计数器减去一次蝶形运算耗费的时钟数来实现读取数据和存储数据地址的一致性,并 将时钟计数器循环右移来产生每次两个数据之间的地址间隔。
[0008] 优选地,该方法还包括:
[0009] 在基二DIF形式FFT运算中,每一级的蝶形输入的原始数据之间首先进行的是简 单的加减运算,将每级所有数据在进入蝶形时需要左移/右移,如果是将所有数据右移一 位,那么就使该级输出数据格式相对于该级输入数据格式来说多了一位小数位,每级运算 后为前一级的1/2,并将其称为浮点因子,经过m级的蝶形迭代后,如果总共右移了m位,即 浮点因子位m,则计算结果数据放大2m倍后得到最终结果。
[0010] 本发明相比现有技术,具有以下优点:
[0011] 本发明提出了一种浮点运算方法,解决了定点算法和浮点算法之间的矛盾,提高 了浮点运算效率,降低了成本。
【附图说明】
[0012] 图1是根据本发明实施例的FFT处理器的运算方法的流程图。
[0013] 图2为根据本发明实施例的块浮点FFT结构图。
[0014] 图3为根据本发明实施例的三位块浮点因子判决程序流程图。
【具体实施方式】
[0015] 下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描 述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权 利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节 以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中 的一些或者所有细节也可以根据权利要求书实现本发明。
[0016] 本发明的一方面提供了一种FFT处理器的运算方法。图1是根据本发明实施例的 FFT处理器的运算方法流程图。
[0017] FFT是将原有N点序列分解成为两个或更多的较短序列,这些短序列的DFT可重新 组合成原序列的DFT,而总的运算次数确比直接的DFT少的多,可以极大的降低计算量,从 而达到提高运算速度的目的。基二DIF形式FFT是将频域X(k)按序号k的奇、偶分开,假 设N= 2m,则第一次分开得到两个N/2点的DFT,称为第一级(Classm);再将其分别分解可 得到四个N/4点的DFT,称为第二级(Classm- 1);依次类推,直到得到两点的DFT。FFT 运算的基本单元是蝶形运算单元,基二DIF的蝶形运算单元运算式如下所示:
[0018] x' a+jy'a=xa+xb+j(ya+yb)
[0019] x'b+jy' b= (xa-xb)wr-(ya_yb)W^K(Xa-Xb)Wi+(ya_yb)wr]
[0020]即:x,a=Xa+Xb
[0021] y'a=(ya+yb)
[0022] x' b= (xa-xb)wr-(ya_yb)Wi
[0023] y' b= (xa-xb)Wi+(ya_yb)wr
[0024] 从上式可以得出,基二蝶形运算只需一次复数乘法和两次复数加法,则N= 2"个
【主权项】
1. 一种FFT处理器的运算方法,其特征在于,包括: 在FPGA的程序中设置多级蝶形运算,每一级共用一个块浮点移位因子;通过数据在每 级运算前根据上一次的块浮点因子判决状态进行判断,来决定该次数据存储器输出时的移 位选择,通过对每级的移位之和来控制最后输出的增益。
2. 根据权利要求1所述的方法,其特征在于,该方法还包括: 在FFT运算之前,所有数据按照顺序地址的形式排列,每级蝶形运算前取数地址和运 算结束后存数地址相同;第一级所取每两个数地址相隔为总点数的一半,每一级是上一级 相隔点数的一半,每级蝶形运算是流水线操作,每个时钟都从存储器读取数据,通过在主程 序中定义一个时钟计数器和一个级数计数器,级数计数器随级数的增加自加,在每完成一 个FFT之后清零,时钟计数器随每一个时钟自加,在每完成一级FFT之后清零,通过将时钟 计数器减去一次蝶形运算耗费的时钟数来实现读取数据和存储数据地址的一致性,并将时 钟计数器循环右移来产生每次两个数据之间的地址间隔。
3. 根据权利要求2所述的方法,其特征在于,该方法还包括: 在基二DIF形式FFT运算中,每一级的蝶形输入的原始数据之间首先进行的是简单的 加减运算,将每级所有数据在进入蝶形时需要左移/右移,如果是将所有数据右移一位,那 么就使该级输出数据格式相对于该级输入数据格式来说多了一位小数位,每级运算后为前 一级的1/2,并将其称为浮点因子,经过m级的蝶形迭代后,如果总共右移了 m位,即浮点因 子位m,则计算结果数据放大2-倍后得到最终结果。
【专利摘要】本发明提供了一种FFT处理器的运算方法,该方法包括:在FPGA的程序中设置多级蝶形运算,每一级共用一个块浮点移位因子;通过数据在每级运算前根据上一次的块浮点因子判决状态进行判断,来决定该次数据存储器输出时的移位选择,通过对每级的移位之和来控制最后输出的增益。本发明提出了一种浮点运算方法,解决了定点算法和浮点算法之间的矛盾,提高了浮点运算效率,降低了成本。
【IPC分类】G06F17-14
【公开号】CN104679721
【申请号】CN201510116879
【发明人】黄建喜, 刘宇波
【申请人】成都金本华科技股份有限公司
【公开日】2015年6月3日
【申请日】2015年3月17日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1