ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
5 декабря
401457 Топик полностью
MegaJohn (11.04.2013 15:44 - 18:40, просмотров: 208) ответил MegaJohn на На его примере сделал тестовый для MSVC - хавает файл и печатает в консоль на каком сэмпле продетектирован DTMF
прикрутил с минимальными корректировками к 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;
}