2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

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

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

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему
 
 как найти сдвиг по данным из двух массивов
Сообщение08.07.2012, 17:56 


08/07/12
2
Салют,

хочу разобраться в решении одной задачи.

Имеются два равновеликих массива вещественных чисел, размерами порядка 500~1000 значений.
Второй массив есть слегка изменённый и сдвинутый относительно второго.
Необходимо найти такой сдвиг при котором массивы максимально совпадают.

Индекс свдига нужно искать от 0 до 100 индеkcа.


Я попробовал считать сумму разностей(по модулю) для каждого сдвига. Минимальная сумма
будет соотвествовать лучшему индексу сдвига.

Порывшись в голове и интернете - набрёл на слова свёртка, автокорреляция, быстрое преобразоване Фурье.

Помогите решить задачу правильно и с правильной Математикой.

Всех благ!

 Профиль  
                  
 
 Re: как найти сдвиг по данным из двух массивов
Сообщение08.07.2012, 18:15 
Заблокирован по собственному желанию
Аватара пользователя


18/05/09
3612
romsky в сообщении #593524 писал(а):
Имеются два равновеликих массива вещественных чисел, размерами порядка 500~1000 значений.
............................
Индекс свдига нужно искать от 0 до 100 индеkcа.

Значит ли это, что мы игнорируем остальные элементы массивов, и можно было говориь о "двух равновеликих массивах размером 101"?
Уточните.

 Профиль  
                  
 
 Re: как найти сдвиг по данным из двух массивов
Сообщение08.07.2012, 22:51 


08/07/12
2
Данные в массивах сделаны независимыми наблюдателями для одного и того же источника событий.
Разница в данных обьясняется задержками в передаче данных и точностью замеров.
Максимальный индекс сдвига(100) соответсвует максимальной возможной рассинхронизации.
Первые 100 елементов и последние 100 елементов во втором массиве можно игнорировать.

romsky в сообщении #593524 писал(а):
Второй массив есть слегка изменённый и сдвинутый относительно второго.


Второй массив есть слегка изменённый и сдвинутый относительно первого.

 Профиль  
                  
 
 Re: как найти сдвиг по данным из двух массивов
Сообщение10.07.2012, 10:23 
Заслуженный участник
Аватара пользователя


11/03/08
9904
Москва
В ряде случаев поиск сдвига, доставляющего минимум сумме абсолютных величин разностей, является наилучшей тактикой. Вопрос, насколько это оправдано сравнительно с автокорреляцией, зависит от требований по времени и от того, что есть "искажение". Если оно включает в себя изменение масштаба и сдвиг нуля (т.е. $M_1(i)=aM_2(i+h)+b+\eps$), при неизвестных a, b, то нужна именно кросскорреляция, избавляющая от влияния этих неизвестных величин, если только сдвиг по времени (и шум), то она несколько излишне обща.
$C_{X,Y}(j)=\frac{\sum_i {X_iY_{i+j}}}{\sqrt{\sum_i {X_i^2} \sum_i{Y_{i+j}^2}}}$
(массивы в данной формуле предполагаются центрированными, иначе надо перед умножением и возведением в квадрат вычесть среднее)
Повторяющийся по числу возможных сдвигов расчёт требует вычислительного ресурса. Если сдвигов много - применение преобразования Фурье может быть оправдано (оно основано на том, что Фурье от свёртки есть произведение преобразований Фурье от свёртываемых), то есть надо вычислить два Фурье на входе, перемножить почленно и вычислить обратное Фурье от произведения. По-видимому, Фурье оправдано при сдвигах, диапазон изменения которых существенно превышает сотню, сдвиги до сотни - лучше считать "в лоб" (впрочем, это сильно зависит). Некоторые методы ускорения расчёта АКФ и ККФ можно найти в книге Рабинера и Шафера "Цифровая обработка речевых сигналов", приложение к гл. 4.
Надо отметить, что возведение в квадрат в ходе вычисления АКФ(ККФ) сильно уязвимо к "выбросам" ("грубым ошибкам"), модуль более устойчив.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group