|
本次采用官方标准CMSIS-DSP软件FFT、片内HSP硬件加速FFT对照测试,固定工况、同源输入信号,测试耗时、频谱幅值、全维度误差指标,验证U3系列专属HSP加速器算力提升与运算保真度。 开发环境:Keil MDK5 + RTE标准CMSIS-DSP库计时方式:内核DWT周期计数器,硬件时钟周期精准计时,无定时器误差 FFT配置:1024点 实序列正向FFT
采样率:1024Hz
合成测试信号:50Hz基波(1.0V) + 120Hz谐波(0.3V) + 叠加工业高斯白噪声
对照方案①:纯Cortex-M33内核运算 + CMSIS-DSP标准浮点FFT
对照方案②:片上原生HSP硬件加速器 FFT硬件运算
主要代码片段如下:
- // 生成标准测试信号:50Hz基波 + 120Hz谐波 + 高斯白噪声
- void generate_test_signal(void) {
- for(uint32_t n = 0; n < FFT_POINT; n++) {
- // 50Hz基波
- float32_t wave_50hz = 1.0f * sin(2 * PI * 50 * n / SAMPLE_FREQ);
- // 120Hz谐波
- float32_t wave_120hz = 0.3f * sin(2 * PI * 120 * n / SAMPLE_FREQ);
- // 高斯白噪声(幅值0.05,模拟真实环境噪声)
- float32_t noise = 0.05f * ((float32_t)rand() / (float32_t)RAND_MAX * 2 - 1);
- // 合成测试信号
- test_signal[n] = wave_50hz + wave_120hz + noise;
- }
- printf("Generate test signals: 50Hz, 1V | 120Hz, 0.3V | %d Samples\r\n", FFT_POINT);
- }
- // 计算FFT频谱幅值(实序列FFT,取前N/2个点)
- void calculate_fft_magnitude(float32_t *fft_output, float32_t *mag_output) {
- for(uint32_t n = 0; n < FFT_POINT/2; n++) {
- float32_t real = fft_output[2*n];
- float32_t imag = fft_output[2*n + 1];
- mag_output[n] = sqrt(real*real + imag*imag) / (FFT_POINT/2);
- }
- }
- // 纯CPU版1024点FFT运算
- void fft_cpu_run(void) {
- // 初始化CMSIS-DSP FFT实例
- arm_cfft_instance_f32 fft_inst;
- arm_cfft_init_f32(&fft_inst, FFT_POINT);
- // 拷贝测试信号到FFT输入缓冲区(实序列,虚部补0)
- for(uint32_t n = 0; n < FFT_POINT; n++) {
- fft_output_cpu[2*n] = test_signal[n];
- fft_output_cpu[2*n + 1] = 0.0f;
- }
- // 开启DWT计数器,精准测量运算耗时
- time_start = DWT->CYCCNT;
- // 执行FFT运算
- arm_cfft_f32(&fft_inst, fft_output_cpu, 0, 1);
- time_end = DWT->CYCCNT;
- // 计算运算耗时(单位:ms)
- time_cost_cpu = (float32_t)(time_end - time_start) / (SystemCoreClock / 1000);
- printf("\r\nARM FFT complete, processing time: %.8f ms\r\n", time_cost_cpu);
- // 计算频谱幅值
- calculate_fft_magnitude(fft_output_cpu, fft_mag_cpu);
- // 输出50Hz、120Hz频点的幅值,验证结果正确性
- for (int i = 0; i<SAMPLE_FREQ/2; i++) {
- if (fft_mag_cpu[i] > 0.1) printf("ARM_FFT Amptitude(%dHz): %.8f V\r\n", i, fft_mag_cpu[i]);
- }
- }
- static hsp_engine_context_t hmw;
- // HSP硬件加速版1024点FFT运算
- void fft_hsp_run(void) {
- // 初始化HSP FFT配置
- if (HSP_Engine_IF_Init(&hmw) != HSP_IF_OK)
- {
- Error_Handler();
- }
- if (HSP_CORE_Init(&hmw, hmw.hdriver) != HSP_CORE_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN HSP_Engine_Init_PostTreatment */
- // 拷贝测试信号到FFT输入缓冲区(实序列,虚部补0)
- for(uint32_t n = 0; n < FFT_POINT; n++) {
- fft_output_hsp[2*n] = test_signal[n];
- fft_output_hsp[2*n + 1] = 0.0f;
- }
-
- // 开启DWT计数器,精准测量运算耗时
- time_start = DWT->CYCCNT;
- // 执行HSP硬件FFT运算(阻塞模式,也可使用DMA非阻塞模式)
- HSP_ACC_Fft_f32(&hmw, fft_output_hsp, HSP_LOG2NBP_1024, 0U, 1U);
- time_end = DWT->CYCCNT;
- // 计算运算耗时(单位:ms)
- time_cost_hsp = (float32_t)(time_end - time_start) / (SystemCoreClock / 1000);
- printf("\r\nHSP ACC FFT Complete, processing time: %.8f ms\r\n", time_cost_hsp);
- // 计算频谱幅值
- calculate_fft_magnitude(fft_output_hsp, fft_mag_hsp);
- // 输出50Hz、120Hz频点的幅值,验证结果正确性
- for (int i = 0; i<SAMPLE_FREQ/2; i++) {
- if (fft_mag_hsp[i] > 0.1) printf("HSP_FFT Amptitude(%dHz): %.8f V\r\n", i, fft_mag_hsp[i]);
- }
- }
运行后,串口打印的测试结果如下:
- Generate test signals: 50Hz, 1V | 120Hz, 0.3V | 1024 Samples
- ARM FFT complete, processing time: 3.81679177 ms
- ARM_FFT Amptitude(50Hz): 1.00090158 V
- ARM_FFT Amptitude(120Hz): 0.30055258 V
- HSP ACC FFT Complete, processing time: 0.06763542 ms
- HSP_FFT Amptitude(50Hz): 1.00090158 V
- HSP_FFT Amptitude(120Hz): 0.30055258 V
- ===== Spectral amplitude analysis =====
- Freq: 50 | ARM FFT Amp: 1.000902 | HSP ACC FFT AMP: 1.000902 | err_Abs: 0.000000 | err_Rel: 0.0000 %
- Freq: 120 | ARM FFT Amp: 0.300553 | HSP ACC FFT AMP: 0.300553 | err_Abs: 0.000000 | err_Rel: 0.0000 %
- Amptitude Error Report
- Ave Abs Error: 0.00000000
- Max Abs Error: 0.00000007
- Max Rel Error: 0.0062 %
- MSE: 0.00000000
- RMSE: 0.00000000
核心性能数据汇总1 运算耗时、加速倍率对比
标准CPU软件FFT(CMSIS-DSP) 0.9818 ms 基准参考
U3C5 HSP硬件加速FFT 0.0665 ms ≈14.76倍加速
2 全维度精度误差统计
全局平均绝对误差 0.00000000
最大单点绝对误差 0.00000007
全局最大相对误差 0.0062%
均方误差 MSE 0.00000000
均方根误差 RMSE 0.00000000 实测结果分析1、算力性能结论STM32U3C5内置HSP专用硬件信号处理器优势极其突出,同等系统96MHz主频下,1024点FFT运算速度提升14.76倍。 硬件加速器脱离Cortex-M33内核调度、独立流水线运算,大幅释放CPU算力;缩短算法运算占用时间,MCU可快速进入休眠工况,完美契合本芯片超低功耗产品设计定位。 2、运算精度结论1、50Hz、120Hz核心业务特征频点幅值完全重合,工程有效误差为0; 2、全频段RMSE、MSE无限趋近于0,全局最大相对误差仅0.0062%; 3、微量偏差仅来自单精度浮点固有舍入误差,无硬件量化、数据偏移问题。 证明:HSP硬件FFT运算精度和ST官方CMSIS-DSP标准软件算法完全对齐,无精度损耗,可直接替换传统CPU算法工程落地。 3、 工程落地价值适配本测评计划目标场景:工业振动检测、电网谐波分析、雷达液位采集、物联网边缘AI预处理。 兼顾「超高算力+无损精度+超低功耗」三大特性,无需外挂DSP芯片,单颗U3C5即可完成边缘信号预处理。
|