Я обрабатываю временные метки 1 Гц (переменный «timestamp_1hz») из регистратора, который не регистрируется ровно в одно и то же время каждую секунду (разница варьируется от 0.984 до 1.094, но иногда 0,5 или несколько секунд, если логгер отрывается). Набор данных 1 Гц используется для создания 10-минутного усредненного набора данных, и каждый 10-минутный интервал должен иметь 600 записей. Поскольку регистратор не регистрируется ровно в одно и то же время каждую секунду, метка времени медленно перемещается по отметке 1 секунда. Проблемы возникают, когда метка времени пересекает отметку 0, а также отметку 0,5.Обработка временной метки Мозговой инструмент
Я пробовал различные способы предварительной обработки временных меток. Временные метки с интервалом около 1 секунды должны считаться действительными. Несколько примеров:
% simple
% this screws up around half second and full second values
rawseconds = raw_1hz_new(:,6)+(raw_1hz_new(:,7)./1000);
rawsecondstest = rawseconds;
rawsecondstest(:,1) = floor(rawseconds(:,1))+ rawseconds(1,1);
% more complicated
% this screws up if there is missing data, then the issue compounds because k+1 timestamp is dependent on k timestamp
rawseconds = raw_1hz_new(:,6)+(raw_1hz_new(:,7)./1000);
A = diff(rawseconds);
numcheck = rawseconds(1,1);
integ = floor(numcheck);
fract = numcheck-integ;
if fract>0.5
rawseconds(1,1) = rawseconds(1,1)-0.5;
end
for k=2:length(rawseconds)
rawsecondstest(k,1) = rawsecondstest(k-1,1)+round(A(k-1,1));
end
Я хотел бы предварительно обработать метки времени, а затем сравнить его с прилежащей 1Гц метку времени с использованием «пересекаются», чтобы найти недостающие, повторяющиеся и т.д. данные, такие как это:
% pull out the time stamp (round to 1hz and convert to serial number)
timestamp_1hz=round((datenum(raw_1hz_new(:,[1:6])))*86400)/86400;
% calculate new start time and end time to find contig time
starttime=min(timestamp_1hz);
endtime=max(timestamp_1hz);
% determine the contig time
contigtime=round([floor(mean([starttime endtime])):1/86400:ceil(mean([starttime endtime]))-1/86400]'*86400)/86400;
% find indices where logger time stamp matches real time and puts
% the indices of a and b
clear Ia Ib Ic Id
[~,Ia,Ib]=intersect(timestamp_1hz,contigtime);
% find indices where there is a value in real time that is not in
% logger time
[~,Ic] = setdiff(contigtime,timestamp_1hz);
% finds the indices that are unique
[~,Id] = unique(timestamp_1hz);
Вы можете загрузить 10 дней с raw_1hz_new временных меток here. Любая помощь или советы будут высоко оценены!
Если вы не можете записать 600 записей, не считаете ли вы, что недостающие данные немного неискренны. Если вы не возражаете против поддельных данных, чем предварительно обрабатываете данные, которые у вас есть (<600), и используйте среднее значение для заполнения ваших поддельных данных. –
Я не притворяюсь, я просто натыкаюсь на достоверные данные примерно через 1 секунду между интервалами, чтобы он работал с функцией пересечения. Я не заинтересован в заполнении отверстий. – user1854628
Я не могу просмотреть ссылку с отметками времени; он говорит: «К сожалению, в настоящее время мы не можем создать представление документа. Повторите попытку позже». – Suedocode