Filters 1.0
LPF, HPF, BPF, BSF, SRL
Loading...
Searching...
No Matches
ma.tpp
Go to the documentation of this file.
2
3template <typename T, uint16_t N>
5{
6 reset();
7}
8
9template <typename T, uint16_t N>
11{
12 set_param(dt_);
13}
14
15template <typename T, uint16_t N>
17{
18 dt = dt_;
19}
20
21template <typename T, uint16_t N>
23{
24 T y_k = 0;
25
26 if (start_counter < N)
27 {
28 start_counter++;
29 sum += x_k;
30 x_arr[index] = x_k;
31 y_k = x_k;
32 }
33 else
34 {
35 sum = sum - x_arr[index] + x_k;
36 x_arr[index] = x_k;
37 y_k = sum / n;
38 }
39
40 index++;
41 if (index > N - 1)
42 {
43 index = 0;
44 }
45
46 return y_k;
47}
48
49template <typename T, uint16_t N>
51{
52 index = 0;
53 sum = 0;
54 start_counter = 0;
55 for (uint16_t i = 0; i < n; i++)
56 {
57 x_arr[i] = 0;
58 }
59}
60
61template <typename T, uint16_t N>
63{
64 set_param(dt_);
65}
66
67template <typename T, uint16_t N>
69{
70 T K = get_K(n);
71 return K / (dt * n); // approximate
72}
73
74template <typename T, uint16_t N>
76{
77 return dt;
78}
79
80template <typename T, uint16_t N>
82{
83 return n;
84}
85
86template <typename T, uint16_t N>
88{
89 return 1.0 / dt;
90}
91
92template <typename T, uint16_t N>
94{
95 T K = 0;
96 switch (N_)
97 {
98 case (2):
99 K = 0.50000;
100 break;
101 case (3):
102 K = 0.46582;
103 break;
104 case (4):
105 K = 0.45539;
106 break;
107 case (5):
108 K = 0.45079;
109 break;
110 case (6):
111 K = 0.44835;
112 break;
113 case (7):
114 K = 0.44690;
115 break;
116 case (8):
117 K = 0.44596;
118 break;
119 case (9):
120 K = 0.44533;
121 break;
122 case (10):
123 K = 0.44487;
124 break;
125 case (11):
126 K = 0.44453;
127 break;
128 case (12):
129 K = 0.44428;
130 break;
131 case (13):
132 K = 0.44408;
133 break;
134 case (14):
135 K = 0.44392;
136 break;
137 case (15):
138 K = 0.44380;
139 break;
140 case (16):
141 K = 0.44370;
142 break;
143 case (17):
144 K = 0.44361;
145 break;
146 case (18):
147 K = 0.44354;
148 break;
149 case (19):
150 K = 0.44348;
151 break;
152 case (20):
153 K = 0.44343;
154 break;
155 case (21):
156 K = 0.44338;
157 break;
158 case (22):
159 K = 0.44334;
160 break;
161 case (23):
162 K = 0.44331;
163 break;
164 case (24):
165 K = 0.44328;
166 break;
167 case (25):
168 K = 0.44325;
169 break;
170 case (26):
171 K = 0.44323;
172 break;
173 case (27):
174 K = 0.44321;
175 break;
176 case (28):
177 K = 0.44319;
178 break;
179 case (29):
180 K = 0.44317;
181 break;
182 case (30):
183 K = 0.44316;
184 break;
185 case (31):
186 K = 0.44315;
187 break;
188 case (32):
189 K = 0.44313;
190 break;
191 case (33):
192 K = 0.44312;
193 break;
194 case (34):
195 K = 0.44311;
196 break;
197 case (35):
198 K = 0.44310;
199 break;
200 case (36):
201 K = 0.44309;
202 break;
203 case (37):
204 K = 0.44309;
205 break;
206 case (38):
207 K = 0.44308;
208 break;
209 case (39):
210 K = 0.44307;
211 break;
212 case (40):
213 K = 0.44307;
214 break;
215 case (41):
216 K = 0.44306;
217 break;
218 case (42):
219 K = 0.44305;
220 break;
221 case (43):
222 K = 0.44305;
223 break;
224 case (44):
225 K = 0.44305;
226 break;
227 case (45):
228 K = 0.44304;
229 break;
230 case (46):
231 K = 0.44304;
232 break;
233 case (47):
234 K = 0.44303;
235 break;
236 case (48):
237 K = 0.44303;
238 break;
239 case (49):
240 K = 0.44303;
241 break;
242 case (50):
243 K = 0.44302;
244 break;
245 case (51):
246 K = 0.44302;
247 break;
248 case (52):
249 K = 0.44302;
250 break;
251 case (53):
252 K = 0.44301;
253 break;
254 case (54):
255 K = 0.44301;
256 break;
257 case (55):
258 K = 0.44301;
259 break;
260 case (56):
261 K = 0.44301;
262 break;
263 case (57):
264 K = 0.44301;
265 break;
266 case (58):
267 K = 0.44300;
268 break;
269 case (59):
270 K = 0.44300;
271 break;
272 case (60):
273 K = 0.44300;
274 break;
275 case (61):
276 K = 0.44300;
277 break;
278 case (62):
279 K = 0.44300;
280 break;
281 case (63):
282 K = 0.44299;
283 break;
284 case (64):
285 K = 0.44299;
286 break;
287 case (65):
288 K = 0.44299;
289 break;
290 case (66):
291 K = 0.44299;
292 break;
293 case (67):
294 K = 0.44299;
295 break;
296 case (68):
297 K = 0.44299;
298 break;
299 case (69):
300 K = 0.44299;
301 break;
302 case (70):
303 K = 0.44299;
304 break;
305 case (71):
306 K = 0.44298;
307 break;
308 case (72):
309 K = 0.44298;
310 break;
311 case (73):
312 K = 0.44298;
313 break;
314 case (74):
315 K = 0.44298;
316 break;
317 case (75):
318 K = 0.44298;
319 break;
320 case (76):
321 K = 0.44298;
322 break;
323 case (77):
324 K = 0.44298;
325 break;
326 case (78):
327 K = 0.44298;
328 break;
329 case (79):
330 K = 0.44298;
331 break;
332 case (80):
333 K = 0.44298;
334 break;
335 case (81):
336 K = 0.44298;
337 break;
338 case (82):
339 K = 0.44297;
340 break;
341 case (83):
342 K = 0.44297;
343 break;
344 case (84):
345 K = 0.44297;
346 break;
347 case (85):
348 K = 0.44297;
349 break;
350 case (86):
351 K = 0.44297;
352 break;
353 case (87):
354 K = 0.44297;
355 break;
356 case (88):
357 K = 0.44297;
358 break;
359 case (89):
360 K = 0.44297;
361 break;
362 case (90):
363 K = 0.44297;
364 break;
365 case (91):
366 K = 0.44297;
367 break;
368 case (92):
369 K = 0.44297;
370 break;
371 case (93):
372 K = 0.44297;
373 break;
374 case (94):
375 K = 0.44297;
376 break;
377 case (95):
378 K = 0.44297;
379 break;
380 case (96):
381 K = 0.44297;
382 break;
383 case (97):
384 K = 0.44297;
385 break;
386 case (98):
387 K = 0.44297;
388 break;
389 case (99):
390 K = 0.44297;
391 break;
392 case (100):
393 K = 0.44297;
394 break;
395 case (101):
396 K = 0.44297;
397 break;
398 case (102):
399 K = 0.44296;
400 break;
401 case (103):
402 K = 0.44296;
403 break;
404 case (104):
405 K = 0.44296;
406 break;
407 case (105):
408 K = 0.44296;
409 break;
410 case (106):
411 K = 0.44296;
412 break;
413 case (107):
414 K = 0.44296;
415 break;
416 case (108):
417 K = 0.44296;
418 break;
419 case (109):
420 K = 0.44296;
421 break;
422 case (110):
423 K = 0.44296;
424 break;
425 case (111):
426 K = 0.44296;
427 break;
428 case (112):
429 K = 0.44296;
430 break;
431 case (113):
432 K = 0.44296;
433 break;
434 case (114):
435 K = 0.44296;
436 break;
437 case (115):
438 K = 0.44296;
439 break;
440 case (116):
441 K = 0.44296;
442 break;
443 case (117):
444 K = 0.44296;
445 break;
446 case (118):
447 K = 0.44296;
448 break;
449 case (119):
450 K = 0.44296;
451 break;
452 case (120):
453 K = 0.44296;
454 break;
455 case (121):
456 K = 0.44296;
457 break;
458 case (122):
459 K = 0.44296;
460 break;
461 case (123):
462 K = 0.44296;
463 break;
464 case (124):
465 K = 0.44296;
466 break;
467 case (125):
468 K = 0.44296;
469 break;
470 case (126):
471 K = 0.44296;
472 break;
473 case (127):
474 K = 0.44296;
475 break;
476 case (128):
477 K = 0.44296;
478 break;
479 case (129):
480 K = 0.44296;
481 break;
482 case (130):
483 K = 0.44296;
484 break;
485 case (131):
486 K = 0.44296;
487 break;
488 case (132):
489 K = 0.44296;
490 break;
491 case (133):
492 K = 0.44296;
493 break;
494 case (134):
495 K = 0.44296;
496 break;
497 case (135):
498 K = 0.44296;
499 break;
500 case (136):
501 K = 0.44296;
502 break;
503 case (137):
504 K = 0.44296;
505 break;
506 case (138):
507 K = 0.44296;
508 break;
509 case (139):
510 K = 0.44296;
511 break;
512 case (140):
513 K = 0.44296;
514 break;
515 case (141):
516 K = 0.44296;
517 break;
518 case (142):
519 K = 0.44296;
520 break;
521 case (143):
522 K = 0.44296;
523 break;
524 case (144):
525 K = 0.44296;
526 break;
527 case (145):
528 K = 0.44296;
529 break;
530 case (146):
531 K = 0.44296;
532 break;
533 case (147):
534 K = 0.44296;
535 break;
536 case (148):
537 K = 0.44296;
538 break;
539 case (149):
540 K = 0.44296;
541 break;
542 case (150):
543 K = 0.44295;
544 break;
545 case (151):
546 K = 0.44295;
547 break;
548 case (152):
549 K = 0.44295;
550 break;
551 case (153):
552 K = 0.44295;
553 break;
554 case (154):
555 K = 0.44295;
556 break;
557 case (155):
558 K = 0.44295;
559 break;
560 case (156):
561 K = 0.44295;
562 break;
563 case (157):
564 K = 0.44295;
565 break;
566 case (158):
567 K = 0.44295;
568 break;
569 case (159):
570 K = 0.44295;
571 break;
572 case (160):
573 K = 0.44295;
574 break;
575 case (161):
576 K = 0.44295;
577 break;
578 case (162):
579 K = 0.44295;
580 break;
581 case (163):
582 K = 0.44295;
583 break;
584 case (164):
585 K = 0.44295;
586 break;
587 case (165):
588 K = 0.44295;
589 break;
590 case (166):
591 K = 0.44295;
592 break;
593 case (167):
594 K = 0.44295;
595 break;
596 case (168):
597 K = 0.44295;
598 break;
599 case (169):
600 K = 0.44295;
601 break;
602 case (170):
603 K = 0.44295;
604 break;
605 case (171):
606 K = 0.44295;
607 break;
608 case (172):
609 K = 0.44295;
610 break;
611 case (173):
612 K = 0.44295;
613 break;
614 case (174):
615 K = 0.44295;
616 break;
617 case (175):
618 K = 0.44295;
619 break;
620 case (176):
621 K = 0.44295;
622 break;
623 case (177):
624 K = 0.44295;
625 break;
626 case (178):
627 K = 0.44295;
628 break;
629 case (179):
630 K = 0.44295;
631 break;
632 case (180):
633 K = 0.44295;
634 break;
635 case (181):
636 K = 0.44295;
637 break;
638 case (182):
639 K = 0.44295;
640 break;
641 case (183):
642 K = 0.44295;
643 break;
644 case (184):
645 K = 0.44295;
646 break;
647 case (185):
648 K = 0.44295;
649 break;
650 case (186):
651 K = 0.44295;
652 break;
653 case (187):
654 K = 0.44295;
655 break;
656 case (188):
657 K = 0.44295;
658 break;
659 case (189):
660 K = 0.44295;
661 break;
662 case (190):
663 K = 0.44295;
664 break;
665 case (191):
666 K = 0.44295;
667 break;
668 case (192):
669 K = 0.44295;
670 break;
671 case (193):
672 K = 0.44295;
673 break;
674 case (194):
675 K = 0.44295;
676 break;
677 case (195):
678 K = 0.44295;
679 break;
680 case (196):
681 K = 0.44295;
682 break;
683 case (197):
684 K = 0.44295;
685 break;
686 case (198):
687 K = 0.44295;
688 break;
689 case (199):
690 K = 0.44295;
691 break;
692 case (200):
693 K = 0.44295;
694 break;
695 default:
696 K = 0.44295;
697 break;
698 }
699
700 return K;
701}
702
703template <typename T, uint16_t N>
705{
706 return uint16_t(1.0 + 0.44295 / (dt_ * fc_));
707}
708
709template <typename T, uint16_t N>
711{
712 return uint16_t(1.0 + 0.5 / (dt_ * fc_));
713}
void config(T dt_)
Configures the moving-average filter.
Definition ma.h:11
uint16_t get_n()
Gets the moving-average window length.
Definition ma.h:82
MA()
Constructs a moving-average filter.
Definition ma.h:5
T get_fs()
Gets the sampling frequency.
Definition ma.h:88
void set_param(T dt_)
Sets the filter parameters.
Definition ma.h:17
void reset()
Resets the filter.
Definition ma.h:51
T get_K(uint16_t N_)
Calculates the moving-average coefficient.
Definition ma.h:94
uint16_t estimate_N_min(T fc_, T dt_)
Estimates the minimum window length for a cutoff frequency.
Definition ma.h:705
T update(T x_k)
Processes a new input sample.
Definition ma.h:23
uint16_t estimate_N_max(T fc_, T dt_)
Estimates the maximum window length for a cutoff frequency.
Definition ma.h:711
T get_fc()
Gets the cutoff frequency.
Definition ma.h:69
T get_dt()
Gets the sampling time.
Definition ma.h:76
void set_dt(T dt_)
Sets the sampling time.
Definition ma.h:63
Moving-average low-pass filter.