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.

c6670中FFTC加速器做IFFT是结果出错?

Andy Yin老师你好,

在c6670上,根据TI提供的FFTC_MultiInst_testProject工程,经测试做FFT,结果没问题,现想在FFT和IFFT做简单回环,经我修改,想用来做IFFT,跑了一下结果不正确?不知问题出在哪儿?具体做了以下修改:

1.在test_main.c文件中,552-555行代码表示可以选择进行FFT或IFFT。所以我修改了fftc_testcfg_16.h文件中133行,把0该为了1,使其选择IFFT模式。

2..在fftc_testcfg_16.h文件中,把以前的输入改为了期望结果输出,把期望结果作为了输入。(以前的顺序是做FFT的数据顺序)

我做了以上两点修改,请问是修改不正确还是需要做其他方面修改?请给出具体意见,谢谢!

  • wenzheng liu您好,

    请不要称呼老师~!

    修改是没问题,请你确认几点:

    1. 你的输入输出是哪里来的,是直接把例程中的输入输出交换么?

    2. 比对一下IFFT输出结果与期望结果的差异,如果是相差固定倍数关系的话,需要调节FFTC中的scaling factor使IFFT输出与期望结果达到一致。

    谢谢。

  • Andy Yin你好,

    1.我的输入输出是原来例子中得数据,即在fftc_testcfg_16.h文件中把输入和输出直接交换的。

    2,经比对,输出结果与期望结果相差2倍关系,这需要怎样具体调节scaling factor(针对做16点IFFT关系)?如果是1024点得IFFT,它们之间是否也是2倍关系呢?

  • wenzheng liu你好,

    输出数据的倍数关系与最终每一级的scaling factor总和有关,请参考FFTC userguide中关于scaling factor的配置。

    而最终输出的scaling factor因子与输入数据及点数有关,所以倍数关系不是确定的。

    目前例程使用的是动态scaling,可以根据最终输出的scaling因子参考如下公式得到倍数关系。

    FFTC_Scaling_factor = 2^(-S) * sqrt(N) * outputScaling;

    其中S为根据根据FFTC user guide中4.1.1 block Exponent公式得到;

    N为FFT点数;outputScaling参考fingure2-3.

    如有必要,建议先仔细阅读一下FFTC userguide关于scaling factor,然后可以先测static scaling,再测dynamic scaling。请参考!

  • Andy Yin你好,

    根据你的建议,我下去在去看了FFTC userguide的文档,对scaling factor这块文档理解还是不明白,在具体的FFTC实例中,是否可以通过调整某个参数得到一个正确回环结果(把输入的数据先通过FFT得到一结果,然后再把结果给输入做IFFT,最后使得输出和最先的输入数据一样,彼此间没有倍数关系)?

  • wenzheng liu你好,

    最终输出结果与实际数据存在相应的倍数关系,倍数因子参考如下公式。

    FFTC_Scaling_factor = 2^(-S) * sqrt(N) * outputScaling;

    其中S为根据根据FFTC user guide中4.1.1 block Exponent公式得到;

    N为FFT点数;outputScaling参考fingure2-3.

    目前例程中采用的是动态scaling方式,如果想测试回环的话,建议配置为静态scaling,Scaling0配置为3,output scaling配置为1/sqrt(N) * 128,其他因子均配为0,试试看。

  • Andy Yin你好,

    对于c6670的FFTC模块,有两个问题不明白,如下:

    1.关于FFT/IFFT scaling factor问题,下去后我仔细看了FFTC的使用文档,同时参考你提供的公式:FFTC_Scaling_factor = 2^(-S) * sqrt(N) * outputScaling~~~~~~~~~~~~~~~*,

    已基本理解scaling问题,但是有一点不明白:S为根据公式SUM (si) + sout– 3 + (LTE_FREQ_EN * SLTE)得到,其中,si= 0 to NUM_STAGES -1       LTE_FREQ_EN =   0   if LTE frequency shift disabled    1   if LTE frequency shift enabled。参考fingure2-3,我理解的是在计算S时,已经把outputScaling考虑进去了,即上面公式的-3是(-6-7+10)得到,其中的-7是根据(2^7=128)得到。这里不理解公式*为什么还要乘outputScaling(128)。?

    2.在FFTC的实例工程中可以通过设置CyclicPrefixRegConfig寄存器去添加/移出循环前缀,经我测试,添加循环前缀没有问题,但是如何移出循环前缀,在工程中没有找到具体的代码实现和设置,如果想用FFTC移出循环前缀,要怎样修改/添加代码?

  • wenzheng liu您好,

    1. outputscaling不是128,而是实际配置对应的浮点值,取值为[0,1];

    2. cyclicPrefixRegConfig结构体后两个参数就是用来配置removeCyclicPrefix,只是在例程中没有测试,你只要根据需要配置即可。

  • Andy Yin你好,

    上面的第一个问题经你提醒,我已完全理解,非常感谢你。

    对于移出循环前缀的问题,在cyclicPrefixRegConfig结构体中,我找到了移动循环前缀的两个参数,因没有相关配置的测试代码参考,在FFTC_Simple_testProject工程中,能否对移除循环前缀的具体操作说的更具体一些?谢谢!

  • wenzheng liu您好,

    参考例程中的说明及FFTC userguide即可知。