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.

[参考译文] TMS320F28377D:FFT 问题

Guru**** 2609265 points
Other Parts Discussed in Thread: C2000WARE, TMS320F28377D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/673097/tms320f28377d-fft-issue

器件型号:TMS320F28377D
主题中讨论的其他器件:C2000WARE

您好!

目前我正在处理28377d。 我的问题是我正在使用16位 ADC 来收集 I 和 Q 样本、并为其执行 FFT。(定制板)我能够收集 ADC 数据、即512 个样本(256个 I 样本和256个 Q 样本)。这是通过 DMA 实现的。 将样本收集到 DMA 缓冲区后、当我尝试分配到 FFT 缓冲区数据时、数据不会更新、并且缓冲区中显示的每一个(0.0所有样本)。数据不会更新到 FFT 缓冲区。请解决我的问题。

1.it 是256点 FFT

将2.256 I 和256 Q 收集到512 FFT 缓冲器中

环路时间为500微秒、其中第一个400微秒用于通过 DMA 收集 ADC。

4.Finally FFT output buffer all showing +INF、+INF、+INF、+INF…… 就像这样。

基本数据不会更新到 FFT 输入缓冲器中。

谢谢、此致、

Bharadwaj V

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

    我不确定我是否理解您的问题发生的时间点。

    使用 DMA 时、ADC 正在采样、数据未正确将其输入到数据缓冲器中? 是这样吗?

    您是否将 DMA 分配为存储 DMA 缓冲区的存储器部分的主器件?


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

    当我尝试从具有250kHz FFT 的代码内部生成正弦和余弦波形时,正发生适当的峰值和二进制数。现在我通过矢量信号发生器提供 ADC 样本,所有样本都是以+INF、+INF、+INF、+INF e.t.c 的形式出现的...请帮助我解决此问题

    谢谢、此致、
    Bharadwaj V
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的。基本上我使用 DMA 来收集 ADC 样本。在收集 ADC 样本(256)后、DMA 缓冲器将分配给 FFT 缓冲区。这样、从 FFT、相位、magintude 开始就会发生。现在一切都是无限的。(+INF、+INF 等)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的意思是 DMA 样本收集正常、在没有发生 FFT 之后、它是16位 ADC
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bharadwaj、
    让我们在这里稍微减慢一点、然后进行处理。 请回答以下问题:

    您的 ADC 代码正在正确采样、DMA 已成功、您的缓冲区正在运行 FFT 算法?
    2、FFT 输出仅提供+INF 值?

    -Mark
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、SIR。ADC 采样正在正常进行、DMA 也会正确收集采样(512个采样)。将数据收集到 DMA 后、相同的数据将传递到 FFT 函数。在没有发生 FFT 时、FFT 输出返回'+INF'值(全部256个)。这就是我所面临的问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bharadwaj、

    好的。 因此、看起来我们可以消除这里的 DMA 和 ADC 作为问题。 您是否正在使用 TI 提供的示例或库进行 FFT 计算? 这是自定义算法吗?

    我注意到您使用的是 F28377D、操作 CPU 是否可以访问存储缓冲区的存储器部分? 如果这在 CPU2上运行、请确保 CPU2拥有存储器部分的所有权。 或者、如果算法在 CPU1上运行、请确保 CPU2不拥有您希望操作的存储器部分。

    -Mark
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使用的是 TI 提供的 FFT 库、我使用的是 CPU1、但不是 CPU2。 那么、您现在将得出什么结论呢??
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们可以直接为 FFT 提供数字计数吗? 或者我们必须将数字计数转换为电压形式?

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

    我在一些同事中遇到了一些可能能够提供帮助的问题。 这是一周的结束时间、因此您可能在周一之前没有收到回复。

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

    您好、Bhardwaj、

    我希望您参考以下示例!

    {install_dir}\c2000ware\libraries\dsp\FPU\c28\examples\FFT\rfft_adc_f32。

    然后、我希望您确保代码中的以下内容正确:

    1. 您正在将正确的数据段分配给 FFT 输入缓冲器。
    2. FFT 输入缓冲区可访问 DMA 缓冲  区、您可以看到这两个位置具有相同的值集。
    3. 您正在根据输入数量正确定义 FFT_ALIGN。(否则请使用未对齐的代码)

    此外、如果可能、您可以与我们分享一些代码片段、以便我们能够轻松了解代码的流程。

    此致、

    Ritvik

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

    自上次答复以来已经有几天了。 Ritvik 的回复是否有助于解决您的问题?

    谢谢、
    标记
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    先生。 今天、我将分享我的代码流。

    FFT 代码:

    #include "math.h"
    #include "FPU_CFFT.h"
    #define CFFT_STOPENages 8.
    #define CFFT_SIZE 256

    #pragma DATA_SECTION (CFFTin1Buff、"CFFTdata1");
    浮点 CFFTin1Buff [CFFT_SIZE];

    #pragma DATA_SECTION (CFFTin1Buff、"CFFTdata1");
    uint16 DMABuf1 [CFFT_SIZE];

    void main (void)

    CFFT.Coefptr = CFFT32Coef;
    CFFT.Intr = CFFTin1Buff;
    CFFT.Outptr = CFFToutBuff;
    CFFT.Stages = CFFT_Stages;
    CFFT.FFTSize = CFFT_SIZE;

    CFFT_F32_SINCOSTable (&CFFT);

    //清除输入缓冲区:
    for (i=0;i<(CFFT_SIZE * 2);i=i+2)

    CFFTin1Buff [i]= 0.0f;
    CFFTin1Buff [I+1]= 0.0f;
    CFFToutBuff [i]= 0.0f;
    CFFToutBuff [i+1]= 0.0f;

    while (1)

    if (dma_STAT = 1) //通过 DMA 收集 ADC 后,将设置此标志。

    J=0;
    //将第一个 I 样本和下一个 Q 样本复制到 CFFT 缓冲区中。这样 CCFT 缓冲区的第一个索引将是实数部分和第二个索引
    由虚部组成的 CFFT 缓冲区的索引。
    for (i=0;i<(CFFT_SIZE * 2);i=i+2)

    CFFTin1Buff [i]= DMABuf1 [j]; //DMABuF1由 ADC-I 样本组成
    CFFTin1Buff [i+1]= DMABuf2 [j++]; //DMABuf2由 ADC-Q 样本组成

    DMA_STAT = 0;


    CFFT_F32 (&CFFT); //应用 FFT。
    CFFT_F32_MAG (&CFFT); //应用幅度。

    }//end of while (1)
    }//end of main



    现在、在将样本采集到 DMA 缓冲区中、并且应用 FFT 后、所有样本都是无穷大的。(+INF、+INF、+INF、+INF)。
    希望快速响应。
    谢谢、此致、
    Bharadwaj。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉、第二 个#pragma


    #pragma DATA_SECTION (DMAF1、"secure ram0");
    UINT16 DMAF1 [256]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bharadwaj、

    当您的代码对我来说是正确的时、我能否获取您的链接器命令文件和.map 文件来检查内存分配是否正确、以及您是否正确对齐了缓冲区。

    我想让您在这里测试的一点是、您能否运行一次来查看输出是否相同、而不是运行无限循环?

    -Ritvik

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

    我已经听不到您的意见了一周,因此我假设您能够解决您的问题。 如果情况并非如此,请拒绝此解决方案并回复此主题。 如果此主题被锁定、请制作一个描述问题当前状态的新主题。

    Ritvik
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、先生、
    很抱歉耽误了回复时间。我的问题似乎部分得到解决、因为我正在编写内部 sin、cos 生成函数来为外部 ADC 样本执行 FFT。(尽管不需要生成)因为我的 FFT 相关函数链接到这些内部 sin、cos 生成函数 i、e、 链接到数学库。现在获取用于外部 ADC 样本的 FFT……非常感谢您的关注。

    主席先生、现在我还有一个疑问。是否可以通过 CLA 在 TMS320F28377d 上发布 DAC? 无需 CPU 干预??

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

    我很高兴您能够解决您的原始问题!

    请使用新主题创建新主题。 当我们监视新线程并将其路由至相应的主题专家时、这将有助于加快您的查询。 它还有助于保持 e2e 组织良好、并可搜索具有类似问题的人员。

    谢谢!
    标记