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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> STM32F4: цифровой фильтр АЦП
k000858
сообщение Jan 14 2015, 04:21
Сообщение #31


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(VAI @ Jan 13 2015, 15:32) *
Медианный фильтр не пропускает выбросы длительностью меньше половины ширины фильтра. Т.е. если у Вас 31 точка, то шумовые выбросы длительностью меньше или равно времени 15 отсчетов не пройдут через фильтр. Думайте сами.
И после резестивного делителя повторитель поствьте.

т.е. допустим на входе АЦП 0В, после оцифровки 31 точки результаты: 0 0 0 0 0 0 0 0 0 0 10 10 0 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6, результаты 10 10 не попадут в результаты а 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 попадут. так?

что будет с такого вида результатами?

Код
ADC_Volt_0: 8
ADC_Volt_1: 0
ADC_Volt_2: 0
ADC_Volt_3: 4
ADC_Volt_4: 11
ADC_Volt_5: 5
ADC_Volt_6: 0
ADC_Volt_7: 4
ADC_Volt_8: 3
ADC_Volt_9: 5
ADC_Volt_10: 5
ADC_Volt_11: 0
ADC_Volt_12: 0
ADC_Volt_13: 10
ADC_Volt_14: 0
ADC_Volt_15: 0
ADC_Volt_16: 5
ADC_Volt_17: 6
ADC_Volt_18: 6
ADC_Volt_19: 0
ADC_Volt_20: 3
ADC_Volt_21: 3
ADC_Volt_22: 6
ADC_Volt_23: 0
ADC_Volt_24: 0
ADC_Volt_25: 3
ADC_Volt_26: 5
ADC_Volt_27: 2
ADC_Volt_28: 0
ADC_Volt_29: 5
ADC_Volt_30: 11


Наткнулся на аппноут ST AN4073 http://www.st.com/web/en/resource/technica.../DM00050879.pdf

Описанный в нем способ показал наилучшие результаты в моем случае (применил способ сортировка + усреднение)
Как называется такой способ ? как выбрать оптимальные N и X ?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 14 2015, 06:00
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



сортировка и усреднение - медиана?

классическая 4 точечная медиана.
берет 4 значения, выкидывает из них самое большое и самое маленькое, два оставшихся усредняет.

дальше вы можете выбирать сколько самых больших и маленьких значений выкинуть, и сколько усреднить.

как вы сами понимаете если у вас значения вида

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

то есть к примеру у вас 4 точечная медиана

а а а а = а
а а а б = а
а а б б = (а+б)/2
а б б б = (а+б)/2
б б б б = б
и дальше начнет спадать, ваш всплеск прошел.
а если медиана будет отбрасывать по 5 значений, то все 5 б всегда будут в максимумах и отброшены и не пройдут на выход никогда. Но с другой стороны количество отброшенных значений определяет число накапливаемых результатов, и как следствие задержку выдачи сигнала, то есть в нашем же примере 4 точечной медианы
допустим б - это не выброс а реальная смена сигнала, только через 4 значения после появления нового сигнала на входе, он появился на выходе. Опять же не только всплески, но и короткие изменения полезного сигнала будут отброшены, то есть при фильтрации синуса условно его горбы будут срезаны, то есть зарезана амплитуда.

вот из этих соображений и выбирайте, а других рецептов никто не даст. Баланс между шумом и правильностью измерений





Go to the top of the page
 
+Quote Post
k000858
сообщение Jan 14 2015, 07:28
Сообщение #33


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(Golikov A. @ Jan 14 2015, 09:00) *

о! большое спасибо за объяснение. теперь все понял.

Сообщение отредактировал IgorKossak - Jan 14 2015, 09:53
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 14 2015, 08:21
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



а б б б = б ?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 14 2015, 08:44
Сообщение #35


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



а если кругом одни б б, то что выдаст описанный выше фильтер? Если нечего отбрасывать, не отбрасывайте ничего. Это к вопросу о пяти б. Что значит "не пройдут никогда"? А что же тогда выдавать?
Видимо, я не до конца понял. А 4 - точечный медианный фильтр с усреднением - интересно, чувствую, что можно реализовать и аппаратно, в ПЛИС, например. Хотя, на мой взгляд - это уже два фильтра.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 14 2015, 09:16
Сообщение #36


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



я имел ввиду про исходную последовательность....

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

Цитата
а б б б = б ?

да, почему нет...

допустим а меньше б.

тогда самое маленькое из этих 4 что? а.
самое большое из них что? б
а и б отбрасывается остается б б
(б+б)/2 = б

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

это позволяет сигналам вида
а а а а б а а а а а б а а а б а а а а а б а а а а а,
то есть с единичными выбросами всегда от них избавляться... не зависимо от того куда эти выбросы вверх или вниз.

при этом как бы числом отбрасываемых регулируется интенсивность выбросов, считая что окно фильтра пропорционально раздвигается...

то есть 4 точечный уже почувствует влияние выбросов , если между ними будет менее 3 "правильных" сигналов, а увеличив число отбрасываемых значений и длину фильтра мы "затянем" фильтр ближе к более стабильному сигналу, и сможем откидывать более интенсивные выбросы.

Цитата
точечный медианный фильтр с усреднением - интересно, чувствую, что можно реализовать и аппаратно, в ПЛИС, например.


не знаю, всегда считал что усреднение должно быть. Зачем забирать N значений N/2 от них выбрасывать, и из оставшихся N/2 значений использовать только 1, зачем остальные то были нужны? и как выбрать то единственное? если у нас 1 2 3 4, то что на выходе 2 или 3? Почему 2 или почему 3? а так на выходе 2.5 и никому не обидноsm.gif


при этом прелесть с усреднением в том что сигнал вида
а б а б а б а б а б а б даст для 4 точечной медианы (а+б)/2, то есть как бы средний уровень, а сигнал с преобладанием а, будет ближе к а он будет выдавать то а, то (а+б)/2 и очень редко б. Мне кажется физически это верная работа

В плис реализуется, однотактовый вариант не очень быстр, в силу необходимости сортировки и как следствие мультиплексоров, но конвейерный вполне и не только в 4 значения...
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 14 2015, 09:31
Сообщение #37


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Golikov A. @ Jan 14 2015, 12:16) *
не знаю, всегда считал что усреднение должно быть. Зачем забирать N значений N/2 от них выбрасывать, и из оставшихся N/2 значений использовать только 1, зачем остальные то были нужны? и как выбрать то единственное? если у нас 1 2 3 4, то что на выходе 2 или 3? Почему 2 или почему 3? а так на выходе 2.5 и никому не обидноsm.gif

Медиана по трем точкам. И, вообще, по нечетному количеству. Скажем, для 5 точек в середину попадет согласно сортировке, она же и выйдет наружу. И не один раз.
А потом можно усреднять, сколько душа пожелает.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Jan 14 2015, 10:10
Сообщение #38


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



ТС.
Прежде, чем колдовать с фильтрами, построили бы гистограмму, приподняв вход на 1 вольт. И автокорреляционную функцию.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 14 2015, 11:01
Сообщение #39


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Медиана по трем точкам. И, вообще, по нечетному количеству. Скажем, для 5 точек в середину попадет согласно сортировке, она же и выйдет наружу. И не один раз.
А потом можно усреднять, сколько душа пожелает.


ну может быть. Я почему то видел везде классическую реализацию с 4 точками и усреднением по 2. В целом главное знать что хочешь получить, а как это получить - уже второй моментsm.gif

Цитата
Прежде, чем колдовать с фильтрами, построили бы гистограмму, приподняв вход на 1 вольт. И автокорреляционную функцию.

неплохо придавили)
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Jan 14 2015, 11:32
Сообщение #40


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(Golikov A. @ Jan 14 2015, 13:01) *
ну может быть. Я почему то видел везде классическую реализацию с 4 точками и усреднением по 2. В целом главное знать что хочешь получить, а как это получить - уже второй моментsm.gif

Медианный фильтр классически по нечетному количеству точек делается. После сортировки берется то значение, которое в серединной точке, никакого усреднения.
А для четного количества точек придуман костыль в виде среднего арифметического двух серединных точек, "виртуальная медиана массива".
Где применять медианный фильтр а где усреднять всю выборку - зависит от характера возможных помех/наводок и от физики источника сигнала (сенсора).
Я, как правило, применяю и то и другое: сначала медианный фильтр по окну последних измерений(чаще всего 5-точечный-уже длинный но еще быстрый) , а после него- среднее арифметическое по окну из последних значений, выданных медианным фильтром.
Go to the top of the page
 
+Quote Post
k000858
сообщение Jan 21 2015, 10:13
Сообщение #41


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



И все таки: какое количество точек для сортировки/усреднения в моем случае лучше взять? вот пример 4х замеров АЦП по 10 значений при 0В на входе АЦП?

CODE
ADC_Volt_0: 0
ADC_Volt_1: 10
ADC_Volt_2: 6
ADC_Volt_3: 1
ADC_Volt_4: 2
ADC_Volt_5: 4
ADC_Volt_6: 5
ADC_Volt_7: 7
ADC_Volt_8: 7
ADC_Volt_9: 5


ADC_Volt_0: 2
ADC_Volt_1: 0
ADC_Volt_2: 1
ADC_Volt_3: 5
ADC_Volt_4: 0
ADC_Volt_5: 4
ADC_Volt_6: 3
ADC_Volt_7: 5
ADC_Volt_8: 0
ADC_Volt_9: 4
ADC_Volt_0: 0


ADC_Volt_1: 10
ADC_Volt_2: 0
ADC_Volt_3: 0
ADC_Volt_4: 3
ADC_Volt_5: 4
ADC_Volt_6: 5
ADC_Volt_7: 13
ADC_Volt_8: 4
ADC_Volt_9: 0


ADC_Volt_0: 0
ADC_Volt_1: 6
ADC_Volt_2: 0
ADC_Volt_3: 0
ADC_Volt_4: 4
ADC_Volt_5: 4
ADC_Volt_6: 0
ADC_Volt_7: 3
ADC_Volt_8: 2
ADC_Volt_9: 0


Сообщение отредактировал IgorKossak - Jan 21 2015, 14:21
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 21 2015, 10:22
Сообщение #42


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



вижу единичные большие выбросы, остальное ровненько, 3 точек хватит...


есть у меня подозрение что сигнал у вас приподнят на некий уровень, так как нету отрицательных значений
вычтите дополнительно к фильтру из сигнала какую-то величину, например 2. Это нормализует сигнал вблизи нуля, и немного испортит его в максимуме.

Но лучше конечно построить чуть более умную функцию
kX + b, и подобрать k и b так чтобы сигнал был от 0 до максимума
и вот ее уже фильтровать
Go to the top of the page
 
+Quote Post
k000858
сообщение Jan 21 2015, 11:16
Сообщение #43


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(Golikov A. @ Jan 21 2015, 13:22) *
вижу единичные большие выбросы, остальное ровненько, 3 точек хватит...

в приведенном выше примере указывается 2 количества точек: 1) точки измерения (оцифровки) = точки сортировки 2) точки усреднения.

Цитата(Golikov A. @ Jan 21 2015, 13:22) *
есть у меня подозрение что сигнал у вас приподнят на некий уровень


просто моменты оцифровки часто попадают на "шум" поэтому редко бывает 0

Цитата(Golikov A. @ Jan 21 2015, 13:22) *
нету отрицательных значений

разве такое может быть, учитывая что АЦП выдает от 0 до 4095?


Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 21 2015, 11:25
Сообщение #44


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Именно потому что оно выдает 0 - 4095 у вас и нет -1.

если что-то шумит около 0, какие значения будут? только положительные, значит средний уровень какой? Больше нуля, чтобы в 0 попасть надо уметь мерить отрицательные значения.

Так что вы можете обфильтроваться около нуля у вас всегда будет значительная ошибка. При этом чем больше вы усредняете тем хуже будет результат, потому что сумма будет только расти.

на пальцах:

сигнал 0,
реально он - 1 0 1 0 - 1 0 1 -1 0 1 -1 1
итак далее
ваше АЦП его превращает в 0 0 1 0 0 0 1 0 0 1 0 1
и так далее
сумма первого сигнала 0, сумма вашего сигнала 4
средние первого сигнала 0, среднее вашего сигнала 0.3

когда у вас есть шум и он сдвинут в какую - то сторону усреднение будет только увеличивать ошибку.... Та же история у вас будет возле максимума, после усреднения вы все дальше будите от максимума. Потому если вы хотите что-то мерить точно, оно должно быть внутри диапазона, а по краям всегда будет не точно
Go to the top of the page
 
+Quote Post
k000858
сообщение Jan 21 2015, 11:54
Сообщение #45


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(Golikov A. @ Jan 21 2015, 14:25) *
skip

значит цифровой обработкой не улучшить показания?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 21:55
Рейтинг@Mail.ru


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