Помогите плиз... У меня стоит задача получить более четкое значение с магнитометра.. после филтрации и компенсации в скетче получаем переменную-которая все равно при наклонах плавает, так вот хочу сделать так чтобы данные на протижении допустим 5 сек собирались(переменная) вычислялась средняя арифметическая и после этого записывалась в другую переменную.. Кто поможет разобраться? плиз
формула устроит? Если постоянная усреднения n, значение в памяти X, полученное значение х, то новое значение X= X+2(x-X)/(1+n) т.е. при каждом новом измерении вы добавляете к среднему 2(x-X)/(1+n), (x-X)- просто разница между полученным значением и средним, хранящимся в памяти. Нулевое значение (в начале работы программы) можно просто выставить равным полученному значению.
Что то по моему не то получается... тут будет вычисляться средняя с момента запуска, а это получится в моем случае ерунда-у меня динамическая система и при повороте и вычислении средней с момента старта получатся совсем неправильные координаты. сут в том чтобы данные за промежуток времени писались (не от старта) и после этого промежутка координата записывалась в переменную... ну и по новой... то есть мы сгладим скочки координат за этот кусок времени....мне скорост ненужна, а главное как можно точнее координату при наклонах кратковременных получать... Я не прав?
не совсем. Вычисляться будет "экспененциально взвешенная скользящая средняя", чем позже пришли данные- тем с большим весом они будут входить в среднюю. Для вашего конкретного случая - это самый лучший метод. Если сомневаетесь - возьмите серию данных и промоделируйте работу фильтра в электронных таблицах, это кстати поможет выбрать нужный коэффициент n. В частности, при n=1 вы получите неусредненные данные. именно поэтому я и ответил Ну можете выставить не при старте, а при получении какого - то количества отсчетов.