本帖最后由 DX3906 于 2024-11-1 09:22 编辑
函数本身可以优化一下,用单精度的cosf,cos是双精度,在f405上会慢
然后减少每个循环的计算量,比如2 * M_PI / (size - 1)可以提到循环外面
如果传进来的size是4的倍数,那可以把循环展开,每个循环计算4次
代码类似这样:
[C] 纯文本查看 复制代码 void Generate_Hanning_Window(float32_t *window, uint16_t size)
{
float32_t scale = 2.0f * M_PI / (size - 1);
uint16_t i;
for (i = 0; i < size - 4; i += 4)
{
float32_t t0 = i * scale;
float32_t t1 = (i + 1) * scale;
float32_t t2 = (i + 2) * scale;
float32_t t3 = (i + 3) * scale;
window[i] = 0.5f * (1.0f - cosf(t0));
window[i + 1] = 0.5f * (1.0f - cosf(t1));
window[i + 2] = 0.5f * (1.0f - cosf(t2));
window[i + 3] = 0.5f * (1.0f - cosf(t3));
}
}
|