реклама на сайте
подробности

 
 
> Усреднение значений энкодера, Как посчитать среднее около нуля?
Corvus
сообщение Jun 14 2013, 17:33
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 24-04-08
Из: Зеленоград
Пользователь №: 37 056



Добрый день!

Есть инкрементный энкодер - разрядность 14 бит. Из-за несовершенства механики значения немного дрожат. Примерно на 1-3 значения. Чтобы избавиться от этого вычисляю арифметическое среднее для нескольких измерений. И всё бы хорошо, но в окрестности нуля такой путь не работает. Т.е. имеем набор значений 0, 0, 1, 16383, 0. После усреднения получим 3277 sad.gif

Собственно, вопрос: как лучше всего обойти эту ситуацию?
Пока вижу единственный путь - считать обороты и использовать их как старшие биты для значения текущего положения. А потом усреднять.

Но может быть есть способ проще? Задача выглядит стандартной, но что-то ничего путного не нагуглилось. Может не так ищу...

Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alex11
сообщение Jun 15 2013, 09:15
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



А если по-простому? У Вас же не бывает скачков на четверть оборота? Сначала по первому принятому значению оцениваете квадрант, затем применяете знаковое или беззнаковое усреднение. Должно получиться достаточно компактно.
Go to the top of the page
 
+Quote Post
Corvus
сообщение Jun 15 2013, 11:44
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 24-04-08
Из: Зеленоград
Пользователь №: 37 056



adnega
Спасибо. Сейчас попробую разобраться.

Цитата(Alex11 @ Jun 15 2013, 13:15) *
А если по-простому? У Вас же не бывает скачков на четверть оборота? Сначала по первому принятому значению оцениваете квадрант, затем применяете знаковое или беззнаковое усреднение. Должно получиться достаточно компактно.


На четверть не бывает. Первое значение и все последующие могут быть в разных квадрантах.

Спасибо всем за идеи a14.gif

Краткое резюме:
Вариант нахождения среднего угла. В лоб - через синусы с арктангенсами. Алгоритм красивый - не требует введения разнообразных граничных условий и возможность ошибки минимальна. На вычислительная сложность высокая. Наверняка, можно упростить вычисления.
Нашёл ветку на stackoverflow http://stackoverflow.com/questions/491738/...a-set-of-angles
разбираюсь.

Вариант второй - анализ входных данных и их фильтрация. Вычислительная сложность - низкая. Но вероятность ошибки, и возможность нарваться на такой набор данных, где алгоритм даст ошибку - высока. Так что требуется тщательное тестирование.

Буду думать и проверять smile3046.gif

UPD
Нашёл, как эта задача называется по-аглицки. Mean of circular quantities
http://en.wikipedia.org/wiki/Mean_of_circular_quantities

Из обсуждения на SO выбрал следующий код для среднего 2-х значений. Дальше в цикл и готово biggrin.gif

Код
diff = (a-b+24576)%16384-8192;
avg = (16384 + b + (diff/2)) % 16384;


Прогнал в экселе, вроде всё корректно. Ещё раз всем спасибо.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Corvus   Усреднение значений энкодера   Jun 14 2013, 17:33
- - toweroff   Я бы поступил так. Если значение от предыдущего ус...   Jun 14 2013, 18:18
|- - BvDV   может быть что то типа этого код содран от сюда ...   Jun 14 2013, 18:50
|- - toweroff   Цитата(BvDV @ Jun 14 2013, 22:50) может б...   Jun 14 2013, 19:17
|- - Corvus   Цитата(toweroff @ Jun 14 2013, 23:17) ТС,...   Jun 15 2013, 06:43
|- - adnega   Ввод цифр от 0 до 9 при помощи энкодера (по типу с...   Jun 15 2013, 07:46
- - cant   наиболее просто сделать исключение и принять 2-1-0...   Jun 14 2013, 19:21
|- - toweroff   Цитата(cant @ Jun 14 2013, 23:21) наиболе...   Jun 14 2013, 20:00
- - RabidRabbit   Может медианная фильтрация подойдёт?   Jun 14 2013, 22:22
|- - MaslovVG   В промышленных CNC Для определения положения по да...   Jun 17 2013, 05:18
- - ar__systems   КодMixedSigns = (V1 | V2 | V3 | V4) ^ ...   Jun 15 2013, 05:54
- - Iptash   У вас же не на большую велечину прыгают, если посл...   Jun 15 2013, 07:44
- - Fujitser   Просто используйте числа со знаком. Тогда 16384 пр...   Jun 16 2013, 10:14
|- - ae_   Цитата(Fujitser @ Jun 16 2013, 19:14) Про...   Jun 16 2013, 12:19
- - АНТОН КОЗЛОВ   Обрабатывая сигналы от ветряка, аналогичные эконде...   Jun 16 2013, 17:37
- - ViKo   Весь диапазон значений энкодера 0...16384 разбивае...   Jun 17 2013, 08:29
- - maksimp   Код#define N 5 uint16_t x[N]; // их будем ...   Jun 20 2013, 18:55


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 06:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01418 секунд с 7
ELECTRONIX ©2004-2016