Как синхронизировать данные датчика

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

Можно ли использовать для этого небольшой чип спутникового времени, чтобы все штампы поступали из одного источника? Или как бы вы решили это?

Ответы (1)

Для независимых точных часов вы можете попробовать GPS-приемники или длинноволновые приемники времени, такие как WWVB.

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

Подробнее о втором решении:

В каждый регистратор данных можно поместить достаточно приличное измерение относительного времени. Например, «часовые» резонаторы с частотой 32768 Гц дешевы, маломощны и доступны с хорошей точностью. Вы можете легко получить один хороший до 20 частей на миллион.

Допустим, данные выгружаются с каждого блока примерно раз в месяц. В промежутках между загрузками устройство ставит временные метки для каждой записи данных по своим локальным часам. Эти метки времени не синхронизированы с реальным временем, но имеют накапливающуюся ошибку максимум 20 ppm по отношению друг к другу. 20 частей на миллион в течение одного месяца составляет около одной минуты.

Компьютер, получающий загруженные данные, знает реальное время и текущее время регистратора данных и, следовательно, может определить, как работать в обратном направлении, чтобы найти реальное время каждой из записей данных с ошибкой до 20 ppm при обратном направлении. Например, самые старые данные месячной давности известны с точностью до 1 минуты. Данные за полмесяца назад до полминуты и т. д. Если ошибка в 1 минуту приемлема, то нужно сделать немного больше.

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

Еще лучше то, что ошибка теперь не зависит от абсолютной ошибки локальных часов. Ошибки времени зависят только от сдвигов локальной тактовой частоты. Поскольку вы знаете реальное время в начале и в конце загрузки данных, вы можете определить, насколько быстро или медленно работали локальные часы в это время, и учесть это. Например, если локальный осциллятор был точно на 20 частей на миллион все время, то метки времени будут показывать период на 1 минуту больше, чем известное время между началом и концом данных. Если вы линейно пропорционируете ошибку метки времени, чтобы концы совпадали (поскольку они известны), данные в середине будут точными, пока локальный осциллятор не изменился. В середине месяца вы вычитаете примерно полминуты и т. д.

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

Ваш второй абзац — простое и эффективное решение. Было бы очень здорово, если бы вы могли расширить свое описание, чтобы за ним мог следить более новичок. Особенно часть о том, «если он знает абсолютное время последней загрузки ...» Тем не менее, +1.
@David: Детали добавлены.
Прохладный. Я бы снова +1 вам, но, конечно, это не позволит мне.