Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 29.08.2011, 19:42   #1
Lestar
Бывалый
 
Аватар для Lestar
 
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений
(для 880 пользователей)
Фильтрация данных

Имеем девайс с акселерометром,с которого мы снимаем вектор.Но кроме вектора мы получаем еще и мусор в виде дельты.То есть даже если девайс лежит и не шевелится,в каждом фрейме мы получаем различное значение вектора.Каким образом отфильтровать мусор ? Средневзвешенное значение не проходит.
__________________
Нам суждено построить мосты и храмы,которых никогда не существовало и не могло существовать в природе.
(Offline)
 
Ответить с цитированием
Старый 29.08.2011, 23:26   #2
ffinder
Дэвелопер
 
Аватар для ffinder
 
Регистрация: 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 за это полезное сообщение:
.Squid (30.08.2011), Lestar (29.08.2011), moka (31.08.2011), SBJoker (30.08.2011)
Старый 31.08.2011, 12:59   #3
Lestar
Бывалый
 
Аватар для Lestar
 
Регистрация: 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
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Фильтрация данных

Акселерометр цифровой или аналоговый? Если аналоговый, то скорее всего это шум АЦП. Выход - просто игнорировать пару младших разрядов.
(Offline)
 
Ответить с цитированием
Старый 31.08.2011, 15:09   #5
Lestar
Бывалый
 
Аватар для Lestar
 
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений
(для 880 пользователей)
Ответ: Фильтрация данных

Аналоговый.Каким образом игнорировать?
__________________
Нам суждено построить мосты и храмы,которых никогда не существовало и не могло существовать в природе.
(Offline)
 
Ответить с цитированием
Старый 31.08.2011, 18:33   #6
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Фильтрация данных

Получил, проверил, есть что нада - обработал, то что не нада - проигнорировал.
Получил, проверил, есть только то что не нада - проигнорировал.

Чтобы определить что нада а что нет, у тебя же есть спецификация бинарных данных, так? Так вот и пляши от неё.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Lestar (31.08.2011)
Старый 31.08.2011, 18:36   #7
ViNT
Модератор
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Lestar (31.08.2011)
Старый 31.08.2011, 20:39   #8
Lestar
Бывалый
 
Аватар для Lestar
 
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений
(для 880 пользователей)
Ответ: Фильтрация данных

Сообщение от MoKa Посмотреть сообщение
Чтобы определить что нада а что нет, у тебя же есть спецификация бинарных данных, так?
Я (конкретно мой случай)имею только в вектору.Я не имею доступ к девайсу.
__________________
Нам суждено построить мосты и храмы,которых никогда не существовало и не могло существовать в природе.
(Offline)
 
Ответить с цитированием
Старый 31.08.2011, 20:52   #9
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Фильтрация данных

Установи диапазон частот шума. Впиши соответствующий фильтр
http://ru.wikipedia.org/wiki/Линейная_фильтрация например покури.
Ну и ключевое слово для поиска "ЦОС" (цифровая обработка сигнала - дисциплина такая в ВУЗах есть).

Шум АЦП, как уже говорилось, подавляется игнорированием младших разрядов. Хотя и тут бы можно было провести спектральный анализ снятых данных (для уточнения картины) - делов то.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Lestar (31.08.2011)
Старый 31.08.2011, 20:57   #10
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Фильтрация данных

Сообщение от Lestar Посмотреть сообщение
Я (конкретно мой случай)имею только в вектору.Я не имею доступ к девайсу.
Так а в чём проблема тогда? Не трогай этот вектор, не парься о нём..

Я как понял тут вовсе никакой проблемы с акселерометром, лишь с логикой приложения..
(Offline)
 
Ответить с цитированием
Старый 31.08.2011, 21:33   #11
Lestar
Бывалый
 
Аватар для Lestar
 
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений
(для 880 пользователей)
Ответ: Фильтрация данных

Я снимаю с девайса через прослойку вектор.Вектор с шумами.Как я уже писал выше,даже при лежащем девайсе значение вектора изменяется в пределах +/- 30%.Мне эти колебания нужно сгладить/отфильтровать до вменяемых значений.К самому девайсу/прослойке доступа нет.Я могу оперировать только значением вектора.
__________________
Нам суждено построить мосты и храмы,которых никогда не существовало и не могло существовать в природе.
(Offline)
 
Ответить с цитированием
Старый 31.08.2011, 21:41   #12
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Фильтрация данных

Запиши компоненты вектора во времени. У тебя получится три сигнала (компонента от времени). Построй их спектры. Если это действительно шум, который можно отделить (в противном случае задача нерешаема и для челвоека), то у него будет некое выраженное преобладание в распределении по частотам. Именно эти частоты можно подавить (особенно если они не пересекаются с областью рабочих частот (см. выше)), указав соответствующие параметры фильтра.
Кроме того (навряд ли твой случай) частотное распределение паразитных сигналов, порой, может позволить локализовать причину и источник помех.

http://ru.wikipedia.org/wiki/Дискрет...азование_Фурье
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Lestar (31.08.2011)
Старый 18.05.2013, 23:14   #13
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Фильтрация данных

Кстати фильтрацию можно реализовать с помощью этой библиотеки. (Во 2-ом посте приводится упрощённое частное решение).
// на случай, если кто-то вновь будет искать решение проблемы
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 19:17.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com