Поиск максимумов и минимумов функйии.
От: DDzuba Россия  
Дата: 21.06.05 16:36
Оценка:
Здравствуйте!

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

Проблема в том, что имееются сильный шум и помехи, которые не позволяют всё это просто определять.
Т.е. постоянно возникают локальные минимумы и максимумы. См. рис. 1.
Простыми фильтрами я это несколько сглаживаю, но этого недостаточно. Дальнейшее сглаживание приводит
к недопустимой потере информации. Всякие сложные фильтры, разложения и т.п. не подходят, поскольку
всё должно быть в реальном масштабе времени.

Что в этом случае можно сделать? Ведь совершенно очевидно( из рисунка ), что информация о наличии
мин. и мах. имеется и извлечь её возможно.

Спасибо!

Рис. 1:
Re: Поиск максимумов и минимумов функйии.
От: Аноним  
Дата: 21.06.05 21:01
Оценка:
Здравствуйте, DDzuba, Вы писали:

DD>Здравствуйте!


DD>Есть массив значений, поступающих с какого-то источника. По сути это должна быть периодическая

DD>функция, последовательность минимумов и максимумов с немного изменяющимися во времени частотой,
DD>амплитудой.
DD>Необходимо в реальном времени(допустимо с небольшим известным запаздыванием) определять моменты
DD>возникновения min и max, расстояния м/д ними, амплитуду и т.п.

DD>Проблема в том, что имееются сильный шум и помехи, которые не позволяют всё это просто определять.

DD>Т.е. постоянно возникают локальные минимумы и максимумы. См. рис. 1.
DD>Простыми фильтрами я это несколько сглаживаю, но этого недостаточно. Дальнейшее сглаживание приводит
DD>к недопустимой потере информации. Всякие сложные фильтры, разложения и т.п. не подходят, поскольку
DD>всё должно быть в реальном масштабе времени.

DD>Что в этом случае можно сделать? Ведь совершенно очевидно( из рисунка ), что информация о наличии

DD>мин. и мах. имеется и извлечь её возможно.

DD>Спасибо!


DD>Рис. 1:

DD>
Здравствуйте. Могу попробовать предлжить следующий алгоритм:
1. Построить нейронную сеть для обучения.
2. Подавать на вход зашумленные значения и идеальный вариант.
3. После обучения подавать на реальные значения, получая на выходе отфильтрованый вариант. дальше изучать саму кривую.
Re: Поиск максимумов и минимумов функйии.
От: raskin Россия  
Дата: 22.06.05 05:10
Оценка:
DDzuba wrote:
> Здравствуйте!
>
> Есть массив значений, поступающих с какого-то источника. По сути это
> должна быть периодическая
> функция, последовательность минимумов и максимумов с немного
> изменяющимися во времени частотой,
> амплитудой.
> Необходимо в реальном времени(допустимо с небольшим известным
> запаздыванием) определять моменты
> возникновения min и max, расстояния м/д ними, амплитуду и т.п.
>
> Проблема в том, что имееются сильный шум и помехи, которые не позволяют
> всё это просто определять.
> Т.е. постоянно возникают локальные минимумы и максимумы. См. рис. 1.
> Простыми фильтрами я это несколько сглаживаю, но этого недостаточно.
> Дальнейшее сглаживание приводит
> к недопустимой потере информации. Всякие сложные фильтры, разложения и
> т.п. не подходят, поскольку
> всё должно быть в реальном масштабе времени.
>
> Что в этом случае можно сделать? Ведь совершенно очевидно( из рисунка ),
> что информация о наличии
> мин. и мах. имеется и извлечь её возможно.
>
> Спасибо!

Во-первых можно оценить период и выбирать лишь те экстремумы, которые не
превзойдены за четверть периода в обе стороны (параметры ведь меняются
немного). Можно также оценить амплитуду и делать так: набирать
максимумы/минимумы, пока разность между соседними не станет больше, чем
может быть из-за шума, а потом взять минимум/максимум из отобранного.
Правда, для этого надо, чтобы шум не создавал слишком много
максимумов/минимумов на участках перепадов (по рисунку это так).
Оценить период/амплитуду можно найдя все перепады начального отрезка, и
посмотрев на самые большие (сначала все перепады — большие; потом храним
максимум "маленьких" и минимум/максимум случавшихся "больших". При
перепаде, большем 3*максимум "больших" делаем max_small:=max_big;
min_big:=last; max_big:=last. Что делать с попадающими в зазор ближе к
маленьким — не знаю).
Posted via RSDN NNTP Server 1.9
Re: Поиск максимумов и минимумов функйии.
От: pangolin  
Дата: 22.06.05 05:24
Оценка:
Здравствуйте, DDzuba, Вы писали:

DD>Здравствуйте!


DD>Есть массив значений, поступающих с какого-то источника. По сути это должна быть периодическая

DD>функция, последовательность минимумов и максимумов с немного изменяющимися во времени частотой,
DD>амплитудой.
DD>Необходимо в реальном времени(допустимо с небольшим известным запаздыванием) определять моменты
DD>возникновения min и max, расстояния м/д ними, амплитуду и т.п.

DD>Проблема в том, что имееются сильный шум и помехи, которые не позволяют всё это просто определять.

DD>Т.е. постоянно возникают локальные минимумы и максимумы. См. рис. 1.
DD>Простыми фильтрами я это несколько сглаживаю, но этого недостаточно. Дальнейшее сглаживание приводит
DD>к недопустимой потере информации. Всякие сложные фильтры, разложения и т.п. не подходят, поскольку
DD>всё должно быть в реальном масштабе времени.

DD>Что в этом случае можно сделать? Ведь совершенно очевидно( из рисунка ), что информация о наличии

DD>мин. и мах. имеется и извлечь её возможно.

DD>Спасибо!


DD>Рис. 1:

DD>


Можно попробовать промоделировать сигнал суммой 2-3 синусоид с постоянно меняющимися амплитудами и фазами. И фильтронуть это дело линиаризованным Калманом или чем по-круче.
Re: Поиск максимумов и минимумов функйии.
От: kfmn Россия  
Дата: 22.06.05 06:30
Оценка:
Здравствуйте, DDzuba, Вы писали:

DD>Здравствуйте!


DD>Есть массив значений, поступающих с какого-то источника. По сути это должна быть периодическая

DD>функция, последовательность минимумов и максимумов с немного изменяющимися во времени частотой,
DD>амплитудой.
DD>Необходимо в реальном времени(допустимо с небольшим известным запаздыванием) определять моменты
DD>возникновения min и max, расстояния м/д ними, амплитуду и т.п.

DD>Проблема в том, что имееются сильный шум и помехи, которые не позволяют всё это просто определять.

DD>Т.е. постоянно возникают локальные минимумы и максимумы. См. рис. 1.
DD>Простыми фильтрами я это несколько сглаживаю, но этого недостаточно. Дальнейшее сглаживание приводит
DD>к недопустимой потере информации. Всякие сложные фильтры, разложения и т.п. не подходят, поскольку
DD>всё должно быть в реальном масштабе времени.

DD>Что в этом случае можно сделать? Ведь совершенно очевидно( из рисунка ), что информация о наличии

DD>мин. и мах. имеется и извлечь её возможно.

DD>Спасибо!


DD>Рис. 1:

DD>

Можно считать скользящую автокорреляцию, по ней определять текущий период и приближенно предсказывать следующий экстремум по предыдущему (или нескольким предыдущим), после чего уточнять его локально.
А локальное уточнение можно провести, построив, скажем, квадратичную аппроксимацию по методу наименьших квадратов вблизи экстремума и приняв экстремум параболы за истинный экстремум.
Re: Поиск максимумов и минимумов функйии.
От: RomanRoschin  
Дата: 22.06.05 16:28
Оценка:
Здравствуйте, DDzuba, Вы писали:

DD>Здравствуйте!


DD>Есть массив значений, поступающих с какого-то источника. По сути это должна быть периодическая

DD>функция, последовательность минимумов и максимумов с немного изменяющимися во времени частотой,
DD>амплитудой.
DD>Необходимо в реальном времени(допустимо с небольшим известным запаздыванием) определять моменты
DD>возникновения min и max, расстояния м/д ними, амплитуду и т.п.

DD>Проблема в том, что имееются сильный шум и помехи, которые не позволяют всё это просто определять.

DD>Т.е. постоянно возникают локальные минимумы и максимумы. См. рис. 1.
DD>Простыми фильтрами я это несколько сглаживаю, но этого недостаточно. Дальнейшее сглаживание приводит
DD>к недопустимой потере информации. Всякие сложные фильтры, разложения и т.п. не подходят, поскольку
DD>всё должно быть в реальном масштабе времени.

DD>Что в этом случае можно сделать? Ведь совершенно очевидно( из рисунка ), что информация о наличии

DD>мин. и мах. имеется и извлечь её возможно.

DD>Спасибо!


Самый простой вариант -- построить сглаженое среднее этой функции и искать min и max от среднего.
Они совпадут с глобальными min-max исходной функции

Формула такая:
f_{sglagen}(x) = int_{x-d}^{x+d} f(t) dt

ну а d выбрать сильно больше периода маленьких колебаний.
Re: Поиск максимумов и минимумов функйии.
От: lepsai  
Дата: 23.06.05 00:43
Оценка:
А что за задача?
Re: Поиск максимумов и минимумов функйии.
От: Аноним  
Дата: 23.06.05 15:59
Оценка:
Здравствуйте, DDzuba, Вы писали:

DD>Здравствуйте!


DD>Есть массив значений, поступающих с какого-то источника. По сути это должна быть периодическая

DD>функция, последовательность минимумов и максимумов с немного изменяющимися во времени частотой,
DD>амплитудой.
DD>Необходимо в реальном времени(допустимо с небольшим известным запаздыванием) определять моменты
DD>возникновения min и max, расстояния м/д ними, амплитуду и т.п.

DD>Проблема в том, что имееются сильный шум и помехи, которые не позволяют всё это просто определять.

DD>Т.е. постоянно возникают локальные минимумы и максимумы. См. рис. 1.
DD>Простыми фильтрами я это несколько сглаживаю, но этого недостаточно. Дальнейшее сглаживание приводит
DD>к недопустимой потере информации. Всякие сложные фильтры, разложения и т.п. не подходят, поскольку
DD>всё должно быть в реальном масштабе времени.

DD>Что в этом случае можно сделать? Ведь совершенно очевидно( из рисунка ), что информация о наличии

DD>мин. и мах. имеется и извлечь её возможно.

Я так понимаю, что нужно обрабатывать достаточно длительный сигнал. Могу посоветовать использовать эллиптический фильтр (фильтр Кауэра). Он имеет очень крутой спад АЧХ в полосе задерживания при малом порядке. Однако это фильтр с БИХ. Можешь построить его в Matlab в FDATool, а потом взять коэффициенты числителя и знаменателя и использовать их в своей программе.
Re[2]: Поиск максимумов и минимумов функйии.
От: DDzuba Россия  
Дата: 24.06.05 06:19
Оценка:
Здравствуйте, lepsai, Вы писали:

L>А что за задача?


Едет по рельсам тележка. На ней передатчик и приёмник.
То, что отражается от земли, поступает ко мне на АЦП.
Те бугры, которые я считаю — шпалы. Но там ещё много чего
лишнего есть: щебёнка, железяки всякие, мусор.
Надо чётко определять шпалы.
Re: Поиск максимумов и минимумов функйии.
От: mishin  
Дата: 24.06.05 06:40
Оценка:
Я делал так: линейный фильтр или несколько фильтров, затем интерполяция, затем определение пересечения функции первой производной с абсцис, но у меня функции были попроще (1-5 экстремумов)
Re[2]: Поиск максимумов и минимумов функйии.
От: DDzuba Россия  
Дата: 24.06.05 06:45
Оценка:
RR>Самый простой вариант -- построить сглаженое среднее этой функции и искать min и max от среднего.
RR>Они совпадут с глобальными min-max исходной функции

RR>Формула такая:

RR>f_{sglagen}(x) = int_{x-d}^{x+d} f(t) dt

RR>ну а d выбрать сильно больше периода маленьких колебаний.


На рисунке приведена функция уже после такого сглаживания.
Это не убирает всех локальных максимумов. При увеличении степени
сглаживания теряется главный мыксимум.
Re[3]: Поиск максимумов и минимумов функйии.
От: RomanRoschin  
Дата: 27.06.05 12:48
Оценка:
Здравствуйте, DDzuba, Вы писали:

RR>>Самый простой вариант -- построить сглаженое среднее этой функции и искать min и max от среднего.

RR>>Они совпадут с глобальными min-max исходной функции

RR>>Формула такая:

RR>>f_{sglagen}(x) = int_{x-d}^{x+d} f(t) dt

RR>>ну а d выбрать сильно больше периода маленьких колебаний.


DD>На рисунке приведена функция уже после такого сглаживания.

DD>Это не убирает всех локальных максимумов. При увеличении степени
DD>сглаживания теряется главный мыксимум.

Ну хорошо, а если по рабоче-крестьянски?

Ищем все максимумы, затем отбрасываем те в r-окрестности которых есть другие лок. максимумы с большим значением.
Если рассточние между экстремумами примерно одно и то-же, то задача решена.

Если нет, тогда можно так:

Взяли локальный максимум, походили вперед-назад по параметру в поисках других лок. максимумов. Как только значение очередного лок. максимума уклонилось от исходного (уменьшилось) на определенную величину z, считаем, что максимум глобальный.

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