Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Определение момента стабилизации сигнала
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
MaxEngee
Hi
Есть задача как можно раньше определить момент когда сигнал на входе АЦП стабилизируется.
Один из вариантов сигнала на картинке.
Есть проблемы:
- сигнал может быть зашумлен, а может и нет и заранее невозвожно вывести критерий стабилизации, в одном случае он может калебаться в пределах пяти единиц, а во втором в пределе 20.
- сигнал может быть нисходящим
- во время стабилизации могут быть единичные скачки
Перепробовал различные алгоритмы с усреднением в плавающем окне и вычислением производной или дисперсии. Если окно ставить больше, уменьшается вероятность ложного срабатывания, но значительно затягивается время определения момента (на размер окна). А время нужно сократить!!
Когда смотрит человек на график то все очевидно, потому что учитывается вся история изменения сигнала.

Я в математике не силен. Может кто подскажет куда копать, наверняка есть уже нужные алгоритмы :-)
Tanya
Цитата(MaxEngee @ Mar 7 2015, 01:29) *
Hi
Есть задача как можно раньше определить момент когда сигнал на входе АЦП стабилизируется.

Я в математике не силен. Может кто подскажет куда копать, наверняка есть уже нужные алгоритмы :-)

Математик(а) дает всегда абсолютно точный, но и абсолютно бессмысленный ответ - стабилизация не наступит никогда...
Чтобы правильно задать вопрос, нужно знать половину ответа.
smalcom
Цитата
А время нужно сократить!!

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

зы. производная от усреднённого конечно, но с малым окном - для скорости.
SM
Цитата(MaxEngee @ Mar 7 2015, 01:29) *
Когда смотрит человек на график то все очевидно, потому что учитывается вся история изменения сигнала.

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

А есть ли какая нибудь априорная информация о сигнале? То есть, если сделать, например, некий алгоритм экстраполяции/предсказания, зная предысторию сигнала, выдающий, например, полином того порядка, какой ожидается от поведения сигнала, или другую функцию, минимально отличающуюся, например, по критерию минимума суммы квадратов отклонений, от имеющегося сигнала, и оценить точку нахождения на ней, вычислив производную (можно не только первую, но и вторую, чтобы оценить тенденцию, куда идет сигнал) уже аналитически из полученной ф-ции?
Это я к тому, что человек, глядя на график, еще и заранее знает, что можно ожидать от сигнала в ближайшем будущем, а чего ожидать нельзя. Если этой информацией будет обладать и алгоритм, то ему будет проще.
Егоров
Цитата(SM @ Mar 8 2015, 00:43) *
Вот-вот. Так как человек видит сигнал из будущего, который за "красной чертой".
Это я к тому, что человек, глядя на график, еще и заранее знает, что можно ожидать от сигнала в ближайшем будущем, а чего ожидать нельзя. Если этой информацией будет обладать и алгоритм, то ему будет проще.

Вообще-то это универсальный метод создания алгоритмов. Посади себя самого на место контроллера и попробуй управлять, опираясь на показания датчиков.
Если сможешь - просто зарисуй готовый алгоритм. Не сможешь - нечего за алгоритмы хвататься, разбирайся как это вообще можно сделать.
Как всегда, в формулировке задачи очень много неясностей. Что, для чего, как часто и быстро оно меняется и прочее.
Нормальный разработчик просто принял бы паспортное значение времени установления ЦАП и не маялся дополнительными анализами.
Если просто - при регулировании функция монотонно (или нелинейно, это детали) нарастает (убывает). Как только нарастание-убывание прекратится и приращение станет меньше какой-то величины или будет колебаться в пределах этой величины - есть стабилизация.
Smoky
Я обычно за момент начала стабилизации принимаю появление заднего фронта.
AlexeyW
По-моему, нужно просто представлять математический вид фронта сигнала. То, что на рисунке, очень напоминает фронт фильтра Бесселя второго порядка. Во время фронта можно, опираясь на математическое вражение форм идеального фронта (без шума), получить его параметры (длительность и амплитуду), на основе длительности сделать вывод у времени установления до нужной точности (5%, 1% и т.д.). При этом повышение шума одновременно делает менее существенной и вносимую этим шумом ошибку.
Стоит также рассмотреть схему на входе АЦП - возможно, ее переходная характеристика и время установления прекрасно считаются и могут быть заложены в алгоритм априорно.
AndeyP
Как вариант: можно считать что сигнал стабилизировался, если локальный экстремум не обновлялся последние N отсчетов.
iDiode
Цитата(MaxEngee @ Mar 7 2015, 02:29) *
Я в математике не силен. Может кто подскажет куда копать, наверняка есть уже нужные алгоритмы :-)

Я тоже, но слыхал, что есть авторегрессии на них можно построить типа фильтра-предсказателя, дальше сравнивать текущее измерение с выходом фильтра и делать вывод.
SM
Цитата(iDiode @ Mar 10 2015, 06:02) *
Я тоже, но слыхал, что есть авторегрессии на них можно построить типа фильтра-предсказателя, дальше сравнивать текущее измерение с выходом фильтра и делать вывод.

Сколько на этом биржевых игроков обанкротилось.... sm.gif sm.gif IMHO, это не тот случай. Здесь важна именно априорная информация о системе, как она себя повести может, а как - нет. А не линейное предсказание. Которое, кстати, при равномерном линейном увеличении уровня очень здорово предскажет весь сигнал вперед вплоть до его улета в бесконечность, и даст отличное "застабилизировано".
iDiode
Цитата(SM @ Mar 10 2015, 22:49) *
... линейное предсказание ...

Слышал, что регрессии бывают линейные и нелинейные, всякие, в общем. А без априорной информации т.е. ограничений конечно же никак, абсолютно с вами согласен.
ViKo
Регрессии... прогрессии... заболтали простой вопрос.
Как только разница между максимальным и минимальным значениями на заданном интервале времени становится меньше заданной величины (уровня шума, например, с неким запасом), считайте, сигнал установился.
Onkel
вычисляем постоянно экспоненциально взвешенную скользящую среднюю A, а критерий - сумма n квадратичных невязок (Ai-A)^2 меньше чего -то там , скажем sigmaMax, соответсвенно показатель экспоненты, SigmaMax и n - вам определять в конкретном вашем случае.
kolobok0
Цитата(MaxEngee @ Mar 7 2015, 01:29) *
Когда смотрит человек на график то все очевидно, потому что учитывается вся история изменения сигнала.


Вы уже ответили (почти) на свой вопрос. Осталось пол шажка сделать - почему человек видя историю могёт? Что он видит такого?
Правильно - угол наклона. Зачастую именно он является почти константой(за требуемый минимальный интервал) во мнооогих системах.
Сами градусы вам не нужны, но критериии направления и больше-меньше - потребуются. Из математики это производная.
Т.е. если она ноль - то возмущения нет и угол не меняется. По поводу "критерия стабилизации" - тут уже правильно прозвучала мысль
по поводу сопоставления уровня сигнала с уровнем шумов.
Hose
Копать нужно в сторону первой производной или перекинуть ацп с сигнала управления на сигнал ошибки (последнее предпочтительнее). Неплохо бы увеличить разрядность путем передискретизации и последующей фильтрации, тогда и шумов станет меньше.
somebody111
Универсальные
1. искать первую производную и усреднять различными способами. Как только станет ниже какого-то порога - считать,Что сигнал стабилен
2. искать сумма(abs(x(t)-x(t-dT)))/n и тоже с порогом срабатывания
3. искать sqrt((x(t)-x(t-dT))^2)/n b и тоже самое
Достоинство: абсолютно простое инженерное решение
Недостаток: как и любое абсолютно простое инженерное решение научно на половину и в зависимости от задачи алгоритм придётся корректировать
Не универсальные: использование различных апроксимаций в реальном времени на базе каких-хотите функций (полином,ряд фурье и пр.), а потом аналатическое вычисление точек, в которых производная равна 0 (нахождение локальных экстремумов)
Достоинво: абсолютно научный подход
Недостаток: из-за того,что метод абсолютно научный, его реализация потребует тонны времени


---
SasaVitebsk
Добрый день, знатоки. rolleyes.gif
У меня аналогичный вопрос. В принципе почитал, уже сформировался вариант. Уже спасибо.
У меня следующая ситуация. На АЦП поступает синусоидальный сигнал. Там может быть несколько частот намешано, плюс шум конечно.
Есть критерии для этого сигнала min/ max частоты и амплитуды. Амплитуда меняется очень значительно (до 50 раз). Используется АЦП процессора (12 бит).
Из написанного, очевидно что у меня на малом размахе начинает сказываться дискретизация, а на большом ограничение/ искажение сигнала.
Дальнейшая математическая обработка сигнала сильно зависит от амплитуды входного сигнала.
Я сделал модель и пытался обкатывать свою математику. И зависимость очень сильная. То есть качество обработки серьёзно меняется.
Я сделал 2 прототипа. В одном поставил предварительный усилитель с переменным коэффициентом усиления. Во втором случае программно усиливаю сигнал (просто умножаю).
И то и другое даёт значительный положительный эффект.
Короче, мне, фактически, нужно сделать АРУ для входного сигнала. Причём она должна быстро срабатывать (сигнал идёт из разных источников и непостоянно).
Так вот тот же критерий... Выделить полезный сигнал максимально быстро, чтобы чётко сработала АРУ до дальнейшей обработки. Желательно уложиться в 1-2 периода низкой частоты, то есть приблизительно 11-22 выборки. Сигнал я фильтрую 6 порядком по низу и верху. Короче вырезать пытаюсь.
===
Почитав эту тему - вижу:
1. После фильтрации выпрямляем сигнал (это я и сейчас делаю).
2. Сглаживаю. (То есть скользящее среднее по 11 выборкам)
3. По среднему определяю коэффициент умножения.
4. Меняю коэффициент по изменению первой производной (то есть фактически при изменении этого среднего выше болтанки)

Кто ещё что посоветует или подправит?
Всех принявших участие благодарю.
smalcom
а обычные аналоговые решения не подходят? Т.е. если правильно понял, то вы хотите, чтобы МК управлял предварительным усилителем(усилителями)?
HardEgor
Цитата(SasaVitebsk @ Sep 30 2015, 15:04) *
Используется АЦП процессора (12 бит).

Я бы поставил два внешних АЦП(один с усилением 4, другой с усилением 0,5) и принимал бы решение из какого буфера брать данные. Если АЦП контроллера достаточно быстрое - тогда два усилителя(на 0,5 и 4) и переключал бы их на вход АЦП.
Tanya
Еще вариант - делить умножающим ЦАП. Они бывают до 12 МГЦ полосою...
Если быстрее - аналоговым умножителем с умножением на сигнал быстрого ЦАПа. Придется делить контроллером числа... Или по таблице. Есть AD734 с возможностью прямого деления. Но там полоса зависит от усиления.
Или сначала несколько компараторов вместо АЦП.
iDiode
Цитата(SasaVitebsk @ Sep 30 2015, 12:04) *
... нужно сделать АРУ для входного сигнала ...

Вроде нужен интегратор для такого дела? Например:
http://nl.mathworks.com/help/comm/ref/comm.agc-class.html
Вот еще:
http://www.williamsonic.com/AudioOsc/
net
вобще совсем без знания сигнала конечн обойтись нельзя НО в геофизике применяют STA/LTA тоесть проводят анализ за коротое время и за длинное и по этому делают вывод о том что происходит событие или уже обычное состояние среды
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.