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.

[参考译文] RTOS/XTCIEVMK2LX:FFT 限制的输入长度

Guru**** 2551110 points
Other Parts Discussed in Thread: FFTLIB

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/595015/rtos-xtcievmk2lx-input-length-of-fft-limitation

器件型号:XTCIEVMK2LX

工具/软件:TI-RTOS

各位专家、您好。

这与我之前 的问题有关 、我刚想到。 ;)根据文档,FFT 函数 DSPF_sp_fftSPXSP()的输入长度限制为  131072.有没有特殊原因? 硬件限制? 或其他原因? 我需要知道这一点、因为我计划使用该函数实施自己的 FFT 函数、或修改它以满足我的目的(输入长度非常长)、如上一个答案中所建议的那样。 如果输入长度比库函数提供的长度长得多存在任何关键问题、我需要重新考虑我的计划。

非常感谢!

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

    RTOS 团队已收到通知。 他们的反馈将直接发布在此处。

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

    您好!


    我不熟悉此函数(DSPF_sp_fftSPXSP())。  也许您的意思是 DSPLIB 中的 DSP_fft32x32()行的内容。  但这些是实现 FFT/iFFT 的软件函数。  您是否已调查 K2L 中的两个硬件 FFTC 块?  它们只需向它们发送 QMSS/pktDMA 描述符即可执行高达8192point FFT/iFFT。

    FFTC 用户指南可在此处找到:  

    数据表如下所示:

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

    您好!

    感谢您的关注。 我不太确定"输入长度"和"点"之间的差异、但我有大约20M 长度的数据到 FFT、而 DSPLIB 的 FFT 软件实现的输入长度限制高达 131072、仅为0.13M。 您提到的硬件 FFT 能够执行高达8192点的 FFT、在本例中、我可以使用 HW FFTC 块吗? 如果"输入长度"和"点"是指相同的东西、那么我认为我不能。

    谢谢! )

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    通常情况下、FFT 在特定数量的数据上运行、无论是实数据点还是复数据点、通常为2的幂。 通常情况下、FFT 大小为256点、512点、1024点等。 每个点都是实数或复数值、通常为32位、但有时为16甚至8位。 因此、数据长度通常是点数的4倍-例如、2048点 FFT 将具有8KB 的输入数据。 K2L FFTC 硬件加速器可处理高达8192点 FFT。 如果您需要更大的 FFT、则需要通过软件执行该操作、或者确定是否可以多次调用 FFTC 并将结果缝合在一起。 从您的描述中、不清楚您实际需要的 FFT 大小。

    DSPLIB 的128KB (131072)限制似乎是汇编语言限制、以实现快速优化的循环展开。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    一旦单片 FFT 的工作集太大而无法放入高速缓存、性能就会急剧下降。 对于 C66x 器件、L2高速缓存以1 MB 的速度最高、对于复数浮点 FFT、它可以输出到128K 的输入或输出点以及128K 的分宽因子。 (某些具有 C66x 内核的 SoC 具有较少的 L2高速缓存、这意味着它们应限制自身使用 N=64K 甚至更少的单片 FFT。)

    TI 的 FFTLIB 支持更大的 FFT。 它将整个 FFT 分成更小的块、并使用硬件 DMA 引擎在 DSP 内核处理其中一个块时传输数据、甚至可以在多个内核之间拆分 FFT 工作负载。 在您编写自己的 FFT 函数之前、非常值得一看。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回答 db_Woodall。

    那么、您意味着输入长度是以字节为单位的输入数据的总长度、您不是? 假设我在浮点数据类型中有两点、那么长度是2 X 4字节= 8字节? 如果我在浮点数据上使用8192点 FFT、那么输入数据长度高达32KB?

    在 DSPLIB 的 API 引用中, DSPF_sp_fftSPxSP()的说明如下:

    ----------------------------------------

    void DSPF_sp_fftSPxSP (int N、 float * ptr_x、 float * ptr_w、 float * ptr_y、 unsigned char * bev、int n_min、 int offset、 int n_max)  

    参数:
    -复数采样中 FFT 的 N 长度
    - PTR_x 指向复杂数据输入的指针
    - ptR_w 指向复数 Twiddle 因子的指针
    - ptR_y 指向复数输出数据的指针
    -用于指向包含64个条目的位反向表的 Brev 指针
    -如果 N 可以表示为4的幂、则 n_min 应为4;否则 n_min 应为2
    -从主 FFT 开始的 sub-FFT 复数样本中的偏移指数
    -在复数采样中主 FFT 的 n_max 大小

    算法:
    dspf_sp_fftSPxSP_cn.c 是经优化的线性汇编代码的自然 C 等效项、没有任何限制。 请注意、线性汇编代码已经过优化、可能会有限制。

    假设:
    N 需要是2的幂
    -对于线性汇编实现、8 <= N <= 131072、32 <= N
    - ptR_x、ptR_w 和 ptR_y 指向的阵列不应重叠
    -由 PTR_x、PTR_w 和 PTR_y 指向的阵列应在双字边界上对齐

    实施说明:
    -可中断性:代码是可中断但不可中断的。
    -端字节序支持:代码支持大端字节序和小端字节序模式。

    ----------------------------------------

    参数 N 是说明中 FFT 的长度。 不过、在 DSPLIB 的示例工程中、N 似乎用作数点、FFT_SP_Example_66_LE_ELF (FFT_Example_sp.c)如下所示:

    /*需要计算 FFT 的样本数*/
    #define N 256...
    
    
    
    /*对齐我们必须使用的表*/
    #pragma DATA_ALIGN (x_ref、8);
    float x_ref [2*N];
    
    #pragma DATA_ALIGN (x_sp、8);
    float x_sp [2*N];
    #pragma DATA_ALIGN (y_sp、8);
    float y_sp [2*N];
    #pragma DATA_ALIGN (w_sp、 8);
    float w_sp [2*N];
    
    ...
    
    void main (){
    /*生成输入数据*/
    generateInput (NUM_SIN_Waves);
    
    /* Genarate Twiddle Factors */
    gen_twidle_FFT_sp (w_sp、N);
    
    /*调用 FFT 例程*/
    dspf_sp_fftSPxSP (N、x_sp、w_sp、y_sp、brev、 4、0、N);
    
    /*调用测试代码以分离实数和虚数数据*/
    独立 RealImg ();
    } 

    输入/输出数组 x_sp、w_sp 和 y_sp 具有2*N 值,因为实值和虚值是交错的。 因此、我们可以说它是 N 点数据。 在本例中、输入长度似乎是指点的数量、而不是文档以字节为单位的总数据大小。 换句话说,DSPF_sp_fftSPxSP()的输入长度限制为131072点,即131072 * 4字节=总共512KB。

    我认为 FFTC 上下文中的点数和软件 FFT 上下文中的输入长度表示相同的东西。  我的猜测是对的吗?

    总之、我可以从您的回答中获得一些感受。 非常感谢! )

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您给我深入了解内部信息! )
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果没有其他内容、我们关闭这个 TT。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于 DSPLIB 函数的输入长度限制(8 <= N <= 131072)是否表示点数或以字节为单位的总大小、仍然很模糊、但无论如何、我认为我可以通过一些自我实验来确定、所以、是的、让我们关闭这个 TT! ;)

    非常感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    N 是点数、而不是字节数。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的确保! 现在很清楚。 )