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 中手动配置:
LVP Application Settings→ 选择FFT Evaluation App- 选择运算类型(在
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 性能
参考文档*
- 动态调频APP介绍 — 了解如何调整 MCU 频率
- CSKY DSP 库文档 — 了解更多 FFT API 及实例配置