![]() |
|
![]() ![]() ![]() |
|
uvsoft |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 4.2.2003 Репутация: нет Всего: нет |
Привет,
нужно обработать сигнал следующего характера... итак, представляем себе лесенку, каждая ступенька которой представляет собой не прямую линию, а ломаную кривую с небольшой амплитудой по сравнению с шагом лесенки. нужно найти общую тенденцию лесенки, т.е. по сути угол наклона. в самом начале ничего не знаем, через некоторые промежутки времени поступоют все новые и новые точки этой ломаноступенчатой лесенки, ступеньки одинаковые, но вот какие именно не известно, алгоритму нужно как можно быстрее адаптироваться и найти угол... простое интегрирование не поможет, т.к. для него нужен определенный промежуток времени (количество точек, окно), да и долго и неэффективно. кроме того как и у каждой системы иногда происходят случайные выбросы, к которым алгоритм должен быть не чувствителен, да и по сути к малым колебания на каждой ступеньке тоже. почитал тут немного и вроде бы как это подходит под раздел бесконечные адаптивные фильтры... только не нашел ничего конкретного... иллюстрация (если ее так назвать можно) прилагается... ЗЫ вот то что там зелененькое это что-то вроде выхода фильтра на каждом этапе... далжна наблюдаться сходимость к истинному углу... спасибо за любую помощь! Это сообщение отредактировал(а) uvsoft - 14.10.2006, 00:08 Присоединённый файл ( Кол-во скачиваний: 41 ) ![]() --------------------
Старый глюк лучше новых двух. |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
ну, например, метод наименьших квадратов
аппроксимирующая функция: ax+b -------------------- qqq |
|||
|
||||
uvsoft |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 4.2.2003 Репутация: нет Всего: нет |
так это все тоже интергрирование тока в вариациях.... ну например я из каких-то соображений решил что буду держать историю в размере N штук... аппроксимирую ее по методу средних квадратов.... получаю значения... а что если этот интервал окажется очень маленьким, ведь для корректной оценки мне надо как миниму знать две ступеньки, а кто его знает скока там точек?... да и говорю же все эти методы неустойчивы, а мне нужна сходимость
--------------------
Старый глюк лучше новых двух. |
|||
|
||||
maxim1000 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
я сомневаюсь в том, что есть нормальный метод, который даст нормальный результат, не имея точек хотябы с двух степенек - даже визуально не уверен...
а почему бы методу наименьших квадратов и не сходиться? при поступлении точек он будет колебаться всё меньше и меньше -------------------- qqq |
||||
|
|||||
uvsoft |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 4.2.2003 Репутация: нет Всего: нет |
я и не говорю что он даст что-то нормальное пока у него не будет достаточной информации, это не реально, но вот то, что он выдаст, то что нужно, как только у него появятся две ступеньки, это точно... т.е. если фильтр бесконечный то он знает все и ничего не упускает из виду, тогда как суммирование которое ты предлагаешь с последующим усреднением величин обладает короткой паматью (а что если эта память покроет тока самый кончик ступеньки и самое начало следующий? что за криулина вниз получится???), я же не могу до бесконечности увеличивать какой-то там массивчик и постоянно суммировать все больше и больше и больше... это не реально и не рационально.
насчет устойчивости, все эти алгоритны, постоенные на интегрировании, выправляют входные данные когда они плохие и искажают когда они хорошие... нам такого не нужно, быть может в этом отношении я и не прав, особо не интересовался данной темой, но вот первое НО из предыдущего абзаца в любом случает заставлять отказаться от интегрирования. может кто-нибудь занимался этой тематикой и может посоветовать литературу (в эл. виде)? про фильтры ее много, но вот что-то бы по конкретнее.... --------------------
Старый глюк лучше новых двух. |
|||
|
||||
Aloha |
|
|||
. ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 351 Регистрация: 14.5.2006 Репутация: 4 Всего: 165 |
uvsoft
К размышлению на тему: Это сообщение отредактировал(а) Aloha - 17.10.2006, 16:40 Присоединённый файл ( Кол-во скачиваний: 14 ) ![]() |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: нет Всего: 43 |
Чем больше у вас априорной информации о процессе, тем лучше вы сможете его обработать. Судя по картинке ваш процесс есть сумма "белого" шума и детерминированного процесса в виде лесенки. Вы это знаете заранее. Значит вы должны применить последовательно два фильтра. Сначала подавить "белый" шум. На выходе этого фильтра в идеале будет чистая лестница. Второй фильтр должен сглаживать лестницу и на его выходе будет в идеале прямая линия.
|
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
здесь ситуация интересная в случае линейной аппроксимирующей функции, фурмулы зависимости коэффициентов от входных данных получатся выраженными через интегральные характеристики типа среднего и корреляции соседних значений, которые можно обновлять без хранения всего массива -------------------- qqq |
|||
|
||||
uvsoft |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 4.2.2003 Репутация: нет Всего: нет |
спасибо за ответ, но я там вижу только #ИМЯ? #ДЕЛ/0 и тому подобное, офис русский, должен вроде бы понимать... во втором столбце ругается вроде бы на СТРОКА()... и вот я смотрю, там расчеты производятся при известной величине шага, шума и т.д.... а этого не известно, можно конечно прикинуть, но не хотелось бы привязываться к этому... Добавлено @ 21:08 о каком методе ты говоришь? --------------------
Старый глюк лучше новых двух. |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
пусть у нас есть набор x[n] и y[n] (скорее всего x[n] будет равно n, но это неважно) задача: сумма (a*x[n]+b-y[n])^2 ->min берём производные по a и b и приравниваем их к 0 (двойки я поубирал) 1.(по a) сумма x[n]*(a*x[n]+b-y[n]) = 0 2.(по b) сумма (a*x[n]+b-y[n])=0 упрощаем: 1. a*Sxx+b*Sx=Sxy 2. a*Sx+b*S1=Sy здесь: Sxx=сумма x[n]*x[n] Sx=сумма x[n] Sy=сумма y[n] Sxy=сумма x[n]*y[n] S1=сумма 1=N (количество отсчётов) таким образом на каждом шагу нам нужно: 1. пересчитать всякие S 2. по ним определить оптимальные a и b для пересчёта всех S совсем не нужно хранить все отсчёты от начала обработки - вполне достаточно их предыдущих значений+очередные значения x[n] и y[n] -------------------- qqq |
|||
|
||||
uvsoft |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 4.2.2003 Репутация: нет Всего: нет |
maxim1000, то что ты описываешь это я как понимаю метод наименьших квадротов или линия тренда 1го порядка... ну да по сути ты прав, знать все члены вовсе не обязательно, можно просто к каждой сумме добавлять новое слагаемое, вот меня только количество беспокоит, т.е. чем долше будет работать алгоритм тем больше будет значение N и суммы, не говоря уже о суммах произведений, и если предположим у меня новые значения приходят часто, то хранение и использование постоянно возрастающих величит составляет проблему... найти бы какой-нибудь способ всего этого избежать....
ЗЫ У кого-нить то что Aloha дал работает нормально? --------------------
Старый глюк лучше новых двух. |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
чтобы избегать переполнения можно сделать так:
на каждом шаге умножать все суммы на число, меньшее 1 само умножение на результат никак не повлияет (т.к. соотношения останутся теми же), но в совокупности с прибавлением на каждом шагу даст такой эффект, что больше всего на результат будут влиять последние отсчёты, а с увеличением "давности" информации её влияние будет экспоненциально убывать... -------------------- qqq |
|||
|
||||
uvsoft |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 4.2.2003 Репутация: нет Всего: нет |
Спасибо.
A = (<xy> - <y><x>) / (<x^2> - <x>^2) B = (<x^2><y> - <xy><x>) / (<x^2> - <x>^2) грубо говоря разность степеней числителя и знаменателя у A равна нулю, чего не скажешь про B, так что если я умножу каждую сумму на n*C, где C некоторая постоянная, а n это количество множителей в каждом слагаемом суммы, то получю следующее: A' = (C^2<xy> - C^2<y><x>) / (C^2<x^2> - C^2<x>^2) = A B' = (C^3<x^2><y> - C^3<xy><x>) / (C^2<x^2> - C^2<x>^2) = CB != B так что для B это не прокатит, но по сути это слагаемое мне и не нужно, главное найти угол. и по-моему то что ты предлагаешь сразу же будет давать неправильный результат. первый-то раз я конечно вычислю правильно, а вот при последующих расчетах у меня результат не будут совпадать с тем что есть на самом деле. путь я начал анализироваль начиная с получения m'го значения (сделал небольшую задержку), получил суммы, одна из которых, например, S m (x) = C*SX, где SX это какая она должна быть без умножения, потом получил m+1 значение и сумма стала уже S m+1 (x) = C*(C*SX + x[m +1]).... это вроде уж слишком круто, чтобы вот так прям урезать суммы... а что если я знаю, что лесенка периодически повторяется (не одна ступенька, а вся лестница целиком - доходит до определенного значения, потом резко прыгает до первоначального положения и снова скатывается внизу, естественно переход, он же прыжок вверх, я учитывают при расчетах) и просто вновь полученное значения я делю на максимальную ординату всей этой периодичной лесенки? таким образом, получу суммы значений, не превосходящих единицы (опять таки на B наплевать), при всем при этом S m (x) = SX / C, а слудующая сумма S m+1 (x) = SX / C + x[m + 1] / C = (SX + x[m+1]) / C.... получаем что каждое слагаемое суммы одинаково важно для конечного результата... В этом есть смысле??? На самом деле, maxim1000, идея с затуханием значения старых элементов имеет смысл, нужно больше доверять относительно свежим элементам... (хотя если подумать с другой стороны, то можно решить что новые значения могут быть просто какими-то всплесками, отклонениями от нормального значения, а мы постараемся следовать за ними и ничего хорошего не выйдет...) вот только бы было это не так круто и не с такой погрешностью, которая появляется уже со второго шага... Может можно и это как-то обойти? --------------------
Старый глюк лучше новых двух. |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
ну не знаю, я саму систему не решал, но в этом решении что-то не так: оно, как минимум, не содержит S1 я смотрю на систему уравнений: и вижу, что при умножении всех S на константу ничего не меняется -------------------- qqq |
|||
|
||||
uvsoft |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 4.2.2003 Репутация: нет Всего: нет |
не содержит твоей S1 потому что я все поделил на N = S1
1. a*Sxx+b*Sx=Sxy 2. a*Sx+b*S1=Sy получил 1. a*<xx>+b<x>=<xy> 2. a*<x>+b=<y> где <x>, <xx>, <xy>, <y>... это средние величины b = <y> - a*<x> a * <xx> + <x><y> - a*<x>^2 = <xy> a = (<xy> - <x><y>) / (<xx> - <x>^2) b = ... да и вообще это можно сказать табличные формулы.... в любой книжке по обработке экспериментальных данных есть. если ничего не делить то выражения получаются такие a = (Sxy - SxSy/N) / (Sxx - SxSx/N) b = (SxxSy/N - SxySx/N) / (Sxx - SxSx/N) и если считать N тоже суммой (чего не сделал я в пердыдущий раз) то как раз и получается что умножение всех сумм на постоянный коэффициент никак не повлияет на конечный результат...))) Это сообщение отредактировал(а) uvsoft - 18.10.2006, 11:39 --------------------
Старый глюк лучше новых двух. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |