Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Цифрофой фильтр, Сигнал "лесенкой" 
:(
    Опции темы
uvsoft
  Дата 14.10.2006, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 4.2.2003

Репутация: нет
Всего: нет



Привет,

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

иллюстрация (если ее так назвать можно) прилагается...
ЗЫ вот то что там зелененькое это что-то вроде выхода фильтра на каждом этапе... далжна наблюдаться сходимость к истинному углу...

спасибо за любую помощь!

Это сообщение отредактировал(а) uvsoft - 14.10.2006, 00:08

Присоединённый файл ( Кол-во скачиваний: 41 )
Присоединённый файл  untitled.JPG 35,50 Kb
--------------------
Старый глюк лучше новых двух.
PM MAIL ICQ   Вверх
maxim1000
Дата 14.10.2006, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



ну, например, метод наименьших квадратов
аппроксимирующая функция: ax+b


--------------------
qqq
PM WWW   Вверх
uvsoft
Дата 14.10.2006, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 4.2.2003

Репутация: нет
Всего: нет



так это все тоже интергрирование тока в вариациях.... ну например я из каких-то соображений решил что буду держать историю в размере N штук... аппроксимирую ее по методу средних квадратов.... получаю значения... а что если этот интервал окажется очень маленьким, ведь для корректной оценки мне надо как миниму знать две ступеньки, а кто его знает скока там точек?... да и говорю же все эти методы неустойчивы, а мне нужна сходимость
--------------------
Старый глюк лучше новых двух.
PM MAIL ICQ   Вверх
maxim1000
Дата 14.10.2006, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(uvsoft @  14.10.2006,  00:25 Найти цитируемый пост)
ведь для корректной оценки мне надо как миниму знать две ступеньки, а кто его знает скока там точек?

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

Цитата(uvsoft @  14.10.2006,  00:25 Найти цитируемый пост)
да и говорю же все эти методы неустойчивы, а мне нужна сходимость

а почему бы методу наименьших квадратов и не сходиться?
при поступлении точек он будет колебаться всё меньше и меньше


--------------------
qqq
PM WWW   Вверх
uvsoft
Дата 14.10.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 4.2.2003

Репутация: нет
Всего: нет



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

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

может кто-нибудь занимался этой тематикой и может посоветовать литературу (в эл. виде)? про фильтры ее много, но вот что-то бы по конкретнее....
--------------------
Старый глюк лучше новых двух.
PM MAIL ICQ   Вверх
Aloha
Дата 14.10.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
**


Профиль
Группа: Участник Клуба
Сообщений: 351
Регистрация: 14.5.2006

Репутация: 4
Всего: 165



uvsoft

К размышлению на тему:

Это сообщение отредактировал(а) Aloha - 17.10.2006, 16:40

Присоединённый файл ( Кол-во скачиваний: 14 )
Присоединённый файл  01.rar 11,52 Kb
PM   Вверх
COVD
Дата 14.10.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: нет
Всего: 43



Чем больше у вас априорной информации о процессе, тем лучше вы сможете его обработать. Судя по картинке ваш процесс есть сумма "белого" шума и детерминированного процесса в виде лесенки. Вы это знаете заранее. Значит вы должны применить последовательно два фильтра. Сначала подавить "белый" шум. На выходе этого фильтра в идеале будет чистая лестница.  Второй  фильтр должен сглаживать лестницу и на его выходе будет в идеале прямая линия. 
PM MAIL   Вверх
maxim1000
Дата 14.10.2006, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(uvsoft @  14.10.2006,  13:53 Найти цитируемый пост)
я же не могу до бесконечности увеличивать какой-то там массивчик и постоянно суммировать все больше и больше и больше... это не реально и не рационально.

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


--------------------
qqq
PM WWW   Вверх
uvsoft
Дата 14.10.2006, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 4.2.2003

Репутация: нет
Всего: нет



Цитата(Aloha @ 14.10.2006,  18:01)
uvsoft

К размышлению на тему:

спасибо за ответ, но я там вижу только #ИМЯ? #ДЕЛ/0 и тому подобное, офис русский, должен вроде бы понимать... во втором столбце ругается вроде бы на СТРОКА()... и вот я смотрю, там расчеты производятся при известной величине шага, шума и т.д.... а этого не известно, можно конечно прикинуть, но не хотелось бы привязываться к этому...

Добавлено @ 21:08 
Цитата(maxim1000 @ 14.10.2006,  20:34)
Цитата(uvsoft @  14.10.2006,  13:53 Найти цитируемый пост)
я же не могу до бесконечности увеличивать какой-то там массивчик и постоянно суммировать все больше и больше и больше... это не реально и не рационально.

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

о каком методе ты говоришь?
--------------------
Старый глюк лучше новых двух.
PM MAIL ICQ   Вверх
maxim1000
Дата 15.10.2006, 02:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(uvsoft @  14.10.2006,  20:06 Найти цитируемый пост)
о каком методе ты говоришь?

пусть у нас есть набор 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
PM WWW   Вверх
uvsoft
Дата 17.10.2006, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 4.2.2003

Репутация: нет
Всего: нет



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


ЗЫ
У кого-нить то что Aloha дал работает нормально?
--------------------
Старый глюк лучше новых двух.
PM MAIL ICQ   Вверх
maxim1000
Дата 17.10.2006, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



чтобы избегать переполнения можно сделать так:
на каждом шаге умножать все суммы на число, меньшее 1
само умножение на результат никак не повлияет (т.к. соотношения останутся теми же), но в совокупности с прибавлением на каждом шагу даст такой эффект, что больше всего на результат будут влиять последние отсчёты, а с увеличением "давности" информации её влияние будет экспоненциально убывать...


--------------------
qqq
PM WWW   Вверх
uvsoft
Дата 18.10.2006, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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, идея с затуханием значения старых элементов имеет смысл, нужно больше доверять относительно свежим элементам... (хотя если подумать с другой стороны, то можно решить что новые значения могут быть просто какими-то всплесками, отклонениями от нормального значения, а мы постараемся следовать за ними и ничего хорошего не выйдет...) вот только бы было это не так круто и не с такой погрешностью, которая появляется уже со второго шага... Может можно и это как-то обойти?
--------------------
Старый глюк лучше новых двух.
PM MAIL ICQ   Вверх
maxim1000
Дата 18.10.2006, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(uvsoft @  18.10.2006,  06:45 Найти цитируемый пост)
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

ну не знаю, я саму систему не решал, но в этом решении что-то не так: оно, как минимум, не содержит S1
я смотрю на систему уравнений:
Цитата(maxim1000 @  15.10.2006,  01:52 Найти цитируемый пост)
1. a*Sxx+b*Sx=Sxy
2. a*Sx+b*S1=Sy

и вижу, что при умножении всех S на константу ничего не меняется


--------------------
qqq
PM WWW   Вверх
uvsoft
Дата 18.10.2006, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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
--------------------
Старый глюк лучше новых двух.
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0868 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.