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.

[参考译文] TMS320C5535:HWAFT 和32位 FFT

Guru**** 2548370 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/614860/tms320c5535-hwafft-and-32-bit-ffts

器件型号:TMS320C5535

我正在开发一款新的音频产品、我们希望使用 C5515系列 DSP 上的 HWAFT 硬件。

但是、我发现缩放选项使得 FFT 输出的 S/N 比很差。 这似乎是由于 FFT 增加了数据的动态范围。 IE 如果您输入满量程16位数据、FFT 将溢出、导致损坏。 为了避免这种情况、可以为每个处理阶段将蝶形输出除以2。 但是、对于我的1024点 FFT、这会导致30dB 的额外噪声、从而破坏 S/N

为了克服这一问题、我尝试使用 DSP-LIB 中提供的32位 FFT。 这工作得非常好。 但是、执行速度相对较慢。

那么、我的问题是:是否可以使用 HWAFT 硬件来加速32位 FFT?  

任何建议都非常感谢!!

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

    我已将此内容转发给 C55x FFT 专家。 他们的反馈应发布在此处。

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

    很好。 非常感谢!

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

    你好 ,Tsvetolin,在这方面有什么进展? 非常感谢您对此提供的支持。

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

    我将向专家发出邀请。

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

    尊敬的 John:

    很抱歉耽误你的时间。

    HWAFT 当然可以缩短仅在 CPU 内核上执行的任何 FFT 计算(即 DSPLIB)的执行时间。
    CPU 和 HWAFT 加速器均可用于(非并行)计算 FFT。 例如、您可以通过将其分解为在 HWAFFT 上运行的多个32点 FFT 来计算1024点 FFT。 这种方法在 FFT 大于1024点的情况下更为常见、因为1024点是 HWAFT 可以计算的最大 FFT。

    32位32点(编辑) FFT 的 HWAFT 实现使用两个双级和一个单级计算。
    如果每个阶段后的简单二分频缩放不充分、您可以在各个阶段之间添加自己的动态缩放代码。 这将需要扫描数据数组以查看是否需要缩放、并且仅在必要时进行缩放、同时跟踪应用的缩放。 在一些战略位置、动态扩展可能很有意义... 为了增加粒度、可以重新写入 FFT 以使用所有或更多单级、而不是背靠背双级。

    扫描数组是一个计算成本高昂的例程、因此选择了二分频缩放(SNR 的计算折衷)。
    修改 HWAFT 代码的一个缺点是它将不再从 ROM 中执行。 而修改后的代码却耗尽了 RAM、但并不庞大。

    或者、您可以按 FFT_length 对输入信号进行预分频、并禁用缩放以确保其不会溢出。 这也会影响 C5000等定点处理器上的 SNR。 最终决定扩展取决于对输入信号的了解...

    如果您愿意、我可以让您联系第三方、该第三方已使用动态调节修改了 HWAFT。

    在此处查找代码: http://www.ti.com/lit/an/sprabb6b/sprabb6b.zip
    我确信您已经阅读了 HWAFT 应用手册(或 TRM 章节): http://www.ti.com/lit/an/sprabb6b/sprabb6b.pdf

    希望这对您有所帮助、
    标记

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

    Mark、您好!

    感谢您的回答。 您提到了'32 FFT..."的 HWAFFT 实现。 但据我所知,这项建议并没有落实,而在《附注》中,当然没有提及。

    我想您可能对32点(/bin) FFT 感到困惑?

    我对32位 FFT 感兴趣。 也就是说、我希望 FFT 结果具有32位分辨率(如果包含虚部、则为64位)、而不是通常的16位分辨率。DSPLIB 在函数 cfft32_NOSCALE 中实现了这一点。 此功能工作良好、但速度非常慢。 是否可以使用 HWAFT 加快此速度?

    非常感谢您的帮助!

    最好

    John

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

    是的-我指的是32点(或32二进制)、而不是32位。 很抱歉造成混淆。

    HWAFT 不能接受大于16位实部和16位虚部的数据输入或宽度。

    我试图找到一些诀窍来允许它、但无法实现。

    32位数据类型用于蝶形计算中的中间乘法输出、但数据在加法后舍入到16位。

    我认为您最好的机会是使用16位 HWAFT 进行智能动态调节、检查数据是否已超过阈值、并在必要时进行调节。

    您的应用程序是否具有低功耗? 如果不是、请考虑使用浮点处理器或具有更高时钟频率的处理器、如 C6000。 C55xx 是本机16位机器、因此计算32位数字可能很慢。

    DSPLIB 已经是手动优化的汇编语言、但可能值得尝试通过正确的存储器放置来进一步优化-请确保您正在利用 DARAM、在那里、指令可以利用它。

    希望这对您有所帮助、
    标记
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Mark,不是我所希望的,但对确认这一点很有帮助!

    最好

    John