TDA4VEN-Q1: FFTLIB重复调用输出结果异常

Part Number: TDA4VEN-Q1
Other Parts Discussed in Thread: FFTLIB

你好

      我在开发dsp c7x时碰到连续调用FFTLIB_fft1dBatched_i16sc_c16sc_o16sc_kernel函数时,第一次fft计算结果正常,第二次fft计算结果异常,单独进行某一次的fft(只使用第一次fftt或者只使用第二次fft)结果均正确。第一次fft输入数组为128通道1024个采样点,第二次输入数组为512通道128个采样点,代码如下:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
__attribute__((section(".l2mem"), aligned(64))) int16_t l2_user_array0[128][2048]; // 512k
__attribute__((section(".l2mem"), aligned(64))) int16_t l2_user_array1[128][2048]; // 512k
__attribute__((section(".l2mem"), aligned(64))) int16_t l2_user_array2[512][256]; // 256k
__attribute__((section(".l2mem"), aligned(64))) int16_t l2_user_array3[512][256]; // 256k
void func()
{
battch_fft1d_info_type l_battch_fft1d_info = {0};
l_battch_fft1d_info.num_shifts = 5;
l_battch_fft1d_info.channel = 128;
l_battch_fft1d_info.num_points = 1024;
l_battch_fft1d_info.data_type = FFTLIB_INT16;
bsp_dsppro_battch_fft1d((int16_t *)l2_user_array0, (int16_t *)l2_user_array1, &l_battch_fft1d_info);
l_battch_fft1d_info.num_shifts = 3;
l_battch_fft1d_info.channel = 512;
l_battch_fft1d_info.num_points = 128;
l_battch_fft1d_info.data_type = FFTLIB_INT16;
bsp_dsppro_battch_fft1d((int16_t *)l2_user_array2, (int16_t *)l2_user_array3, &l_battch_fft1d_info);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

是否是我遗漏了什么步骤,导致连续调用不能正常工作,若我想连续计算fft,该如何修改代码?希望ti工程师能帮忙指出问题。

  • 已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

  • 你能告诉我们你正在为C7X DSP开发什么吗?这是一个什么项目吗?

  • 你能分享一个测试代码和测试输入吗。
    您还可以共享链接器脚本来检查内存配置。
    此外,由于提供的代码中不存在battch_fft1d_info_type,我创建了一个结构体。你能检查一下是否正确吗

    struct battch_fft1d_info_type{
        uint32_t num_shifts;   
        uint32_t channel;     
        uint32_t num_points;   
        int data_type;   
    };

  • 感谢回复,正在开发毫米波雷达,这部分是做信号处理

  • 结构体这样写是正确的,我的链接器脚本如下:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    --ram_model
    -heap 0x20000
    -stack 0x20000
    --args 0x1000
    --diag_suppress=10068 /* to suppress no matching section error */
    --cinit_compression=off
    -e _c_int00_secure
    #define DDR0_ALLOCATED_START 0xAD000000 /* 0xAD000000 */
    #define C7X_ALLOCATED_START DDR0_ALLOCATED_START
    #define C7X_RESOURCE_TABLE_BASE (C7X_ALLOCATED_START + 0x00100000)
    #define C7X_IPC_TRACE_BUFFER (C7X_ALLOCATED_START + 0x00100400)
    #define C7X_BOOT_BASE (C7X_ALLOCATED_START + 0x00200000)
    #define C7X_VECTOR_BASE (C7X_ALLOCATED_START + 0x00400000)
    #define C7X_DDR_SPACE_BASE (C7X_ALLOCATED_START + 0x00600000)
    MEMORY
    {
    /*L2SRAM_CINIT (RWX) : org = 0x7E000000, len = 0x000100*/ // for 256byte init c7x_0 = 7E000000, c7x_1 = 7E200000
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • 我该如何给你分享测试工程代码,邮件还是附件

  • 您可以在此处发布独立测试代码。我会核实一下。

  • 我定位到是因为动态分配pw会导致pw中存储的旋转因子会出现问题,导致计算错误,具体原因我尚在定位,不过将pw指向全局数组会避免该问题,目前已经可以正常计算

x 出现错误。请重试或与管理员联系。