Это как зубная щетка - у каждого своя
*
#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
**