跳转至

FFT评估使用说明

概述*

fft_evaluation 是一个用于评估 CSKY DSP 库 FFT/IFFT 运算性能的测试 App。通过构造测试数据,测量在目标平台上执行 FFT 和 IFFT 运算的耗时,帮助开发者评估芯片的音频信号处理能力。

支持两种运算模式:

  • 实数 FFT(float):使用 csky_rfft_fast_f32,单精度浮点运算
  • 定点 FFT(fixed-point):使用 csky_rfft_q15,Q15 定点运算

APP使用说明*

编译配置*

提供定点 FFT 评估的参考配置:

cp ./configs/release/nationalchip/grus_gx8002b_dev_1v_use_fixed_fft.config .config

也可在 menuconfig 中手动配置:

  1. LVP Application Settings → 选择 FFT Evaluation App
  2. 选择运算类型(在 real or fixed choice 中):
    • use real fft — 浮点 FFT 评估
    • use fixed fft — 定点 FFT 评估

固件编译*

make menuconfig
make clean; make

烧录 output/mcu_nor.bin 到板子,上电运行即可通过串口查看结果。

运行效果*

App 初始化时自动执行一次 FFT+IFFT 运算,打印如下:

  • fft_input:构造的测试输入数据(512 点锯齿波)
  • fft time: X us:FFT 运算耗时(微秒)
  • fft_output:FFT 变换后的频域数据
  • ifft time: X us:IFFT 运算耗时(微秒)
  • ifft_output:IFFT 还原后的时域数据

App 工作原理*

测试数据构造*

在 AppInit 中生成 512 点锯齿波测试数据:

for (int i = 0; i < 512; i++) {
    fft_input[i] = (i * 32767) / 511;
}

FFT 运算*

// 浮点模式:512 点实数 FFT
csky_rfft_fast_f32(&csky_rfft_sR_f32_len512, fft_input, fft_output, 0);

// 定点模式:512 点实数 FFT
csky_rfft_q15(&csky_rfft_sR_q15_len512, fft_input, fft_output);

IFFT 运算*

// 浮点模式:IFFT 还原
csky_rfft_fast_f32(&csky_rfft_sR_f32_len512, fft_output, fft_input, 1);

// 定点模式:IFFT 还原
csky_rfft_q15(&csky_inv_rfft_sR_q15_len512, fft_output, fft_input);

耗时统计*

使用 gx_get_time_us() 在运算前后打时间戳,精确到微秒:

int start = gx_get_time_us();
// FFT operation
int end = gx_get_time_us();
printf("fft time: %d us\n", end - start);

关键 API 说明*

API 说明
csky_rfft_fast_f32(instance, input, output, inverse) 浮点实数 FFT/IFFT,inverse=0 为正变换,=1 为逆变换
csky_rfft_q15(instance, input, output) Q15 定点实数 FFT
csky_inv_rfft_q15(instance, input, output) Q15 定点实数 IFFT(通过 csky_rfft_q15 调用逆变换实例)
gx_get_time_us() 获取当前系统时间,单位微秒,用于性能测量

FFT 实例说明*

实例名 类型 说明
csky_rfft_sR_f32_len512 float 512 点浮点实数 FFT 实例
csky_rfft_sR_q15_len512 Q15 512 点定点实数 FFT 实例
csky_inv_rfft_sR_q15_len512 Q15 512 点定点实数 IFFT 实例

注意事项*

  • FFT 运算在 AppInit 中执行,仅运行一次,后续可通过重新初始化触发
  • 输入数据固定为 512 点,如需评估其他点数(256/1024),需修改数组大小及对应的 FFT 实例
  • 浮点模式对 MCU 算力要求较高,定点模式性能更优,建议根据实际应用场景选择
  • 测试结果受 MCU 频率影响,可配合动态调频评估不同频率下的 FFT 性能

参考文档*