基于PKTDMA的FFTC输出去除直流载波和输出分段移位的数据
处理方法
技术领域
本发明涉及通信技术领域,具体涉及一种基于PKTDMA的FFTC输出去除直流载波和输出分段移位的数据处理方法。
背景技术
随着计算机技术的发展,DFT(Discrete Fourier Transform,离散傅里叶变换)的出现使得傅里叶变换在工程中进入实际应用阶段。信号的相关、滤波、频谱估计等都可以通过DFT来实现,但实际系统实现时必须减少它的运算量,才能在工程计算中具有实用价值。所以FFT(Fast Fourier Transform,快速傅里叶变换)的出现提高了它的实用价值,使得FFT在移动通信各领域具有广泛的应用。而在通信领域,移动通信系统中普遍使用的DSP芯片都具备丰富的外设资源,FFT作为数字信号处理的关键技术,被各类DSP芯片集成到外部加速器中并作为DSP芯片内的外设资源使用,通过使用加速器,能减少CPU(CentralProcessUnit,中央处理单元)的计算处理时间,提升系统的并行处理能力。目前LTE在全球也得到大范围的商用,而处理LTE系统使用的DSP芯片大多数都集成了FFT加速器处理单元,如何配置好加速器并充分利用外设资源成了提升系统性能的一个重要设计因素。
在现有技术中,根据FFTC的硬件配置,FFTC加速器系统中集成了PKTDMA子模块,在初始化FFTC时需要先初始化PKTDMA,然后再进行FFTC的正常数据处理。FFTC加速器正常的处理数据流程如下:以LTE的20M带宽1200个子载波做2048点FFT为例。LTE通常会有一个直流载波在中间,直流载波的数值为0,导致有效数据组成格式如图2所示,输入有效数据被分为左边600个序列A,右边600个序列B。做完FFT输出后,数据格式如图3所示。直流载波最先输出,然后是序列B的600个值,再者就是插入的847个0序列,最后输出的是序列A的600个值。通常配置接收PKTDMA的接收描述符就是指定一片大小为2048个字的连续内存来存放输出数据,输出数据就按照FFT的输出格式存储。而实际CPU想处理输出的数据期望的内存存放如图4所示。故通常还需要重新分配一块1200个字大小的内存,先将序列A中的600个字内容搬移过去,然后再将序列B中的600个字内容搬移过去,这样就能对这片连续数据进行处理,如图5所示。但这种方法存在2个缺点,缺点1:需要再额外申请一块内存用于存储1200个字大小有效输出数据;缺点2:需要进行数据的搬移,而无论是通过CPU进行内存拷贝还是通过DMA搬移,都需要消耗系统时间和CPU资源或者DMA资源,影响系统的整体性能。
发明内容
针对现有技术中存在的技术问题,本发明的目的是:提供一种基于PKTDMA的FFTC输出去除直流载波和输出分段移位的数据处理方法,能保证FFTC的输出数据不含直流载波和对输出分段移位,这样能把原本输出有效数据不连续的内存段,通过分段移位实现输出有效数据内存段的连续拼接,并去除输出中的直流载波,减少CPU对输出数据额外申请内存进行拼接操作带来的内存和执行时间的开销,进而提升系统的整体性能。
为了达到上述目的,本发明至少采用如下技术方案:
一种基于PKTDMA的FFTC输出去除之列载波和输出分段移位的数据处理方法,其包括以下步骤:
多核Navigator初始化步骤;
收发队列初始化步骤;
FFTC加速器初始化步骤;
准备FFTC的输入数据以及提交FFTC加速器处理,以输出有效数据的步骤,其中接收数据内存为两块,分别命名为缓存1和缓存2。
进一步的,所述两块接收数据内存中,所述缓存1用于存储直流载波和无效的数据,所述缓存2用于存储有效的输出数据。
进一步的,所述准备FFTC的输入数据以及提交FFTC加速器处理,以输出有效数据的步骤中,包括以下步骤:准备FFTC输入数据的步骤;配置接收内存的步骤;配置发送数据,启动FFTC的步骤;以及等待完成处理输出数据的步骤。
进一步的,将所述缓存1的起始地址对应于接收队列的第1个接收描述符,并指定所述描述符的长度,用于接收直流子载波的数据。
进一步的,将所述缓存2中的起始地址偏600个字的地址对应于接收队列中的第2个描述符,并指定该描述符的长度,用于接收B序列,
进一步的,将缓存1偏1个字的地址对应于接收队列中的第3个描述符,并指定该描述符接收数据的长度,用于接收插入的无效数据,最后再将缓存2的地址挂接在第4个描述符上,并指定长度,用于接收A序列。
进一步的,所述收发队列初始化步骤包括:申请接收队列步骤;申请发送队列步骤。
进一步的,所述申请接收队列步骤具体为,根据系统需求绑定每个队列空闲描述符的个数,所述个数至少为4个。
进一步的,所述申请发送队列步骤具体为,根据系统需求绑定每个队列空闲描述符的个数,所述个数至少为1个。
进一步的,所述多核Navigator的初始化步骤具体包括,QMSS子系统的初始化步骤;收发PKTDMA的初始化步骤。
总的说来,本发明至少具有如下优点:
本发明提供的优化配置FFTC加速器的处理数据方法,通过合理配置FFTC加速器中的接收PKTDMA子模块的描述符,能保证FFTC的输出数据不含直流载波和对输出分段移位,从而保证输出的有效数据在内存中的连续性,避免后续处理频域数据时CPU的拼接处理时间以及额外内存消耗,进而提升系统的整体性能。
附图说明
图1是现有技术中1200个子载波加1个位于中心的直流子载波的输入数据格式示意图。
图2是现有技术中正常配置下FFTC输出的数据格式示意图。
图3是现有技术中FFT输出后实际CPU在处理这段数据需要的存放格式示意图。
图4是现有技术中FFTC处理后的搬移方式示意图。
图5是本发明Host描述符与输出缓存之间的映射关系图。
图6是本发明实施例的数据处理流程图。
具体实施方式
下面来对本发明做进一步详细的说明。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清晰、完整的描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提出了一种基于PKTDMA的FFTC输出去除直流载波和输出分段移位的数据处理方法,参见图5及图6,包括如下步骤:
步骤1:多核Navigator初始化步骤,其具体包括,
a.QMSS子系统的初始化,其包括对QMSS的RAM空间进行初始化、描述符内存初始化以及QMSS相关寄存器的初始化等;
b.完成QMSS子系统的初始化之后,完成收发PKTDMA的初始化,其主要完成收发PKTDMA使能,对应收发通道的映射。
步骤2:收发队列的初始化步骤,其具体包括,
a.申请接收队列步骤,其根据系统需求绑定每个队列空闲描述符的个数,做一次FFT提交需要4个接收描述符,所以初始化时最少需要申请4个描述符放入接收队列中;
b.申请发送队列步骤,其根据系统需求绑定每个队列空闲描述符的个数,这里做一次FFT提交需要1个发送描述符,所以初始化时最少需要申请1个描述符放入发送队列中。
步骤3:FFTC加速器初始化步骤,其具体包括,
配置FFTC接收指令集Flow,用于指示接收PKTDMA对接收到数据包后的处理,通过配置接收flow中的目的队列指向接收队列,接收PKTDMA将FFTC硬件引擎处理完的数据按照指定的地址和长度完成数据的搬移。
步骤4:准备FFTC的输入数据以及提交FFTC加速器处理,以输出有效数据的步骤,其具体包括,
a.准备FFTC输入数据步骤,具体的,申请两块接收数据内存,分别命名为缓存1和缓存2,在该实施例中,缓存1的大小为1201个字,缓存2的大小为848个字,缓存1用于存放直流载波和无效的数据,其中直流载波占用1个字,无效的数据占用847个字;缓存2用来存放有效的输出数据;
b.配置接收内存步骤,具体的,从接收队列中依次弹出4个Host描述符,第一个描述符初始化接收缓存地址为缓存1,长度为1个字;第二个描述符初始化接收缓存地址为缓存2加600个字偏移地址,第三个描述符初始化地址为缓存1加1个字偏移地址,长度为847个字;第四个描述符初始化接收缓存地址为缓存2,长度为600个字。然后依次将四个描述符压入至接收队列中,设置压入的方式为新压入的描述符放到队列的尾部,保证第一个描述符优先弹出;
c.配置发送数据,启动FFTC步骤,具体的,从发送队列中弹出1个Host描述符,将FFTC输入数据的地址和长度填入该描述符,然后压入到发送队列触发FFTC处理;
d.待FFTC完成处理后直接读取缓存2中的FFTC输出有效数据进行相关计算即可。
本实施例中申请了两块接收数据内存,充分利用了PKTDMA中接收Host描述符的特点,通过指定接收缓存的位置来实现FFTC输出去除直流载波和输出分段移位的功能,保证了接收数据的连续性,减少CPU拼接处理额外带来的系统开销和内存开销,提升了系统的整体性能,保障了通信系统的实时性。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。