прикрутил с минимальными корректировками к Cortex-M3 - 256сэмплов на 8кГц это 30мс, обрабатывает за 1мс (где-то 100тыщ тактов процессора). Мне хватает. Но можно ускорить[+]
юзать для копирования memcpy а не for с индексами
заменить в нормализации
вместо
for(ii = 0; ii < SAMPLES; ii++)
{
T[0] = static_cast<INT32>(short_array_samples[ii]);
if(T[0] != 0)
{
if(Dial > norm_l(T[0]))
{
Dial = norm_l(T[0]);
}
}
}
просто
if( short_array_samples[ii] )
{
s16 norm = norm_2( short_array_samples[ii] );
if( Dial > norm )
Dial = norm;
}
где
static inline s16 norm_2(s16 L_var1 )
{
if( L_var1 == 0 )
return 0;
if( L_var1 == -1 )
return 31;
u16 tmp;
tmp = ( L_var1 < 0 ) ? ~L_var1 : L_var1;
s16 var_out = 0;
if( tmp & 0xFF00UL ) var_out += 8, tmp >>= 8;
if( tmp & 0x00F0UL ) var_out += 4, tmp >>= 4;
if( tmp & 0x000CUL ) var_out += 2, tmp >>= 2;
if( tmp & 0x0002UL ) var_out += 1;
return 30 - var_out;
}