主题中讨论的其他部件:FFTLIB
工具/软件:
尊敬的 TI:
我要实施 FFT 算法 在上 C7x DSP 直接连接。 为此、我使用的是中的代码 FFTlib BSL 代码。 但是、在确定可以使用哪些代码来运行 FFT 算法时遇到问题。 根据我的理解、大部分代码仅适用于 针对 FFT 算法配置内核 但它本身不包含 FFT 算法。
有人能告诉我可以使用 TI 提供的哪些文件来满足我的需求吗?
此致、
M é lanie
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.
工具/软件:
尊敬的 TI:
我要实施 FFT 算法 在上 C7x DSP 直接连接。 为此、我使用的是中的代码 FFTlib BSL 代码。 但是、在确定可以使用哪些代码来运行 FFT 算法时遇到问题。 根据我的理解、大部分代码仅适用于 针对 FFT 算法配置内核 但它本身不包含 FFT 算法。
有人能告诉我可以使用 TI 提供的哪些文件来满足我的需求吗?
此致、
M é lanie
但是、仍然存在一些与 d.c 和您的最后一个代码相关的灰色区域。
首先、 numPoints 变量的值代表什么?  
const uint32_t numPoints = 64;
pY = (int16_t *) TI_memalign (64, numPoints * 2 * sizeof (int16_t));
(int16_t *) TI_memalign (64, numPoints * sizeof (int16_t));
此致、
M é lanie
您好 Melanie、
很高兴知道这一点、感谢您的更新。 上述共享代码在 J784S4 EVM 上验证、并可正常工作。
[引述 userid=“647126" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1530231/tda4vm-how-to-run-an-fft-algorithm-on-c7x-with-fftlib/5934220-我想我是以错误的方式声明 1D 缓冲区的。 事实上,我看到了这个警告:“缓冲区 bufParamsData 在其值被设置之前被使用“。 因此、我使用了中使用的方法 D.C 文件 。 这是你最后一次给我的方法。 您是否认为问题 可能来自该问题?
-而且,我对缓冲区的 data_type 字段输入了错误的数据类型: “bufParamsY"。“。
[/报价]是的、没错。
现在、包括 checkParams() 和 kernel() 函数在内的所有函数都在工作。 不再存在 代码在循环中运行的任何问题、因此非常棒。 [/报价]如果我们启用前面提到的宏、它应该可以正常工作。 默认情况下不是。
此致、
Betsy Varughese.
您好 Melanie、
上面提供的代码是针对一个示例场景实现的。
是 FFT 点数吗?
就是 FFTsize。
希望您已经浏览过本用户指南。

那么、您为什么这么说呢 numPoints * 2 * sizeof (int16_t) numPoints * 2 * sizeof (int16_t) 中的第二个字段 ti_memalign () 函数、如下所示:
当您处理复杂数据类型时。(请参阅 d.c)
您好 Betsy、
好的、很酷、很高兴来到这里。 感谢您对该代码部分的帮助!
是的、我已经浏览过用户指南、但信息的详细程度不是我想要的。 让我解释一下我的意思:
-首先、 我们是否同意这样一个事实,即 FFT 大小等于输入数据的值数(我们的例子中存储在 PX 中)? 根据内核函数 ci.cpp 文件中的代码、对我来说、答案是肯定的 
-然后,对我来说,因为 FFT 算法的目的是快速计算 DFT , 存储输入数据的数据 (PX)  映射 实值。  所以对我来说,不需要在 TI_memalign () 函数的第二个字段中放置 2 个系数。 对我来说, 这样定义 PX 指针就足够了:  
int16_t *pX = (int16_t *) TI_memalign (64, numPoints * sizeof (int16_t));
此致、
M é lanie
好的、
最后一个问题是、我想用 2048 点扩展 FFT 算法。 因此,我做了一些修改,并实施了该代码:  
e2e.ti.com/.../8625.main.cpp
但是、我不传递 checkParameters funciton。 使用 TI_memalign () 分配空间是否有一些限制?
我认为还有另一个问题。老实说,我并不真正理解这个问题,因为你确认了我的意见 PX 参数“数值的 numPoints = 128,那么没有必要的因素 2。“ 
定义  
   FFTLIB_bufParams1D_t bufParamsX;
    bufParamsX.dim_x     = numPoints;             // QUESTION !!! PQ SI JE RETIRE FACTEUR 2 CA FAIT UNE ERREUR
    bufParamsX.data_type = FFTLIB_INT16;  FFTLIB_bufParams1D_t bufParamsX; bufParamsX.dim_x = numPoints*2; // QUESTION !!! PQ SI JE RETIRE FACTEUR 2 CA FAIT UNE ERREUR bufParamsX.data_type = FFTLIB_INT16;checkParams 函数发送错误、而不是
您好 Melanie、
我们正在处理复杂的节点 代码用于 64 点复数 FFT、此处的 numPoints 为 64。
输入数包含实部和虚部、因此“dimx"应为“应为 输入数组 pX 的长度、即 128。 I.e、numPoints * 2.请参阅以下代码、了解 64 点复数 FFT。
#include <fftlib.h>
#include <c7x.h>
#include "common/FFTLIB_bufParams.h"
#include "common/FFTLIB_types.h"
#include <cmath>
#include <math.h>
#include "common/TI_memory.h"
#include <iostream>
#include <cstring>
#include <tw_gen.h>
 
using namespace std;
 
extern void tw_gen (int16_t *pW, uint32_t numPoints);
 
uint8_t FFTLIB_fft1d_i16sc_c16sc_o16sc_pBlock[FFTLIB_FFT1D_I16SC_C16SC_O16SC_PBLOCK_SIZE];
 
int16_t pX[] = {
      -108, -126, 109,  86,   56,  62,   -46, 8,    -88, -101, -78, -127, 67,   -33, -12, 97,  117, 109,  32,   91,  -44, -118, 117,  72,  20,  -43,
      -66,  -77,  82,   19,   31,  -84,  -22, -115, -46, -114, -30, -73,  -115, 25,  118, 25,  -18, 92,   61,   90,  67,  -39,  -21,  88,  11,  85,
      -72,  86,   34,   -107, -11, -113, -54, 125,  -37, 3,    86,  38,   -124, 89,  12,  90,  9,   -13,  -12,  22,  14,  17,   -109, 84,  22,  -16,
      2,    -79,  128,  76,   52,  -53,  -38, -105, 113, 106,  63,  -110, -85,  -68, -50, -82, 71,  -124, 93,   -16, 42,  -122, 78,   -70, -64, -45,
      -118, 57,   -127, 124,  -17, -65,  117, -40,  12,  68,   -70, -76,  6,    -18, -96, -3,  -70, -113, -111, 51,  92,  -8,   104,  -108};
 
const uint32_t pShift[] = {0, 0, 0};
 
const uint32_t numPoints = 64;
 
const uint32_t numShifts = 3;
 
int main(){
    int16_t *pY, *pW;
    FFTLIB_STATUS status = FFTLIB_SUCCESS;
 
    pY     = (int16_t *) TI_memalign (64, numPoints * 2 * sizeof (int16_t));
    pW     = (int16_t *) TI_memalign (64, numPoints * 2 * sizeof (int16_t));
    FFTLIB_bufParams1D_t bufParamsData;
    FFTLIB_bufParams1D_t bufParamsShift;
 
    bufParamsData.dim_x     = numPoints * 2;
    bufParamsData.data_type = FFTLIB_INT16;
 
    bufParamsShift.dim_x     = numShifts;
    bufParamsShift.data_type = FFTLIB_UINT32;
 
    tw_gen (pW, numPoints);
    status = FFTLIB_fft1d_i16sc_c16sc_o16sc_checkParams (
            (int16_t *) pX, &bufParamsData, (int16_t *) pW, &bufParamsData,
            (int16_t *) pY, &bufParamsData, (uint32_t *) pShift,
            &bufParamsShift, FFTLIB_fft1d_i16sc_c16sc_o16sc_pBlock);
 
    if(status == FFTLIB_SUCCESS){
        status = FFTLIB_fft1d_i16sc_c16sc_o16sc_init (
             (int16_t *) pX, &bufParamsData, (int16_t *) pW, &bufParamsData,
             (int16_t *) pY, &bufParamsData, (uint32_t *) pShift,
             &bufParamsShift, FFTLIB_fft1d_i16sc_c16sc_o16sc_pBlock);
    }
    if(status == FFTLIB_SUCCESS){
        status = FFTLIB_fft1d_i16sc_c16sc_o16sc_kernel (
             (int16_t *) pX, &bufParamsData, (int16_t *) pW, &bufParamsData,
             (int16_t *) pY, &bufParamsData, (uint32_t *) pShift,
             &bufParamsShift, FFTLIB_fft1d_i16sc_c16sc_o16sc_pBlock);
    }
 
    return 0;
 
}
此致、
Betsy Varughese.
您好 Melanie、
那么、对我来说、由于 FFT 算法的目的是快速计算 DFT、 存储输入数据的数据 (PX) 映射 实值。 所以对我来说,不需要在 TI_memalign () 函数的第二个字段中放置 2 个系数。 对我来说, 定义 PX 指针就足够了:
在此环境中 numPoints 的值是正确的。 但算法是针对复数实现的(从内核名称本身中可以清楚地看出)。
请您检查上述代码、如果您有任何进一步的疑问、请告诉我。
此致、
Betsy Varughese.
我尝试过、
我收到了与代码相同的错误消息。
我刚刚添加在 main 的最后一行 (return 0;) 和 staticRefOutput10 数组的声明之前 
    int val_res_FF = memcmp(pY,staticRefOutput10,numPoints * 2 * sizeof (int16_t));
    assert(val_res_FF !=0);
    cout << " Les valeurs de sorties obtenues sont correctes " << endl;[C71X_0] Assertion failed, (val_res_FF !=0), file ../main.cpp, line 449
这是奇怪的,因为我们有正确的输出值之前的情况下,我没有错误,我得到了相同的数据,如在 referenceoutput4 数组.. staticRefOutput10 数组的某些值可能出错吗?
这是我的输出、您能告诉我您的设备是否有任何区别吗? 
 e2e.ti.com/.../4606.sortiepYcalculee.txt
谢谢