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

 
 
11 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Операция обратная к "скользящему среднему"
_pv
сообщение Jan 6 2014, 12:36
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



есть измеренные данные про которые известно, что по ним прошлись скользяшим средним с неким известным размером D.
каким образом можно восстановить исходные данные которые были до усреднения?
из простого на ум приходит только пройтись по этим уже усреднённым данным еще раз таким же скользящим средним и получить оценку ошибки вызванную усреднением, которую потом добавить обратно к первоначальным данным. Оно вроде как работает, но понятно что это хоть и очень простой, но не совсем честный способ.
Как это делать математически правильно?
понятно что можно сделать Фурье, поделить спектр на характеристику скользящего среднего (по сути КИХ фильтра с одинаковыми единичными коэффициентами) и преобразовать обратно. но при делении на нули в том месте где характеристика имеет провалы пожалуй будут проблемы, оно и понятно так как частоты кратные размеру фильтра давятся в ноль и обратному восстановлению не подлежат.
А если без преобразования в частотную область, с какой функцией надо сделать свёртку чтобы получить фильтр обратный скользящему среднему? или даже в общем случае, каким образом преобразовать коэффициенты КИХ фильтра, чтобы произведение исходного фильтра и пробразованного давало 1.
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Jan 6 2014, 13:11
Сообщение #2


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



Для решения задачи нужно прежде всего почитать про z-преобразование.
Go to the top of the page
 
+Quote Post
delaver
сообщение Jan 6 2014, 13:30
Сообщение #3





Группа: Участник
Сообщений: 14
Регистрация: 26-12-13
Пользователь №: 79 808



Цитата(_pv @ Jan 6 2014, 16:36) *
есть измеренные данные про которые известно, что по ним прошлись скользяшим средним с неким известным размером D.

Если отвлечься от фильтров, Вы по сути проинтегрировали данные взяв в качестве области интегрирования D отсчетов. И хотите сделать обратную операцию. Обратная операция для интегрирования это взятие производной. Может тогда продифференцировать данные с тем же количеством отсчетов. Не могу сразу сказать как это сделать, но формула должна быть очень простая, исходя из базового определения производной.
Go to the top of the page
 
+Quote Post
iiv
сообщение Jan 6 2014, 13:47
Сообщение #4


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Цитата(Fat Robot @ Jan 6 2014, 18:11) *
Для решения задачи нужно прежде всего почитать про z-преобразование.

и конечно же не спутать с z-преобразованием, которое z-score, или, которое, преобразование фишера, а можно вообще без этого преобразования на пальцах написать, что скользящее среднее - есть умножение матрицы на исходный вектор, и просто найти обратную к этой матрице. Если есть необходимые знания о теплицевости-циркулянтности - можно из этого через Фурье и то самое зет-преобразование самому вывести, а можно в лоб как нижнюю треугольную решить. Тоже кстати достаточно устойчиво и программируется в 6 строчек без сложных слов типа БПФ и комплексных чисел.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Jan 6 2014, 14:14
Сообщение #5


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

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(iiv @ Jan 6 2014, 17:47) *
и конечно же не спутать с z-преобразованием, которое z-score, или, которое, преобразование фишера, а можно вообще без этого преобразования на пальцах написать, что скользящее среднее - есть умножение матрицы на исходный вектор, и просто найти обратную к этой матрице. Если есть необходимые знания о теплицевости-циркулянтности - можно из этого через Фурье и то самое зет-преобразование самому вывести, а можно в лоб как нижнюю треугольную решить. Тоже кстати достаточно устойчиво и программируется в 6 строчек без сложных слов типа БПФ и комплексных чисел.


Z-преобразование это дискретное преобразование Лапласса.
Умножение матрицы на вектор? Расскажите подробнее пожалуйста. Как с использованием z-преобразования знаю, а про такой подход не слышал. Фактически скользящее среднее есть свертка. По теореме о свертке ее можно свести к умножению проделав z-преобразование или дискретное преобразование фурье (которое в данном случае совпадет с z-преобразованием). Каким боком применить к этому делу матрицу для мне неизвестно. Или вы имеете ввиду алгоритмы быстрого преобразования Фурье?

Мне известен только один способ восстановления последовательности, обработаной сверткой. Он называется оптимальная гомоморфная фильтрация и детально изложен в книге Рабинера и Голда по цифровой обработке сигналов. Книга старая 70-х годов.
Ключевое слово для поиска в гугле кепстр (измененное слово спектр).
http://en.wikipedia.org/wiki/Cepstrum
Go to the top of the page
 
+Quote Post
_pv
сообщение Jan 6 2014, 14:17
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(delaver @ Jan 6 2014, 20:30) *
Не могу сразу сказать как это сделать, но формула должна быть очень простая, исходя из базового определения производной.

да, всё оказалось просто, надо посчитать производную.
скользящее среднее:
Y[i] = (X[i-N] + X[i-N+1] + ... +X[i+N]) / 2N
или если выразить через предыдущий отсчёт:
Y[i] = Y[i-1] + (X[i+N] - X[i-N-1]) / 2N
соответственно
X[i+N] = X[i-N-1] + (Y[i] - Y[i-1]) * 2N.

upd: только не 2N, a 2N+1 конечно же.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Jan 6 2014, 14:20
Сообщение #7


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

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Возможно прямоугольная форма импульсной характеристики фильтра производящего скользящее среднее позволит что-нибудь упростить.


Цитата(_pv @ Jan 6 2014, 18:17) *
да, всё оказалось просто, надо посчитать производную.
скользящее среднее:
Y[i] = (X[i-N] + X[i-N+1] + ... +X[i+N]) / 2N
или если выразить через предыдущий отсчёт:
Y[i] = Y[i-1] + (X[i+N] - X[i-N-1]) / 2N
соответственно
X[i+N] = X[i-N-1] + (Y[i] - Y[i-1]) * 2N.


Поздравляю sm.gif Как все просто оказалось.
Go to the top of the page
 
+Quote Post
iiv
сообщение Jan 6 2014, 15:09
Сообщение #8


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Цитата(Tarbal @ Jan 6 2014, 19:14) *
Умножение матрицы на вектор? Расскажите подробнее пожалуйста.


Пусть $x \in R^n$ исходный вектор до обработки скользящим средним. Тогда если скользящее среднее имеет длину K, то результат его применения можно записать как умножение матрицы
(1 0 ... 0)
(1/2 1/2 0 ... 0)
(... {1/K ... 1/K}(K раз) 0 ... 0)
(...)
(0 ... 0 1/K 1/K ... 1/K)
(...)
(0... 0 1)

- надеюсь, понятно, без ЛаТеХа не могу красиво нарисовать.

Теперь внимательно смотрим, что получилось. Если отбросить первые и последние K-1 строчек - получается Теплицева матрица, если перейти к бесконечным, то в пределе по спектру она должна совпадать с соответствующим циркулянтом, спектр которого получается их БПФа оного. Как я понимаю, формулы должны с зет-преобразованием совпасть, но кропотливо не проверял.

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

Также при записывании обратной можно получить простые рекуррентные формулы как ТС получил, но они в общем случае будут не устойчивы, а можно слегка их подсократить и будет устойчивее.

Лучший метод, конечно же через Фурье, так как есть контроль спектра, но с умением дела можно и без оного обойтись.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 6 2014, 23:58
Сообщение #9


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(_pv @ Jan 6 2014, 18:36) *
каким образом можно восстановить исходные данные которые были до усреднения?

А какого рода данные там были? Если строго гармонические, то какие частоты сверху и снизу.

Сообщение отредактировал GetSmart - Jan 7 2014, 00:56


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
AndrewN
сообщение Jan 7 2014, 14:24
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 336
Регистрация: 7-03-07
Из: Петербург
Пользователь №: 25 961



QUOTE (_pv @ Jan 6 2014, 16:36) *
есть измеренные данные про которые известно, что по ним прошлись скользяшим средним с неким известным размером D.
каким образом можно восстановить исходные данные которые были до усреднения?

Никак.

В общем случае исходные данные теряются навсегда. Если лень изучить теорию обратных операций (хотя интегрирование это, конечно, функционал, а не оператор), то хотя бы поразмышляйте над средним арифметическим (x+y)/2 = a. Отсюда имеем линейное уравнение x+y = 2a. а известно. Сколько решений можно получить для двух переменных из одного уравнения? Правильно.

Сообщение отредактировал AndrewN - Jan 7 2014, 15:08
Go to the top of the page
 
+Quote Post
_pv
сообщение Jan 7 2014, 14:42
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(AndrewN @ Jan 7 2014, 21:24) *
Никак.
В общем случае исхожные данные теряются навсегда.

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

синенький - исходный сигнал, красненький - скользящее среднее по 15 точкам, зелёненький - восстановлен обратно из красненького.
Go to the top of the page
 
+Quote Post
AndrewN
сообщение Jan 7 2014, 15:36
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 336
Регистрация: 7-03-07
Из: Петербург
Пользователь №: 25 961



QUOTE (_pv @ Jan 7 2014, 17:42) *
QUOTE
X[i+N] = X[i-N-1] + (Y[i] - Y[i-1]) * (2N+1)
я решение выше вроде как привёл.

Это не решение, а хотение. Вы _не_ знаете величину X[i-N-1] в общем случае. А то, что у вас в ряду данных первые отсчёты - нули, это случайность. Разность соседних средних = разности _двух_ исходных отсчётов. Опять одно уравнение для _двух_ переменных. Т.е. ваша формула на самом деле

X'[i+N] = ??? + (Y[i] - Y[i-1]) * (2N+1), штрих обозначает оценку X[i+N], а модуль |???| не ограничен сверху, т.е. ошибка может быть произвольно большой.

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

Скользящее среднее - это аппроксимация определённого интеграла в непрерывном случае. Восстановить подинтегральную функцию по значению интеграла - невозможно.

Сообщение отредактировал AndrewN - Jan 7 2014, 16:34
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Jan 7 2014, 17:27
Сообщение #13





Guests






Цитата(_pv @ Jan 6 2014, 16:36) *
..есть измеренные данные про которые известно, что по ним прошлись скользяшим средним с неким известным размером D.
..каким образом можно восстановить исходные данные которые были до усреднения?


В общем случае - никак.
Для приближенного восстановления требуются оговорки.
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Jan 7 2014, 20:19
Сообщение #14


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



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

Методов синтеза много. Если в качестве инструмента Матлаб, то посмотрите fdesign.arbmagnphase

z-плоскость дала бы вам идею того, с чем надо бороться.

Цитата(_pv @ Jan 6 2014, 16:36) *
понятно что можно сделать Фурье, поделить спектр на характеристику скользящего среднего (по сути КИХ фильтра с одинаковыми единичными коэффициентами) и преобразовать обратно. но при делении на нули в том месте где характеристика имеет провалы пожалуй будут проблемы, оно и понятно так как частоты кратные размеру фильтра давятся в ноль и обратному восстановлению не подлежат.

Go to the top of the page
 
+Quote Post
RHnd
сообщение Jan 7 2014, 21:10
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 518
Регистрация: 12-04-07
Из: Санкт-Петербург
Пользователь №: 26 997



Я может что-то не понимаю, но в чем загвоздка? Взятие среднего - пропуск сигнала через фильтр (для третьего порядка) (z^2+z+1)/(3*z^3). Пропустите полученный сигнал через обратный фильтр (3*z^3)/(z^2+z+1) и будет исходный сигнал.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 7th July 2025 - 11:34
Рейтинг@Mail.ru


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