mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-27 06:32:19 +03:00
reverting version
This commit is contained in:
16
lib/GyverFilters/examples/GFilterRA/GFilterRA.ino
Normal file
16
lib/GyverFilters/examples/GFilterRA/GFilterRA.ino
Normal file
@@ -0,0 +1,16 @@
|
||||
#include "GyverFilters.h"
|
||||
GFilterRA analog0; // фильтр назовём analog0
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
|
||||
// установка коэффициента фильтрации (0.0... 1.0). Чем меньше, тем плавнее фильтр
|
||||
analog0.setCoef(0.01);
|
||||
|
||||
// установка шага фильтрации (мс). Чем меньше, тем резче фильтр
|
||||
analog0.setStep(10);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
Serial.println(analog0.filteredTime(analogRead(0)));
|
||||
}
|
||||
32
lib/GyverFilters/examples/GLinear_arrays/GLinear_arrays.ino
Normal file
32
lib/GyverFilters/examples/GLinear_arrays/GLinear_arrays.ino
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
Пример линейной аппроксимации методом наименьших квадратов
|
||||
Два массива: по оси Х и по оси У
|
||||
Линейная аппроксимация повозоляет получить уравнение прямой,
|
||||
равноудалённой от точек на плоскости ХУ. Удобно для расчёта
|
||||
роста изменяющейся шумящей величины. Уравнение вида у = A*x + B
|
||||
В папке с данным примером есть скриншот из excel,
|
||||
иллюстрирующий работу аппроксимации с такими же исходными
|
||||
*/
|
||||
|
||||
// два массива с данными (одинаковой размероности и размера)
|
||||
int x_array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
|
||||
int y_array[] = {1, 5, 2, 8, 3, 9, 10, 5, 15, 12};
|
||||
|
||||
#include <GyverFilters.h>
|
||||
GLinear<int> test; // указываем тип данных в <>
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
|
||||
// передаём массивы и размер одного из них
|
||||
test.compute((int*)x_array, (int*)y_array, sizeof(x_array));
|
||||
|
||||
// Уравнение вида у = A*x + B
|
||||
Serial.println(test.getA()); // получить коэффициент А
|
||||
Serial.println(test.getB()); // получить коэффициент В
|
||||
Serial.println(test.getDelta()); // получить изменение (аппроксимированное)
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
}
|
||||
BIN
lib/GyverFilters/examples/GLinear_arrays/excel.jpg
Normal file
BIN
lib/GyverFilters/examples/GLinear_arrays/excel.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 48 KiB |
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
Пример линейной аппроксимации методом наименьших квадратов
|
||||
Два массива: по оси Х и по оси У
|
||||
Наполнение массивов осуществляется динамически: сдвигом и записью в крайнюю ячейку,
|
||||
то есть аппроксимация по последним ARRAY_SIZE изменениям!!
|
||||
*/
|
||||
#define ARRAY_SIZE 10 // размер пространства для аппроксимации
|
||||
|
||||
// два массива с данными (одинаковой размероности и размера)
|
||||
int x_array[ARRAY_SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // ось x от 1 до 10, допустим СЕКУНД
|
||||
int y_array[ARRAY_SIZE]; // значения по оси У будем брать с датчика
|
||||
|
||||
#include <GyverFilters.h>
|
||||
GLinear<int> test; // указываем тип данных в <>
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
for (byte i = 0; i < ARRAY_SIZE - 1; i++) { // счётчик от 0 до ARRAY_SIZE
|
||||
y_array[i] = y_array[i + 1]; // сдвинуть массив давлений КРОМЕ ПОСЛЕДНЕЙ ЯЧЕЙКИ на шаг назад
|
||||
}
|
||||
// последний элемент массива теперь - новое значение (просто с аналог. датчика)
|
||||
y_array[ARRAY_SIZE - 1] = analogRead(0);
|
||||
|
||||
// передаём массивы и размер одного из них
|
||||
test.compute((int*)x_array, (int*)y_array, sizeof(x_array));
|
||||
|
||||
// по нашим исходным данным это будет производная, т.е. "изменение единиц в секунду"
|
||||
Serial.println(test.getDelta()); // получить изменение (аппроксимированное)
|
||||
|
||||
delay(1000); // секундная задержка
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
Пример альфа-бета фильтра
|
||||
*/
|
||||
|
||||
#include "GyverFilters.h"
|
||||
|
||||
// параметры: период дискретизации (измерений), process variation, noise variation
|
||||
GABfilter testFilter(0.08, 40, 1);
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
delay(80);
|
||||
int value = analogRead(0);
|
||||
value += random(2) * random(-1, 2) * random(10, 70);
|
||||
Serial.print("$");
|
||||
Serial.print(value);
|
||||
Serial.print(" ");
|
||||
value = testFilter.filtered((int)value);
|
||||
Serial.print(value);
|
||||
Serial.println(";");
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
Сравнение калмана и бегущего среднего
|
||||
*/
|
||||
#include "GyverFilters.h"
|
||||
|
||||
// параметры: разброс измерения, разброс оценки, скорость изменения значений
|
||||
// разброс измерения: шум измерений
|
||||
// разброс оценки: подстраивается сам, можно поставить таким же как разброс измерения
|
||||
// скорость изменения значений: 0.001-1, варьировать самому
|
||||
|
||||
GKalman kalman(90, 90, 0.5);
|
||||
GFilterRA average(0.5, 80);
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
int value = analogRead(0);
|
||||
value += random(2) * random(-1, 2) * random(50, 100);
|
||||
Serial.print("$");
|
||||
Serial.print(value);
|
||||
Serial.print(" ");
|
||||
|
||||
Serial.print((int)kalman.filtered(value));
|
||||
Serial.print(" ");
|
||||
Serial.print((int)average.filtered(value));
|
||||
Serial.println(";");
|
||||
delay(80);
|
||||
}
|
||||
31
lib/GyverFilters/examples/kalman_example/kalman_example.ino
Normal file
31
lib/GyverFilters/examples/kalman_example/kalman_example.ino
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
Пример простого одномерного фильтра
|
||||
*/
|
||||
|
||||
#include "GyverFilters.h"
|
||||
|
||||
// параметры: разброс измерения, разброс оценки, скорость изменения значений
|
||||
// разброс измерения: шум измерений
|
||||
// разброс оценки: подстраивается сам, можно поставить таким же как разброс измерения
|
||||
// скорость изменения значений: 0.001-1, варьировать самому
|
||||
|
||||
GKalman testFilter(40, 40, 0.5);
|
||||
|
||||
// также может быть объявлен как (разброс измерения, скорость изменения значений)
|
||||
// GKalman testFilter(40, 0.5);
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
delay(80);
|
||||
int value = analogRead(0);
|
||||
value += random(2) * random(-1, 2) * random(10, 70);
|
||||
Serial.print("$");
|
||||
Serial.print(value);
|
||||
Serial.print(" ");
|
||||
value = testFilter.filtered((int)value);
|
||||
Serial.print(value);
|
||||
Serial.println(";");
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
Пример использования быстрого медианного фильтра 3 порядка
|
||||
*/
|
||||
|
||||
#include "GyverFilters.h"
|
||||
GMedian3<int> testFilter; // указываем тип данных в <>
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
int value = analogRead(0);
|
||||
// добавляем шум "выбросы"
|
||||
value += random(2) * random(2) * random(-1, 2) * random(50, 250);
|
||||
Serial.print(value);
|
||||
Serial.print(',');
|
||||
value = testFilter.filtered(value);
|
||||
Serial.println(value);
|
||||
delay(80);
|
||||
}
|
||||
23
lib/GyverFilters/examples/median_example/median_example.ino
Normal file
23
lib/GyverFilters/examples/median_example/median_example.ino
Normal file
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
Пример использования медианного фильтра.
|
||||
*/
|
||||
|
||||
#include "GyverFilters.h"
|
||||
|
||||
// указываем размер окна и тип данных в <>
|
||||
GMedian<10, int> testFilter;
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
delay(80);
|
||||
int value = analogRead(0);
|
||||
// добавляем шум "выбросы"
|
||||
value += random(2) * random(2) * random(-1, 2) * random(50, 250);
|
||||
Serial.print(value);
|
||||
Serial.print(',');
|
||||
value = testFilter.filtered(value);
|
||||
Serial.println(value);
|
||||
}
|
||||
Reference in New Issue
Block a user