Обсуждаем контроллеры компании Atmel.
Ответить

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

Вс фев 05, 2023 22:13:27

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

Добавлено after 1 minute 37 seconds:
КРАМ писал(а): получилось ОТСУТСТВИЕ СОРТИРОВКИ.

Да ! Потому что привлекался неопознанный 21-й обьект .Спасибо.

Добавлено after 2 minutes 49 seconds:
А если вообще сделаю конструкцию ! То это будет круто для электриков ))

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

Вс фев 05, 2023 22:16:55

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

Добавлено after 2 minutes 4 seconds:
А если вообще сделаю

Дай вам Б-г... А я чевойта сомневаюсь, однако... :)

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

Вс фев 05, 2023 22:19:30

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

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

а дело то в конце ! Насколько он будет быстрым !

Добавлено after 1 minute 13 seconds:
Ты хочешь меня просто размазать по бетону, и сказать что пузыря на 0,5 не существует ?

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

Вс фев 05, 2023 22:23:01

Ты хочешь меня просто размазать ?

Зачем? Я просто знаю результат.... Ну и резонно полагаю, что искать дурее себя не стоит. Очевидно, что ваша "идея" лежит на поверхности для столь изъезженной вдоль и поперек темы сортировки. Не катит, увы. Особенно с учетом скрипучести по проблеме лишнего элемента...

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

Вс фев 05, 2023 22:32:29

Еще один йуморист... :))) :))) :)))

Вовсе нет, возвращаю должное флудеру.

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

Вс фев 05, 2023 22:36:25

возвращаю

Странный способ возврата - писать ахинею... :dont_know:
Может стоило просто конструктивно возразить? Или этот вариант априори не рассматривался?

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

Пн фев 06, 2023 02:37:16

Alex_641, вот мой рабочий пример. Посмотрите его повнимательнее.
Пусть у нас 4 элемента. 3-1-10-9. Адресация в цифровой электронике начинается с 0. Он же условно "первый" элемент.
Ptr_1 на нулевой 0 "первый" элемент (3). Ptr_2 на 1 "второй" элемент (1). Начинаем двигать. Сколько сдвигов? 3. То есть size - 1. В моем примере вы увидите константу размер массива. В функции вы увидите size - 1.

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

Пн фев 06, 2023 07:44:05

А что если не сортировать массив, а метить самый маленький из найденных элементов и исключать его из выборки, так первый помеченный будет самым маленьким, второй помеченный - вторым снизу...
для меток можно создать отдельный массив, а можно обратимо модифицировать элементы исследуемого массива:
т.к. измерение АЦП занимает 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:

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

Пн фев 06, 2023 08:04:18

а метить самый маленький из найденных элементов и исключать его из выборки

А почему только самый маленький? С самым большим что делать?

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

Пн фев 06, 2023 08:12:17

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

Добавлено after 1 minute 36 seconds:
хотя, если есть желание - можно идти и "сверху", отсекая большие, просто так придется отдельно наличие метки проверять (или переменную сделать знаковой, чтоб метка автоматом число в минуса загоняла)....

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

Пн фев 06, 2023 08:21:20

про увеличение точности я не совсем понял, что-то сродни интерполяции?

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

Пн фев 06, 2023 08:29:10

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

Для полной медианной фильтрации вероятно пойдет, но она не годится в случае с автором темы. останется только один элемент, а это не устранит помехи имеющие линейчатый спектр типа 50 Гц с гармониками.
Кроме того, все способы прямого перебора для полной медианы имеют объем вычислений O*N^2 против O*N*logN для быстрых сортировок. Так что коэффициент O тут мало чем поможет для массивов значительной (от нескольких десятков элементов) длины.

Добавлено after 4 minutes 23 seconds:
что-то сродни интерполяции?

Это классический оверсемплинг. Но он точность не повышает. Он повышает разрешающую способность.
Интерполяция - это другое. При интерполяции, вставляют нулевые отсчеты и производят обычную фильтрацию. Это и есть передискретизация.

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

Пн фев 06, 2023 08:37:05

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

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

Пн фев 06, 2023 08:42:02

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

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

Пн фев 06, 2023 08:53:12

останется несколько максимальных элементов, т.к. поиск остановится раньше (как только найдётся последний, интересующий нас элемент).
количество итераций поиска 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 раза меньше... т.к. нет сортируемой копии массива.
и, я думаю (пока этот вопрос не проанализировал), что флеш сэкономится, т.к. и сортировка и вычисление проходят внутри одного цикла.

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

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

Пн фев 06, 2023 09:05:39

количество итераций поиска I = L-N
где L- длина массива
N- количество элементов, которые искать не надо (один из "хвостов" массива).

Увы, нет. Элементы которые "искать не надо", на самом деле тоже ищутся по своей метке или указателю.

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

Пн фев 06, 2023 09:13:24

Тут не понял... ну, есть они в массиве, а мне то что с того...? придёт их черёд - затрутся свежим значением...

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

Пн фев 06, 2023 09:32:02

Тут не понял... ну, есть они в массиве

Циклы поиска всегда ПОЛНЫЕ. Не важно - стоит какая то метка на минимальных или нет. Потому что поиск минимальных ничем не отличается от пропуска отмеченных. То есть циклов будет по прежнему O*N^2. Только О будет равно 0,5.

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

Пн фев 06, 2023 09:48:31

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

Добавлено after 1 minute 8 seconds:
про квадратичную скорость роста количества расчетов от размера массива я не спорю.

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

Пн фев 06, 2023 16:35:49

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

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