реклама на сайте
подробности

 
 
> нужен алгоритм нахождения максимума, простой с апроксимацией для МК!
Make_Pic
сообщение Jun 19 2005, 06:16
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Имеем 4 или 5 точек прендадлежащих функции, функция непрерывная, как малой "кровью" и быстро найти максимум (предпологаем, что он должен где то быть между точками)?

Прогу надо на микроконтроллер посадить.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
arttab
сообщение Jun 19 2005, 14:28
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



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


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Eugeno
сообщение Jun 20 2005, 07:20
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 19
Регистрация: 12-04-05
Из: Таганрог, Ростовской обл.
Пользователь №: 4 048



Цитата(arttab @ Jun 19 2005, 17:28)
если функция известна, то через производную можно найти максимумы. а иначе апроксимировать по известным значениям....
может, кто чтонибудь оригинальное предложит?
*

Оригинальней ничего не надо. Задача самодостаточна.

По четырём точкам можно найти однозначную апроксимацию участка кривой полиномом третьей степени x(t) = a*t*t*t + b*t*t + c*t*t + d*t + e;
Производную полинома приравниваем к нулю и вуаля - результат.

Полином третьей степени имеет хорошую устойчивость в силу своей простоты, а решение по четырём точкам однозначно - это тоже больщое преимущество.
Go to the top of the page
 
+Quote Post
Fast
сообщение Jun 21 2005, 07:56
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 216
Регистрация: 31-03-05
Из: Зеленоград
Пользователь №: 3 839



Цитата(Eugeno @ Jun 20 2005, 10:20)
По четырём точкам... полиномом третьей степени x(t) = a*t*t*t + b*t*t + c*t*t + d*t + e... Производную полинома приравниваем к нулю и вуаля - результат.
Полином к нулю приравнять, конечно, хорошо, только как решать на МК это дело?
Предлагаю итеративный вариант на базе интерполятора степени N (пусть N=4), например Лагранжа.
вначале находим максимальный отсчет в регистре, затем

1. выбираем второй "опорный" справа или слева от максимума (который больше). Точный максимум будет расположен в интервале между двумя этими отсчетами.
2. Делим интервал пополам, вычисляем посредством интерполяции значение функции в данной точке.
3. Измеряем дельту, как разность максимума и вычисл. значения
4. Если дельта со знаком " - ", то значение функции в точке больше, чем максимум, тогда [максимум = значение функции в точке]
5. Устанавливаем новые границы интервала, соотв. одна - максимуму, вторая - "опорному" отсчету.
6. Если [дельта < ПОРОГ] - или [итерация < ITERmax] - выход, иначе идти к 1.

Не очень просто, но работает, причем хорошо.
проблема насущная, сам бы хотел услышать мнение сторонних разработчиков
Go to the top of the page
 
+Quote Post
Make_Pic
сообщение Jun 23 2005, 04:41
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Цитата(Fast @ Jun 21 2005, 10:56)
1. выбираем второй "опорный" справа или слева от максимума (который больше). Точный максимум будет расположен в интервале между двумя этими отсчетами.
2. Делим интервал пополам, вычисляем посредством интерполяции значение функции в данной точке.
3. Измеряем дельту, как разность максимума и вычисл. значения
4. Если дельта со знаком " - ", то значение функции в точке больше, чем максимум, тогда [максимум = значение функции в точке]
5. Устанавливаем новые границы интервала, соотв. одна - максимуму, вторая - "опорному" отсчету.
6. Если [дельта < ПОРОГ] - или [итерация < ITERmax] - выход, иначе идти к 1.

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

*



Можно подробнее по п.2 - Как интерполировать (функция неизвестна, можно предположить, что она sinc)? Желательно расписать для меня чайника!
Go to the top of the page
 
+Quote Post
mikola1
сообщение Jun 23 2005, 22:32
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 25-03-05
Из: Минск
Пользователь №: 3 693



Цитата(Make_Pic @ Jun 23 2005, 07:41)
Можно подробнее по п.2 - Как интерполировать (функция неизвестна, можно предположить, что она sinc)? Желательно расписать для меня чайника!
*


To Make_Pic,
Интерполировать функцию нужно исходя из физического смысла сигнала, который мы снимаем. Иначе смысл и ценность от этой интерполяции??? Т.к. насколько я понял сигнал речевой, то нужно примерно представлять, какому закону распределяется его спектральная плотность. А этого я не знаю sad.gif (здесь я не силен, но смею предположить, нечто подобное на распределение Гаусса с нарушением симметрии).

To Fast, интерполирование по двум точкам – крайне не благодарная задача. См. рисунок от Alexander, оставив только две точки sad.gif

А для чайников smile.gif исходя из предложенного Fast с использованием интерполяционного полинома Лагранжа второй степени следующий алгоритм без всяких циклов.
п.1 Выбираем максимум функции (x1,y1) и берем две соседние точки (x0,y0) и (x1,y2), так чтобы выполнялись условия x0<x1<x2, и y1>=y0, и y1>=y2.
п.2 Находим точку экстремума (формула 3)
п.3 Подставляем найденное значение в полином (формула 1)
п.4 Полученное значение и есть максимум.

P.S. Можно уменьшить объем вычислений, введя промежуточные переменные типа dx01=x0-x1 для формул 1 и 2. На рис. представлены формулы, записанные в Maple.

Сообщение отредактировал mikola1 - Jun 24 2005, 21:45
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Make_Pic
сообщение Jun 24 2005, 04:09
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Цитата(mikola1 @ Jun 24 2005, 01:32)
Цитата(Make_Pic @ Jun 23 2005, 07:41)

Можно подробнее по п.2 - Как интерполировать (функция неизвестна, можно предположить, что она sinc)? Желательно расписать для меня чайника!
*

To Make_Pic,
Интерполировать функцию нужно исходя из физического смысла сигнала, который мы снимаем. Иначе смысл и ценность от этой интерполяции??? Т.к. насколько я понял сигнал речевой, то нужно примерно представлять, какому закону распределяется его спектральная плотность. А этого я не знаю sad.gif (здесь я не силен, но смею предположить, нечто подобное на распределение Гаусса с нарушением симметрии).
*


Я вроде выше писал, что сигнал - синус/частота, посему симетричный гаусс, дык как интерполировать - КТО-НИБУДЬ ПОДСКАЖЕТ???
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Make_Pic   нужен алгоритм нахождения максимума   Jun 19 2005, 06:16
|- - Alexandr   Цитата(Fast @ Jun 21 2005, 11:56)  1. ...   Jun 21 2005, 08:49
||- - Fast   [quote=Alexandr,Jun 21 2005, 11:49] Производная и ...   Jun 21 2005, 09:25
||- - Make_Pic   На входе устройства две частоты речевого диапозо...   Jun 21 2005, 16:08
||- - Fast   Цитата(Make_Pic @ Jun 21 2005, 19:08)На входе...   Jun 22 2005, 04:24
||- - Make_Pic   Цитата(Fast @ Jun 22 2005, 07:24)Цитата(Make_...   Jun 22 2005, 04:33
||- - Make_Pic   Кстати на телесистемах некий alostap предложил ори...   Jun 24 2005, 04:20
|- - Fast   Цитата(mikola1 @ Jun 24 2005, 01:32)To Fast, ...   Jun 24 2005, 12:33
- - Vic   Цитата(Make_Pic @ Jun 19 2005, 09:16)Имеем 4 ...   Jun 19 2005, 16:55
- - mikola1   Цитата(Make_Pic @ Jun 19 2005, 09:16)Имеем 4 ...   Jun 21 2005, 06:31
- - Major   Все же настоятельно рекомендую МНК, и посмотреть с...   Jun 24 2005, 05:24
- - mikola1   Хочу извиниться перед Fast, я действительно неправ...   Jun 24 2005, 21:52


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 01:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01432 секунд с 7
ELECTRONIX ©2004-2016