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

  Рет қаралды 15,641

Гневисть

Гневисть

11 ай бұрын

Фильтрация аналоговых сигналов в автоматике - (не)краткий ликбез с участием Саныча =)))
Материалы из видео:
files.inbox.lv/shared/file/d3...
Почитать о скользящих средних можно тут:
ru.wikipedia.org/wiki/%D0%A1%...

Пікірлер: 146
@mikhailphilimonov
@mikhailphilimonov 11 ай бұрын
Ничерта не шарю в программировании, но мужик на столько мне заходит, такой веселый и много умных слов говорит, что я его смотрю постоянно!
@DmitryBoev
@DmitryBoev 11 ай бұрын
Блин, я давно все знаю это, но автор настолько крутой, что смотрю с удовольствием
@BioTech81
@BioTech81 11 ай бұрын
Я не знаю даже кто я такой но автора смотрю 🤣
@Gnevistj
@Gnevistj 11 ай бұрын
Спасибо, ребят! Буду стараться радовать вас дальше! =)))
@user-hy1iu3wk9h
@user-hy1iu3wk9h 6 ай бұрын
​@@Gnevistjздравствуйте! Можно обратиться к Вам по программированию?
@user-xc3sg4kh6w
@user-xc3sg4kh6w 11 ай бұрын
Гневисть, спасибо за видео! Пишу на ASM X86, работаю в основном с ПЛИС при помощи языка проектирования Verilog. Ты - один из немногих, кто понимает о чем говорит и называет вещи своими именами, тебя интересно смотреть не только новичку в этом деле, но и инженеру с опытом.
@user-qe3pf5ph8x
@user-qe3pf5ph8x 11 ай бұрын
Изумительная подача материала , браво ! Спасибо.
@user-xq4px3nm6g
@user-xq4px3nm6g 11 ай бұрын
Спасибо "Санычу". Про "скользящее среднее" и "скользящее экспоненциальное среднее" я вроде в курсе.
@Alexej955
@Alexej955 10 ай бұрын
Друг, продолжай делать ролики. Спасибо. Народ соскучился по умным преподавателям.
@Gnevistj
@Gnevistj 10 ай бұрын
Спасибо! Буду продолжать =)
@loverock8384
@loverock8384 11 ай бұрын
За что нравится Саныч - объясняет за пару секунд. Уважаем! 😂
@nikitaafanasyev1327
@nikitaafanasyev1327 11 ай бұрын
SMA считается по O(n) , не надо там каждый раз считать сумму всех элементов массива , достаточно поддерживать переменную суммы, вычитая из нее самое старое значение и добавляя новое
@olegbelous5588
@olegbelous5588 11 ай бұрын
Спасибо! Доходчиво всё объяснили, так очень редкий преподаватель сможет донести для студентов излагаемый предмет. Хотелось бы увидеть в ближайших видео как осуществить дельта-сигма модуляцию, скажем, речевого сигнала.
@ADNpower-xy6yv
@ADNpower-xy6yv 5 ай бұрын
Доставляет удовольствие следить за мыслью умного человека
@Al-Al
@Al-Al 11 ай бұрын
Отличная подача матеряла. Смотрится с удовольствием и на одном дыхании.
@asutp2089
@asutp2089 11 ай бұрын
Красиво объяснил. Спасибо. С опытом, через боль доходим до этого. Разрабатываем алгоритм. А потом оказывается это всё уже давно придумано до нас.
@Gnevistj
@Gnevistj 11 ай бұрын
Так всегда и есть - я когда-то, по молодости, терпеть не мог готовые библиотеки - "все сам напишу!!!", спустя годы стараюсь побольше использовать именно готовые - ибо кто-то до меня уже набил шишки и все отладил, зачем мне повторять его опыт? Мне нужно макрозадачу решить, а микрозадачи - они все решены до нас =)))
@dn.kolesnikov
@dn.kolesnikov 11 ай бұрын
Если сказать Огромное СПАСИБО!, то это будет только половина благодарности! Всегда рад Вашим видео! Как раз пишу свой велосипед для открытия дверей теплицы по показаниям температуры, и тут теория подъехала... Спасибо еще раз!
@StartuePotoya
@StartuePotoya 11 ай бұрын
Хорошо, что я нашел Ваш. канал, большое спасибо за видухи .
@6om6a
@6om6a 11 ай бұрын
Годнота подъехала. Жму руку и желаю успехов во всех начинаниях!
@user-ld7vr3fz3p
@user-ld7vr3fz3p 11 ай бұрын
16:26 - лучше делать кратно степени двойки и переходить от деления к сдвигам.
@sarmatskif6660
@sarmatskif6660 11 ай бұрын
Випадково забрів,але вже давно наблюдаю,ноут і жменя мк теж є,цікава подача,що зацікавлює.
@aleintaseevo
@aleintaseevo 10 ай бұрын
Кайфово что Хэтфилд выучил русский и поясняет за электронику
@alexeiviktorovi4130
@alexeiviktorovi4130 11 ай бұрын
Классно. Спасибо за очередной шедевр. Особенно аутро повеселило 🔝
@asdffewfew
@asdffewfew 11 ай бұрын
как всегда очень познавательно и интересно. спасибо. здравствуйте кстати)
@andreyace8768
@andreyace8768 11 ай бұрын
Спасибо за подготовку материала!!! 💪💪💪💪✌✌✌✌!!!!
@Shifoner_
@Shifoner_ 11 ай бұрын
Интересно, доходчиво! Как жаль что мало)))
@eugene_irkutsk
@eugene_irkutsk 11 ай бұрын
Первое полезное видео на канале. До этого радовала подача материала )))
@nicseroff2690
@nicseroff2690 11 ай бұрын
Спасибо! Все по полочкам! Так держать!
@rustybroom7071
@rustybroom7071 11 ай бұрын
Прекрасный ролик, спасибо. И гневисть есть в нужном количестве.
@user-le6ik1vv9m
@user-le6ik1vv9m 4 ай бұрын
Молодец😊
@sima8623
@sima8623 10 ай бұрын
Саныч как всегда прав, спаасибо за видео!
@user-ct5cm4rj6v
@user-ct5cm4rj6v 11 ай бұрын
Удачно я зашел!!!)))) Подписался, поставил лайк, сижу и радуюсь!)))
@drubakha
@drubakha 11 ай бұрын
Если есть лишние ресурсы МК - выбираю для себя фильтр Калмана. В свое время очень помог с тензодатчиками.
@user-ui2gf2gw6b
@user-ui2gf2gw6b 9 ай бұрын
делал измерение по формуле пять измерений, все сложить и на пять разделить, подчет делал по схеме сдвига , последние из пятерки выходит а измеряемое в первое входит. алгоритм полечился простой и очень практичный. количество измерени выбрал от требуемого среза верхних частот которое задавалась внешне программно
@velessn
@velessn 11 ай бұрын
Тут можно ставить лайк не глядя. Заходит на ура.
@BioTech81
@BioTech81 11 ай бұрын
Наконец-то подошли к концу мини сериала про АЦП???? Да нет, не разу не наконец-то..... Здрасьте кстати 😅 Автор как всегда отбойный молоток но Михалыч это космос 😂 Счастья, любви, здоровья, удачи👍
@Gnevistj
@Gnevistj 11 ай бұрын
Спасибо! =)))) Ну, можт и продолжится этот сериал в виде эммм... Спин-оффов, или как это в киноиндустрии сейчас модно так называется? =))))) Счастья, здоровья, сил, любви, и всего-всего =))))))
@bit_happens_
@bit_happens_ 8 ай бұрын
Спасибо!
@Immo_Off
@Immo_Off 11 ай бұрын
👍👍👍👍👍
@user-zd5bh2bl1y
@user-zd5bh2bl1y 9 ай бұрын
Знаете где это может пригодится? Для оверсемплинга 10 битных АЦП. Есть документ от микрочип: AVR121:Enhancing ADC resolution by oversampling. Можно увеличить разрядность и точность АЦП. Благодаря этому видео я ещё больше понял этот документ. И вообще возможно автор видео захочет показать пример оверсемплинга на PIC/AVR, где используются именно эти формулы. А теории от 10 битного АЦП можно получить точность в 3-4 знака после запятой.
@suntechnology
@suntechnology 11 ай бұрын
Эээээээ! Я еще прошлые ролики не посмотрел! Хороший темп. Так держать!
@Gnevistj
@Gnevistj 11 ай бұрын
Они никуда не исчезнут, прошлые ролики, не переживайте! =))) Постараюсь радовать и дальше =)
@dimkadimkin5861
@dimkadimkin5861 11 ай бұрын
Одна из достойных освещения, методик фильтрации: медианный фильтр. Реализуется просто, задержек минимум, шумы фильтрует очень хорошо.
@Gnevistj
@Gnevistj 11 ай бұрын
Да, но это один из вариантов скользящей средней, поэтому я его не упомянул в этом выпуске =)
@postoronny
@postoronny 11 ай бұрын
Массив требует сортировки при каждом отсчёте...
@artemsilivanchik
@artemsilivanchik 9 ай бұрын
Клевые видео!
@Drmidon
@Drmidon 11 ай бұрын
Видео супер. Не сказано в этом уроке что такое n. Период фильтрации (n) - это количество замеров, которые будут усреднены. Грубо говоря, если n=1, то нет усреднения(каждый замер на входе попадает без изменений на выходе). Если n=2, то берет среднее из 2х значений(предыдущее + текущее значение / 2). Если n=100, то среднее из 100 замеров. Вангую забавную аббревиатуру PIDR (proportional-integral-derivative regulator) в следующем уроке.
@Ma_X64
@Ma_X64 11 ай бұрын
Обычно пишут regulator, не включая в аббревиатуру.
@user-sp7hx5lb8u
@user-sp7hx5lb8u 11 ай бұрын
Не знаю, на своём бойлере сделал терморегулятор на обычном китайском термисторе, Меga8 и импульсном пропитании. Никакие помехи и наводки ему не мешают. Темперадуру держит в пределах 2-3°C. Единственно, при переходе с одного градуса на другой начинался дребезг. Проблема решилась уменьшением частоты измерения темперадуры: подбором времени задержки. Всё работает чётко.
@user-ul6iu3nu7i
@user-ul6iu3nu7i 11 ай бұрын
Так и было!! ардуина считывала сопротивление терморезистора, на столе все работало норм. Но ночью, когда все уснули а датчик закрепился на батарее той-же комнаты, сработала тревога))
@vernnms78
@vernnms78 11 ай бұрын
А я голову ломал, зачем в свое время Гайвер использовал для сглаживания метод усреднения квадратов? Теперь убедился, что всё проще и надеждее. Спасибо!
@user-kt4cd1gb4t
@user-kt4cd1gb4t 11 ай бұрын
Больше Саныча! Пусть задвинет лекцию за ассемблер!
@Gnevistj
@Gnevistj 11 ай бұрын
Как-нибудь попробую сорганизовать =))))))))
@Den_mix
@Den_mix 9 ай бұрын
Сделай ролик про ПИД регулирование например с термопарой.
@mikhailshashkov8395
@mikhailshashkov8395 7 ай бұрын
Представляется, что 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, ...). Особенно это полезно в случае необходимости оценки производной функции измеряемого процесса. Кроме того, как правило, задержка сигнала, связанная с фильтрацией, становится меньше. Количество операций здесь минимально, и память для хранения массива измерений тоже не требуются.
@skakalinvlad
@skakalinvlad 11 ай бұрын
Не ошибается тот, кто ничего не делает? Но разве ничего не делать - это уже не ошибка? :) А выпуск супер!!! Не знал, что можно и в цифре так сделать, сам бы на аналоге мутил перед самым входом (RC или LC, скорей первый, а то L иногда плюётся некрасиво, ещё C обидится, или датчик). Спасибо, просвещаете нас дремучих. 👍👍
@Gnevistj
@Gnevistj 11 ай бұрын
"Ничего не делать" - это целая жизненная философия, с которой я не согласен, ибо скучно это =)))))) RC фильтр неплохой вариант, но можно замучиться подбирать номиналы, а при отладке на объекте это скушает много времени, плюс лишние детали (еще и вопрос сертификацией может возникнуть). С программным усреднением проще - коэффициент/период подобрал на глаз - и норм =)))))))
@RG-el8zy
@RG-el8zy 9 ай бұрын
А я ФНЧ Бесселя 2-го порядка сделал на ОУ. В умных книгах написано, что надо аналоговый фильтр + цифровой фильтр. Некоторая дополнительная полезная информация есть на канале TDM Lab kzfaq.info/get/bejne/j8VzhNNnqrTbg2Q.html
@user-lp1tl4yx4x
@user-lp1tl4yx4x 3 ай бұрын
Наш человек
@OnufriyAlex
@OnufriyAlex 11 ай бұрын
Как объяснение сути фильтрации для несведущих - отличный материал. Как пример реального кода - моветон, и вот почему: Использование массива в скользящем среднем это показатель быдлокодинга, т.е. автор кода не понимает ценности ОЗУ и затрачиваемого процессорного времени на вычисления. При каждом новом измерении происходит суммирование всего массива в какую-то "большую" переменную, при том, что большинство ПЛКшек на сегодняшний день остаются восьмибитными, т.е. киличество тактов процессора затрачиваемого на один цикл суммирования кратно равно количеству октетов в "большой" переменной. Получается, если мне нужно фильтровать показания с двадцати-тридцати-пятидесяти датчиков, то ОЗУ "до свидания", а ЦП большую часть времени выполняет бесполезный однообразный код и ничего другого просто сделать не успевает. Целый дорогущий процессорный блок на несчастную жменю датчиков. У Гайвера на канале "Заметки ардуинщика" есть видео про фильтрацию измеренных значений, где объясняется как именно нужно применять фильтр бегущего среднего.
@Gnevistj
@Gnevistj 11 ай бұрын
Спасибо за развернутый комментарий, но вынужден уточнить детали: Естественно, это простой пример для начинающих, в котором формула воплощена "as is" для наглядности, и кушоеть много памяти и ресурсов, но! Тот недорогой ПЛК, который я использовал в примере, обладает 8 мегабайтами ОЗУ для пользовательских данных. Заманаюсь экономить =))))) И, простите, откуда инфа про восемь бит? Вполне "взрослые" микропроцессорные комплекты используются у всех лидеров рынка... Второе - скорость выполнения программы, он же сканцикл, при использовании моего метода, плюс с подгруженной веб-визуализацией, он не выходил из значений "холостого хода" - 300мкс. Да и в целом, ни разу не удалось его "прогрузить", чтобы он вышел на "человеческие" 10мс хотя бы =)))) даже если вместе с управлением приходилось решать задачи по даталоггингу, составлению отчетов с чтением/записью файлов и обмену этих файлов через FTP. И в третьих, сегодня у многих крупных клиентов в приложении к договору (т.н. Project Specification) прописывается требование об оформлении кода - декларируется использования конкретных языков программирования для решения каждого круга задач, и особенно в части написания формул - требуется максимальная наглядность и читаемость; ресурсов чтобы обработать такой "быдлокод" у современных машин "за глаза"... Увы, оптимизация уходит в прошлое и в промавтоматике, с другой стороны - может это и к лучшему, ведь становится проще разобрать логику построения чужой программы =))
@OnufriyAlex
@OnufriyAlex 11 ай бұрын
@@Gnevistj У меня в эксплуатации находятся, кроме прочего, контроллеры покупки 2008 года Siemens SIMATIC S7-400 (это тот случай, когда работает - не трогай). На поверку при вскрытии выясняется, что вычислительная элементная база построена на контроллерах Atmel AVR серии (при этом есть подозрения на распределённые вычисления, т.к. один контроллер не способен обрабатывать такое количество кода). Снижение проходного уровня это хорошо, в том числе и я проник в АСУП благодаря упрощению написания кода и как следствие более быстрому выполнению проектов. С другой стороны я же сам и зарабатываю на жизнь перерабатывая проекты написанные "очень простым языком". К примеру, в существующую АСУ необходимо добавить какой-нибудь новый агрегат, а АСУ построена на трёхсотой серии и запас на расширение уже истрачен. Так вот, переход от Вашего способа фильтрации к формуле из видео Гайвера позволил мне примерно в два раза сократить время единичного измерения и сэкономить ОЗУ. Ну и напоследок, привет из Мариуполя, комбинат имени Ильича. В 2016 году у нас случился вирус Petya. "Лягли" все ПК как постов управления в частности, так и всей бизнес-сети комбината. Но наш ЛПЦ "Стан 3000", у которого посты управления выполнены на машинах 86 года, продолжил исправно работать, ибо нет такого вируса, который бы положил столь больших "старичков". Уцелели трубопрокатные линии с системой 93-го года, МНЛЗ 92-93-го года запуска так же продолжала работать. ICP DAS серии ICP CON вообще моё почтение, третий десяток лет трудятся и хоть бы хны. Это я всё к тому, что да, есть новые мощные контроллеры, но и старых на местах полно, а убедить собственника в смене "железной" части без какого-то качественного или экономического изменения крайне сложно.
@vladyslavshchedryn7008
@vladyslavshchedryn7008 11 ай бұрын
Отличный видос, хоть я и знаю всё это давно, однозначно смотрю с удовольствием. У меня только один вопрос: какого хрена уведомления не приходят? Раньше приходили, а сейчас нет. И это, я в молодости фильтровал аналоговые сигналы с помощью аналоговых фильтров, как ни странно 😂😂😂 RC/LC в зависимости от ситуации, только постоянную времени посчитать
@user-hv5ol7re9i
@user-hv5ol7re9i 8 ай бұрын
Это всё конечно классика. Но что реально интересно, это когда АЦП 16, 24 бита, используется буферный ОУ и опорник. Настройка диф режима и фильтрация и размах с помощью ОУ, для высокой точности
@alexnikolaevich2110
@alexnikolaevich2110 11 ай бұрын
На 9:48 где-то горько заплакал float :)
@user-xr5rh8ig9s
@user-xr5rh8ig9s 11 ай бұрын
Чет новое узнал
@SerV4
@SerV4 11 ай бұрын
Не Саныч непонятно объяснил, похоже у него интеллект намного выше моего 😂
@lofo1979
@lofo1979 11 ай бұрын
Ничего не понял, но интересно.)))
@user-le6ik1vv9m
@user-le6ik1vv9m 4 ай бұрын
Раскажите угол открывания тиристоров для чего такие углы что происходит при разных начальных углах аналоговые схемы типа тпе 😮
@postoronny
@postoronny 11 ай бұрын
Не нужно для скользящего среднего при каждом отсчёте пересчитывать сумму и делить её на количество отсчётов усреднения: При запуске домножаем значения уставок для включения и выключения на длину массива; При каждом отсчёте отнимаем из переменной суммы значения из хвоста массива, сдвигаем массив (я просто сдвигаю указатели на начало и конец кольцевого массива), вставляем в голову новое значение и прибавляем его же к сумме; Всё. Сумму можно сравнивать с уставками ;)
@postoronny
@postoronny 11 ай бұрын
С плавающей точкой при таком способе может накапливаться ошибка округления, а с целочисленными вообще никаких проблем. Я так считаю среднее квадратическое - там при каждом отсчёте, вообще, нужно было бы считать квадратный корень... но зачем, если можно уставку заранее возвести в крадрат и умножить на длину буфера? :)
@robertmonroe9728
@robertmonroe9728 10 ай бұрын
Медианный фильтр чаще всего лучше всего из простых. Именно нечувствительностью к выбросам
@robertmonroe9728
@robertmonroe9728 10 ай бұрын
Здесь только IIR упомянули. А вот FIR, median - не, не слышали. О Калмана (кстати, часто юзаю) - вообще молчу
@nicksy98
@nicksy98 10 ай бұрын
Гневисть привет. Все умно и доходчиво, а как нам наладить диалог есть коммерческие темы.
@Light299792458
@Light299792458 11 ай бұрын
Теперь я знаю :-)
@TheAlexey1980
@TheAlexey1980 6 ай бұрын
Привет. Как слелать вольметр, показание которого не скачет? Например при величине близкой, к 23 и 24 всн равно показания с обоими фильтрами скачат между 23 и 24 (ну или сколько там). И так в почти всех цифровых вольметрах (амперметрах). Что сделать чтоб показания не скакали (ударение на вторую "а")
@Palladln
@Palladln 11 ай бұрын
Есть еще средне-взвешенная средняя. там последним данным больший вес в формуле придается. и еще можно сгладить шумы если на входе интегратор из конденсатора и резистора поставить.
@omarmalyomarmaly9323
@omarmalyomarmaly9323 8 ай бұрын
thx
@id_vk
@id_vk 11 ай бұрын
Не нашел нигде в интернете как синхронизировать аудио с анимацией на oled дисплее i2c 128*64(да и в принципе на любом другом). Буду благодарен если снимешь урок на эту тему! (Пример: на дисплее включается анимация 2сек, и при включении анимации включается определенный звук с такой же продолжительностью. Включается другая рандомная анимация, и также соответственно включается звук присвоенный именно этой анимации)
@RusLSystems
@RusLSystems 11 ай бұрын
Другие методики Фильтр низких частот вошел в чат
@alexeyr8897
@alexeyr8897 Ай бұрын
Друг!) Расскажи про P, PD, PI, PID регуляторы...
@svarshig4231
@svarshig4231 6 ай бұрын
Если поставить фильтр низких частот в виде RC цепочки на выход датчика и сигнал с фильтра подавать на вход ацп, разве не получится то же самое, только без заморочек с кодом?
@mnus2016
@mnus2016 11 ай бұрын
Ну это жесть конечно на каждом цикле двигать весь массив. Так не стоит делать даже для упрощения понимания при демонстрации 🙂 Нужно завести ещё одну переменную-индекс на следующую позицию, далее записываем новое значение в ячейку куда указывает этот индекс, потом увеличиваем индекс на единицу и проверяем не вышел ли он за границу массива. Если вышел - обнулям. Ну а дальше суммируем. Хотя и по большому счёту и второй цикл суммирования массива лишний. Достаточно при старте заплнить весь массив, потом посчитать его сумму и уже оперировать только с этой суммой: перед тем как записывать новое значение в ячейку массива, из имеющийся суммы вычитаем значение этой ячейки и добаляем к сумме новое значение.
@UA3USY
@UA3USY 11 ай бұрын
во блин завернул)
@vvdvlas8397
@vvdvlas8397 10 ай бұрын
@@UA3USY Ага! Объясняя фразу "на каждом цикле двигать весь массив". А сколько багов ожидается на этом пути!
@Seriyv0lk
@Seriyv0lk 6 ай бұрын
Расскажи про ЧПУ-шку, что у тебя за спиной стоит. Платы сам делаешь на нём?
@alexshu1609
@alexshu1609 11 ай бұрын
По фильтрам в своих свистоперделках пользую обычно "filt = (A * filt + signal) >> k;" подсмотрено у "гайвер фильтры" кстати там же хорошая статья есть
@user-ye8ly3yf1s
@user-ye8ly3yf1s 10 ай бұрын
Доброго, Вам в личку вопросы можно написать по теме ?
@offgrisha
@offgrisha 11 ай бұрын
Спасибо автору видео. Можете показать как работать с платами wifi D1 для ардуино Uno. Хочу создать систему умный дом для ардуино. С платой D1 не могу разобраться( подключить) и т.д.
@Gnevistj
@Gnevistj 11 ай бұрын
Честно скажу - пока в планах не было, но, планы эти весьма динамично порой меняются =)))) Может и будет такой выпуск =))))))
@Ma_X64
@Ma_X64 11 ай бұрын
Зачастую, бОльшую часть можно отфильтровать аналоговыми цепями. А FFT и, например, в обработке звука стараются не применять. Рекурсивные цифровые фильтры куда более распространены. Есть, между прочим, очень простой способ усиления НЧ и ВЧ с помощью банального сложения и вычитания двух соседних отсчётов. При сложении всё, что осталось неизменным (НЧ) удваивается, а при вычитании -- уничтожается. Кстати, практически все формулы, которые так любят приводить в учебниках, для микроконтроллеров подходят плохо, потому что требуют арифметику с плавающей точкой, а простенькие МК её жуть, как не любят. Большинство даже и целочисленное деление выполняют через костыли, не говоря уже о FP.
@user-je6qz4yk6v
@user-je6qz4yk6v 11 ай бұрын
От оно как, оказывается нада... а мы по старинке при достижении измериловом заданного порогового значения запускаем таймер, напрочь забывая про сигнал, по прерыванию из таймера переизмеряемся, снова запускаем таймер если сигнал находится за порогом... и так цикл сколько нам надо на устранение условной помехи, и только после запускаем исполнителя. При нескольких различных пороговых уровнях длительность и число циклов может быть различным. Наследство тех времён, когда приходилось считать каждый байт и каждый такт...
@Gnevistj
@Gnevistj 11 ай бұрын
Вот напрочь забыл его упомянуть, хотя использовал совсем недавно аналогичный подход!!! Каюсь, виноват, спасибо за дополнение! =))) Метод никак не устаревший, он живее всех живых, и действительно прост в реализации, но есть одно ограничение - сей способ подходит только для управления посредством компараторов, сравнения с некоторой уставкой - в этом случае сей метод царь и Бог по простоте и быстродействию =))) Показанные мною методы больше подходят в случае если кроме управления нужна "не прыгающая" индикация, ну и в случае пропорционального управления они становятся незаменимы.
@user-je6qz4yk6v
@user-je6qz4yk6v 11 ай бұрын
@@Gnevistj Когда надо получить усреднёнку для красивешной индикации, обычно берётся дискретизация выборки измерений 4-100Х от цикла обновления индикации. Редко когда делал обновление индикатора чаще раза в секунду. Часто это была совершенно отдельная подпрограмма, не завязанная на управление, живущая на отдельном таймере. Одна из важных фишек, не мешать вместе исполнительный код разных функций. Записываем значение АЦП в аккум (или выделенную ячейку памяти) при следующем измерении складываем это и старое, сдвиг аккума вниз (делим на два). Цикл повторяется. В момент обновления индикации имеющееся значение пихаем в регистр индикатора. Да, в принципе-то всё то же самое, что и у вас, но без математики в коде. Да, опять же наследие асма.
@hatuul
@hatuul 11 ай бұрын
Спасибо. А PID фильтрация?
@drubakha
@drubakha 11 ай бұрын
pid регулирование, а тут за фильтрацию
@user-cm1cu4vu7d
@user-cm1cu4vu7d 11 ай бұрын
Пасиба Санычу! Коротко все, доступно. [шутка]Аффтар пади пастрижысь, патлатый как тьолка лять[/шутка]
@Gnevistj
@Gnevistj 11 ай бұрын
Нимагу пастричься - мну мотоциклист, мну по закону положено быть патлатым =))))))))))))
@RusLSystems
@RusLSystems 11 ай бұрын
@@Gnevistj Поддерживаю. Рокерам и мотоциклистам положено. А если и тот и другой сразу - то 2 раза положено, даже на пиво скидку дают 😆
@user-cm1cu4vu7d
@user-cm1cu4vu7d 11 ай бұрын
@@Gnevistj мой знакомый Кирилл говорит что он мацалтыклист (на мацалтыкале ездит)
@user-gw8qn5ik8b
@user-gw8qn5ik8b 11 ай бұрын
Здраствуйте, есть инстаграм или ТГ?Есть предложение
@kostantynljubcyc9484
@kostantynljubcyc9484 11 ай бұрын
Уважаемый коллега, я несколько лет использую некий фильтр и назвал его TDS (Tracking filter with Differential output step), а Вы мне открыли глаза и указали, что он называется EMA. Только формула у меня Yt = Yt-1 + (Xt - Yt-1)*a. Не могу их одну в другую преобразовать.
@Gnevistj
@Gnevistj 11 ай бұрын
Здравствуйте, коллега! Да, это один из вариантов формулы ЭМА, не "канонический", как в Википедии, например, но это именно она, один в один. В показанной мною формуле откройте скобки, и после, соберите скобки по множителю "а", и вы получите ваш вариант формулы =))
@kostantynljubcyc9484
@kostantynljubcyc9484 11 ай бұрын
Успешно собрал :) Реально на практике использую упрощённую формулу и обозвал её TRS. Yt = Yt-1 + ((Xt > Yt-1) - (Xt < Yt-1))*a. То есть не экспоненциально, а линейно изменяем выходную величину. И нету умножения, а сравнение. Таким образом 8-битный контроллер делает эту фильтрацию десятком команд.
@zenneloh
@zenneloh 9 ай бұрын
Это про схемотехнику?
@user-rk7oc5zj9s
@user-rk7oc5zj9s 11 ай бұрын
А я усреднение среднего пользуюсь, это когда предыдущий результат складывается с тёкшим и делится на 2, затем он складывается с таким же средним и делится на количество заданных измерений. При 50 замерах раз в 100 мкС показания вольтметра стоят как вкопанные.
@Gnevistj
@Gnevistj 11 ай бұрын
Если не ошибаюсь, этот метод называется скользящей медианой =) Принцип у них у всех похож, главное чтобы результат радовал =)
@user-rk7oc5zj9s
@user-rk7oc5zj9s 11 ай бұрын
@@GnevistjБольше похоже на скользящие среднее, а в остальном Согласен на все 100 😁😁👍👍😉😉
@suntechnology
@suntechnology 11 ай бұрын
Это перезалив? Я вчера этот ролик смотрел или сегодня утром😕
@Gnevistj
@Gnevistj 11 ай бұрын
Нет, не перезалив, выложил сегодня утром =)
@sergy4470
@sergy4470 11 ай бұрын
Кажется Саныч больше практик чем теоретик ?😁
@sergeyvoloshchuk6846
@sergeyvoloshchuk6846 5 ай бұрын
О, сразу видно советского инженера! Все сигналы у него меняются медленно, поэтому их можно зафильтровать. Особенно температура. Поэтому когда я на своей Весте выезжаю зимой со стоянки торгового центра, то она показывает температуру +12 даже когда я уже оказался на улице, а до -15 она дойдёт хорошо если минут через пять. А если вы делаете датчик натяжения троса для подъемного крана, у вас тоже сигнал меняется медленно? Ну, груз же просто висит, надо показать натяжение. Вот только если возникнет затяжка, то вы должны СРАЗУ ЖЕ показать превышение, чтобы автоматика СРАЗУ выключила двигатель. А если вы его зафильтруете, то трос оборвется когда показания будут ещё далеко от критических.
@user-fw7sq9sj5k
@user-fw7sq9sj5k 9 ай бұрын
Очень похоже на ПИД регулятор, которые есть в промышленности, и нет нужды лепить их на микроконтроллере.
@user-il4kd9qq3y
@user-il4kd9qq3y 10 ай бұрын
СМА можно написать и на 3-4 переменных, тогда вообще коэффициент фильтрации не ограничен. Короче от массива в 100,1000 и т.д. можно отказаться совсем.
@Gnevistj
@Gnevistj 10 ай бұрын
Безусловно. Но не будет так наглядно =)
@user-il4kd9qq3y
@user-il4kd9qq3y 10 ай бұрын
@@Gnevistj согласен, но куда не плюнь, если сколзящее среднее, в ПО то массивы, даже в пром. ПЛК не парятся. Поэтому и ограничены лимиты 32-128. Для выборками. Для давлений допустим в вентканалах с сумасшедшей турбулентностью, 32 выборки мало как у сименс например. Там 32, ещё и 100 сверху добавлять приходится. Ну в в общем видео ваше и вам решать о чём рассказывать. Хорошее дело делаете! )
@user-il4kd9qq3y
@user-il4kd9qq3y 10 ай бұрын
Yt-1 надо объяснять для чайников, что это Y сохраненный на предыдущем цикле или предыдущем вызове подпрограммы.
@Gnevistj
@Gnevistj 10 ай бұрын
Принимаю! Мои извинения, не всегда легко удержать нужный уровень детализации при рассказе =)
@user-il4kd9qq3y
@user-il4kd9qq3y 10 ай бұрын
@@Gnevistj Я Вас тоже понимаю, сложно сценарий писать и всё в голове удержать. Если есть возможность запилите передачу про рекуррентные формулы, для чайников будет полезно, а то все боятся их как и математики. А по итогу страшный ПИД сводится к сложению и умножению! )
@Gnevistj
@Gnevistj 10 ай бұрын
@@user-il4kd9qq3y , если речь идет именно про ПИД - то такие выпуски планируются; возможно успею еще в этом году =)))
@user-il4kd9qq3y
@user-il4kd9qq3y 10 ай бұрын
@@Gnevistj ПИД просто как пример, рекуррентных формул(к примеру википедия). Сам в относительно не давно свой первый ПИД написал т.к. в любой среде они есть уже готовые. Но тут по бюджету захотели ПЛК EKF. Хотя работал до этого с Сименс и КодеСис совместимыми контроллерами. По итогу в среде разработки EKF, забыл сейчас аналоги(при чем продаются в РФ и даже дешевле), видимо кто-то списал тупо ПИД из гит-хмб, у Гайвера, по итогу ПИД если один, работает нормально, если два конфликтуют, т.к. переменные в функции static. Другой вопрос в FBD комменнтов даже нет, есть только в Lad и ограничения на входах функции три выхода и что-то в районе 10 входов, вход/выход туда же входят. Остальное всё переменные для внутренней памяти функции а их 32, с учётом входов и выходов. Короче весело! Плюс когда надо обрзначить маски в WORD, а у них есть только INT по итогу надо пересчитать число в Int со знаком короче весело! По этому то и написал, что готовить тех кому это интересно надо тупо к лютой жести! Мы же асушники! Плюс нашей профессии, много асушников ушло в IT и мы сможем скоро тупо как в Крёстном отце назначать свою цену. Сцена с котом! ) Если подкачал с грамматикой - это всё пивас! )
@user-il4kd9qq3y
@user-il4kd9qq3y 10 ай бұрын
@@Gnevistj да и ПИД делал с мёртвой зоной, ограничениями входных и выходных значений.
@anakoliy_tsyfra
@anakoliy_tsyfra 11 ай бұрын
В программировании МК недавно, ещё учусь. Но блин, экономить вычислительный ресурс МК считывая значения раз в секунду - это мягко говоря тупо. Из всех уроков что я прошёл - большую часть кода, и соответственно, вычислительной мощности, тратится на то, что бы полученный результат донести до оператора изделия. А не выполнить какую либо автоматическую функцию... Опять же пример - бойлер, что бы клацать релюшкой, нужно, грубо говоря, 15 строк кода, остальное - это показать человеку температуру, обработать нажатия и пр. взаимодействие. Уход от плавающей запятой тоже такой применял. Смотрел как в уроке, понимал что это тупо (учу АВР, естественно Атмега8), переписывал код под "фиксированную" запятую. Итог - меньше памяти занято, удобнее читать код, сразу объявляются типы данных, а не как иногда бывает "ой, что то не работает..." *прошло пол часа* "...ааааа, тут нужно было присвоить другой тип данных" *пихается присвоение типа данных в середину кода*.
@dimkadimkin5861
@dimkadimkin5861 11 ай бұрын
Хорошо продвигаетесь, так держать! Будет подезно, если еще таких привычек не приобрели, если в си пишете: 1. Сразу ставить (), {}, [ ], обе скобки. Никогда не забудете, их потавить. 2. Использовать структуры. 3. Создавать свои типы данных. 4. Испоьзовать тип union. 5. Использовать указатели. Эффективность и читаемость повысятся в разы.
@nurlybekmoldagaliev8920
@nurlybekmoldagaliev8920 10 ай бұрын
В чем проблема программно исключить ошибки во входных данных? Если анализировать не только величину значений, а и разницу между ними, то легко заметить, что некоторые из них на порядок выше обычных.
@user-fy9ow6nu1r
@user-fy9ow6nu1r 10 ай бұрын
В нормальном устройстве шумы и прочие непотребства отсекаются до входа АЦП.
@denisgluk431
@denisgluk431 9 ай бұрын
да уж.. хотелось бы посмотреть что у него за пром устройства такие, которые он нормальными считает
@v61kz
@v61kz 11 ай бұрын
Да уж, цифровая фильтрация тема интересная и сложная. Как-то пытался сделать цифровой фильтр «по учепнику», всё по формулам преобразований (для аудиофайла в матлабе). Получил на выходе массив комплексных чисел. А как подать комплексный сигнал на ЦАП (ну или в данном случае записать в аудиофайл) нигде в «учепниках» не рассматривается🤣🤣🤣 Теория как-то отделена от практики😁 Нужен личный практический опыт, потом эти «учепники» уже переосмысляешь
@Gnevistj
@Gnevistj 11 ай бұрын
Без практики никак, полностью согласен. Учебник всегда дает "базу", скелет эдакий, который во время работы обращиваешь "мяском" опыта =)))))
@RuslanPanasyuk
@RuslanPanasyuk 11 ай бұрын
Так а чего б не написать это всё на Си, где нет никаких проблем с плавающей точкой.
@joramotorsportteam3277
@joramotorsportteam3277 11 ай бұрын
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?🎉
@ivanrusev2270
@ivanrusev2270 9 ай бұрын
На асме не програмирую.Усреднение всегда тормозит программу.
@DIY_PLC
@DIY_PLC 11 ай бұрын
ЦОС КИХ БИХ
@Gnevistj
@Gnevistj 11 ай бұрын
Не-не-не, не путайте пожалуйста полноценную ЦОС и фильтрацию сигналов в автоматике - совершенно разные цели, подходы, и постоянные времени. Это близкие по функционалу только на первый взгляд области, и если я правильно помню теорию, то скользящие средние являются лишь упрощенной реализацией фильтра с КИХ =)))
@flexoalex4168
@flexoalex4168 11 ай бұрын
А зачем для фильтрации аналоговых сигналов, опрессовщик металло-пластиковых фитингов???
@sqwertyuiop1514
@sqwertyuiop1514 5 ай бұрын
Если сигнал выглядит так, как на 1:25, то нужно не фильтрацию делать, а гнать разработчика этой схемы ссаными тряпками! Потому что он не умеет грамотно развести земли и разделить их на цифровую и аналоговую.
@AA-ld1gc
@AA-ld1gc 11 ай бұрын
Напомнил мне алгебру-чото не понял и дальше уже ничего не понятно .
@deniskhakimov
@deniskhakimov 10 ай бұрын
Да ладно вам... По первой же формуле, показанной альтер-эго автора канала, было понятно, о чём пойдёт речь 😁 p.s.: или я просто уделяю слишком много времени машинному обучению и статистике 🙄
@user-uv7lc7or5m
@user-uv7lc7or5m 10 ай бұрын
Вот засрал мозг! Ставишь RC-фильтр и не жрёшь процессорное время!
@cottoncat3700
@cottoncat3700 11 ай бұрын
Усредняй, сигнал аналоговый, ты усредняй, С 300G улетит болванка а-то! Скорость света, конечно, имеет свой край, Но сигнал, лучше, всё равно усредняй
@skakalinvlad
@skakalinvlad 11 ай бұрын
Ай-яй-яй-яй, всё усредняй))))
@robertmonroe9728
@robertmonroe9728 10 ай бұрын
Когда увидел := - уже затошнило от флешбеков Паскаля со времён школы. А здесь этот Бейсик или не пойми что, в отличие от школовского Паскаля - ещё и отвратительно читается. Вы, батенька, мазохист? Чем обычные си не угодили? На коболе писать не пробовали? Наверное, вам понравится
@fuppup
@fuppup 11 ай бұрын
Спасибо!
Её Старший Брат Настоящий Джентельмен ❤️
00:18
Глеб Рандалайнен
Рет қаралды 8 МЛН
ТАМАЕВ vs ВЕНГАЛБИ. Самая Быстрая BMW M5 vs CLS 63
1:15:39
Асхаб Тамаев
Рет қаралды 4,6 МЛН
Василиса наняла личного массажиста 😂 #shorts
00:22
Денис Кукояка
Рет қаралды 7 МЛН
We connect an external ADC, ADS1015 (ADS1115). 4 analog inputs!
11:40
iPhone 12 socket cleaning #fixit
0:30
Tamar DB (mt)
Рет қаралды 44 МЛН
Неразрушаемый смартфон
1:00
Status
Рет қаралды 1,2 МЛН
Will the battery emit smoke if it rotates rapidly?
0:11
Meaningful Cartoons 183
Рет қаралды 23 МЛН
Bluetooth Desert Eagle
0:27
ts blur
Рет қаралды 8 МЛН
📦Он вам не медведь! Обзор FlyingBear S1
18:26
Cadiz smart lock official account unlocks the aesthetics of returning home
0:30