Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Временные ряды. Подобие векторов.


Автор: andreybs 7.12.2012, 18:31
На форуме есть несколько тем с похожим названием, но моя задача немного отличается, поэтому решил создать свою тему.

Имеем временной ряд произвольной длины L и эталонный вектор размерности N (N<L). Необходимо найти участки временного ряда длиной M (N<M<L), похожие на эталонный вектор. 

Во временном ряде можно выделить «опорные точки», однозначно его характеризующие. Будем считать, что эталонный вектор состоит только из опорных точек. Тогда критерием подобия участка временного ряда и эталонного вектора является «условное совпадение» опорных точек временного ряда  и эталонного вектора. Условное оно потому, что во временном ряде возможны искажения по амплитуде, частоте, фазе, избыточности опорных точек по сравнению с эталоном.

Необходимо разработать алгоритм, на вход которому подается эталонный вектор и участок временного ряда с выделенными опорными точками, а на выходе примерно такой результат: подобный вектор L найден, его начало/конец = {L1,L2} , степень достоверности подобия Х%. 

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

Как подступиться к задаче? Пока все испробованные мною методы неустойчивы к искажениям. В этом проблема.

Автор: Pavia 8.12.2012, 11:12
Бьешь эталон на куски. 
Пробуешь искать эти куски в сигнале. 
Я бы 2 метода использовал. Один в амплитудно-частотной области и другой в амплитудно-временной. 
Так вот во временной области. В качестве метрики сравнение я бы взял MSE. 
Для соблюдения подобия перебираешь начальное положение куска и масштаб. Масштабировать советую при помощи оператора линейной интерполяции(Ланцош ак SinC негодится). 

В частотной области всё по другому. В качестве метрике корреляция по Писанину. 
Перебираешь разные временные участки. Масштабирование делаешь через SinC. 


После метрики в обоих случаях отсекаешь по порогу лишнее.
Далее второй проход. Перебираем положение X0 и масштаб M0, но на этот раз уже берём эталон.
В качестве метрики используем НС. На вход которой подаем номер участка из эталона и его положение относительно X0 и масштаб относительно M0. И таких 2*k признаков попавших в участок X0+L*M0 где L - длина шаблона. 
Если на этом участке несколько признаков, то выбираем самые сильные.
2*k потому что у нас одни признаки во временной области другие в частотной. 

Автор: andreybs 9.12.2012, 15:33
Цитата(Pavia @  8.12.2012,  11:12 Найти цитируемый пост)
В качестве метрики сравнение я бы взял MSE. 


MSE - расшифруйте, пожалуйста. 

Цитата(Pavia @  8.12.2012,  11:12 Найти цитируемый пост)
Для соблюдения подобия перебираешь начальное положение куска и масштаб. Масштабировать советую при помощи оператора линейной интерполяции(Ланцош ак SinC негодится). 


Допустим есть эталон {А;В}. Сравниваем его с {A1;X;B1}. Допустим A1=k*A, B1=k*B, X=(A1+B2)/2. Наблюдаем подобие с лин.коэф. k по амплитуде и лин.коэф. 3/2 по времени. 
Перебираем {0;A/A1}, {0;A/X}, {0;A/B1}, {1;B/X}, {1;B/B1}. A/A1 и B/B1 имеют одинаковый масштаб для точек 0 и 1, т.е. они "совпали". 

Цитата(Pavia @  8.12.2012,  11:12 Найти цитируемый пост)
В частотной области всё по другому. В качестве метрике корреляция по Писанину. 
Перебираешь разные временные участки. 


Для сравнения по амплитуде-частоте, считаем корреляцию по {А;В} и сравниваем ее с {A1;X}, {X;B1}, {A1;X;B1}.

Я правильно понял идею? 

Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)