|
|
@@ -4,6 +4,30 @@
|
|
|
#include <arm_math.h>
|
|
|
#include "math/fast_math.h"
|
|
|
#include "os/os_types.h"
|
|
|
+
|
|
|
+void avg_filter_init(avg_filter_t *f, int len) {
|
|
|
+ f->len = len;
|
|
|
+ f->idx = f->sum = 0;
|
|
|
+ f->buff = os_alloc(len * sizeof(float));
|
|
|
+ if (f->buff == NULL) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for (int i = 0; i < len; i++) {
|
|
|
+ f->buff[i] = 0;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+float avg_filter_do(avg_filter_t *f, float sample) {
|
|
|
+ if (f->buff == NULL) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ f->sum -= f->buff[f->idx];
|
|
|
+ f->buff[f->idx] = sample;
|
|
|
+ f->sum += f->buff[f->idx];
|
|
|
+ f->idx = (f->idx + 1) % f->len;
|
|
|
+ return f->sum/f->len;
|
|
|
+}
|
|
|
+
|
|
|
#if 0
|
|
|
/*
|
|
|
生成sin/cos 查找表,(0-90°,间隔0.1°)
|