АЦП - Программная фильтрация аналоговых сигналов в автоматике

Поділитися
Вставка
  • Опубліковано 22 гру 2024

КОМЕНТАРІ • 154

  • @mikhailphilimonov
    @mikhailphilimonov Рік тому +19

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

    • @DmitryBoev
      @DmitryBoev Рік тому

      Блин, я давно все знаю это, но автор настолько крутой, что смотрю с удовольствием

    • @BioTech81
      @BioTech81 Рік тому +1

      Я не знаю даже кто я такой но автора смотрю 🤣

    • @Gnevistj
      @Gnevistj  Рік тому +7

      Спасибо, ребят! Буду стараться радовать вас дальше! =)))

    • @СергейСергеев-щ2н4о
      @СергейСергеев-щ2н4о Рік тому

      ​@@Gnevistjздравствуйте! Можно обратиться к Вам по программированию?

  • @Push0RET
    @Push0RET Рік тому +6

    Гневисть, спасибо за видео! Пишу на ASM X86, работаю в основном с ПЛИС при помощи языка проектирования Verilog. Ты - один из немногих, кто понимает о чем говорит и называет вещи своими именами, тебя интересно смотреть не только новичку в этом деле, но и инженеру с опытом.

  • @евгенийкурганский-ф8с

    Изумительная подача материала , браво ! Спасибо.

    • @СтепанТарасюк-в1с
      @СтепанТарасюк-в1с Рік тому

      Спасибо "Санычу". Про "скользящее среднее" и "скользящее экспоненциальное среднее" я вроде в курсе.

  • @Alexej955
    @Alexej955 Рік тому +5

    Друг, продолжай делать ролики. Спасибо.
    Народ соскучился по умным преподавателям.

    • @Gnevistj
      @Gnevistj  Рік тому +1

      Спасибо! Буду продолжать =)

  • @olegbelous5588
    @olegbelous5588 Рік тому +7

    Спасибо! Доходчиво всё объяснили, так очень редкий преподаватель сможет донести для студентов излагаемый предмет. Хотелось бы увидеть в ближайших видео как осуществить дельта-сигма модуляцию, скажем, речевого сигнала.

  • @dn.kolesnikov
    @dn.kolesnikov Рік тому +1

    Если сказать Огромное СПАСИБО!, то это будет только половина благодарности! Всегда рад Вашим видео! Как раз пишу свой велосипед для открытия дверей теплицы по показаниям температуры, и тут теория подъехала... Спасибо еще раз!

  • @ИванСидоров-к9м
    @ИванСидоров-к9м Рік тому +3

    16:26 - лучше делать кратно степени двойки и переходить от деления к сдвигам.

  • @_Psychonaut_
    @_Psychonaut_ Місяць тому

    Информативно!
    Очень интересная подача!

  • @6om6a
    @6om6a Рік тому +1

    Годнота подъехала. Жму руку и желаю успехов во всех начинаниях!

  • @АлександрКузнецов-ц9ъ

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

  • @nikitaafanasyev1327
    @nikitaafanasyev1327 Рік тому +7

    SMA считается по O(n) , не надо там каждый раз считать сумму всех элементов массива , достаточно поддерживать переменную суммы, вычитая из нее самое старое значение и добавляя новое

    • @0imax
      @0imax 3 місяці тому +1

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

  • @loverock8384
    @loverock8384 Рік тому +5

    За что нравится Саныч - объясняет за пару секунд. Уважаем! 😂

  • @Al-Al
    @Al-Al Рік тому +2

    Отличная подача матеряла. Смотрится с удовольствием и на одном дыхании.

  • @asutp2089
    @asutp2089 Рік тому +1

    Красиво объяснил. Спасибо. С опытом, через боль доходим до этого. Разрабатываем алгоритм. А потом оказывается это всё уже давно придумано до нас.

    • @Gnevistj
      @Gnevistj  Рік тому +1

      Так всегда и есть - я когда-то, по молодости, терпеть не мог готовые библиотеки - "все сам напишу!!!", спустя годы стараюсь побольше использовать именно готовые - ибо кто-то до меня уже набил шишки и все отладил, зачем мне повторять его опыт? Мне нужно макрозадачу решить, а микрозадачи - они все решены до нас =)))

  • @ФедорукМихаил
    @ФедорукМихаил 10 місяців тому +1

    Молодец😊

  • @0imax
    @0imax 3 місяці тому

    7:25 алгоритм можно упростить и ускорить.
    Сдвигать элементы массива нет никакой нужды. Достаточно хранить указатель на текущую ячейку, и при новом измерении записывать в неё значение и сдвигать указатель дальше. Ну и, естессна, следить, чтобы он не ушёл куда глаза глядят, вовремя возвращая его домой)) Таким образом, первая часть с кучей пустого перемешивания нулей и единиц в памяти превращается в две с половиной команды: запись в массив, инкремент указателя и проверку его на выход за границы.
    Далее, сумму считать каждый раз нет необходимости: перед перезаписью элемента массива новым числом, вычитаем это значение из суммы, а затем добавляем свеже пришедшее к сумме и кладём в массив на текущую позицию.

  • @StartuePotoya
    @StartuePotoya Рік тому

    Хорошо, что я нашел Ваш. канал, большое спасибо за видухи .

  • @sarmatskif6660
    @sarmatskif6660 Рік тому

    Випадково забрів,але вже давно наблюдаю,ноут і жменя мк теж є,цікава подача,що зацікавлює.

  • @DigiCatBlog
    @DigiCatBlog Рік тому

    Первое полезное видео на канале. До этого радовала подача материала )))

  • @ФедорукМихаил
    @ФедорукМихаил 10 місяців тому +1

    Раскажите угол открывания тиристоров для чего такие углы что происходит при разных начальных углах аналоговые схемы типа тпе 😮

  • @rustybroom7071
    @rustybroom7071 Рік тому

    Прекрасный ролик, спасибо. И гневисть есть в нужном количестве.

  • @ADNpower-xy6yv
    @ADNpower-xy6yv 11 місяців тому

    Доставляет удовольствие следить за мыслью умного человека

  • @alexeiviktorovi4130
    @alexeiviktorovi4130 Рік тому

    Классно. Спасибо за очередной шедевр. Особенно аутро повеселило 🔝

  • @АнатолийСмирнов-в6п

    Удачно я зашел!!!)))) Подписался, поставил лайк, сижу и радуюсь!)))

  • @nicseroff2690
    @nicseroff2690 Рік тому

    Спасибо! Все по полочкам! Так держать!

  • @sima8623
    @sima8623 Рік тому

    Саныч как всегда прав, спаасибо за видео!

  • @andreyace8768
    @andreyace8768 Рік тому

    Спасибо за подготовку материала!!! 💪💪💪💪✌✌✌✌!!!!

  • @mikhailshashkov8395
    @mikhailshashkov8395 Рік тому

    Представляется, что EMA_Filter в целочисленной арифметике можно реализовать с меньшим количеством операций. А если в качестве параметра alpha выбирать степени двойки (1/2, 1/4, 1/8, ...), то для вычисления каждого нового отфильтрованного значения потребуется всего лишь две операции сложения и две операции сдвига (умножения на степень двойки).
    Стоит отметить, что одну операцию сдвига (умножения/деления) следует выполнять только в случае, когда необходимо вывести отфильтрованное значение на экран. Это так и в Вашей программе. Т.е. для Вашей рекурентной формулы Yprev=(Xx*10*alpha+Yprev*(1000-alpha))/1000, значение Yy=Yprev/10 не требуется. Просто хотелось отделить вывод на дисплей фильтрованного значения от самой фильтрации. Yprev, в принципе, ничем не хуже Yy, и его можно использовать в внутри программы (например для управления чем либо).
    Для вычисления скользящего среднего значения требуется всего два сложения и один сдвиг. В смысле вычисления - формально чуть проще. Но нужно хранить массив измерений, и следить за индексом кольцевого буфера, что еще одна операция сложения. Не знаю насколько это большое ограничение сейчас для микроконтроллеров.
    Еще, среди очень простых фильтров (с точки зрения программирования микроконтроллеров и требования к ресурсам), нужно отметить EMA (Exponential Moving Average) - фильтры более высоких порядков (Double Exponential Smoothing, Triple Exponential Smoothing, ...). Особенно это полезно в случае необходимости оценки производной функции измеряемого процесса. Кроме того, как правило, задержка сигнала, связанная с фильтрацией, становится меньше. Количество операций здесь минимально, и память для хранения массива измерений тоже не требуются.

  • @asdffewfew
    @asdffewfew Рік тому

    как всегда очень познавательно и интересно. спасибо. здравствуйте кстати)

  • @Shifoner_
    @Shifoner_ Рік тому

    Интересно, доходчиво! Как жаль что мало)))

  • @velessn
    @velessn Рік тому

    Тут можно ставить лайк не глядя. Заходит на ура.

  • @Den_mix
    @Den_mix Рік тому +2

    Сделай ролик про ПИД регулирование например с термопарой.

  • @dimkadimkin5861
    @dimkadimkin5861 Рік тому +1

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

    • @Gnevistj
      @Gnevistj  Рік тому

      Да, но это один из вариантов скользящей средней, поэтому я его не упомянул в этом выпуске =)

    • @postoronny
      @postoronny Рік тому

      Массив требует сортировки при каждом отсчёте...

  • @PoeAssistantovich
    @PoeAssistantovich 4 місяці тому

    Спасибо большое!

  • @suntechnology
    @suntechnology Рік тому

    Эээээээ! Я еще прошлые ролики не посмотрел! Хороший темп. Так держать!

    • @Gnevistj
      @Gnevistj  Рік тому

      Они никуда не исчезнут, прошлые ролики, не переживайте! =)))
      Постараюсь радовать и дальше =)

  • @Drmidon
    @Drmidon Рік тому +1

    Видео супер. Не сказано в этом уроке что такое n. Период фильтрации (n) - это количество замеров, которые будут усреднены. Грубо говоря, если n=1, то нет усреднения(каждый замер на входе попадает без изменений на выходе). Если n=2, то берет среднее из 2х значений(предыдущее + текущее значение / 2). Если n=100, то среднее из 100 замеров.
    Вангую забавную аббревиатуру PIDR (proportional-integral-derivative regulator) в следующем уроке.

    • @Ma_X64
      @Ma_X64 Рік тому

      Обычно пишут regulator, не включая в аббревиатуру.

  • @drubakha
    @drubakha Рік тому

    Если есть лишние ресурсы МК - выбираю для себя фильтр Калмана. В свое время очень помог с тензодатчиками.

  • @Immo_Off
    @Immo_Off Рік тому +1

    👍👍👍👍👍

  • @aleintaseevo
    @aleintaseevo Рік тому

    Кайфово что Хэтфилд выучил русский и поясняет за электронику

  • @BioTech81
    @BioTech81 Рік тому +1

    Наконец-то подошли к концу мини сериала про АЦП???? Да нет, не разу не наконец-то.....
    Здрасьте кстати 😅
    Автор как всегда отбойный молоток но Михалыч это космос 😂
    Счастья, любви, здоровья, удачи👍

    • @Gnevistj
      @Gnevistj  Рік тому +1

      Спасибо! =))))
      Ну, можт и продолжится этот сериал в виде эммм... Спин-оффов, или как это в киноиндустрии сейчас модно так называется? =)))))
      Счастья, здоровья, сил, любви, и всего-всего =))))))

  • @robertmonroe9728
    @robertmonroe9728 Рік тому +1

    Здесь только IIR упомянули. А вот FIR, median - не, не слышали. О Калмана (кстати, часто юзаю) - вообще молчу

  • @sqwertyuiop1514
    @sqwertyuiop1514 11 місяців тому +1

    Если сигнал выглядит так, как на 1:25, то нужно не фильтрацию делать, а гнать разработчика этой схемы ссаными тряпками! Потому что он не умеет грамотно развести земли и разделить их на цифровую и аналоговую.

  • @Кульбаба-ж6д
    @Кульбаба-ж6д Рік тому

    Знаете где это может пригодится? Для оверсемплинга 10 битных АЦП. Есть документ от микрочип: AVR121:Enhancing ADC resolution by oversampling. Можно увеличить разрядность и точность АЦП. Благодаря этому видео я ещё больше понял этот документ. И вообще возможно автор видео захочет показать пример оверсемплинга на PIC/AVR, где используются именно эти формулы. А теории от 10 битного АЦП можно получить точность в 3-4 знака после запятой.

  • @skakalinvlad
    @skakalinvlad Рік тому

    Не ошибается тот, кто ничего не делает? Но разве ничего не делать - это уже не ошибка? :)
    А выпуск супер!!! Не знал, что можно и в цифре так сделать, сам бы на аналоге мутил перед самым входом (RC или LC, скорей первый, а то L иногда плюётся некрасиво, ещё C обидится, или датчик). Спасибо, просвещаете нас дремучих. 👍👍

    • @Gnevistj
      @Gnevistj  Рік тому +1

      "Ничего не делать" - это целая жизненная философия, с которой я не согласен, ибо скучно это =))))))
      RC фильтр неплохой вариант, но можно замучиться подбирать номиналы, а при отладке на объекте это скушает много времени, плюс лишние детали (еще и вопрос сертификацией может возникнуть). С программным усреднением проще - коэффициент/период подобрал на глаз - и норм =)))))))

    • @RG-el8zy
      @RG-el8zy Рік тому +1

      А я ФНЧ Бесселя 2-го порядка сделал на ОУ. В умных книгах написано, что надо аналоговый фильтр + цифровой фильтр. Некоторая дополнительная полезная информация есть на канале TDM Lab ua-cam.com/video/Y_CQp6ENwS0/v-deo.html

  • @vernnms78
    @vernnms78 Рік тому

    А я голову ломал, зачем в свое время Гайвер использовал для сглаживания метод усреднения квадратов? Теперь убедился, что всё проще и надеждее. Спасибо!

  • @АндрейСазонов-д4о

    Больше Саныча! Пусть задвинет лекцию за ассемблер!

    • @Gnevistj
      @Gnevistj  Рік тому

      Как-нибудь попробую сорганизовать =))))))))

  • @ДобрыйСозерцать

    Доброго, Вам в личку вопросы можно написать по теме ?

  • @OnufriyAlex
    @OnufriyAlex Рік тому

    Как объяснение сути фильтрации для несведущих - отличный материал. Как пример реального кода - моветон, и вот почему:
    Использование массива в скользящем среднем это показатель быдлокодинга, т.е. автор кода не понимает ценности ОЗУ и затрачиваемого процессорного времени на вычисления. При каждом новом измерении происходит суммирование всего массива в какую-то "большую" переменную, при том, что большинство ПЛКшек на сегодняшний день остаются восьмибитными, т.е. киличество тактов процессора затрачиваемого на один цикл суммирования кратно равно количеству октетов в "большой" переменной. Получается, если мне нужно фильтровать показания с двадцати-тридцати-пятидесяти датчиков, то ОЗУ "до свидания", а ЦП большую часть времени выполняет бесполезный однообразный код и ничего другого просто сделать не успевает. Целый дорогущий процессорный блок на несчастную жменю датчиков.
    У Гайвера на канале "Заметки ардуинщика" есть видео про фильтрацию измеренных значений, где объясняется как именно нужно применять фильтр бегущего среднего.

    • @Gnevistj
      @Gnevistj  Рік тому

      Спасибо за развернутый комментарий, но вынужден уточнить детали:
      Естественно, это простой пример для начинающих, в котором формула воплощена "as is" для наглядности, и кушоеть много памяти и ресурсов, но! Тот недорогой ПЛК, который я использовал в примере, обладает 8 мегабайтами ОЗУ для пользовательских данных. Заманаюсь экономить =))))) И, простите, откуда инфа про восемь бит? Вполне "взрослые" микропроцессорные комплекты используются у всех лидеров рынка...
      Второе - скорость выполнения программы, он же сканцикл, при использовании моего метода, плюс с подгруженной веб-визуализацией, он не выходил из значений "холостого хода" - 300мкс. Да и в целом, ни разу не удалось его "прогрузить", чтобы он вышел на "человеческие" 10мс хотя бы =)))) даже если вместе с управлением приходилось решать задачи по даталоггингу, составлению отчетов с чтением/записью файлов и обмену этих файлов через FTP.
      И в третьих, сегодня у многих крупных клиентов в приложении к договору (т.н. Project Specification) прописывается требование об оформлении кода - декларируется использования конкретных языков программирования для решения каждого круга задач, и особенно в части написания формул - требуется максимальная наглядность и читаемость; ресурсов чтобы обработать такой "быдлокод" у современных машин "за глаза"...
      Увы, оптимизация уходит в прошлое и в промавтоматике, с другой стороны - может это и к лучшему, ведь становится проще разобрать логику построения чужой программы =))

    • @OnufriyAlex
      @OnufriyAlex Рік тому

      @@Gnevistj У меня в эксплуатации находятся, кроме прочего, контроллеры покупки 2008 года Siemens SIMATIC S7-400 (это тот случай, когда работает - не трогай). На поверку при вскрытии выясняется, что вычислительная элементная база построена на контроллерах Atmel AVR серии (при этом есть подозрения на распределённые вычисления, т.к. один контроллер не способен обрабатывать такое количество кода).
      Снижение проходного уровня это хорошо, в том числе и я проник в АСУП благодаря упрощению написания кода и как следствие более быстрому выполнению проектов.
      С другой стороны я же сам и зарабатываю на жизнь перерабатывая проекты написанные "очень простым языком". К примеру, в существующую АСУ необходимо добавить какой-нибудь новый агрегат, а АСУ построена на трёхсотой серии и запас на расширение уже истрачен. Так вот, переход от Вашего способа фильтрации к формуле из видео Гайвера позволил мне примерно в два раза сократить время единичного измерения и сэкономить ОЗУ.
      Ну и напоследок, привет из Мариуполя, комбинат имени Ильича. В 2016 году у нас случился вирус Petya. "Лягли" все ПК как постов управления в частности, так и всей бизнес-сети комбината. Но наш ЛПЦ "Стан 3000", у которого посты управления выполнены на машинах 86 года, продолжил исправно работать, ибо нет такого вируса, который бы положил столь больших "старичков". Уцелели трубопрокатные линии с системой 93-го года, МНЛЗ 92-93-го года запуска так же продолжала работать. ICP DAS серии ICP CON вообще моё почтение, третий десяток лет трудятся и хоть бы хны. Это я всё к тому, что да, есть новые мощные контроллеры, но и старых на местах полно, а убедить собственника в смене "железной" части без какого-то качественного или экономического изменения крайне сложно.

  • @svarshig4231
    @svarshig4231 Рік тому

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

  • @TheAlexey1980
    @TheAlexey1980 Рік тому

    Привет. Как слелать вольметр, показание которого не скачет? Например при величине близкой, к 23 и 24 всн равно показания с обоими фильтрами скачат между 23 и 24 (ну или сколько там). И так в почти всех цифровых вольметрах (амперметрах). Что сделать чтоб показания не скакали (ударение на вторую "а")

    • @0imax
      @0imax 3 місяці тому

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

  • @ВестникПазнева-ъ2к

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

  • @id_vk
    @id_vk Рік тому

    Не нашел нигде в интернете как синхронизировать аудио с анимацией на oled дисплее i2c 128*64(да и в принципе на любом другом). Буду благодарен если снимешь урок на эту тему! (Пример: на дисплее включается анимация 2сек, и при включении анимации включается определенный звук с такой же продолжительностью. Включается другая рандомная анимация, и также соответственно включается звук присвоенный именно этой анимации)

  • @nicksy98
    @nicksy98 Рік тому

    Гневисть привет.
    Все умно и доходчиво, а как нам наладить диалог есть коммерческие темы.

  • @vladyslavshchedryn7008
    @vladyslavshchedryn7008 Рік тому

    Отличный видос, хоть я и знаю всё это давно, однозначно смотрю с удовольствием. У меня только один вопрос: какого хрена уведомления не приходят? Раньше приходили, а сейчас нет. И это, я в молодости фильтровал аналоговые сигналы с помощью аналоговых фильтров, как ни странно 😂😂😂 RC/LC в зависимости от ситуации, только постоянную времени посчитать

  • @МаксимФ-й7н
    @МаксимФ-й7н Рік тому

    Это всё конечно классика. Но что реально интересно, это когда АЦП 16, 24 бита, используется буферный ОУ и опорник. Настройка диф режима и фильтрация и размах с помощью ОУ, для высокой точности

  • @ЕвгенийТарасов-я6п

    Не знаю, на своём бойлере сделал терморегулятор на обычном китайском термисторе, Меga8 и импульсном пропитании. Никакие помехи и наводки ему не мешают. Темперадуру держит в пределах 2-3°C. Единственно, при переходе с одного градуса на другой начинался дребезг. Проблема решилась уменьшением частоты измерения темперадуры: подбором времени задержки. Всё работает чётко.

    • @0imax
      @0imax 3 місяці тому

      Гистерезис в пару-тройку градусов для таких вещей надо оставлять.

  • @kostantynljubcyc9484
    @kostantynljubcyc9484 Рік тому

    Уважаемый коллега, я несколько лет использую некий фильтр и назвал его TDS (Tracking filter with Differential output step), а Вы мне открыли глаза и указали, что он называется EMA. Только формула у меня Yt = Yt-1 + (Xt - Yt-1)*a. Не могу их одну в другую преобразовать.

    • @Gnevistj
      @Gnevistj  Рік тому +1

      Здравствуйте, коллега! Да, это один из вариантов формулы ЭМА, не "канонический", как в Википедии, например, но это именно она, один в один. В показанной мною формуле откройте скобки, и после, соберите скобки по множителю "а", и вы получите ваш вариант формулы =))

    • @kostantynljubcyc9484
      @kostantynljubcyc9484 Рік тому

      Успешно собрал :) Реально на практике использую упрощённую формулу и обозвал её TRS. Yt = Yt-1 + ((Xt > Yt-1) - (Xt < Yt-1))*a. То есть не экспоненциально, а линейно изменяем выходную величину. И нету умножения, а сравнение. Таким образом 8-битный контроллер делает эту фильтрацию десятком команд.

  • @postoronny
    @postoronny Рік тому

    Не нужно для скользящего среднего при каждом отсчёте пересчитывать сумму и делить её на количество отсчётов усреднения:
    При запуске домножаем значения уставок для включения и выключения на длину массива;
    При каждом отсчёте отнимаем из переменной суммы значения из хвоста массива, сдвигаем массив (я просто сдвигаю указатели на начало и конец кольцевого массива), вставляем в голову новое значение и прибавляем его же к сумме;
    Всё. Сумму можно сравнивать с уставками ;)

    • @postoronny
      @postoronny Рік тому

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

  • @offgrisha
    @offgrisha Рік тому

    Спасибо автору видео. Можете показать как работать с платами wifi D1 для ардуино Uno. Хочу создать систему умный дом для ардуино. С платой D1 не могу разобраться( подключить) и т.д.

    • @Gnevistj
      @Gnevistj  Рік тому

      Честно скажу - пока в планах не было, но, планы эти весьма динамично порой меняются =))))
      Может и будет такой выпуск =))))))

  • @IvanNarizhnyi
    @IvanNarizhnyi Рік тому

    Здраствуйте, есть инстаграм или ТГ?Есть предложение

  • @Seriyv0lk
    @Seriyv0lk Рік тому

    Расскажи про ЧПУ-шку, что у тебя за спиной стоит. Платы сам делаешь на нём?

  • @artemsilivanchik
    @artemsilivanchik Рік тому

    Клевые видео!

  • @fuppup
    @fuppup Рік тому

    Спасибо!

  • @alexeyr8897
    @alexeyr8897 8 місяців тому

    Друг!) Расскажи про P, PD, PI, PID регуляторы...

  • @mnus2016
    @mnus2016 Рік тому +3

    Ну это жесть конечно на каждом цикле двигать весь массив. Так не стоит делать даже для упрощения понимания при демонстрации 🙂
    Нужно завести ещё одну переменную-индекс на следующую позицию, далее записываем новое значение в ячейку куда указывает этот индекс, потом увеличиваем индекс на единицу и проверяем не вышел ли он за границу массива. Если вышел - обнулям. Ну а дальше суммируем. Хотя и по большому счёту и второй цикл суммирования массива лишний. Достаточно при старте заплнить весь массив, потом посчитать его сумму и уже оперировать только с этой суммой: перед тем как записывать новое значение в ячейку массива, из имеющийся суммы вычитаем значение этой ячейки и добаляем к сумме новое значение.

    • @UA3USY
      @UA3USY Рік тому +1

      во блин завернул)

    • @vvdvlas8397
      @vvdvlas8397 Рік тому

      @@UA3USY
      Ага! Объясняя фразу "на каждом цикле двигать весь массив". А сколько багов ожидается на этом пути!

  • @Palladln
    @Palladln Рік тому

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

  • @hatuul
    @hatuul Рік тому

    Спасибо.
    А PID фильтрация?

    • @drubakha
      @drubakha Рік тому +1

      pid регулирование, а тут за фильтрацию

  • @ДмитрийУчаев-п4х
    @ДмитрийУчаев-п4х 9 місяців тому

    Наш человек

  • @zenneloh
    @zenneloh Рік тому

    Это про схемотехнику?

  • @robertmonroe9728
    @robertmonroe9728 Рік тому

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

  • @КашаевДмирий
    @КашаевДмирий Рік тому

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

    • @Gnevistj
      @Gnevistj  Рік тому

      Вот напрочь забыл его упомянуть, хотя использовал совсем недавно аналогичный подход!!! Каюсь, виноват, спасибо за дополнение! =)))
      Метод никак не устаревший, он живее всех живых, и действительно прост в реализации, но есть одно ограничение - сей способ подходит только для управления посредством компараторов, сравнения с некоторой уставкой - в этом случае сей метод царь и Бог по простоте и быстродействию =)))
      Показанные мною методы больше подходят в случае если кроме управления нужна "не прыгающая" индикация, ну и в случае пропорционального управления они становятся незаменимы.

    • @КашаевДмирий
      @КашаевДмирий Рік тому

      @@Gnevistj Когда надо получить усреднёнку для красивешной индикации, обычно берётся дискретизация выборки измерений 4-100Х от цикла обновления индикации. Редко когда делал обновление индикатора чаще раза в секунду. Часто это была совершенно отдельная подпрограмма, не завязанная на управление, живущая на отдельном таймере. Одна из важных фишек, не мешать вместе исполнительный код разных функций. Записываем значение АЦП в аккум (или выделенную ячейку памяти) при следующем измерении складываем это и старое, сдвиг аккума вниз (делим на два). Цикл повторяется. В момент обновления индикации имеющееся значение пихаем в регистр индикатора. Да, в принципе-то всё то же самое, что и у вас, но без математики в коде. Да, опять же наследие асма.

  • @alexshu1609
    @alexshu1609 Рік тому

    По фильтрам в своих свистоперделках пользую обычно "filt = (A * filt + signal) >> k;" подсмотрено у "гайвер фильтры" кстати там же хорошая статья есть

  • @Unresolver
    @Unresolver Рік тому +1

    Так а чего б не написать это всё на Си, где нет никаких проблем с плавающей точкой.

    • @0imax
      @0imax 3 місяці тому

      тем более в родной микрочип студио)

  • @пашасергеев-я4ю

    А я усреднение среднего пользуюсь, это когда предыдущий результат складывается с тёкшим и делится на 2, затем он складывается с таким же средним и делится на количество заданных измерений. При 50 замерах раз в 100 мкС показания вольтметра стоят как вкопанные.

    • @Gnevistj
      @Gnevistj  Рік тому

      Если не ошибаюсь, этот метод называется скользящей медианой =) Принцип у них у всех похож, главное чтобы результат радовал =)

    • @пашасергеев-я4ю
      @пашасергеев-я4ю Рік тому

      @@GnevistjБольше похоже на скользящие среднее, а в остальном Согласен на все 100 😁😁👍👍😉😉

  • @RusLSystems
    @RusLSystems Рік тому +1

    Другие методики
    Фильтр низких частот вошел в чат

  • @SerV4
    @SerV4 Рік тому

    Не Саныч непонятно объяснил, похоже у него интеллект намного выше моего 😂

  • @Ma_X64
    @Ma_X64 Рік тому

    Зачастую, бОльшую часть можно отфильтровать аналоговыми цепями. А FFT и, например, в обработке звука стараются не применять. Рекурсивные цифровые фильтры куда более распространены. Есть, между прочим, очень простой способ усиления НЧ и ВЧ с помощью банального сложения и вычитания двух соседних отсчётов. При сложении всё, что осталось неизменным (НЧ) удваивается, а при вычитании -- уничтожается. Кстати, практически все формулы, которые так любят приводить в учебниках, для микроконтроллеров подходят плохо, потому что требуют арифметику с плавающей точкой, а простенькие МК её жуть, как не любят. Большинство даже и целочисленное деление выполняют через костыли, не говоря уже о FP.

  • @alexnikolaevich2110
    @alexnikolaevich2110 Рік тому

    На 9:48 где-то горько заплакал float :)

  • @АлексейЗамула-ч6ф

    Чет новое узнал

  • @lofo1979
    @lofo1979 Рік тому

    Ничего не понял, но интересно.)))

  • @Light299792458
    @Light299792458 Рік тому

    Теперь я знаю :-)

  • @suntechnology
    @suntechnology Рік тому

    Это перезалив? Я вчера этот ролик смотрел или сегодня утром😕

    • @Gnevistj
      @Gnevistj  Рік тому +1

      Нет, не перезалив, выложил сегодня утром =)

  • @anakoliy_tsyfra
    @anakoliy_tsyfra Рік тому +2

    В программировании МК недавно, ещё учусь. Но блин, экономить вычислительный ресурс МК считывая значения раз в секунду - это мягко говоря тупо. Из всех уроков что я прошёл - большую часть кода, и соответственно, вычислительной мощности, тратится на то, что бы полученный результат донести до оператора изделия. А не выполнить какую либо автоматическую функцию... Опять же пример - бойлер, что бы клацать релюшкой, нужно, грубо говоря, 15 строк кода, остальное - это показать человеку температуру, обработать нажатия и пр. взаимодействие.
    Уход от плавающей запятой тоже такой применял. Смотрел как в уроке, понимал что это тупо (учу АВР, естественно Атмега8), переписывал код под "фиксированную" запятую. Итог - меньше памяти занято, удобнее читать код, сразу объявляются типы данных, а не как иногда бывает "ой, что то не работает..." *прошло пол часа* "...ааааа, тут нужно было присвоить другой тип данных" *пихается присвоение типа данных в середину кода*.

    • @dimkadimkin5861
      @dimkadimkin5861 Рік тому

      Хорошо продвигаетесь, так держать!
      Будет подезно, если еще таких привычек не приобрели, если в си пишете:
      1. Сразу ставить (), {}, [ ], обе скобки.
      Никогда не забудете, их потавить.
      2. Использовать структуры.
      3. Создавать свои типы данных.
      4. Испоьзовать тип union.
      5. Использовать указатели.
      Эффективность и читаемость повысятся в разы.

  • @joramotorsportteam3277
    @joramotorsportteam3277 Рік тому +1

    SUPER!
    Teperj nado perehoditj na BK kompjuteri! 🎉
    A cto s SVO?
    Gatov ktoto k mogilizaciji ili luche putlera v Gagskij tribunal pislatj i zitj dalshe mirno?🎉

  • @nurlybekmoldagaliev8920
    @nurlybekmoldagaliev8920 Рік тому

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

  • @sergeyvoloshchuk6846
    @sergeyvoloshchuk6846 11 місяців тому

    О, сразу видно советского инженера! Все сигналы у него меняются медленно, поэтому их можно зафильтровать. Особенно температура. Поэтому когда я на своей Весте выезжаю зимой со стоянки торгового центра, то она показывает температуру +12 даже когда я уже оказался на улице, а до -15 она дойдёт хорошо если минут через пять.
    А если вы делаете датчик натяжения троса для подъемного крана, у вас тоже сигнал меняется медленно? Ну, груз же просто висит, надо показать натяжение. Вот только если возникнет затяжка, то вы должны СРАЗУ ЖЕ показать превышение, чтобы автоматика СРАЗУ выключила двигатель. А если вы его зафильтруете, то трос оборвется когда показания будут ещё далеко от критических.

  • @ЮрийСамофал-ю9ь

    СМА можно написать и на 3-4 переменных, тогда вообще коэффициент фильтрации не ограничен. Короче от массива в 100,1000 и т.д. можно отказаться совсем.

    • @Gnevistj
      @Gnevistj  Рік тому

      Безусловно. Но не будет так наглядно =)

    • @ЮрийСамофал-ю9ь
      @ЮрийСамофал-ю9ь Рік тому

      @@Gnevistj согласен, но куда не плюнь, если сколзящее среднее, в ПО то массивы, даже в пром. ПЛК не парятся. Поэтому и ограничены лимиты 32-128. Для выборками. Для давлений допустим в вентканалах с сумасшедшей турбулентностью, 32 выборки мало как у сименс например. Там 32, ещё и 100 сверху добавлять приходится.
      Ну в в общем видео ваше и вам решать о чём рассказывать. Хорошее дело делаете! )

  • @omarmalyomarmaly9323
    @omarmalyomarmaly9323 Рік тому

    thx

  • @ЮрийСамофал-ю9ь

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

    • @Gnevistj
      @Gnevistj  Рік тому

      Принимаю! Мои извинения, не всегда легко удержать нужный уровень детализации при рассказе =)

    • @ЮрийСамофал-ю9ь
      @ЮрийСамофал-ю9ь Рік тому

      @@Gnevistj Я Вас тоже понимаю, сложно сценарий писать и всё в голове удержать. Если есть возможность запилите передачу про рекуррентные формулы, для чайников будет полезно, а то все боятся их как и математики. А по итогу страшный ПИД сводится к сложению и умножению! )

    • @Gnevistj
      @Gnevistj  Рік тому

      @@ЮрийСамофал-ю9ь , если речь идет именно про ПИД - то такие выпуски планируются; возможно успею еще в этом году =)))

    • @ЮрийСамофал-ю9ь
      @ЮрийСамофал-ю9ь Рік тому

      @@Gnevistj ПИД просто как пример, рекуррентных формул(к примеру википедия). Сам в относительно не давно свой первый ПИД написал т.к. в любой среде они есть уже готовые. Но тут по бюджету захотели ПЛК EKF. Хотя работал до этого с Сименс и КодеСис совместимыми контроллерами. По итогу в среде разработки EKF, забыл сейчас аналоги(при чем продаются в РФ и даже дешевле), видимо кто-то списал тупо ПИД из гит-хмб, у Гайвера, по итогу ПИД если один, работает нормально, если два конфликтуют, т.к. переменные в функции static. Другой вопрос в FBD комменнтов даже нет, есть только в Lad и ограничения на входах функции три выхода и что-то в районе 10 входов, вход/выход туда же входят. Остальное всё переменные для внутренней памяти функции а их 32, с учётом входов и выходов. Короче весело! Плюс когда надо обрзначить маски в WORD, а у них есть только INT по итогу надо пересчитать число в Int со знаком короче весело! По этому то и написал, что готовить тех кому это интересно надо тупо к лютой жести! Мы же асушники! Плюс нашей профессии, много асушников ушло в IT и мы сможем скоро тупо как в Крёстном отце назначать свою цену. Сцена с котом! ) Если подкачал с грамматикой - это всё пивас! )

    • @ЮрийСамофал-ю9ь
      @ЮрийСамофал-ю9ь Рік тому

      @@Gnevistj да и ПИД делал с мёртвой зоной, ограничениями входных и выходных значений.

  • @ivanrusev2270
    @ivanrusev2270 Рік тому

    На асме не програмирую.Усреднение всегда тормозит программу.

  • @v61kz
    @v61kz Рік тому

    Да уж, цифровая фильтрация тема интересная и сложная. Как-то пытался сделать цифровой фильтр «по учепнику», всё по формулам преобразований (для аудиофайла в матлабе). Получил на выходе массив комплексных чисел. А как подать комплексный сигнал на ЦАП (ну или в данном случае записать в аудиофайл) нигде в «учепниках» не рассматривается🤣🤣🤣 Теория как-то отделена от практики😁 Нужен личный практический опыт, потом эти «учепники» уже переосмысляешь

    • @Gnevistj
      @Gnevistj  Рік тому

      Без практики никак, полностью согласен. Учебник всегда дает "базу", скелет эдакий, который во время работы обращиваешь "мяском" опыта =)))))

  • @РомаКабинка
    @РомаКабинка Рік тому

    Пасиба Санычу! Коротко все, доступно.
    [шутка]Аффтар пади пастрижысь, патлатый как тьолка лять[/шутка]

    • @Gnevistj
      @Gnevistj  Рік тому +1

      Нимагу пастричься - мну мотоциклист, мну по закону положено быть патлатым =))))))))))))

    • @RusLSystems
      @RusLSystems Рік тому

      @@Gnevistj Поддерживаю. Рокерам и мотоциклистам положено. А если и тот и другой сразу - то 2 раза положено, даже на пиво скидку дают 😆

    • @РомаКабинка
      @РомаКабинка Рік тому

      @@Gnevistj мой знакомый Кирилл говорит что он мацалтыклист (на мацалтыкале ездит)

  • @ПавелИгнатьев-в4у

    Очень похоже на ПИД регулятор, которые есть в промышленности, и нет нужды лепить их на микроконтроллере.

  • @flexoalex4168
    @flexoalex4168 Рік тому

    А зачем для фильтрации аналоговых сигналов, опрессовщик металло-пластиковых фитингов???

  • @ЮжныйКот-м2э
    @ЮжныйКот-м2э Рік тому

    В нормальном устройстве шумы и прочие непотребства отсекаются до входа АЦП.

    • @denisgluk431
      @denisgluk431 Рік тому

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

  • @sergy4470
    @sergy4470 Рік тому

    Кажется Саныч больше практик чем теоретик ?😁

  • @robertmonroe9728
    @robertmonroe9728 Рік тому +2

    Когда увидел := - уже затошнило от флешбеков Паскаля со времён школы. А здесь этот Бейсик или не пойми что, в отличие от школовского Паскаля - ещё и отвратительно читается. Вы, батенька, мазохист? Чем обычные си не угодили? На коболе писать не пробовали? Наверное, вам понравится

    • @0imax
      @0imax 3 місяці тому

      Зато можно весело сражаться с отсутствием float))

  • @AA-ld1gc
    @AA-ld1gc Рік тому

    Напомнил мне алгебру-чото не понял и дальше уже ничего не понятно .

    • @deniskhakimov
      @deniskhakimov Рік тому

      Да ладно вам...
      По первой же формуле, показанной альтер-эго автора канала, было понятно, о чём пойдёт речь 😁
      p.s.: или я просто уделяю слишком много времени машинному обучению и статистике 🙄

  • @ИванИванов-ш4к4я

    Вот засрал мозг! Ставишь RC-фильтр и не жрёшь процессорное время!

  • @DIY_PLC
    @DIY_PLC Рік тому

    ЦОС КИХ БИХ

    • @Gnevistj
      @Gnevistj  Рік тому

      Не-не-не, не путайте пожалуйста полноценную ЦОС и фильтрацию сигналов в автоматике - совершенно разные цели, подходы, и постоянные времени. Это близкие по функционалу только на первый взгляд области, и если я правильно помню теорию, то скользящие средние являются лишь упрощенной реализацией фильтра с КИХ =)))