本发明专利技术提供了一种FFT处理器的运算方法,该方法包括:在FPGA的程序中设置多级蝶形运算,每一级共用一个块浮点移位因子;通过数据在每级运算前根据上一次的块浮点因子判决状态进行判断,来决定该次数据存储器输出时的移位选择,通过对每级的移位之和来控制最后输出的增益。本发明专利技术提出了一种浮点运算方法,解决了定点算法和浮点算法之间的矛盾,提高了浮点运算效率,降低了成本。
【技术实现步骤摘要】
一种FFT处理器的运算方法
本专利技术涉及可编程处理器,特别涉及一种FFT处理器的运算方法。
技术介绍
在通讯和雷达信号处理中,FFT是一种常用的工具,在速度要求比较高或集成度较高的情况下大多使用FPGA完成。绝大多数的处理器处理数据采用定点数据格式,这样虽然使得处理结构相对简单,但是溢出现象则比较严重,而采用简单的定点截位又会将小信号淹没在大信号之中,使结果数据失去必要的精度。随着对数据精度的要求越来越高,一般的定点算法已经无法满足高精度的要求,需要求助于浮点处理器来进行运算,以避免应用中的溢出问题。国外的FFTCore大多采用定点运算或块浮点运算,国外的FFTCore一般采用小于24位定点或小于24位块浮点。但是浮点处理器消耗资源比较大,包含有复杂的硬件结构(浮点执行单元),从而大大地增加了设计成本和功耗,降低了计算效率。在同样的处理速度下,浮点处理器相对昂贵,功耗较大。浮点运算执行单元只能自行设计,在设计过程还要考虑运算精度、运算速度、资源占用、设计复杂度的折衷等。因此相对定点运算而言,浮点运算具有开发难度大、研发周期长、研制费用高等缺点。因此,针对相关技术中所存在的上述问题,目前尚未提出有效的解决方案。
技术实现思路
为解决上述现有技术所存在的问题,本专利技术提出了一种FFT处理器的运算方法,包括:在FPGA的程序中设置多级蝶形运算,每一级共用一个块浮点移位因子;通过数据在每级运算前根据上一次的块浮点因子判决状态进行判断,来决定该次数据存储器输出时的移位选择,通过对每级的移位之和来控制最后输出的增益。优选地,该方法还包括:在FFT运算之前,所有数据按照顺序地址的形式排列,每级蝶形运算前取数地址和运算结束后存数地址相同;第一级所取每两个数地址相隔为总点数的一半,每一级是上一级相隔点数的一半,每级蝶形运算是流水线操作,每个时钟都从存储器读取数据,通过在主程序中定义一个时钟计数器和一个级数计数器,级数计数器随级数的增加自加,在每完成一个FFT之后清零,时钟计数器随每一个时钟自加,在每完成一级FFT之后清零,通过将时钟计数器减去一次蝶形运算耗费的时钟数来实现读取数据和存储数据地址的一致性,并将时钟计数器循环右移来产生每次两个数据之间的地址间隔。优选地,该方法还包括:在基二DIF形式FFT运算中,每一级的蝶形输入的原始数据之间首先进行的是简单的加减运算,将每级所有数据在进入蝶形时需要左移/右移,如果是将所有数据右移一位,那么就使该级输出数据格式相对于该级输入数据格式来说多了一位小数位,每级运算后为前一级的1/2,并将其称为浮点因子,经过m级的蝶形迭代后,如果总共右移了m位,即浮点因子位m,则计算结果数据放大2m倍后得到最终结果。本专利技术相比现有技术,具有以下优点:本专利技术提出了一种浮点运算方法,解决了定点算法和浮点算法之间的矛盾,提高了浮点运算效率,降低了成本。附图说明图1是根据本专利技术实施例的FFT处理器的运算方法的流程图。图2为根据本专利技术实施例的块浮点FFT结构图。图3为根据本专利技术实施例的三位块浮点因子判决程序流程图。具体实施方式下文与图示本专利技术原理的附图一起提供对本专利技术一个或者多个实施例的详细描述。结合这样的实施例描述本专利技术,但是本专利技术不限于任何实施例。本专利技术的范围仅由权利要求书限定,并且本专利技术涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本专利技术的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中的一些或者所有细节也可以根据权利要求书实现本专利技术。本专利技术的一方面提供了一种FFT处理器的运算方法。图1是根据本专利技术实施例的FFT处理器的运算方法流程图。FFT是将原有N点序列分解成为两个或更多的较短序列,这些短序列的DFT可重新组合成原序列的DFT,而总的运算次数确比直接的DFT少的多,可以极大的降低计算量,从而达到提高运算速度的目的。基二DIF形式FFT是将频域X(k)按序号k的奇、偶分开,假设N=2m,则第一次分开得到两个N/2点的DFT,称为第一级(Classm);再将其分别分解可得到四个N/4点的DFT,称为第二级(Classm-1);依次类推,直到得到两点的DFT。FFT运算的基本单元是蝶形运算单元,基二DIF的蝶形运算单元运算式如下所示:x′a+jy′a=xa+xb+j(ya+yb)x′b+jy′b=(xa-xb)wr-(ya-yb)wi+j[(xa-xb)wi+(ya-yb)wr]即:x′a=xa+xby′a=(ya+yb)x′b=(xa-xb)wr-(ya-yb)wiy′b=(xa-xb)wi+(ya-yb)wr从上式可以得出,基二蝶形运算只需一次复数乘法和两次复数加法,则N=2n个点的DFT复数乘法量由N2次降为次,复数加法由N(N-1)次降为Nlog2N。所以在大点数DFT运算时,使用FFT将会极大的降低运算量,提高运算效率。二进制小数点在数码中位置固定不变的称为定点制。定点制中,小数点右边各位表示数的小数部分,左边各位表示数的整数部分。通常为了方便,采取了两种方法,一种就是把所有数据都表示为整数;另一种就是把数值限制在-1.0到+1.0之间的小数形式。在第二种方法中,小数点固定在第一位二进制码之后,整数位作为“符号位”,数的本身只有小数部分。相对而言第二种方法比较常用,在定点数运算中,所有结果的绝对值都不能超过1。如果运算过程中数的绝对值超过1,整数部分的符号位就会出现错误进位,称为溢出,这在定点算法中是无法避免出现的情况,一般采用简单的截位来解决,但是这样就会时一些小数据被淹没在大数据之中。浮点制将一个数的表示分为阶码部分和尾数部分。阶码是一个有符号的整数,它表示了尾数中的二进制小数点位置应该朝左或右移动以得到原数的大小;尾数有两部分:一个一位二进制整数(也被引用为J-bit)和一个二进制小数,J-bit通常不表示出来,而是作为隐含值。四种浮点格式包括单精度格式、扩展单精度格式、双精度格式和扩展双精度格式,它能表示的值的范围要宽得多,可以避免大多数应用中的溢出问题。在大多数情况下,处理器以规格化的形式表示实数。也就是说,除了零之外,尾数总是由一个整数和一个小数构成,如下所示:对于小于1的值来说,主要消掉高位零,即可成为规格化数。(每消掉一个高位零,阶码都要减1)以规格化形式来表示数据,使装入给定宽度的尾数的有效位个数最多。总之,规格化数的尾数表示在1到2之间的实数,而由阶码给出实际的小数点的位置。浮点格式表示数据的动态范围比定点数大,在计算过程中可以使得指数部分加减“1”来扩展数据,这样对小数据在运算中可保持更高的精度,有利于保护小数据。在硬件实现时,需要设置专用的浮点运算执行单元来进行浮点加减乘除运算,由于在运算中要分别考虑到数据的阶码和尾数,所以浮点执行单元的结构和控制都比较复杂,严重影响到浮点运算的效率。无论使用哪种硬件处理器来实现算法,绝大多数的处理器使用定点运算算法,处理数据采用定点数据格式,这样虽然使得处理结构相对简单,但是溢出现象则比较严重,而采用简单的定点截位又会将小信号淹没在大信号之中,使结果数据失去必要的精度。随着对数据精度的要求越来越高,一般的定点算法已经无法满足高精度的要求,需要求助于浮点处理器来进行运算,以避免应用中的溢出问题。但本文档来自技高网...
【技术保护点】
一种FFT处理器的运算方法,其特征在于,包括:在FPGA的程序中设置多级蝶形运算,每一级共用一个块浮点移位因子;通过数据在每级运算前根据上一次的块浮点因子判决状态进行判断,来决定该次数据存储器输出时的移位选择,通过对每级的移位之和来控制最后输出的增益。
【技术特征摘要】
1.一种FFT处理器的运算方法,其特征在于,包括:在FPGA的程序中设置多级蝶形运算,每一级共用一个块浮点移位因子;通过数据在每级运算前根据上一次的块浮点因子判决状态进行判断,来决定该次数据存储器输出时的移位选择,通过对每级的移位之和来控制最后输出的增益;该方法还包括:在FFT运算之前,所有数据按照顺序地址的形式排列,每级蝶形运算前取数地址和运算结束后存数地址相同;第一级所取每两个数地址相隔为总点数的一半,每一级是上一级相隔点数的一半,每级蝶形运算是流水线操作,每个时钟都从存储器读取数据,通过在主程序中定义一个时钟计数器和一个级数计数器,级数计数器随级数的增加自加,在每完成一个FFT之后清零,时钟计数器随每一个时钟自加,在每完成一级FFT之后清零,通过将时钟计数器减去一次蝶形运算耗费的时钟数来实现读取数据和存储数据地址的一致性,并将时钟计数器循环右移来产生每次两个数据之间的地址间隔;在基二DIF形式FFT运算中,每一级的蝶形输入的原始数据之间首先进行的是简单的加减运算,将每级所有数据在进入蝶形时需要左移/右移,如果是将所有数据右移一位,那么就使该级输出数据格式相对于该级输入数据格式来说多了一位小数位,每级运算后为前一级的1/2,并将其称为浮点因子,经过m级的蝶形迭代后,如果总共右移了m位,即浮点因子位m,则计算结果数据放...
【专利技术属性】
技术研发人员:黄建喜,刘宇波,
申请(专利权)人:成都金本华科技股份有限公司,
类型:发明
国别省市:四川;51
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。