背景技术
目前,高速数字信号处理的应用范围也越来越广,特别是在雷达定位、声纳、石油勘探、光纤传感器,移动通信,软件无线电、智能天线等新技术领域,都需要强大的实时数字信号处理的支持,以完成目标检测、估计、跟踪的任务。并且,通过对信号进行一定的处理,提取特征、分析识别,按需求得出相关参数和结果。
在数字信号处理中,信号是用有限精度的数的序列来表示的,用数字运算来实现处理。频谱分析,离散傅里叶变换(DFT:Discrete FourierTransform)是信号处理的重要内容之一,在工程实践中有广泛的应用。实现离散傅里叶变换DFT的快速傅里叶变换(FFT:Fast Fourier Transform)算法是时域-频域之间进行信号转换的一种高效方法,是与波形分析相关的各个领域中一个必不可少的核心工具。
高效的快速傅里叶变换(FFT)的出现,对促进数字信号处理的发展起着决定性作用。Cooley Turkey所研究出的计算离散傅里叶变换DFT的快速傅立叶变快FFT,将计算量大大降低,从而使得快速傅里叶变换FFT在数字信号处理,传感定位、地震预报、医学断层诊断、编码理论、量子物理及概率论等领域得到了广泛的应用。
在实际的工程实践中,一般采用数字信号处理器(DSP:Digital SignalProcessor)来实现快速傅里叶FFT算法。该快速傅里叶FFT运算一般有两种实现方法,分别为专用芯片和通用处理器。其中,专用芯片尽管运算效率高,但是灵活性很差;通用处理器在算法和处理方式上具有很高的灵活性,可以实现多种不同的算法。TI公司推出的高性能的信号处理器DSP,完全能够用软件来实时完成那些必须用多片专用芯片才能完成的功能,从而简化设计、降低成本、增加设计的灵活性和可移植性。
快速傅里叶变换FFT的运算效率直接影响整个系统的性能。信号处理器DSP芯片通常把快速傅里叶变换FFT的运算速度作为最重要的技术指标。信号处理器DSP片内存储器有限,在该快速傅里叶变换FFT点数不大、存储空间足够大的情况下,实现比较容易。通常在频谱分析中需要的点数和精度都不大,信号处理器DSP芯片调用常规的快速傅里叶变换FFT函数算法均可高速完成。
但在有些特定的应用场合,如光纤传感器定位、周期图法估计功率谱、雷达精确定位中,为了获得高的谱分辨率,往往要采用超大点数的快速傅里叶变换FFT。与小点数快速傅里叶变换FFT相比较,大点数快速傅里叶变换FFT的实现要复杂得多,并且要保证运算的实时性,无法做到直接在信号处理器DSP片内直接调用通用的算法实现,需要通过多级板级子系统,即多个DSP信号处理芯片并向处理系统完成快速傅里叶变换FFT。
如图1所示,为利用多DSP处理器分层系统组成示意图。其中,大点数原始数据开始存放在浮点DSP的片外存储器里,并在4片浮点DSP上并行的进行前几级蝶形运算,通过双口存储器将运算结果传给一定点DSP103,完成最后几级蝶形运算。其中,利用德州仪器公司(TI,Texas Instruments)的高端的C6000系列DSP芯片组成的多DSP处理器分层系统,4片浮点DSP可采用C6701,定点DSP1采用C6202。
上述系统中,FFT算法采用自然输入,反序输出的按时间抽取基二算法。如图2所示,为N=32按时间抽取的基-2FFT流图。该算法原理如下所述:
1.把大点数N拆分成2级FFT,N=N1×N2其中N1=2r1,N2=2r2。N2为并行处理器DSP的数目,把N点数据循环分配给N2台处理器。
2.先作N2个N1点的FFT,再作N1个旋转因子生成r2级蝶形运算,在并行处理器上完成前几级处理计算。用同样的拆分方法可以将N1点的FFT拆分成更小点数的FFT。其旋转因子规律为:将所有的旋转因子进行位反转,再将需要的旋转因子分为r2个部分:
(1)1个旋转因子,为在整个旋转因子中顺序一次取得1个所得;
(2)2个旋转因子,为在整个旋转因子中顺序一次取得2个所得;
......
(r2)2r2-1个旋转因子,为在整个旋转因子中顺序一次取得2r2-1个所得。
3.并行处理结果传送到最后一个汇总DSP上,完成最后2级蝶形运算,和整序。
如图3所示,为256k点FFT在图1所示的多DSP处理器分层系统中实现的流程图。
如图所示,浮点DSP-1~4(C6701)101a~101d将采样的定点数据进行类型转换,转换为浮点数据(见步骤301),其中按列将定点数据进行取样;
将大点数的复数序列FFT转化成可以在DSP上一次性处理的小点数(见步骤302、303),其中按列将浮点数据从C6701内放回C6701外,按行将浮点数据从C6701外放回C6701内;
将浮点数据转换成定点数据传输到定点DSP C6202中(见步骤304),其中,按行将浮点数据从C6701内放回C6701内,通过DPRAN通信进行传输;
然后,在定点DSP(C6202)103上完成最后蝶型运算(见步骤305),其中将定点数据从C6202外取进C6202内;
按照反位序的方式整序(见步骤306),其中,按行将定点数据从C6202内放回C6202外,在行之间按位反卷的顺序按行取进定点数据;
然后,进行双实数序列分离,其中按列将定点数据从C6202内放回C6202外,按行将定点数据从C6202外取进C6202内,最后求模、数据检测(见步骤307~308),其中按行将结果从C6202内放回C6202外。
然而,采用上述系统和算法的缺点在于:技术成本非常高,对于256k点需要用5片TI高端的c6000系列DSP芯片;
硬件设计复杂,5片DSP处理器同步通信不容易实现、不稳定,而这对于FFT算法的实现很重要,否则会出现时间上的不同步,直接导致频谱分析的错误;
处理板不可能做得十分小巧,不适合大规模集成;在一些特殊的场合,板子太大,不能满足产品需求;
软件上,算法拆分也很复杂,并行算法本来就比较有难度,又由于C6202是定点DSP处理器,C6701是浮点DSP,FFT后几级还要经过浮点到定点转换增加复杂度。
此外,还可采用单片浮点DSP小点算法实现大数据量FFT。其中,用数据抽取的方式把大数据量FFT映射为一系列小点数FFT,采用Winograd算法,以在单片C6701DSP上实现为例进行说明。该算法原理为:把N点序列分成N1个N2点FFT和N2个N1点FFT完成;如图4所示,为单片浮点DSP小点算法实现大数据量FFT的流程图。其中,
步骤401,作一维时域序列到二维时域序列的线性映射,把N点序列分解成二维序列;即
步骤402,对二维时域序列的每行作FFT,共需作N1个N2点的FFT得到一个中间矩阵{t(n1,k2)};
步骤403,给矩阵{t(n1,k2)}的每一个元素乘上相应的旋转因子WN n 1 n 2,得到中间矩阵{g(n1,k2)},其中,
步骤404,对矩阵{g(n1,k2)}的每列作FFT,作N2个N1点的FFT,得到频域的二维矩阵{X(k1,k2)};
步骤405,对频域二维矩阵{X(k1,k2)}作线性映射,得到频域的一维矩阵,即大数据量FFT
片外存储器分成3块区域:原始数据区,中间矩阵区,旋转因子。数据的最后结果是顺序存放在原始数据区。
采用单片浮点DSP小点算法实现大数据量FFT缺点在于:
用浮点DSP处理器,运算速度比较慢;能高效计算的点数不够大,不易扩展;浮点处理器片上存储器容量小,因为要满足N1和N2均为能够在片内直接实现FFT的数据量,限制了可以计算的FFT点数;
根据片内资源,对于C6701,N1与N2均不大于4096,若如此计算的最大点数只能是224;
算法拆分复杂,数据流程繁琐,所用到旋转因子规律复杂;程序复杂,子进程多,细节设计繁杂。
具体实施方式
本发明提供一种信号处理方法、装置和系统。以下结合附图对本发明进行详细说明。
实施例一
本发明提供一种信号处理系统,如图5所示,该系统包括数据采集单元501和与该数据采集单元501相连接的数据转换单元502;
此外,还包括数字信号处理装置503,用于接收数据转换单元502传送的N点输入数据并储存,并储存处理后的输出数据和处理所需的旋转因子,采用按频率抽取基-2mFFT并利用旋转因子对N点输入数据进行处理;
其中,所述N点输入数据的级数为 每一级包括N/2m个蝶形单元,其中,N为输入数据的点数,M为整数,m为正整数。
如图5所示,数字信号处理装置503包括:数字信号处理器DSP503a和外部存储器503b;其中,外部存储器503b,用于接收数据转换单元502传送的N点输入数据并储存,并且还储存经所述数字信号处理器503a处理后的输出数据和进行处理所需的旋转因子;
数字信号处理器DSP503a,与外部存储器503b连接,采用按频率抽取基-2mFFT并利用旋转因子对储存于外部存储器503b中的N点输入数据进行处理,并将处理后的输出数据再搬移至外部存储器503b进行储存。
如图6所示,为本发明实施例的数字信号处理装置503的构成示意图,其中,数字信号处理器DSP503a至少包括:中央处理器603、内部存储器602、直接存储器访问(DMA)控制器601和中断控制器604;其中,
DMA控制器601,与所述外部存储器503b和内部存储器602连接,用于所述外部存储器503b和内部存储器602之间的数据搬移;
内部存储器602,用于通过DMA控制器601接收外部存储器503b传送的数据并暂存后传送至中央处理器603;或者接收中央处理器603传送的处理后的数据并暂存后,通过DMA控制器601传送至外部存储器503b;并且该内部存储器503b还用于存储程序;
中央处理器603,与内部存储器602连接,利用内部存储器602中储存的程序,对所述内部存储器602传送的数据进行处理,并将处理后的输出数据传送至内部存储器602暂存;
中断控制器604,与所述DMA控制器601连接,用于发送中断请求信号,实现外部存储器503b和内部存储器601之间的数据搬移、中央处理器603对内部存储器602存储数据的处理之间的切换。
此外,本实施例中,数字信号处理器503b还可包括第一级内部程序存储器605和第一级内部数据存储器606;其中,
所述第一级内部程序存储器605设置与所述内部存储器602和中央处理器603之间,用于暂存所述内部存储器602传送的程序,供中央处理器603使用;
所述第一级内部数据存储器606与所述内部存储器602和中央处理器603连接,用于暂存内部存储器602传送的中央处理器603处理的数据或者处理后的数据。
还包括频谱分析单元504、目标识别单元505和终端506,均与数字信号处理装置503连接;其中,
频谱分析单元504,根据数字信号处理装置503存储的输出数据进行频谱分析;目标识别单元505,根据数字信号处理装置503存储的输出数据进行目标识别;终端506,对数字信号处理装置503存储的输出数据进行显示。
本实施例中,所述数字信号处理器DSP503b采用单片定点式数字信号处理器。可采用TI公司开发的TMS 320C6416,采用2级存储器结构,第一级存储器,即第一级内部程序存储器605和第一级内部数据存储器606,储存相互独立的程序cache和数据cache,作为高速缓存被CPU访问。第二级存储器,即内部存储器602,是一个统一的程序/数据空间,可以整体作为SRAM映射到外部存储器503b的存储空间。
本发明中,DMA控制器601可采用EDMA控制器。
本实施例中,所述外部存储器503b分为三个部分,分别存储输入数据、处理后的输出数据、以及处理数据时所利用的旋转因子。
如图9所示,为本发明信号处理系统的具体应用的实例。即光纤传感器定位系统。该系统由光发射接收单元702、传感光纤单元701和信号处理器。其中,
光发射接收单元702用于完成信号的采集和模数转换;传感光纤单元701用于完成传感光纤的布线和信号采集的物理位置;信号处理装置可采用如上所述的信号处理装置,此处不再赘述。处理后的数据可用于频谱分析、目标识别或终端显示。
通过上述实施例可知,采用单片DSP完成大点数的设计,成本降低;单片DSP系统,电路板小巧,相应的产品小巧,并且可用性强;简化硬件设计,单片DSP的设计,缩短开发周期;采用高速定点处理器,能够高效计算更大的点数;充分利用TI C64系列特有的扩展的直接存储器存取控制器(EDMA:Enhanced DMA Controller),实现对片外存储器的高效访问;简化算法,FFT点数易于扩展,易升级;由于算法特性,易于分析FFT计算后的频谱,易找到频谱中的最大峰值。
实施例二
以下以采用实施例一的信号处理系统进行信号处理为例,对本发明的信号处理方法进行详细说明。
本发明提供一种信号处理方法,该方法包括步骤:
数据采集单元501采集信号并将采集到的信号传送至数据转换单元502进行转换,成为数字数据;
将该数字数据作为输入数据输入数字信号处理装置503,该装置503包括外部存储器503b和一个信号处理器503a;其中,
外部存储器503b,用于接收数据转换单元502传送的N点输入数据并储存,并且还储存经所述数字信号处理器503a处理后的输出数据和进行处理所需的旋转因子;
数字信号处理器503a,与外部存储器503b连接,采用按频率抽取基-2mFFT并利用旋转因子对储存于外部存储器503b中的N点输入数据进行处理,并将处理后的输出数据再搬移至外部存储器503b进行储存;
所述N点输入数据的级数为 每一级包括N/2m个蝶形单元,其中,N为输入数据的点数,M为整数,m为正整数。
本实施例中,所述数据转换单元502为模数转换器,进行模数(A/D)转换后的N点输入数据为12bit复数序列,采用16bit字长来存放此数据。
在具体说明本发明的信号处理方法之前,首先,对本发明采用的傅里叶变换进行说明。
傅里叶变换是信号处理和数据处理中的一个重要的分析工具,其实质是把时域问题通过傅里叶变换成为频域问题来进行研究,这种变换往往能使所研究的问题大大简化。而快速傅立叶变换(FFT:Fast Fourier Transform)是其中经常用到的数学运算手段。
在执行FFT运算以前,假设所取的信号是周期性的信号,也就是说,在信号产生的时候,其必定存在固定的周期,所取得的信号以次周期为基底,而真正的信号假设是由此基本周期产生无限长的时域信号组合。
其次,对FFT算法进行说明。
常用实现DFT的FFT,有基-2FFT,基-4FFT,和更高基。并分为按时间抽取DIT,和频率抽取DIF。
一般基数越高,总计算量越少。
本实施例中,采用按频率抽取(Decimation in Frequency)基-4FFT来处理输入数据,但不限于此中FFT,还可采用其它。下面现对按频率抽取基-4FFT进行说明。
FFT运算是很有规律的,其每一级的蝶形运算都是由基4算法每次抽取4个操作数,经运算得到4个结果。
又因为
所以
按上述推导,令k=4r,k=4r+2,k=4r+1,k=4r+3, 如图7所示,为FFT中基-4蝶形单元信号流图。
每一个点都是一个复数对,分为实部和虚部,蝶形图可分解为如图8所示的复数信号流图。其中,
xa′=xa+xb+xc+xd
ya′=ya+yb+yc+yd
xb′=(xa+xb+xc-xd)Cb-(ya-yb-yc+yd)(-Sb)
xb′=(xa+yb-xc-yd)(-Sb)-(ya-xb-yc+xd)(Cb)
xc′=(xa-xb+xc-xd)Cc-(ya-yb+yc-yd)(-Sc)
yc′=(ya-yb+yc-yd)Cc-(xa-xb+xc-yd)(-Sc)
xd′=(xa-xb+xc-xd)Cd-(ya-yb+yc-yd)(-Sd)
xd′=(ya+xb-yc-xd)Cd+(xa-yb-xc+yd)(-Sd)
若以N=64点FFT为例来说明,采用顺序输出,反序输出的FFT流,如图11所示。可以看出,在前几级蝶形运算用到了所有的旋转因子,后几级算法重复的用到了局部的旋转因子。这种很规律的旋转因子,对于大点数的拆分十分有利。
为方便算法分析,介绍FFT中3个概念:
1.级
N点DFT先分成4个N/4点DFT,再是16个N/16点DFT,直至分为N/4个4点DFT。每一次分,称为一“级”;
N点DFT可分为 级。
2.组
如图11所示,每一级的N/4个蝶形单元,可以分成若干组,每一组有着相同的结构及旋转因子分布,如m=0级,分成了16组;m=1,分成4组;m=2级,分成了1组。若为基二算法,第m级的组数是N/2m+1,m=0,1,…,M-1;若为基四算法,则第m级的组数是N/4m+1。
3.码位倒置(digit reverse)
x(n)正常输入,X(K)倒序输出,不再是原来的自然顺序。这是由于将频域的序号按奇偶分开,且基4抽取数据。
对N=64,其自然序号为0,1,2,3,4......
最后输出为0,16,32,48......
写成二进制可看出
输入:x(000000),x(000001),x(000010),x(000011),x(000100)
输出:x(000000),x(010000),x(100000),x(110000),x(000100)
即若N=64=26点,则x=a5a4a3a2a1a0有6位,不足0补齐,码位倒置(digitreverse)步骤为:
x1=a5a4a1a0a3a2
x2=a1a0a3a2a5a4直到每2位都逆序完成。N点需要逆序log4 N次。
然后,对FFT运算存储空间分析
本实施例中,C6416上供用户自由支配的高速存储器有1M-byte,数据与程序共享这段空间。为了保证运算精度,采样A\D变换后输入的信号是12bit复数序列,我们采用16bit字长来存放每个数据。
对于N点复数FFT运算,在片内进行FFT拆分算法时,数据空间需要2部分。由于片内空间限制,一次只能计算一部分数据N1,数据输入和输出占用同一个内存区域4×N1Byte,其中实部虚部各占用2×N1Byte空间;旋转因子需要4×N1Byte,数据区共需要8×N1Byte。考虑到还需要划分一部分内存空间存放程序,且点数满足2的整数倍,因此在DSP503a内,一次最多能够处理的点数最大为:216=65536。
因此在C6416上,一次完全执行的FFT点数最大为:65536。这比采用一般的DSP芯片,一次可以完成FFT的点数大的多。
外部存储器503b的占用:输入数据和输出数据各占用4×N,旋转因子需要4×N,因此共需要片外的资源12×NByte。
本发明中,实现N点输入数据(大点数数据)FFT算法关键在于:
高效的搬移并利用数据,因为每次搬入搬出数据比较耗时。因此在每一级运算中,尽可能多的把相关的数据搬入,能够多进行同级的蝶形运算。同时要使搬移入的数据,能够尽可能多完成多级蝶形运算。所以控制好每次搬入的数据,对于高效流水计算很重要。
在C6416上具体实现时,EDMA601高效搬移数据,采用乒乓算法,与中央处理器603CPU并行工作,可更加高效的计算大点数FFT,实现流水并行运算效果。
以下对本发明的信号处理方法进行详细说明。
本实施例中,数字信号处理器503a所述对输入数据进行处理,包括步骤:
步骤1,进行分级处理;
对N点输入数据逐级进行处理并储存,直到将N点输入数据处理为最大小点数数据;其中,所述最大小点数数据小于等于数字信号处理器所能处理的最大小点数数据;
步骤2,在所述最大小点数数据所在级将N点输入数据划分为 个小组,其中,n表示小组的数量;A表示最大小点数数据;N表示输入数据的点数;
步骤3,进行分组处理;
对每组的最大小点数数据逐级进行处理,并将处理后的数据储存于外部处理器中。
在步骤1中,对N点输入数据进行逐级处理并储存中,在每一级处理中采用乒乓算法,对所述N点输入数据所在级的第1至k组数据依次进行处理,其中 包括步骤:
a.所述信号处理器503a将外部存储器503b中的第1组数据和相应的旋转因子搬移到该信号处理器503a的内部存储器602中,由所述信号处理器503a的中央处理器603对第1组数据进行处理;同时,将所述外部存储器503b中的第1组数据和相应的旋转因子搬移入所述内部存储器602中;
b.所述第1组数据处理完毕后,被搬移回到所述外部存储器503b中;
c.当所述第2组数据被完全搬移完成后,由所述中央处理器603对所述第2组数据进行处理;
d.在将处理完的所述第1组数据完全搬移回所述外部存储器503b后,启动第3组数据和相应旋转因子的搬移;
e.重复步骤a至步骤d,直至处理完第k组数据。
搬移所述第1组数据、第2组数据、……、或者第k组数据是从外部存储器中存储的数据中的2m个等间隔之处顺序搬移。
处理后的所述第1组数据、第2组数据、……、或者第k组数据被搬移到所述外部存储器中第1组数据、第2组数据、……、或者第k组数据的原存放之处。
对所述第1组数据、第2组数据、……、或者第k组数据处理时,采用动态溢出控制。
在步骤3中,对每组的最大小点数数据逐级进行处理并储存于外部处理器503b,包括步骤:
将每组的最大点数数据和相应的旋转因子搬移至信号处理器503a的中央处理器603,从所述最大小点数数据所在级至M级逐级进行处理;
在第M级处理完毕后,将处理后的数据进行整序,然后将整序后的数据输出至外部存储器进行储存。其中,采用逆序算法进行整序。
本实施例中,以N=222、按频率抽取基-4FFT对本发明进行说明。
输入数据为N=222=4194304=4M大点数数据,级M=11,蝶形单元为220个。
旋转因子按每一级所需生成,其中,旋转因子可采用现有的任意一种方法生成并被获取,依次顺序存放在片外存储器503b上,方便调用。所有的数据,每一个复数点,实部在前,虚部紧随其后。
外部存储器503b:输入数据X[2N],输出数据Y[2N],旋转因子W[2N]。
内部存储器602:x[2N4],w[2N4]。
1个蝶形单元需要4个特定数据参与,为了使搬移的数据能够高效计算,每一小组数据取法:每一组的数据由外部存储器503b输入数组中4个等间隔地方顺序存取N5(N5×4=N4)个点所得。每组算完一次蝶形运算后,只须把结果按原位搬移到片外。当下次搬移新的旋转因子时,会自动冲掉内存中上一大组的旋转因子。每一级的参数设置不同。
由上述分析可知,在信号处理器DSP503a内,最大实现的小点FFT数为216=65536=64k。为达到高效利用CPU,采用乒乓算法,且符合基-4FFT算法对点数的要求。
以下令N1=222,N2=220,N3=218,N4=216,N5=214,其中本实施例中取N5为最大小点数。
如图10、12所示,该数字信号处理方法包括步骤:
步骤1,进行分级运算;
此时,需要进行4级独立蝶形运算,才可划为小点数运算。
前4级蝶形运算,具有256组,各组完成一级运算后再进行下一级运算。
具体如下:
第一级:分成1个大组,每组N1个复数点,N2个蝶形单元,每个蝶形单元旋转因子都不同。每个蝶形单元的4个输入数据间隔N2个复数点。第一组蝶形单元的旋转因子从外部存储器503bw[0]开始搬移,取个值,此后依次累加。蝶形运算完后,再把结果存放到外部存储器503b原处。
第二级:分成4大组,每组N2个复数点,N3个蝶形单元,同组内每个蝶形单元旋转因子都不同。但是每个大组所用的旋转因子都是相同的。一个组内的蝶形单元的4个输入数据间隔N3个点。旋转因子从外部存储器503bW[6N2]处顺次取复数点。但每计算N3个蝶形单元后,及计算完一组后,需再次从外部存储器503bW[6N2]处取依次取旋转因子。
第三级:分成16个大组,每组N
3个复数点,N
4个蝶形单元,同组内每个蝶形单元旋转因子都不同。但是每个大组所用的旋转因子都是相同的。一个组内的蝶形单元的4个输入数据间隔N
4个点。旋转因子从外部存储器503b W[6(N
2+N
3)]处顺次取
复数点。但每计算N
4个蝶形单元后,即计算完一组后,需再次从W[6(N
2+N
3)]处取依次取旋转因子。
第四级:分成64个大组,每组N4个复数点,N5个蝶形单元,同组内每个蝶形单元旋转因子都不同。但是每个大组所用的旋转因子都是相同的。一个组内的蝶形单元的4个输入数据间隔N5个点。旋转因子从W[6(N2+N3+N4)]处顺次取复数点。但每计算N5个蝶形单元后,即计算完一组后,需再次从W[6(N2+N3+N4)]处取依次取旋转因子。
由上述可知,不同的点数N,在此部分中需要的级数不同。点数越大,需要的前期拆分级数越多,搬移次数越多。
以下举例说明乒乓算法在分级运算的应用:
步骤a.假定第一组数据和旋转因子已经存入到内部存储器602中从x1[0]至x1[2N5]以及从w1[0]至w1[2N5]单元中,并向CPU603提交中断请求,请求CPU603对这部分的数据进行处理;
步骤b.同时EDMA601把第二组数据和旋转因子从外部存储器503b的输入数组X[2N]中搬入到内部存储器602中从x2[0]至x2[2N5]以及从w2[0]至w2[2N5]单元中;
步骤c.当存储在内部存储器602中从x1[0]至x 1[2N5]以及从w1[0]至w1[2N5]单元中的数据和旋转因子已经被CPU603处理完成,此时提交中断请求,由EDMA601把存储在内部存储器602中从x1[0]至x1[2N5]单元的数据搬移到外部存储器503b的输入数组X[2N]的原存放位置;
步骤d.当第二组数据和旋转因子已经完成搬移到内部存储器602中从x2[0]至x2[2N5]以及从w2[0]至w2[2N5]单元中,提交中断请求,请求CPU603对这部分的数据进行处理;
步骤e.当步骤c完成,即EDMA601完成把存储在内部存储器602中从x1[0]至x1[2N5]单元的数据搬移到外部存储器503b的输入数组X[2N]的原存放位置,启动第三组数据和旋转因子的搬移,从外部存储器503b的输入数组X[2N]中搬入到内部存储器602中从x1[0]至x1[2N5]以及从w1[0]至w1[2N5]单元中;
步骤f.重复步骤a至步骤e,直到本级所有组数据完成上述数据处理。
步骤2,N点复数需划分成256(256=N/A)个小组。
步骤3,进行分组运算;
对256个组中的每一组从5~11级逐级进行处理,在第11级完成时将处理后的输出数据进行整序,然后将整序后的数据输出至外部存储器503b进行储存。其中,采用逆序算法进行整序。
此时,N点数据已经分到了可以片内计算的最大小点数N5。
这个时候可以划成256个N5点FFT。
把数据整块的搬入信号处理器503a,每一小组完成第5级到第11级的计算后,再搬出。这时每组的旋转因子都相同,第一次搬入后,就不用再重复搬入。
通过EDMA,从外部存储器503b的输入X[0]开始,依次的搬移2N5点数的数据到内部存储器602x1[2N5],x2[2N5],第5级需要搬移旋转因子从W[6(N2+N3+N4+N5)]搬移2N5个点到w1[2N5]。因为此时每组所用的旋转因子都相同,第一次搬入此后每级所需要的旋转因子后,就不用再重复搬入。
每组的最后一级需要按照把结果从片内L2Cache按原位序的方式存储到片外SDRAM的输入Y[2N]。
把输出数据Y[2N]分为4个均等部分Y0,Y1,Y2,Y3。每一组在最后一级的时候,按到位序算法(码位倒置),算出每个蝶形,第一个输入对应的输出位置a,依次把4个输出分别存放到Y0[a],Y[N/2+a]1,Y2[N+a],Y3[3N/4+a]。
上述实施例中,在进行定点FFT运算时,可能发生“溢出”现象。本实施例中采用定点溢出控制中的动态压缩方式。
FFT中,一级一级计算整个序列时,序列中数值的模一般要增加,因此必须行定点溢出控制。通常溢出控制有3类方法。
1.输入控制:在计算FFT前,把输入数据按一定比例缩小,保证中间和最后的结果不会溢出。这种方法十分快捷,但是因为在一开始,就需要有比较大的右移,尤其对于点数比较大时需要右移位数很多,因此精度很低。甚至对于大点数,根本就无法通过这种方法实现。输入控制比较适合点数很小的FFT。
2.静态压缩:在FFT计算的每一级后,把输出固定右移N位,使之在下一级的计算中不会有溢出。这种方法实现简便,每一级固定,但是精度丢失很大。因为要考虑整个流程中不会有溢出,因此固定右移N位不可能很小。这个适用于点数不是很小也不是很大的点数,一般能够片内实现FFT的点数都可以。
3.动态压缩:在FFT每一级后,对于输出进行分析,是否需要右移,和右移多少位。因为每次都根据输出判断是否需要右移,并且右移最小的位数保证没有溢出。这种动态调整可以使FFT保持比较高的精度。这个算法适用于大点数。
具体实现时,可以把输入设置成Q.12格式,即除了符号位,有3个保护位,保证下一级蝶形运算不会有溢出。Q.12也符合现在通用的A/D芯片采集的信号,具备合理性。
在每一级后检查bit增长使数据是否超过了12位,并记录本次的最大位数Maxbit,再把所有的输出右移(Maxbit-12)位。最后一级时,就不用再检查。当然在系统中如果还有相关的FFT或者IFFT则需要检查压缩控制。
此外,在步骤3中分成不同组(上例中分成256组)完成最后部分的小点数FFT计算。由于每部分不同的数据输入大小,不可能保证每一级每一小组都有相同的缩小位数。因此计数累加每一小组的总右移位数,在最后整序后,再把每个小组的数据按相差的右移位数来调整。
如图5所示,当采用上述方法对输入数据进行处理后,可对处理后的输出数据在终端506进行终端显示、在目标识别单元505进行目标识别、以及在频谱分析单元504进行频谱分析。
在频谱分析中,很多时候不是需要每个频谱分量。对于一些特殊的情况,只是需要查找最大的频谱分量,这样算法还可以简化。搜寻每一组中最大的频谱分量,最后把各组最大值调整到相同的右移位数,再搜寻整个大点数FFT的最大频率。
现有技术中,实现大数据量FFT如果采用并行处理器,成本高、设计周期长、并行算法复杂、处理板卡也过于庞大,不适用于特殊要求设计规模小巧的场合。如果采用浮点DSP,数据点数受限制,且浮点处理器,运算速度不够快,且winograd算法,拆分数据很复杂。
通过本发明,采用单片DSP完成大点数的设计,成本降低;单片DSP系统,电路板小巧,相应的产品小巧,并且可用性强;简化硬件设计,单片DSP的设计,缩短开发周期;采用定点处理器,能够高效计算更大的点数;充分利用TI C64系列特有的扩展的直接存储器存取控制器(EDMA:Enhanced DMAController),实现对片外存储器的高效访问;简化算法,FFT点数易于扩展,易升级;由于算法特性,易于分析FFT计算后的频谱,易找到频谱中的最大峰值。
上述实施例仅用于说明本发明,而非用于限定本发明。