|
Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения |
29.08.2011, 19:42
|
#1
|
Бывалый
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений (для 880 пользователей)
|
Фильтрация данных
Имеем девайс с акселерометром,с которого мы снимаем вектор.Но кроме вектора мы получаем еще и мусор в виде дельты.То есть даже если девайс лежит и не шевелится,в каждом фрейме мы получаем различное значение вектора.Каким образом отфильтровать мусор ? Средневзвешенное значение не проходит.
__________________
Нам суждено построить мосты и храмы,которых никогда не существовало и не могло существовать в природе.
|
(Offline)
|
|
29.08.2011, 23:26
|
#2
|
Дэвелопер
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений (для 1,460 пользователей)
|
Ответ: Фильтрация данных
нужен low-pass filter (отрезает высокие частоты и оставляет низкие)
В основном, используются два фильтра — высокочастотный (high-pass) и низкочастотный (low-pass). Эти фильтры можно использовать для отсеивания эффектов «дрожания»,
медленных поворотов и т.д.
Низкочастотный фильтр используется для нахождения ориентации устройства, высокочастотный — для определения тряски.
Самый простой низкочастотный фильтр реализует следующий код:
#define FILTERFACTOR 0.1
value = (newAcceleration * FILTERFACTOR) + (previousValue * (1.0 - FILTERFACTOR));
previousValue = value;
Самый простой высокочастотный фильтр реализует следующий код:
#define FILTERFACTOR 0.1
value = newAcceleration - (newAcceleration * FILTERFACTOR) + (previousValue * (1.0 - FILTERFACTOR));
previousValue = value;
|
взято отсюда: http://habrahabr.ru/blogs/macosxdev/65148/
Последний раз редактировалось ffinder, 29.08.2011 в 23:27.
Причина: тэги
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо ffinder за это полезное сообщение:
|
|
31.08.2011, 12:59
|
#3
|
Бывалый
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений (для 880 пользователей)
|
Ответ: Фильтрация данных
Сообщение от ffinder
Самый простой низкочастотный фильтр реализует следующий код:
#define FILTERFACTOR 0.1
value = (newAcceleration * FILTERFACTOR) + (previousValue * (1.0 - FILTERFACTOR));
previousValue = value;
Самый простой высокочастотный фильтр реализует следующий код:
#define FILTERFACTOR 0.1
value = newAcceleration - (newAcceleration * FILTERFACTOR) + (previousValue * (1.0 - FILTERFACTOR));
previousValue = value;
|
Попробовал.Особого эффекта он не дает.На то он по видимому и самый простой.Начал рассматривать это и это
__________________
Нам суждено построить мосты и храмы,которых никогда не существовало и не могло существовать в природе.
|
(Offline)
|
|
31.08.2011, 13:52
|
#4
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Фильтрация данных
Акселерометр цифровой или аналоговый? Если аналоговый, то скорее всего это шум АЦП. Выход - просто игнорировать пару младших разрядов.
|
(Offline)
|
|
31.08.2011, 15:09
|
#5
|
Бывалый
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений (для 880 пользователей)
|
Ответ: Фильтрация данных
Аналоговый.Каким образом игнорировать?
__________________
Нам суждено построить мосты и храмы,которых никогда не существовало и не могло существовать в природе.
|
(Offline)
|
|
31.08.2011, 18:33
|
#6
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Фильтрация данных
Получил, проверил, есть что нада - обработал, то что не нада - проигнорировал.
Получил, проверил, есть только то что не нада - проигнорировал.
Чтобы определить что нада а что нет, у тебя же есть спецификация бинарных данных, так? Так вот и пляши от неё.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
31.08.2011, 18:36
|
#7
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Фильтрация данных
Сообщение от Lestar
Аналоговый.Каким образом игнорировать?
|
Допустим, разрядность АЦП - 10 бит (АЦП МК ATMega8).
Напряжение вычисляется по формуле V=Val*Vref/(2^n-1), где n - разрядность АЦП, Val-значение, снимаемое с АЦП, Vref - опорное напряжение.
Чтобы отсечь шумы, сдвигаем Val на 2 бита вправо, а разрядность (n) уменьшаем на те же 2. То есть, вместо V=Val*Vref/1023 пишем V=(Val shr 2)*Vref/255. Таким образом, получаем 8-разрядный АЦП вместо 10-разрядного, зато отсекаются шумы.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
31.08.2011, 20:39
|
#8
|
Бывалый
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений (для 880 пользователей)
|
Ответ: Фильтрация данных
Сообщение от MoKa
Чтобы определить что нада а что нет, у тебя же есть спецификация бинарных данных, так?
|
Я (конкретно мой случай)имею только в вектору.Я не имею доступ к девайсу.
__________________
Нам суждено построить мосты и храмы,которых никогда не существовало и не могло существовать в природе.
|
(Offline)
|
|
31.08.2011, 20:52
|
#9
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Фильтрация данных
Установи диапазон частот шума. Впиши соответствующий фильтр
http://ru.wikipedia.org/wiki/Линейная_фильтрация например покури.
Ну и ключевое слово для поиска "ЦОС" (цифровая обработка сигнала - дисциплина такая в ВУЗах есть).
Шум АЦП, как уже говорилось, подавляется игнорированием младших разрядов. Хотя и тут бы можно было провести спектральный анализ снятых данных (для уточнения картины) - делов то.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
31.08.2011, 20:57
|
#10
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Фильтрация данных
Сообщение от Lestar
Я (конкретно мой случай)имею только в вектору.Я не имею доступ к девайсу.
|
Так а в чём проблема тогда? Не трогай этот вектор, не парься о нём..
Я как понял тут вовсе никакой проблемы с акселерометром, лишь с логикой приложения..
|
(Offline)
|
|
31.08.2011, 21:33
|
#11
|
Бывалый
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений (для 880 пользователей)
|
Ответ: Фильтрация данных
Я снимаю с девайса через прослойку вектор.Вектор с шумами.Как я уже писал выше,даже при лежащем девайсе значение вектора изменяется в пределах +/- 30%.Мне эти колебания нужно сгладить/отфильтровать до вменяемых значений.К самому девайсу/прослойке доступа нет.Я могу оперировать только значением вектора.
__________________
Нам суждено построить мосты и храмы,которых никогда не существовало и не могло существовать в природе.
|
(Offline)
|
|
31.08.2011, 21:41
|
#12
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Фильтрация данных
Запиши компоненты вектора во времени. У тебя получится три сигнала (компонента от времени). Построй их спектры. Если это действительно шум, который можно отделить (в противном случае задача нерешаема и для челвоека), то у него будет некое выраженное преобладание в распределении по частотам. Именно эти частоты можно подавить (особенно если они не пересекаются с областью рабочих частот (см. выше)), указав соответствующие параметры фильтра.
Кроме того (навряд ли твой случай) частотное распределение паразитных сигналов, порой, может позволить локализовать причину и источник помех.
http://ru.wikipedia.org/wiki/Дискрет...азование_Фурье
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.05.2013, 23:14
|
#13
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Фильтрация данных
Кстати фильтрацию можно реализовать с помощью этой библиотеки. (Во 2-ом посте приводится упрощённое частное решение).
// на случай, если кто-то вновь будет искать решение проблемы
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:17.
|