工具/软件:
尊敬的 TI 团队:
根据 TI 工程师的建议、我从上一篇文章(链接如下)中移除了与 FFT 相关的器件、以专注于讨论:
现在、我将创建这篇单独的文章、专门询问我在 FFT 处理性能方面遇到的问题。
我将使用 AM62x 平台并对128个实数双精度值执行 FFT 计算。 我使用的函数是fft_calculation_128(x, mag, phase, 3)
、我用测量执行时间ClockP_getTimeUsec()
。 输出始终保持不变 25ms 、看起来异常高:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "ti_drivers_config.h"
#include "ti_drivers_open_close.h"
#include "ti_board_open_close.h"
包含"ti_DPL_config.h"
#include "/ADE9000/ADE9000RegMap.h"
#include "/ADE9000/ADE9000.h"
#include "s_cloud.h" Pripherals_Config
#include
#include "Calibration.h"
#include "(包含/FFT/fft_opt.h)"
ClockP_Params clockParams;
ClockP_Object clockObj;
void CS_GPIO_Init()
{
M4F_GPIO->DIR &=~(0x2000);
}
void Clock_Init ()
{
ClockP_Params_init (&clockParams);
clockParams.timeout = ClockP_instancy ToTicks (1);
clockParams.period = clockParams.timeout;
clockParams.start = 1;
}
const double sine_half_cycle_lut[128]={
0.000000、0.024541、0.049068、0.073565、0.098017、 0.122411、0.146730、0.170962、
0.195090、0.219101、0.242980、0.266713、0.290285、 0.313682、0.336890、0.359895、
0.382683、0.405241、0.427555、0.449611、0.471397 0.492898、0.514103、0.534998、
0.555570、0.575808、0.595699、0.615232、0.634393、 0.653173、0.671559、0.689541、
0.707107、0.724247、0.740951、0.757209、0.773010、 0.788346、0.803208、0.817585、
0.831470、0.844854、0.857729、0.870087、0.881921、 0.893224、0.903989、0.914210
0.923880、0.932993、0.941544、0.949528、0.956940、 0.963776、0.970031、0.975702、
0.980785、0.985278、0.989177、0.992480、0.995185、 0.997290、0.998795、0.999699、
1.000000、0.999699、0.998795、0.997290、0.995185、 0.992480、0.989177、0.985278、
0.980785、0.975702、0.970031、0.963776、0.956940、 0.949528、0.941544、0.932993、
0.923880、0.914210、0.903989、0.893224、0.881921、 0.870087、0.857729、0.844854、
0.831470、0.817585、0.803208、0.788346、0.773010、 0.757209、0.740951、0.724247、
0.707107、0.689541、0.671559、0.653173、0.634393、 0.615232、0.595699、0.575808、
0.555570、0.534998、0.514103、0.492898、0.471397 0.449611、0.427555、0.405241、
0.382683、0.359895、0.336890、0.313682、0.290285、 0.266713、0.242980、0.219101、
0.195090、0.170962、0.146730、0.122411、0.098017、 0.073565、0.049068、0.024541
};
void hello_world_main (void * args)
{
双重测试= 1.0;
const uint8_t hamonics = 3;
双精度 x[256];
双 MAG[hamonics];
双相[hamonics];
/*打开驱动程序以打开控制台的 UART 驱动程序*/
drivers_open();
BOARD_DRIVERSOpen ();
Clock_Init ();
CS_GPIO_Init();
Timer_Init ();
对于(uint16_t i =0;i < 128;i++)
{
x[i * 2]= sine_half_cycle_lut[i];
X[i * 2 + 1]= 0.0;
}
DebugP_log ("test is %f\r\n"、test);
Uint16_t strTime = ClockP_getTimeUssec ();
fft_calculation_128 (x、MAG、PHASE、3);
Uint16_t EndTime = ClockP_getTimeUssec ();
对于(uint8_t i = 0;i < 128;i ++)
{
DebugP_log ("FFT amount of x[%d] is %f +%f j\r\n"、i、x[i * 2]、x[i*2 + 1]);
ClockP_USleep (100);
}
DebugP_log ("FFT 计算花费的时间为%d us\r\n"、EndTime - strTime);
while (1)
{
}
Board_driversClose();
drivers_close();
}
x[0]的 FFT 量为81.483242 + 0.000000 j
x[1]的 FFT 量为-27.166536 + 0.000000 j
x[2]的 FFT 量为-5.436583 + 0.000000 j
x[3]的 FFT 量为-2.332302 + 0.000000 j
FFT 数量 x[4]为-1.297546 + 0.000000 j
FFT 数量 x[5]为-0.827208 + 0.000000 j
。
。
。
。
。
FFT 计算所需的时间为25271us
这种高延迟会导致应用中的实时处理出现问题。
我想问:
-
此性能问题是否与系统时钟配置或未正确设置 CPU 频率有关?
-
AM62x 上是否默认启用 FPU (浮点单元)? 如果没有、如何在我的环境中正确确认和启用它?
感谢您提供有关改进该平台上 FFT 性能的任何指导。
此致、
Soheil