Алгоритм сглаживания шумов АЦП микроконтроллера.

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Alex_641
Поставщик валерьянки для Кота
Сообщения: 2314
Зарегистрирован: Вт янв 26, 2021 22:33:21

Re: Алгоритм сглаживания шумов АЦП микроконтроллера.

Сообщение Alex_641 »

Главное запомните - пузырёк на 0,5 !

Добавлено after 1 minute 37 seconds:
КРАМ писал(а): получилось ОТСУТСТВИЕ СОРТИРОВКИ.
Да ! Потому что привлекался неопознанный 21-й обьект .Спасибо.

Добавлено after 2 minutes 49 seconds:
А если вообще сделаю конструкцию ! То это будет круто для электриков ))
Не спрашивай по ком звонит колокол, он звонит по тебе !
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25389
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Алгоритм сглаживания шумов АЦП микроконтроллера.

Сообщение КРАМ »

Вы еще не поняли, что никаких 0,5 нет и в помине. Просто дергайте ногой в начале сортировки и в конце с реальными массивами. И удивляйтесь результату...
:))) :))) :)))

Добавлено after 2 minutes 4 seconds:
[uquote="Alex_641",url="/forum/viewtopic.php?p=4367177#p4367177"]А если вообще сделаю[/uquote]
Дай вам Б-г... А я чевойта сомневаюсь, однако... :)
Реклама
Аватара пользователя
Alex_641
Поставщик валерьянки для Кота
Сообщения: 2314
Зарегистрирован: Вт янв 26, 2021 22:33:21

Re: Алгоритм сглаживания шумов АЦП микроконтроллера.

Сообщение Alex_641 »

Если чесно ....мне вот совсем по... Но .

Добавлено after 1 minute 16 seconds:
КРАМ писал(а):конце с реальными массивами
а дело то в конце ! Насколько он будет быстрым !

Добавлено after 1 minute 13 seconds:
Ты хочешь меня просто размазать по бетону, и сказать что пузыря на 0,5 не существует ?
Не спрашивай по ком звонит колокол, он звонит по тебе !
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25389
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Алгоритм сглаживания шумов АЦП микроконтроллера.

Сообщение КРАМ »

[uquote="Alex_641",url="/forum/viewtopic.php?p=4367187#p4367187"]Ты хочешь меня просто размазать ?[/uquote]
Зачем? Я просто знаю результат.... Ну и резонно полагаю, что искать дурее себя не стоит. Очевидно, что ваша "идея" лежит на поверхности для столь изъезженной вдоль и поперек темы сортировки. Не катит, увы. Особенно с учетом скрипучести по проблеме лишнего элемента...
Реклама
Эиком - электронные компоненты и радиодетали
u37
Сверлит текстолит когтями
Сообщения: 1242
Зарегистрирован: Пн май 01, 2017 20:01:45

Re: Алгоритм сглаживания шумов АЦП микроконтроллера.

Сообщение u37 »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4367168#p4367168"]Еще один йуморист... :))) :))) :)))[/uquote]
Вовсе нет, возвращаю должное флудеру.
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25389
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Алгоритм сглаживания шумов АЦП микроконтроллера.

Сообщение КРАМ »

[uquote="u37",url="/forum/viewtopic.php?p=4367198#p4367198"]возвращаю[/uquote]
Странный способ возврата - писать ахинею... :dont_know:
Может стоило просто конструктивно возразить? Или этот вариант априори не рассматривался?
Реклама
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Алгоритм сглаживания шумов АЦП микроконтроллера.

Сообщение Demiurg »

Alex_641, вот мой рабочий пример. Посмотрите его повнимательнее.
Пусть у нас 4 элемента. 3-1-10-9. Адресация в цифровой электронике начинается с 0. Он же условно "первый" элемент.
Ptr_1 на нулевой 0 "первый" элемент (3). Ptr_2 на 1 "второй" элемент (1). Начинаем двигать. Сколько сдвигов? 3. То есть size - 1. В моем примере вы увидите константу размер массива. В функции вы увидите size - 1.
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Алгоритм сглаживания шумов АЦП микроконтроллера.

Сообщение Ivanoff-iv »

А что если не сортировать массив, а метить самый маленький из найденных элементов и исключать его из выборки, так первый помеченный будет самым маленьким, второй помеченный - вторым снизу...
для меток можно создать отдельный массив, а можно обратимо модифицировать элементы исследуемого массива:
т.к. измерение АЦП занимает 10 бит, то старшие 6 всегда == 0, любой из них можно занять под метку...
кстати такая метка автоматически увеличивает элемент настолько, что он уже точно не станет самым маленьким (таким методом мы убиваем сразу 2х зайцев :kill: )

код получится примерно таким:
1) организовываем кольцевой буфер (запись в него нового значения вытесняет самое старое), длина буфера равна 2длинам отсекаемых хвостов и 1 длине усредняемой середины.
2) в цикле находим самый маленький элемент и если i (количество итераций цикла) меньше длины хвоста то просто помечаем его:
X|=0x8000; //под метку отдали самый старший бит.
если i больше длины хвоста, то перед тем, как поставим метку, Х добавим в аккумулятор.
цикл проводим (длина хвоста+длина середины) раз.
затем пробегаем массив вторым циклом, в котором сбрасываем установленные первым циклом метки:
X&=~0x8000;
затем делим значение аккумулятора на длину середины и получаем среднемедианное значение - какраз то, что мы и ищем.
Достоинства метода:
1) не нарушается порядок элементов - не нарушается работа кольцевого буфера
2) не требуется дополнительная память для хранения и сортировки элементов.
3) высокая скорость вычисления.

Добавлено after 15 minutes 36 seconds:
Можно сделать фильтрацию с опорой на предыдущий вычисленный элемент:

Код: Выделить всё

если новое значение больше предыдущего
{если разница больше уставки гистерезиса {выодим новое значение}иначе{выводим старое+1}}
если новое значение меньше предыдущего
{если разница больше уставки гистерезиса {выодим новое значение}иначе{выводим старое-1}}
так дребезжание значений становится гораздо меньше, но оперативность реакции при этом не страдает.

Добавлено after 31 minute 5 seconds:
ещё в копилочку: для увеличения разрядности АЦП можно использовать шумы измерителя, для этого:
рецепт :))) : для получения Х дополнительных бит точности - нужно сделать оцифровку 2^(2Х) раз (для 2х бит - это будет 16 раз), все результаты суммировать, а затем сдвинуть вправо на Х позиций (т.е. разделить на 2^Х).
Получается неплохо :tea:
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25389
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Алгоритм сглаживания шумов АЦП микроконтроллера.

Сообщение КРАМ »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=4367298#p4367298"]а метить самый маленький из найденных элементов и исключать его из выборки[/uquote]
А почему только самый маленький? С самым большим что делать?
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Алгоритм сглаживания шумов АЦП микроконтроллера.

Сообщение Ivanoff-iv »

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

Добавлено after 1 minute 36 seconds:
хотя, если есть желание - можно идти и "сверху", отсекая большие, просто так придется отдельно наличие метки проверять (или переменную сделать знаковой, чтоб метка автоматом число в минуса загоняла)....
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Алгоритм сглаживания шумов АЦП микроконтроллера.

Сообщение Martian »

про увеличение точности я не совсем понял, что-то сродни интерполяции?
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25389
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Алгоритм сглаживания шумов АЦП микроконтроллера.

Сообщение КРАМ »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=4367315#p4367315"]большие просто останутся неотсеченными, но и....[/uquote]
Для полной медианной фильтрации вероятно пойдет, но она не годится в случае с автором темы. останется только один элемент, а это не устранит помехи имеющие линейчатый спектр типа 50 Гц с гармониками.
Кроме того, все способы прямого перебора для полной медианы имеют объем вычислений O*N^2 против O*N*logN для быстрых сортировок. Так что коэффициент O тут мало чем поможет для массивов значительной (от нескольких десятков элементов) длины.

Добавлено after 4 minutes 23 seconds:
[uquote="Martian",url="/forum/viewtopic.php?p=4367317#p4367317"]что-то сродни интерполяции?[/uquote]
Это классический оверсемплинг. Но он точность не повышает. Он повышает разрешающую способность.
Интерполяция - это другое. При интерполяции, вставляют нулевые отсчеты и производят обычную фильтрацию. Это и есть передискретизация.
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Алгоритм сглаживания шумов АЦП микроконтроллера.

Сообщение Martian »

ага, ясно. спасибо.
оказывается, я путал понятия точности и разрешающей способности... вот что значит частичное самообразование.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25389
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Алгоритм сглаживания шумов АЦП микроконтроллера.

Сообщение КРАМ »

[uquote="Martian",url="/forum/viewtopic.php?p=4367322#p4367322"]разрешающей способности...[/uquote]Точность важна для измерителя, а разрешающая способность для обнаружителя. Правда в обнаружителе нужно учитывать неизбежную интермодуляцию связанную с исходной точностью, читайте линейностью.
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Алгоритм сглаживания шумов АЦП микроконтроллера.

Сообщение Ivanoff-iv »

останется несколько максимальных элементов, т.к. поиск остановится раньше (как только найдётся последний, интересующий нас элемент).
количество итераций поиска I = L-N
где L- длина массива
N- количество элементов, которые искать не надо (один из "хвостов" массива). N=(L-M)/2
M- количество элементов входящих в усреднительный фильтр
отсюда I= L-(L-M)/2 = (L+M)/2
количество сравнений: X=L*I=L*(L+M)/2 = (L^2+LM)/2;
......
пожалуй действительно увеличения скорости нет (модификация значения ведь тоже время занимает)... но памяти требуется в 2 раза меньше... т.к. нет сортируемой копии массива.
и, я думаю (пока этот вопрос не проанализировал), что флеш сэкономится, т.к. и сортировка и вычисление проходят внутри одного цикла.

но с тем, что останется только один максимальный элемент, я не согласен - сортировку можно остановить сразу после того, как будет найден последний интересующий элемент.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25389
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Алгоритм сглаживания шумов АЦП микроконтроллера.

Сообщение КРАМ »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=4367331#p4367331"]количество итераций поиска I = L-N
где L- длина массива
N- количество элементов, которые искать не надо (один из "хвостов" массива).[/uquote]
Увы, нет. Элементы которые "искать не надо", на самом деле тоже ищутся по своей метке или указателю.
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Алгоритм сглаживания шумов АЦП микроконтроллера.

Сообщение Ivanoff-iv »

Тут не понял... ну, есть они в массиве, а мне то что с того...? придёт их черёд - затрутся свежим значением...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25389
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Алгоритм сглаживания шумов АЦП микроконтроллера.

Сообщение КРАМ »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=4367347#p4367347"]Тут не понял... ну, есть они в массиве[/uquote]
Циклы поиска всегда ПОЛНЫЕ. Не важно - стоит какая то метка на минимальных или нет. Потому что поиск минимальных ничем не отличается от пропуска отмеченных. То есть циклов будет по прежнему O*N^2. Только О будет равно 0,5.
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Алгоритм сглаживания шумов АЦП микроконтроллера.

Сообщение Ivanoff-iv »

нет, это внутри итерации цикла перебирается весь массив (и меченые и нет) а количество таких итераций меньше количества элементов массива, оно равно количеству найденных минимальных элементов (равно сумме пропускаемых и суммируемых минимальных элементов)

Добавлено after 1 minute 8 seconds:
про квадратичную скорость роста количества расчетов от размера массива я не спорю.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
Alex_641
Поставщик валерьянки для Кота
Сообщения: 2314
Зарегистрирован: Вт янв 26, 2021 22:33:21

Re: Алгоритм сглаживания шумов АЦП микроконтроллера.

Сообщение Alex_641 »

Алгоритм сортировки работает идеально и быстро. И всё остальное в проге. Проблема была в том, что я заштриховал строку в которой были настройки АЦП. И при обращении к нему МК уходил в зависон. Так же почему то не заработал ареф ( ацп всегда показывал 1023) , переназначил источник опорного на внутреннее 2,5 вольта и всё заработало. Но ...

Добавлено after 6 minutes 5 seconds:
Показания ИНОГДА прыгают в пределах единицы младшего разряда, и если число ровное например 100 , то прыгают соответственно все 3 его разряда.
Не спрашивай по ком звонит колокол, он звонит по тебе !
Ответить

Вернуться в «AVR»