Filters
1.0
LPF, HPF, BPF, BSF, SRL
Toggle main menu visibility
Loading...
Searching...
No Matches
ma.tpp
Go to the documentation of this file.
1
#include "
../../include/low_pass/ma.h
"
2
3
template
<
typename
T, u
int
16_t N>
4
filter::low_pass::MA<T, N>::MA
()
5
{
6
reset();
7
}
8
9
template
<
typename
T, u
int
16_t N>
10
void
filter::low_pass::MA<T, N>::config
(T dt_)
11
{
12
set_param(dt_);
13
}
14
15
template
<
typename
T, u
int
16_t N>
16
void
filter::low_pass::MA<T, N>::set_param
(T dt_)
17
{
18
dt = dt_;
19
}
20
21
template
<
typename
T, u
int
16_t N>
22
T
filter::low_pass::MA<T, N>::update
(T x_k)
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
49
template
<
typename
T, u
int
16_t N>
50
void
filter::low_pass::MA<T, N>::reset
()
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
61
template
<
typename
T, u
int
16_t N>
62
void
filter::low_pass::MA<T, N>::set_dt
(T dt_)
63
{
64
set_param(dt_);
65
}
66
67
template
<
typename
T, u
int
16_t N>
68
T
filter::low_pass::MA<T, N>::get_fc
()
69
{
70
T K = get_K(n);
71
return
K / (dt * n);
// approximate
72
}
73
74
template
<
typename
T, u
int
16_t N>
75
T
filter::low_pass::MA<T, N>::get_dt
()
76
{
77
return
dt;
78
}
79
80
template
<
typename
T, u
int
16_t N>
81
uint16_t
filter::low_pass::MA<T, N>::get_n
()
82
{
83
return
n;
84
}
85
86
template
<
typename
T, u
int
16_t N>
87
T
filter::low_pass::MA<T, N>::get_fs
()
88
{
89
return
1.0 / dt;
90
}
91
92
template
<
typename
T, u
int
16_t N>
93
T
filter::low_pass::MA<T, N>::get_K
(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
703
template
<
typename
T, u
int
16_t N>
704
uint16_t
filter::low_pass::MA<T, N>::estimate_N_min
(T fc_, T dt_)
705
{
706
return
uint16_t(1.0 + 0.44295 / (dt_ * fc_));
707
}
708
709
template
<
typename
T, u
int
16_t N>
710
uint16_t
filter::low_pass::MA<T, N>::estimate_N_max
(T fc_, T dt_)
711
{
712
return
uint16_t(1.0 + 0.5 / (dt_ * fc_));
713
}
filter::low_pass::MA::config
void config(T dt_)
Configures the moving-average filter.
Definition
ma.h:11
filter::low_pass::MA::get_n
uint16_t get_n()
Gets the moving-average window length.
Definition
ma.h:82
filter::low_pass::MA::MA
MA()
Constructs a moving-average filter.
Definition
ma.h:5
filter::low_pass::MA::get_fs
T get_fs()
Gets the sampling frequency.
Definition
ma.h:88
filter::low_pass::MA::set_param
void set_param(T dt_)
Sets the filter parameters.
Definition
ma.h:17
filter::low_pass::MA::reset
void reset()
Resets the filter.
Definition
ma.h:51
filter::low_pass::MA::get_K
T get_K(uint16_t N_)
Calculates the moving-average coefficient.
Definition
ma.h:94
filter::low_pass::MA::estimate_N_min
uint16_t estimate_N_min(T fc_, T dt_)
Estimates the minimum window length for a cutoff frequency.
Definition
ma.h:705
filter::low_pass::MA::update
T update(T x_k)
Processes a new input sample.
Definition
ma.h:23
filter::low_pass::MA::estimate_N_max
uint16_t estimate_N_max(T fc_, T dt_)
Estimates the maximum window length for a cutoff frequency.
Definition
ma.h:711
filter::low_pass::MA::get_fc
T get_fc()
Gets the cutoff frequency.
Definition
ma.h:69
filter::low_pass::MA::get_dt
T get_dt()
Gets the sampling time.
Definition
ma.h:76
filter::low_pass::MA::set_dt
void set_dt(T dt_)
Sets the sampling time.
Definition
ma.h:63
ma.h
Moving-average low-pass filter.
src
low_pass
ma.tpp
Generated by
1.17.0