Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F3 FPU для фильтрации
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
serjj
Всем доброго дня.
Еще немного нубских вопросов про stm от плисовода.. )
Есть STM32F303, который принимает данные с датчиков LSM303DLHC (магнетометр + акселерометр) и L3GD20 (гироскоп, на самом деле измеряет угловую скорость). Итого получается 9 каналов, предварительно: 3x220Гц, 3х50Гц, 3х95Гц. В силу низкочастотного характера измеряемых процессов, ставлю ФНЧ с достаточно узкой полосой. На каждом канале сначала делаю медианный фильтр с окном 7, а потом FIR фильтр с порядком 32-64. Все операции во floating point. Затем децимация всех каналов до 10 Гц и там окончательные рассчёты также в плавучке и передача данных "вверх". Вероятно, что какой-то еще значительной вычислительной нагрузки сверх описанной не будет. Пока проверял с фильтрами до 48 порядка по отдельным группам каналов, вроде все ок.
Интересуют вычислительные возможности FPU на борту - какие тут могут быть подводные камни при запуске всех каналов? Или если я захочу, например поднять порядки FIR фильтров до 64-128? Как правильно оценить его силы и на какой вычислительной загрузке лучше остановиться, чтобы не было неожиданных сюрпризов, когда он начнёт не успевать обрабатывать поток. Или я может быть зря беспокоюсь и такие полосы для него это фигня и смело можно лепить длинные фильтры?
Заранее благодарен!
Dr.Alex
Ну во-первых заранее приготовьтесь делать ваш фир через бпф.
В облом считать, но есть ощущение что вам хватит.
Опять же, не знаю что там в F3xx, но на F4xx комплексный бпф 1024 точки 16 бит это чуть менее 100000 тактов.
jcxz
Цитата(serjj @ Jun 10 2015, 15:16) *
Интересуют вычислительные возможности FPU на борту - какие тут могут быть подводные камни при запуске всех каналов? Или если я захочу, например поднять порядки FIR фильтров до 64-128? Как правильно оценить его силы и на какой вычислительной загрузке лучше остановиться, чтобы не было неожиданных сюрпризов, когда он начнёт не успевать обрабатывать поток. Или я может быть зря беспокоюсь и такие полосы для него это фигня и смело можно лепить длинные фильтры?

Если у Вас уже есть какие-то расчёты и хочется знать, что будет при кратном увеличени их кол-ва, то в чём проблема измерить текущую загрузку CPU и сделать прогноз на основании этих данных?
adnega
Цитата(serjj @ Jun 10 2015, 12:16) *
Пока проверял с фильтрами до 48 порядка по отдельным группам каналов, вроде все ок.

Попробуйте вывести на пин время работы фильтра. Т.е. перед началом работы фильтра пин устанавливайте в единичку,
после работы фильтра пин устанавливайте в 0. Осциллографом можно посмотреть сколько мкс длится работа. Поделив на период можно получить загрузку CPU.
Сложив все нагрузки по всем фильтрам можно получить общую загрузку CPU.

serjj
Цитата
Ну во-первых заранее приготовьтесь делать ваш фир через бпф.
В облом считать, но есть ощущение что вам хватит.
Опять же, не знаю что там в F3xx, но на F4xx комплексный бпф 1024 точки 16 бит это чуть менее 100000 тактов.

А почему через бпф? Он и в лоб работает. У меня же не супер длины и фильтр не комплексный, не вижу какой тут будет выигрыш от бпф.

Цитата
Если у Вас уже есть какие-то расчёты и хочется знать, что будет при кратном увеличени их кол-ва, то в чём проблема измерить текущую загрузку CPU и сделать прогноз на основании этих данных?

Пока есть только наблюдения по работе в отдельных группах каналов и анализ этих наблюдений в матлабе (пользовался STM Studio для захвата данных).

Цитата
Попробуйте вывести на пин время работы фильтра. Т.е. перед началом работы фильтра пин устанавливайте в единичку,
после работы фильтра пин устанавливайте в 0. Осциллографом можно посмотреть сколько мкс длится работа. Поделив на период можно получить загрузку CPU.

Интересная идея, думаю грубо с помощью таймера можно еще получить оценку..

Если данные будут не успевать отрабатываться, это как-то можно отследить через тот же STM Studio?
jcxz
Цитата(serjj @ Jun 10 2015, 16:27) *
Если данные будут не успевать отрабатываться, это как-то можно отследить через тот же STM Studio?

Программу вообще-то пишете Вы, значит Вы и должны знать когда переполняются Ваши FIFO-буфера (или что там используете для буферизации данных).
Самурай
Цитата(serjj @ Jun 10 2015, 13:16) *
Всем доброго дня.
Еще немного нубских вопросов про stm от плисовода.. )
...Итого получается 9 каналов, предварительно: 3x220Гц, 3х50Гц, 3х95Гц. ...сначала делаю медианный фильтр с окном 7, а потом FIR фильтр с порядком 32-64. ...Затем децимация всех каналов до 10 Гц и там окончательные рассчёты


Вам, как плисоводу, мне и неудобно даже как-то напоминать про полифазную рализацию фильтровsm.gif
Считайте все на 10Гц, какие уж тут ресурсы прости господи..., так, слезы одни...
Aner
Если можете то опишите вашу цель или рашаемую задачу вашими датчиками LSM303DLHC (магнетометр + акселерометр) и L3GD20. Свою решил успешно. Фильтры фнч есть в чипах, зачем еще в софте? Конечно никакого бпф там не нужно, также как и CIC, FIR фильтры. Многие задачи решаются, если грубо - медианными, временными, калмановскими фильтрами перед кватернионной матрицей. Если решаете 3D, то как у многих с разнесенными датчиками возникнут проблемы с накоплением ошибок, синхронизацией, соосностью вертикалей и тп. От которых не так просто избавиться. А про производительности чипа хватит за глаза, если не лезть в бпф и цифровую фильтрацию высоких порядков.
Golikov A.
судя по набору это дискавер STM32F3, там гироскопы и акселерометры разнесены и очень неудобно стоят на плате...

на е-бае есть новый вариант чипа в нем сразу гироскоп, компас, акселерометр, распаян на платку малюсенькую, и главное что внутри уже есть какой-то решатель, который дает положение, не надо маяться с калманом или альфа-бета фильтрами. Сырые данные также доступны.
mpu-9150 поглядите может вам он больше понравиться чем так активно фильтровать 9 каналовsm.gif
serjj
Цитата
...про полифазную рализацию фильтров
Считайте все на 10Гц, какие уж тут ресурсы прости господи

Надеюсь до этого не дойдёт biggrin.gif

Цитата
Если можете то опишите вашу цель или рашаемую задачу вашими датчиками LSM303DLHC (магнетометр + акселерометр) и L3GD20. Свою решил успешно. Фильтры фнч есть в чипах, зачем еще в софте? Конечно никакого бпф там не нужно, также как и CIC, FIR фильтры. Многие задачи решаются, если грубо - медианными, временными, калмановскими фильтрами перед кватернионной матрицей. Если решаете 3D, то как у многих с разнесенными датчиками возникнут проблемы с накоплением ошибок, синхронизацией, соосностью вертикалей и тп. От которых не так просто избавиться. А про производительности чипа хватит за глаза, если не лезть в бпф и цифровую фильтрацию высоких порядков.

Одна пара датчиков: то есть LSM303DLHC и L3GD20. Стоит задача определения ориентации по сторонам света и определение положения в пространстве, а также самостабилизация. Движение по электронным меркам медленное, поэтому процессы, как я описал низкочастотные. Всё что выше 3-5 Гц считаю хламом, вибрацией и магнитными наводками. Экспериментирую пока на демо от STM для Discovery, снёс все лишнее, сижу играюсь с фильтрами и настройками датчиков.

LSM303DLHC используется чтобы определять положение в полярной системе координат по акселерометру и соответственно направление на север. L3GD20 - для определения вращения и подачи этого сигнала на алгоритм стабилизации, который должен это вращение подавить. Ну, пока такая идея во всяком случае.

Медианное сглаживание малым окном применяю чтобы избавиться от резких коротких выбросов в сигнале (вы кстати такие наблюдали у себя? природа их мне пока неясна..). Далее чтобы избавиться от шумов и эффектов вибрации добавляю FIR с очень узкой полосой и подавлением около 30 дБ. Делал в лоб как FIR с симметричной вещественной импульсной. Например, полосу магнетометра выставил 220 Гц (если беру ниже, то сигнал идёт какими-то скачками), а фильтруюсь до полосы ~2-3 Гц с подавлением ~25-30 дБ фильтром 48 порядка. К слову сначала думал пользоваться фильтрами в датчиках, но смутило полное отсутствие в документации их описания. Они упоминаются в registers description, а какие у них полосы, характеристики - глухо. Поэтому решил, что такой кот в мешке мне не нужен и пилю свою фильтрацию.

Про применение Калмана в данных задачах слышал, но мне кажется, что для моего случая это перебор. Если вы применяли его в месте с данными датчиками, то расскажите, будет интересно узнать как и зачем, чем адаптивная фильтрация здесь улучшит качество сигнала в сравнении с обычной. Тем более такая серьезная. Может быть я неправ, но мое личное понимание, что Калман применим уже на верхнем уровне и работает с сигналами после шумовой фильтрации для решения комплексной задачи навигации. И что такое кватернионная матрица, аж интересно стало rolleyes.gif

Цитата
mpu-9150 поглядите может вам он больше понравиться чем так активно фильтровать 9 каналов

Спасибо, но к сожалению счастью, не я принимаю решение, какие камни ставить. Но про него почитаю rolleyes.gif
Aner
QUOTE (Golikov A. @ Jun 10 2015, 15:09) *
судя по набору это дискавер STM32F3, там гироскопы и акселерометры разнесены и очень неудобно стоят на плате...

на е-бае есть новый вариант чипа в нем сразу гироскоп, компас, акселерометр, распаян на платку малюсенькую, и главное что внутри уже есть какой-то решатель, который дает положение, не надо маяться с калманом или альфа-бета фильтрами. Сырые данные также доступны.
mpu-9150 поглядите может вам он больше понравиться чем так активно фильтровать 9 каналовsm.gif

... "надо, Федя надо.." фраза из того фильмеца.
A mpu-9150 -> NOTE: Not recommended for new designs, у них поновее есть, ... не дёшево.
ОТДЕЛЬНЫЕ чипы обработчики MEMов, кушают мало.
----------
C кватернионов и матриц начните, может какая неделька понадобится. Да и калман не такой и сложный.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.