This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

c6670fftc加速器去循环前缀遇到的问题

Hi,在c6670fftc例子工程中,以FFTC_Simple_testProject工程中的test_singlecore.c为例(假设采样点数为16,循环前缀点数为2),先让其做加循环前缀的IFFT,输出结果为18点的数据,现把18点的数据作为FFT的输入,让其做去循环前缀的FFT变换,除了在test_main.c文件中的fftc_parse_testcfg()函数中配置pFFTTestCfg->fftcQCfg.cyclicPrefixRegConfig.bCyclicPrefixRemoveEnablepFFTTestCfg->fftcQCfg.cyclicPrefixRegConfig.cyclicPrefixRemoveNum 外,还需做怎样的修改,才能得到移除循环前缀后的正确结果?我做过一些测试,未得到正确结果,求指教,请给出具体建议?

  • 您好,

    关于cyclicShift只需配置FFTC_QUEUE_X_CYCLIC_PREFIX_REGISTER中的位段。

    1. 如果是加循环前缀,配置cyclic_prefix_addition为相应的循环前缀点数即可;

    2. 如果去除循环前缀,则需要配置cyclic_prefix_remove_en为1使能,同时配置cyclic_prefix_remove_offset,即对应你提到的上述两个位段即可。但是注意cyclic_prefix_remove_offset的含义如下,所以cyclic_prefix_remove_offset应该配成0.

    3. 如果说FFTC结果错误,循环前缀参数只是一部分,还有其他的参数也会影响到您的测试结果,请依次参考userguide进行确认。

    建议在跑例程的过程中能根据需要仔细阅读相关的文档,如果对文档中描述有所不清楚,可以提出来我们一起讨论,这样的话我们交流的效率会更高。谢谢!

  • 您好,

    很抱歉,对于以上资料以前在做去循环前缀测试时,也看过这段文档,当时理解不深刻(我一人做6670硬件加速器,很少有人讨论,理解不全面),感觉介绍的相关文档不多且没有去cp的相关例程。

    1.对于你说的cyclic_prefix_remove_offset是否是fftcQCfg.cyclicPrefixRegConfig.cyclicPrefixRemoveNum ?我理解的是fftcQCfg.cyclicPrefixRegConfig.cyclicPrefixRemoveNum 相当于上图的k,至于Remove Offset=p,我以前认为它是默认为p=0的情况,即第一种情况,对于第二种情况理解不深刻,不知在什么情况下用到上图第二种配置?你说的cyclic_prefix_remove_offset配为0,是上图的remove_offset=0吗?

    2.去循环前缀是否应该理解为配置好相关参数后,在Packet  DMA 搬移数据时会自动拿掉前面的cp,而不用送到引擎做FFT变换,还有一种是在每个block数据来时,通过软件代码控制其地址偏移拿掉cp不让其送入引擎,这样也能够得到正确结果,但相关配置没能全部用起来,是否第二种不妥?

  • 您好,

    1. 关于上图提到的cyclic_prefix_remove_offset具体与代码中哪个参数对应,可以跟到代码内部查看一下细节。对于你的测试情况p应该是0;

    2. FFTC会帮你做去cyclic prefix,所以对于你的测试输入18个采样点,配置去除cyclic prefix后只有16点用来做FFT,不需要pktDMA的配置去关注去前缀。

  • 您好,

       我在使用C6670 FFTC 去循环前缀时,要对256+20点的数据去掉20点cp,在配置中bCyclicPrefixRemoveEnable设置为1,cyclicPrefixRemoveNum 配置为0,当经过处理后,结果不正确。

       从figure2-5中看到,去cp与packet size有关,但是在FFTC的example中没有此参数的设置,那么请问在去cp时FFT engine是如何知道到底需要去除多少点的CP呢?还是说,不用告诉FFT engine packet size,它会根据送入的全部数据长度和配置的做FFT的点数自己会计算出需要去除的cp点数?

       非常感谢!

  • cyclic prefix remove有两个参数需要配置,一个是enable及offset,其中offset参考上面帖子的解释,通过offset可以告诉FFTC数据的起始位置,FFT的点数在control register中配置,packet size在pktDMA descriptor中配置。

    对于你的case如果cp点数20在前面,则offset配置为0,如果在最后,则配置为20. 当然FFTC结果不对,跟其他配置也有关系,如FFTC中使用了动态或者静态因子调整,如果仿真链路的实现方式与FFTC的内部实现不一样则可能得到的结果与FFTC的输出存在整数倍的幅度关系。建议先确认FFTC的5个寄存器配置正确,然后看看输出数据与比对数据是否存在倍数关系。

  • 文档上说,若加入循环前缀去除操作,一个packet只能处理一个block,但是这种方法会大大降低FFT的处理速度,请问有什么好的办法吗?

    另外又没有关于6670上FFTC吞吐量测试的例子啊?我测试的结果同官方结果出入太大。

  • 告诉你FFT engine packet size,它会根据送入的全部数据长度和配置的做FFT的点数自己会计算出需要去除的cp点数。