ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
11 мая
257233 Топик полностью
DE_User (06.06.2011 03:53 - 06:21, просмотров: 141) ответил MBedder на Убери деления (замени умножениями), и будет совсем шоколадно
Бeз деления примерно 634 цикла, оптимизация отключена. При частоте семплирования 4000 Гц для ATmega644A и тактовой 10 МГц (потребление 4мА при 3,3В или 13 мВт) загрузка процессора не превысит 30%! Оптимизировать код легко: делители кратны степени 2 (BCoef0 = 16384, DCgain = 16), а четные коэффициенты = 0. static signed int ACoef0 = 15018; static signed int ACoef1 = 0; static signed int ACoef2 = -30036; static signed int ACoef3 = 0; static signed int ACoef4 = 15018; static signed int BCoef0 = 16384; static signed int BCoef1 = 0; static signed int BCoef2 = 32238; static signed int BCoef3 = 0; static signed int BCoef4 = 15874; /* for(n=1; n<=NCoef; n++) y[0] += ACoef[n] * x[n] - BCoef[n] * y[n]; */ yy0 += (ACoef2 * xx2) - (BCoef2 * yy2) + (ACoef4 * xx4) - (BCoef4 * yy4); yy0 = (yy0>>14); // BCoef0 = 16384 yy_out = (yy0>>4); // DCgain = 16
Let's come together right now !