Я бы порекомендовал использовать SOM (самоорганизующуюся карту) для распознавания образов, поскольку она действительно надежна. Также вас может заинтересовать Som Toolbox для Matlab . Однако, чтобы заставить его изучать волны, пренебрегая их смещениями, вам необходимо внести некоторые изменения в «функцию подобия». Эти изменения сильно повлияют на время обучения ЗВОЛ, но если это не проблема, продолжайте читать.
Для SOM вам нужно будет сэмплировать ваши волны в векторы постоянного размера, скажем:
- sin x -> sin_vector = (a1, a2, a3, ..., aN)
- cos x -> cos_vector = (b1, b2, b3, ..., bN)
Обычно сходство «SOM-векторов» вычисляется с евклидовым расстоянием. Евклидово расстояние этих двух векторов огромно, поскольку они имеют разное смещение. В вашем случае они должны считаться похожими, т.е. расстояние должно быть маленьким. Так что ... если вы не сэмплируете все похожие волны из одной и той же начальной точки, они будут классифицированы в разных классах. Это, вероятно, проблема. Но! Сходство векторов в SOM рассчитывается для того, чтобы найти BMU (наиболее подходящую единицу измерения) из карты и потянуть векторы BMU и его соседства к значениям заданной выборки. Поэтому все, что вам нужно изменить, - это способ сравнения этих векторов и способ вытягивания значений векторов к выборке так, чтобы оба они были «смещены».
Медленное, но работающее решение - сначала найти лучший индекс смещения для каждого вектора. Индекс наилучшего смещения - это тот, который даст наименьшее значение с евклидовым расстоянием для выборки. Наименьшее расстояние, рассчитанное с некоторым узлом сети, будет BMU. Затем векторы BMU и его соседей тянутся к заданной выборке с использованием индекса смещения, рассчитанного для каждого узла непосредственно перед этим. Все остальное должно работать "из коробки".
Это решение относительно медленное, но должно отлично работать. Я бы рекомендовал тщательно изучить концепцию СДЛ, а затем снова прочитать этот пост (и гневные комментарии):)
ПОЖАЛУЙСТА, прокомментируйте если вы знаете какое-то математическое решение, которое будет лучше предыдущего!