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

Обсуждаем контроллеры компании Atmel.
Ответить
Опытный кот
Аватара пользователя
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Сообщение MLX90640 »

Ну так и общались же нормально! Но когда начались категоричные высокомерные заявления - ну это уже ненормально. Просто надо уметь не только категорично стучать кулаком по столу, но и прислушиваться к тому, что говорят коллеги. Чеж сложного то? Нежелание переступить через свою гордыню то? Ну блин, ну надо уметь, вот как то так вот. А то, распалившись и стуча кулаком, можно потерять нить разговора и насочинять пурги про измерение омметром отрицательного сопротивления :)

А при нахождении экстремумов вовсе не обязательно присваивать "пустые значения". Потому что математическое "пустое множество" не имеет "в железе" реального числа. Видимо, тот "кандидат наук" не совсем наук кандидат :)
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25563
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="MLX90640",url="/forum/viewtopic.php?p=4366905#p4366905"]Но когда начались категоричные высокомерные заявления - ну это уже ненормально.[/uquote]
Вы не только хам, но еще и лгун. Не было никакого высокомерия. Я вам подробно объяснил то, о чем вы сами и просили. Вы даже не удосужились прочесть и разобраться. По факту, конечно, а не на основе вашего вранья.
Цитата ниже это подтверждает. Тупо набор рандомных слов:
[uquote="MLX90640",url="/forum/viewtopic.php?p=4366905#p4366905"]А при нахождении экстремумов вовсе не обязательно присваивать "пустые значения". Потому что математическое "пустое множество" не имеет "в железе" реального числа.[/uquote]
Я уже не говорю про историю с СКЗ и вашего категоричного утверждения о всемогуществе медианного фильтра против линейной фильтрации. И то и другое говорит лишь о том, что вы не разбираетесь в предмете обсуждения. Это традиционно для тех, кто работает с готовыми шаблонами. Плохо понимая, что стоит за этими шаблонами и когда есть смысл их применять.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Сообщение MLX90640 »

И тут Марка (мрака?) понесло :))) Чувак от обиды ваще в расколбас ушел. Чувак, угомонись ради бога, а. Ну обиделся, ну и че, это ж не повод устраивать срачь то. Чето что у Демиурга, что у Мрака - одинаковое поведение наблюдуетца. Чуть че не по-ихнему и против ихнего представления - значить надобно сразу обиды устроить и стрелкопереводчиством заняться. Возрастное, чтоль? Ну-ну.

Я не говорил про всемогущесть медианного фильтра. Я сказал лишь, что это один из, причем несложный и дающий более положительный результат, чем простое арифметическое усреднение. Да и шумы то разными бывают, как бе вод. Есть еще фильтр Калмана с предсказательной моделью, хорошо работающий на зашумленных сигналах. Но он сложнее.
Ну а про среднеквадратичное - это вы сами там насочиняли ереси. Дескать, сопротивление может быть отрицательным, а среднеквадратичное только положительно и накапливает шум. Ну ерунда ж, согласитесь :) Перечитайте сами свои же опусы.

И узбагойтезь :)
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2314
Зарегистрирован: Вт янв 26, 2021 22:33:21

Сообщение Alex_641 »

Вопрос был в выборе двух методов. Придётся попробовать оба, либо первый устроивший.
Ещё вопрос по коду сортировки... есть такой код, почему то программа не выходит из него. Почему это может быть ?

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

      for (i=0;i<20;i++) mass[i]=read_adc(9);  // +++++++++++++++++++++++++счтываем 20 значений ацп помещаем в массив mass
                         
      while (a>0)    // сортировка массива методом пузырька кол-во элементов 20    //+++++++++++++++расчёт измерений АЦП+++++++++++++++++++++
               {
                  for (i=0;i<20;i++)   // цикл 
                      {
                       a=0;             // флаг окончания сравнений сбросить
                        if (mass[i]>mass[i+1])  // если элемент меньше следующего то
                                       {
                                        z=mass[i];          // поменять
                                         mass[i]=mass[i+1]; // их
                                          mass[i+1]=z;      // местами
                                           a=1;             // установить флаг ( сортировка еще не закончена)
                                       }
                
                      }
               }
Не спрашивай по ком звонит колокол, он звонит по тебе !
Реклама
Эиком - электронные компоненты и радиодетали
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Все. Выдохнули и разошлись по сторонам. Нечего негатив сюда тянуть.
Не важно кто прав, кто виноват.
Контактная информация:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Сообщение MLX90640 »

Придётся попробовать оба,
Конечно, надо попробовать оба способа и сравнить.
А сортировка "пузырьком" - как раз вот самая медленная.
Быстрая сортировка qsort - вот тут объяснение: https://www.youtube.com/watch?v=KlPruG68JTo
Вот тут самописная реализация: http://mindhalls.ru/quick-sort-c-cpp/
Ну и в C есть встроенная функция qsort. https://cpp.com.ru/shildt_spr_po_c/18/qsort.html
Заодним попробуйте метод насяльника Мрака - не сортировать, а "убирать крайние", вставляя "пустые числа" :)
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25563
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="Alex_641",url="/forum/viewtopic.php?p=4366956#p4366956"]Почему это может быть ?[/uquote]
Наверное потому, что в конце каждого цикла у вас а=1.
Кроме того, сортировка пузырьком требует повторять ваш цикл N-1 раз. То есть число итераций будет равно N*(N-1).
PS. Специально для вас повторю. Медианный фильтр не работает по шумам и периодической помехе. Он эффективен только по импульсным помехам до определенной их интенсивности.
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Сегодня прочитал эту тему. Когда-то то сталкивался с АЦП. MLX90640 заинтриговал меня с пузырьковой сортировкой. Решил немного размяться. Наскоро прочитал в инете как работает пузырьковая сортировка, попробовал варианты. Остановился на этом.
Спойлер

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

//==================
void Proc_Device (void)
{
   static u08 _proc_device;

   #define MASS_QTY 8

   static u08 j;

   static u16 mass [MASS_QTY] = 
   {
      7, 9, 19, 17, 20, 30, 22, 8,
   };

   bool f = true;

   u16 i = 0;

   u16 a = 0;

   j = 0;

   while (f)
   {
      f = false;

      for (i = 0; i < (MASS_QTY - 1); i++)
      {
         if (mass [i] > mass [i + 1])
         {
            a = mass [i + 1];
            mass [i + 1] = mass [i];
            mass [i] = a;

            f = true;
         }
      }

      j++;
   }

   PORTB = j;

   switch (_proc_device)
   {
      case 0: // Init IO
         _proc_device = 1;
         break;

      case 1:
         break;

      case 2:
         break;

      default:
         break;
   }
}
//==================
Поверхностный анализ показывает, что нет явного признака окончания сортировки. Максимальное число вариантов. Либо любая перестановка уже требует перепроверки. Поэтому. Любая перестановка устанавливает флаг. Соответственно, количество входов в цикле равно максимальному количеству вариантов + 1. Даже если все отсортировано, это два входа в функцию. Последний вход в функцию это проверка флага. То есть, когда все уже было или отсортировано, флаг сброшен.
Последний раз редактировалось Demiurg Вс фев 05, 2023 18:50:42, всего редактировалось 2 раза.
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2314
Зарегистрирован: Вт янв 26, 2021 22:33:21

Сообщение Alex_641 »

КРАМ писал(а):в конце каждого цикла у вас а=1.
Не каждого ... только тогда , когда есть обмен. При очередном цикле I если обмена не было флаг не установится а=1 не установится, и должен произойти выход из цикла while/
Не спрашивай по ком звонит колокол, он звонит по тебе !
Опытный кот
Аватара пользователя
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Сообщение MLX90640 »

Пузырьковая, как я сказал выше - она самая медленная. Но однажды один славный поц по фамилии Хоар усовершенствовал этот алгоритм, и так обрадовался этому, что назвал его "быстрой сортировкой" - quick sort. У алгоритма есть как положительные, так и отрицательные стороны, и есть усовершенствования.
Сортировка, в отличие от простого выбрасывания "крайних", дает упорядоченный ряд, и на его основе можно применить так сказать "оконное" среднее, используя соседние от медианы элементы с весовыми коэффициентами. Это позволит более точно отследить поведение сигнала.
Друг Кота
Аватара пользователя
Сообщения: 25563
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="Alex_641",url="/forum/viewtopic.php?p=4366966#p4366966"]Не каждого ...[/uquote] Да, вы правы, но в любом случае это не один цикл перебора.

Насчет быстрой сортировки можете прочесть тут: https://ru.wikipedia.org/wiki/Быстрая_сортировка
Но это ничего не изменит. Медиана не будет фильтровать ваши помехи. Вы получите интерференцию между частотой дискретизации и частотой помехи.
Медиана для вас по большому счету вообще не нужна или нужна опционально. Основным методом будет линейная фильтрация.
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Насчет дробления массивов уже думал. В общем, сегодня размялся, читал варианты, прикидывал свои варианты.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 25563
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="MLX90640",url="/forum/viewtopic.php?p=4366967#p4366967"]Сортировка, в отличие от простого выбрасывания "крайних", дает упорядоченный ряд, и на его основе можно применить так сказать "оконное" среднее, используя соседние от медианы элементы с весовыми коэффициентами. Это позволит более точно отследить поведение сигнала.[/uquote]
:facepalm:
Какое "поведение сигнала"? Вы вообще понимаете что пишите? Куда отслеживать и зачем - вы же перемешали отсчеты? Сигнала (который следует фильтровать) больше нет.
"Оконное" среднее при прямоугольном окне вообще не требует упорядочивать массив. А при взвешивающем окне (Хэмминг, Блэкман и т.д.) КАТЕГОРИЧЕСКИ ЗАПРЕЩЕНО менять положение отсчетов внутри массива. Назначение взвешивания никакого отношения к вероятности не имеет. Это просто минимизация краевых эффектов исходного прямоугольного окна.
Модератор
Аватара пользователя
Сообщения: 19080
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

MLX90640, тебе НЕ хамили и тебя НЕ оскорбляли.
это ТОЛЬКО ты тут хамишь и оскорбляешь.
и это уже не первая тема, где ты хамишь и устраиваешь срач. и я тебя уже предупреждал по этому поводу.
считай, что это последнее "устное" предупреждение. при повторении сразу же отправлю в "баню".
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2314
Зарегистрирован: Вт янв 26, 2021 22:33:21

Сообщение Alex_641 »

КРАМ писал(а):Насчет быстрой сортировки можете прочесть тут
Мне хотя бы надо запустить прогу , пока пусть будет пузырьком... Там ещё есть считывание ацп напряжения аккумов. И последующая индикация светодиодами. Там ещё могут быть помехи от высоковольтного преобразователя. Пока хотя бы так как есть. А там уже можно думать о других методах сортировки, в зависимости от оставшегося места флеш аттини26.
Не спрашивай по ком звонит колокол, он звонит по тебе !
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32

Сообщение Martian »

а зачем полная сортировка, если задача найти несколько крайних? (то есть, если решать именно такую задачу) . и зачем вообще сортировать отдельно, а не в процессе выборки?
Последний раз редактировалось Martian Вс фев 05, 2023 19:03:50, всего редактировалось 1 раз.
Контактная информация:
Мудрый кот
Сообщения: 1713
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Сообщение Novice user »

[uquote="Alex_641",url="/forum/viewtopic.php?p=4366549#p4366549"]Второй считать в массив 20 значений, произвести сортировку массива, отсечь с права и с лева несколько показаний ( к примеру по 5 ) , и затем уже от оставшихся 10-ти найти среднеквадратичный результат.[/uquote]
Еще мысля-зачем сортировать? можно 5 раз прокрутить цикл-в цикле находим минимальное (кроме 0) и максимальное значения,запоминая их порядковые номера в массиве,после выхода из цикла , зная их порядковые номера просто затираем (присваиваем значение 0),в итоге останутся 10 значений...
Последний раз редактировалось Novice user Вс фев 05, 2023 19:05:56, всего редактировалось 1 раз.
Друг Кота
Аватара пользователя
Сообщения: 25563
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="Demiurg",url="/forum/viewtopic.php?p=4366972#p4366972"]Насчет дробления массивов уже думал. В общем, сегодня размялся, читал варианты, прикидывал свои варианты.[/uquote]
Обратите внимание на классический РЕЗУЛЬТАТ при оптимизации матричных алгоритмов. Это касается и БПФ против ДПФ и быстрой сортировки против "пузырька".
Мы всегда имеем замену N^2 на O*N*logN. С одним маленьким, но очень важным условием. Либо всё, либо ничего.
Но при одномерном массиве медиана работает только для случая, когда исходный чистый сигнал ПОСТОЯНЕН во времени. Остальные варианты применения медианной фильтрации относятся к так называемой ВЕРТИКАЛЬНОЙ фильтрации. То есть фильтрации ПО СТОЛБЦАМ двух или трехмерного массива. Для этого нужно иметь когерентные строки в таком массиве. И тогда мы получаем результирующий массив на одно измерение меньше. К нему и применяется линейная фильтрация.

Добавлено after 3 minutes 1 second:
[uquote="Alex_641",url="/forum/viewtopic.php?p=4366978#p4366978"]Там ещё могут быть помехи от высоковольтного преобразователя.[/uquote]
Помехи от преобразователя периодические. Медиана работать не будет.
Вы усложняете задачу без всяких на то причин и понимания. Так разработку не делают.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2314
Зарегистрирован: Вт янв 26, 2021 22:33:21

Сообщение Alex_641 »

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

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

[uquote="Martian",url="/forum/viewtopic.php?p=4366980#p4366980"]а зачем полная сортировка, если задача найти несколько крайних?[/uquote]
Вооот!!! Об этом и речь.
Находить крайние значения на лету можно, только выбирать их нельзя. Потому что невозможно предсказать будущее.
Ответить

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