Сравнение аналогичных сигналов датчиков - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть набор образцов сигналов датчиков (содержащий примерно 10 показаний, которые оба содержат показания осей X, Y и Z), которые я использую в качестве обучающего набора, назовем этот набор (s1).Программа постоянно выводит сигналы датчиков каждые 2 секунды, которые мы будем называть (h1).Теперь, что я хочу сделать, это использовать h1 (который содержит одно чтение сигнала) и сравнить его с обучающим набором сигналов (s1).

Таким образом, из (s1) сигнал, который наиболее похож на (h1) (сильное сходство, такое как пик сигнала, пиковый уровень и т. Д.).

Может ли это быть легко сделать с помощью нейронных сетей?Есть ли что-то особенное, что нужно учитывать при работе с сигналами?преобразование Фурье?

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

Ниже приведен пример сигнала, с которым я имею дело.

Date= 1/1/2012 (dd:mm:yyyy) Time= 1:45:2 (hh:mm:ss)
Speed Bump Recording Started at 1:45:2 (hh:mm:ss)
X-Value = -0.141905, Y-Value = 8.436457, Z-Value = 5.019961, Timestamp(milliseconds) = 75002
X-Value = -0.218546, Y-Value = 8.244855, Z-Value = 4.828360, Timestamp(milliseconds) = 75201
X-Value = 0.317939, Y-Value = 8.781339, Z-Value = 4.866680, Timestamp(milliseconds) = 75401
X-Value = 0.088017, Y-Value = 8.014933, Z-Value = 4.981641, Timestamp(milliseconds) = 75602
X-Value = 0.011376, Y-Value = 7.976613, Z-Value = 5.633086, Timestamp(milliseconds) = 75802
X-Value = 0.164658, Y-Value = 8.934620, Z-Value = 4.790039, Timestamp(milliseconds) = 76001
X-Value = -0.141905, Y-Value = 8.474776, Z-Value = 3.985312, Timestamp(milliseconds) = 76202
X-Value = 0.432900, Y-Value = 8.781339, Z-Value = 4.636758, Timestamp(milliseconds) = 76402
X-Value = -0.141905, Y-Value = 9.471105, Z-Value = 4.138594, Timestamp(milliseconds) = 76601
X-Value = 0.202978, Y-Value = 8.704699, Z-Value = 3.525469, Timestamp(milliseconds) = 76800
X-Value = 0.394579, Y-Value = 7.440128, Z-Value = 3.640430, Timestamp(milliseconds) = 77001
X-Value = -0.448467, Y-Value = 6.903644, Z-Value = 4.023633, Timestamp(milliseconds) = 77203
X-Value = -0.640069, Y-Value = 11.195518, Z-Value = 9.005274, Timestamp(milliseconds) = 77401
X-Value = -0.065264, Y-Value = 5.945636, Z-Value = 4.176914, Timestamp(milliseconds) = 77604
X-Value = -0.755030, Y-Value = 9.317823, Z-Value = 4.675078, Timestamp(milliseconds) = 77801
X-Value = -0.563428, Y-Value = 8.896300, Z-Value = 5.824687, Timestamp(milliseconds) = 78003
X-Value = -0.410147, Y-Value = 8.014933, Z-Value = 5.211563, Timestamp(milliseconds) = 78201
X-Value = -0.371827, Y-Value = 8.168214, Z-Value = 5.173242, Timestamp(milliseconds) = 78401
Speed Bump Recording Stopped at 1:45:6 (hh:mm:ss)

1 Ответ

1 голос
/ 01 февраля 2012

Не уверен, что я точно понимаю вопрос. Если вы ищете единственную запись в s1, которая ближе всего к одному чтению h1, и каждый из компонентов X, Y и Z одинаково важен, тогда вы можете

  • просмотр списка элементов в s1,
  • вычислить значение ошибки для каждого и
  • выберите один с наименьшей ошибкой.

Если sx, sy, sz являются компонентами элемента из s1, а hx, hy, hz - компонентами h1, то вы можете вычислить:

error = (sx - hx)^2 + (sy - hy)^2 + (sz - hz)^2

Геометрически вы можете интерпретировать это как нахождение элемента в s1, который был бы наиболее близок к показанию h1, если бы вы построили все точки в трехмерном пространстве. Значение error представляет собой квадрат расстояния между элементом в s и h.


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

Если первая последовательность содержит точки A1, A2, A3, ..., An
И вторая последовательность содержит точки B1, B2, B3, ..., Bn
И каждая точка содержит компоненты x, y и z, а затем вычислите:

C(A,B) = [  (A1x * B1x) + (A1y * B1y) + (A1z + B1z) 
          + (A2x * B2x) + (A2y * B2y) + (A2z * B2z)
          ...
          + (Anx * Bnx) + (Any * Bny) + (Anz * Bnz)
         ] / n
...