Это как зубная щетка - у каждого своя
* #ifndef __FILTER_H #define __FILTER_H //структура данных фильтра экспоненциального сглаживания typedef struct { signed long in;//предыдущие входное значение signed long out_alfa;//выходное значение умноженное на альфа unsigned char alfa;//постоянная времени } Filter_t; //фильтр экспоненциального сглаживания ФНЧ static inline signed long FilterESLP(Filter_t* f, signed long in) { f->out_alfa=(f->out_alfa) - ((f->out_alfa)>>(f->alfa)) + in; return (f->out_alfa) >> (f->alfa); } /* количество отсчетов для установления фильтр экспоненциального сглаживания alfa - постоянная времени alfa по уров. 0.5 по уров. 0.707 по уров. 0.9 по уров. 0.99 по уров. 1 00 T_0.5= 000000 T_0.707=000000 T_0.9=000000 T_0.99=000000 T_1.0=000000 01 T_0.5= 000001 T_0.707=000001 T_0.9=000003 T_0.99=000006 T_1.0=000010 02 T_0.5= 000002 T_0.707=000004 T_0.9=000008 T_0.99=000016 T_1.0=000026 03 T_0.5= 000005 T_0.707=000009 T_0.9=000017 T_0.99=000034 T_1.0=000056 04 T_0.5= 000010 T_0.707=000019 T_0.9=000035 T_0.99=000072 T_1.0=000116 05 T_0.5= 000021 T_0.707=000038 T_0.9=000072 T_0.99=000146 T_1.0=000235 06 T_0.5= 000044 T_0.707=000078 T_0.9=000146 T_0.99=000295 T_1.0=000475 07 T_0.5= 000088 T_0.707=000156 T_0.9=000294 T_0.99=000593 T_1.0=000954 08 T_0.5= 000177 T_0.707=000314 T_0.9=000589 T_0.99=001189 T_1.0=001912 09 T_0.5= 000355 T_0.707=000629 T_0.9=001180 T_0.99=002381 T_1.0=003828 10 T_0.5= 000710 T_0.707=001258 T_0.9=002362 T_0.99=004765 T_1.0=007661 11 T_0.5= 001422 T_0.707=002517 T_0.9=004725 T_0.99=009534 T_1.0=015326 12 T_0.5= 002844 T_0.707=005036 T_0.9=009452 T_0.99=019070 T_1.0=030657 13 T_0.5= 005690 T_0.707=010073 T_0.9=018906 T_0.99=038143 T_1.0=061317 14 T_0.5= 011380 T_0.707=020148 T_0.9=037814 T_0.99=076289 T_1.0=122638 15 T_0.5= 022761 T_0.707=040297 T_0.9=075630 T_0.99=152582 T_1.0=245280 16 T_0.5= 045524 T_0.707=080594 T_0.9=151262 T_0.99=305166 T_1.0=490564 */ //фильтр экспоненциального сглаживания ФВЧ static inline signed long FilterESHP(Filter_t* f, signed long in) { f->out_alfa=(f->out_alfa) - ((f->out_alfa)>>(f->alfa)) + in; return in - ((f->out_alfa) >> (f->alfa)); } //фильтр низкий частот static inline signed long FilterLP(Filter_t* f, signed long in) { f->out_alfa = (f->out_alfa) - ((f->out_alfa)>>(f->alfa)) + (in) + (f->in); f->in = in; return (f->out_alfa) >> ((f->alfa)+1); } /* количество отсчетов для установления фильтра низких частот alfa - постоянная времени alfa по уров. 0.5 по уров. 0.707 по уров. 0.9 по уров. 0.99 по уров. 1 00 T_0.5=000001 T_0.707=000001 T_0.9=000001 T_0.99=000001 T_1.0=000001 01 T_0.5=000001 T_0.707=000002 T_0.9=000003 T_0.99=000007 T_1.0=000012 02 T_0.5=000002 T_0.707=000004 T_0.9=000008 T_0.99=000016 T_1.0=000029 03 T_0.5=000005 T_0.707=000009 T_0.9=000017 T_0.99=000035 T_1.0=000061 04 T_0.5=000011 T_0.707=000019 T_0.9=000036 T_0.99=000073 T_1.0=000127 05 T_0.5=000022 T_0.707=000039 T_0.9=000073 T_0.99=000148 T_1.0=000258 06 T_0.5=000044 T_0.707=000078 T_0.9=000147 T_0.99=000297 T_1.0=000519 07 T_0.5=000089 T_0.707=000157 T_0.9=000295 T_0.99=000597 T_1.0=001043 08 T_0.5=000178 T_0.707=000314 T_0.9=000590 T_0.99=001197 T_1.0=002090 09 T_0.5=000355 T_0.707=000629 T_0.9=001182 T_0.99=002395 T_1.0=004183 10 T_0.5=000711 T_0.707=001259 T_0.9=002365 T_0.99=004793 T_1.0=008371 11 T_0.5=001423 T_0.707=002519 T_0.9=004730 T_0.99=009589 T_1.0=016745 12 T_0.5=002846 T_0.707=005039 T_0.9=009462 T_0.99=019180 T_1.0=033495 13 T_0.5=005692 T_0.707=010079 T_0.9=018925 T_0.99=038363 T_1.0=066993 14 T_0.5=011385 T_0.707=020158 T_0.9=037852 T_0.99=076728 T_1.0=133990 15 T_0.5=022770 T_0.707=040317 T_0.9=075705 T_0.99=153459 T_1.0=267985 16 T_0.5=045541 T_0.707=080635 T_0.9=151411 T_0.99=306920 T_1.0=535974 */ //фильтр верхних частот static inline signed long FilterHP(Filter_t* f, signed long in) { f->out_alfa = (f->out_alfa) - ((f->out_alfa)>>(f->alfa)) + (in) + (f->in); f->in = in; return in - ((f->out_alfa) >> ((f->alfa)+1)); } //установка фильтра static inline void InitFilter(Filter_t* f, signed long in, unsigned char alfa) { f->in = in; f->alfa = alfa; f->out_alfa = (in)<<(alfa); } #endif **