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.

[参考译文] CCS/LAUNCHXL-F28379D:F28379D 上的 CFFT

Guru**** 2529560 points
Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/687566/ccs-launchxl-f28379d-cfft-on-f28379d

器件型号:LAUNCHXL-F28379D
主题中讨论的其他器件:C2000WARE

工具/软件:Code Composer Studio

尊敬的同事:

我参考 F28379D 的示例程序编写了一个 FFT 操作、其 FFT 大小为2048。

断点之前的程序运行时没有任何问题。但是当程序运行 “CFFT_F32 (HND_CFFT)"时,它不会继续并报告错误。

此库函数是否可以执行2048 FFT 操作?

我不知道发生了什么、但一天之后、程序就可以运行了。

但是、FFT 的结果似乎不正确。

此致、

Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Hao:

    根据"Fpu_CFFT.h"头文件第66-67行中的注释、FFT 大小似乎被限制为2^10 = 1024:

    //! 此例程为 N-pt 计算32位浮点 FFT
    //! (\f$ N = 2^{n}、n = 5:10\f$)复数输入。

    我将与库作者进行检查并确认。

    此致、

    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Hao:

    作者认为、由于您在运行时生成 Twiddle 因子、因此您应该能够执行2048 pt FFT。 CFFT_F32算法应仅迭代编程的级数、在本例中为12级。 唯一需要注意的是、在链接器命令文件中将输入缓冲区与4N 边界对齐、从而与8192字边界对齐。

    您收到了什么错误消息?

    此致、

    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Hao、

    输入缓冲区大小必须是 FFT 大小的4倍。 由于您使用的是2048点 FFT,因此输入缓冲区大小必须为4*2048;

    我可以在您所附的图片中看到、输入缓冲区大小为4096、这是预期大小的一半。

    现在、 在链接器命令文件中、您还需要将"CFFT_alignment"宏更改为  

    --define CFFT_alignment=8192 

     如需更多信息、请查看~\c2000\C2000Ware_1_00_XX_00\libraries\DSP\FPU\c28\docs\FPU_SW_LIB_UG.pdf 中的第25页

    我想在这里强调的另一点是、如果您使用内置的 Twiddle 因子表而不是计算 Twiddle 表、您的 CFFT 将得到更优化。 为此、您必须将 FFT 大小限制为1024。  

    请告诉我这是否能解决您的问题、或者您有任何其他疑问。

    - Ritvik

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Richard、
    错误不再出现。 我认为这可能是意外的。 计算错误的原因是我没有将输入缓冲器与4N 边界对齐。
    感谢你的帮助!
    此致、
    Hao
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ritvik:

    感谢你的帮助!

    我通过将输入缓冲器与4N 边界(您提供的代码)对齐来解决该问题。

    您是否意味着使用内置的 Twiddle 因子表而不是下面的代码?

    CFFT_F32_SINCOSTable (HND_CFFT); 

    在哪里可以找到 内置的 Twiddle 因子表? 我在示例项目中找不到它。

    此致、

    Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Hao、

    要使用这些表、必须先将 FFT 限制为1024点。 然后替换以下代码段:

    HND_CFFT->CoefPtr = CFFTF32Coef;
    使用
    HND_CFFT->CoefPtr = CFFT_F32_TwidleFactors; 

    CFFT_F32 (HND_CFFT);
    使用
    CFFT_f32t (HND_CFFT); 

     您可以在以下位置找到完整示例:~\c2000Ware_1_00_XX_00\libraries\DSP\FPU\c28\examples\FFT\2837x_CFFT

    -Ritvik

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ritvik、

    非常感谢、我想我了解 如何做到这一点。

    此致、

    Hao