| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Временные ряды. Подобие векторов. |
| Автор: 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 потому что у нас одни признаки во временной области другие в частотной. |