LINUX.ORG.RU

Нужен алгоритм поиска регулярных пиков в сигнале

 , , ,


2

6

Имеется в хозяйстве детектор тока на acs712, хочу использовать его чтобы смотреть подключена ли к сети нагрузка. Проблема в том что датчик весьма шумный и периодически показывает погоду на Марсе. Тем не менее если снимать показания за 2 периода волны (это 40мс для 50Гц) визуально нагрузку хорошо видно:

графики (3 замера в разное время для каждого случая) :

  1. без нагрузки
  2. лампочка 5,5Вт
  3. лампочка 12Вт

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

Но есть проблема. На картинке более-менее идеальный случай, как я упомянул датчик вполне может выдавать пики в рандомном месте. Хочется прикрутить какой-то простой фильтр чтобы удалить шумы и оставить только эти 4 экстремума. Беглый гуглеж ничего подходящего не дал.

★★★★★

Последнее исправление: ya-betmen (всего исправлений: 1)

Сделайте преобразования Фурье (переход в частотную область). Выкинь там всё, кроме моды 50Гц. И назад во временную область

Crocodoom ★★★★★
()

Хочется прикрутить какой-то простой фильтр

Из простых глянь py-findpeaks ©.

регулярных

Они выделяются в частотной области, примеры спектрального анализа и фильтров должны быть в Signal Processing Toolbox ©.

quickquest ★★★★★
()
Ответ на: комментарий от quickquest

Мне это на стм32 нужно сделать, боюсь питон туда не влезет. Но идея ясна.

ya-betmen ★★★★★
() автор топика
Ответ на: комментарий от Crocodoom

Спасибо, что-то сразу в голову не пришло.

ya-betmen ★★★★★
() автор топика

аналоговый полосовой фильтр

Вас ист дас «величина нагрузки»? Смею предположить, что это мощность оной. Если нужно грубо, с точностью ~10%,то можно предположить, что напряжение в сети =220 В.Но если надо точнее, то требуется мониторить и напряжение и далее считать точно.

На графиках у Вас х.з. что. Почему три кривых?

Вот уж эта «цифровая» молодёжь. Как тут не вспомнить Станислава нашего Лема и его «Сказки роботов». «Ты, чтобы карандаш очинить, мельничный жернов попросишь». Да, я верю, что взяв STM32 и применив изощрённую обработку задачу решить можно. Но, IMHO, проще взять аналоговый полосовой фильтр на частоту 50 Гц (один корпус ОУ + кучка резисторов и конденсаторов)и выделить чистенький, незашумленный сигнал на 50 Гц? Не?

miron_g
()
Ответ на: аналоговый полосовой фильтр от miron_g

Почему три кривых?

Замеры в разные промежутки времени.

величина нагрузки

В сети 220В, можно считать мощностью, можно током.

проще взять аналоговый полосовой фильтр на частоту 50 Гц

Возможно проще если он уже есть под рукой, но вот я сейчас на природе (под рукой только ноут) могу отладить фильтр через преобразование фурье на тех данных что уже снял, а тот же оу мне сначала покапать, потом собирать обвязку, потом всё равно смотреть что будет в выхлопе. Тем более что после датчика холла есть стмовский ацп, который вполне вероятно может вносить свои шумы и прочее. Мне как программисту проще когда железа поменьше.

ya-betmen ★★★★★
() автор топика

шо опять? медианного фильтра тред?

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

чему вас нынче учат?

Morin ★★★★
()
Ответ на: комментарий от Morin

медианного фильтра тред?

Который вполне вероятно выпилит мне максимумы с минимумами которые мне очевидно нужны?

ya-betmen ★★★★★
() автор топика
Ответ на: комментарий от ya-betmen

или крестик сними или трусы надень.

задача на мощность АС?

желаемую частоту выборки определил?

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

Morin ★★★★
()
Ответ на: комментарий от salozar

оси на графиках не подписаны.

Разница?

алгоритм измерения не описан

Там нечего описывать, с acs712 забираю данные через стмовским ацп.

ya-betmen ★★★★★
() автор топика

Проблема в том что датчик весьма шумный и периодически показывает погоду на Марсе

Ты уверен что это датчик шумный, а не прилетает всякий мусор? Фильтр-то перед датчиком есть?

no-such-file ★★★★★
()
Ответ на: комментарий от ya-betmen

Перед датчиком провод

Ну тогда на проводе, очевидно. Я к тому, что у тебя там судя по графикам отсчётов очень мало, т.е. алиасинг во все поля. Что ты там собрался через фурье выделять не очень понятно.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от ya-betmen

браво, браво, биссссс аплодисменты в зале

Morin ★★★★
()

Скользящее среднее. Тебе ведь не нужна мгновенная реакция на изменение нагрузки?

KivApple ★★★★★
()
Ответ на: комментарий от no-such-file

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

ya-betmen ★★★★★
() автор топика
Ответ на: комментарий от KivApple

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

ya-betmen ★★★★★
() автор топика
Ответ на: комментарий от ya-betmen

Максимумы и минимумы потребления миллисекунду длятся? Или это всё же длительные процессы? Во втором случае ты просто увеличишь задержку реакции системы на изменение ситуации. Но если ты просто статистику считаешь, а не делаешь навороченную защиту от КЗ проводки, то не должно быть критично.

KivApple ★★★★★
()

Насколько я понял, наличие нагрузки у тебя характеризуется 2мя значениями – 1. увеличение среднего значения и 2. увеличение разброса значений (шума).

Вот их и считай: 1. Скользящее среднее на 16/32/64 точках 2. Среднеквадратическое отклонение на этих же значениях.

tyakos ★★★
()
Ответ на: комментарий от KivApple

Максимумы и минимумы потребления миллисекунду длятся?

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

А так я просто хочу понять горит ли лампочка или нет. В гробу я видал руками делать защиту от кз.

ya-betmen ★★★★★
() автор топика
Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от tyakos

увеличение среднего значения

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

ya-betmen ★★★★★
() автор топика
Ответ на: комментарий от ya-betmen

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

То есть из сигнала вычитаешь уровень «холостого», когда тока нет. Эту разницу в квадрат, и интегрируешь в течение секунды.

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

James_Holden ★★★★
()
Ответ на: комментарий от ya-betmen

А так я просто хочу понять горит ли лампочка или нет. В гробу я видал руками делать защиту от кз.

фотодиод в роли датчика?

Harald ★★★★★
()
Ответ на: аналоговый полосовой фильтр от miron_g

Вот уж эта «цифровая» молодёжь. Как тут не вспомнить Станислава нашего Лема и его «Сказки роботов». «Ты, чтобы карандаш очинить, мельничный жернов попросишь». Да, я верю, что взяв STM32 и применив изощрённую обработку задачу решить можно. Но, IMHO, проще взять аналоговый полосовой фильтр на частоту 50 Гц (один корпус ОУ + кучка резисторов и конденсаторов)и выделить чистенький, незашумленный сигнал на 50 Гц? Не?

В современной реальности вариант с STM32 выйдет дешевле в условиях массового производства.

Harald ★★★★★
()
Ответ на: комментарий от ya-betmen

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

вот именно эту проблему решает APFC в блоках питания.

salozar
()
Ответ на: аналоговый полосовой фильтр от miron_g

При всем уважении, фильтровать кучей резисторов при наличии stm32 это бред.

А тут задача в 2 действия решается без всяких фильтров. Закон Джоуля-Ленца однако.

James_Holden ★★★★
()

и уж если на то пошло, у тебя осциллограф-то есть?

просто обычно сперва вопрос задают ему, а потом в интернеты.

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

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

salozar
()
Последнее исправление: salozar (всего исправлений: 2)
Ответ на: комментарий от Harald

ТС, а какое у тебя должно быть время реакции на события?

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

ya-betmen ★★★★★
() автор топика
Ответ на: комментарий от salozar

и уж если на то пошло, у тебя осциллограф-то есть?

Если бы был то я бы не интересовался Объясните что на выходе у датчика тока на acs712 . Пока обхожусь, если припрет конечно куплю.

пары киловольт из сети.

Там датчик холла, надеюсь это достаточное условие не словить сеть на вход стм32.

ты что-то делаешь совершенно через жопу

Фигасе новость, тег рукожопие там не просто так.

ya-betmen ★★★★★
() автор топика
Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от James_Holden

Нужно проверить кстати, считать площадь звучит логично.

ya-betmen ★★★★★
() автор топика
Ответ на: комментарий от ya-betmen

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

так вот. во первых, судя по графикам ты меряешь на пределе точности АЦП. у тебя буквально +-1 колебания видны. это само по себе не годится никуда.

но эту проблему можно решить как надо без твоей мудрёной микросхемы.

для начала бери ферритовый стержень или даже просто длинный гвоздь железный. Будем считать что это гвоздь, забиваем его в тонкую доску до половины - это наша доп-изоляция. Далее покрой его лаком и оберни бумагой чтоб сквозь него 220 не влетело в схему. На одну сторону мотаешь 10 витков провода, который выдержит нагрузку. На другую - 10 витков какого-нибудь провода, это вторичка. Всё это образует трансформатор тока.

Бери 2 резистора 5ом 5 ватт. Их ставим последовательно, параллельно им вхерачь два диода- так чтоб они смотрели в разные стороны. это ограничит входное напряжение до 0.6 вольта. И вот это всё параллельно вешаем на вторичку. И её надо будет еще настроить

Вроде бы еще надо кондер неполярный небольшой - 3300 пф где-то (CK45-B3DD332KYGNA например), чтоб броски напряжения в него улетали. можно даже побольше взять, например 10000 пф. на 50гц 3300 дает 1ком импеданса, 10000 пф даст 300 ом, а у тебя в паралелли 10ом.

       A     B     C
       |     |     |  
       *-[R]-*-[R]-*
       |           |
       *----||-----* 
       |           |
       *---->|-----*
       |           |
 IN    *----|<-----*   OUT
       |           |
       *---WWWW----*
          ======
phase------WWWW--------->
            
nol--------------------->
Теперь в идеале тебе надо еще супрессором подпереть все три вывода А,B,C. На B надо резисторным делителем подать половину от напряжения питания, А и С завести на две лапки АЦП. Вот их разница и будет пропорциональна току. Теперь собсна тебе надо будет выяснить сколько именно витков вторички тебе требуется. возможно сигнал будет слишком велик и их придется сматывать, или наоборот - сигнал слишком мал и их придется намотать.

Главное гвоздь заизолируй.

salozar
()
Ответ на: комментарий от salozar

собственно гвоздь здесь играет роль трансформатора тока. ставить человеческий трансформатор я бы не стал - там во вторичке до 5А обещают, сгорит всё к чертям.

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

salozar
()
Последнее исправление: salozar (всего исправлений: 1)
Ответ на: комментарий от salozar

А без гвоздя никак? Я боюсь что такая конструкция никуда не влезет у меня. Если например блок на 5-6 розеток то там места совсем немного всё смонтировать, а 5 гвоздей как туда воткнуть хз.

ya-betmen ★★★★★
() автор топика

а как насчёт подключить оптрон, светодиодом на фазный провод, приёмную часть к контроллеру

Harald ★★★★★
()
Ответ на: комментарий от ya-betmen

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

и гвоздь кстати надо заземлить.

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

salozar
()
Ответ на: комментарий от Harald

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

ya-betmen ★★★★★
() автор топика
Ответ на: комментарий от salozar

так она еще и пробиваема помехами с сети.

Чего я не знаю про эффект Холла, что оттуда пропала гальваническая развязка или ты сейчас о чем-то другом?

ya-betmen ★★★★★
() автор топика
Ответ на: комментарий от salozar

salozar, Вы хотя бы в даташит глянули. Там английским по белому " 2.1 kVRMS minimum isolation voltage from pins 1-4 to pins 5-8". То бишт от входа до выхода. Да «эффект холла он ведь за счет того тока который ты и измеряешь» ну и что? И Вы уверены, что собранный из говна и веток трансформатор тока обеспечивает лучшую изоляцию?

miron_g
()
Ответ на: комментарий от ya-betmen

Раз тут пошли такие примеры, то посоветую и я). Продаются трансформаторы тока, вполне миниатюрные, с выходом 0 - 20 мА. Для твоей задачи самое то, и подключение к микроконтроллеру простое будет.

pasha1112
()
Ответ на: комментарий от ya-betmen

Обе светодиодные. Под рукой накаливания не было.

Так пик на графике это и есть момент потребления мощности, так как мощность потребляется только тогда, когда напяжение в сети больше напряжения на выравнивающем конденсаторе.

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

torvn77 ★★★★★
()
Последнее исправление: torvn77 (всего исправлений: 1)
Ответ на: комментарий от torvn77

К стати, поставил бы перед мостом резистор или индуктивность

Перед мостом это где именно? Там светодиодка под е27 цоколь. Да и вообще я планирую более-менее универсальную штуку сделать.

ya-betmen ★★★★★
() автор топика
Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от pasha1112

Я смотрел на вариант с трансформатором, но не видел достаточно мелких и дешевых. По сравнению с шильдиком за 150 руб они все большие и дорогие.

ya-betmen ★★★★★
() автор топика
Ответ на: комментарий от miron_g

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

допустим частота выборки АЦП 50гц*20; создать массив из 20 intов,

[code]int value[20]; int n = 0;[/code]

заполнить нулями, и по кругу делать с ними

[code]value[n] = adc_value + (value[n]>>2) + (value[n]>>4);[/code]

это по сути value[n] = 0.75*value[n]+adc_value;

ацп там 12битные вроде, так в прыжке value[n] будет максимум 13битным. в два раза выше короче.

далее:

[code]int imax = 0; for(int i = 0; i < 20/2; i++) imax = max(imax, abs(value[i]-value[i+10])); [/code]

salozar
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.