повторная синхронизация

Передискретизируйте или агрегированные данные в расписании и твердость дублирующиеся или неправильные времена

Синтаксис

TT2 = retime(TT1,newTimeStep,method)
TT2 = retime(TT1,'regular',method,'TimeStep',dt)
TT2 = retime(TT1,'regular',method,'SampleRate',Fs)
TT2 = retime(TT1,newTimes,method)
TT2 = retime(TT1,newTimeStep)
TT2 = retime(TT1,'regular','TimeStep',dt)
TT2 = retime(TT1,'regular','SampleRate',Fs)
TT2 = retime(TT1,newTimes)
TT2 = retime(___,Name,Value)

Описание

пример

TT2 = retime(TT1,newTimeStep,method) возвращает расписание, которое содержит переменные от TT1 и времена строки, которые расположены с равными интервалами временным шагом newTimeStep. Функция retime передискретизирует или агрегировала данные в переменных TT1 с помощью функции, заданной method. Можно использовать retime для:

  • Интерполируйте значения данных от TT1 в разное время.

  • Агрегированные данные во временные интервалы (например, чтобы создать расписание, содержащее ежеквартальный, означает от ежемесячных данных).

  • Удалите строки из TT1, которые имеют времена дублирующейся строки.

  • Превратите неправильное расписание в обычное расписание, поскольку newTimeStep задает регулярные времена строки.

Входной параметр newTimeStep является вектором символов, или представьте в виде строки, который задает предопределенный временной шаг. Например, когда newTimeStep является 'daily', и method является 'mean', затем TT2 содержит среднесуточные значения данных из TT1.

Первый раз строки TT2 находится на временном шаге перед самым ранним временем строки от TT1. Времена строки в TT2 покрывают область значений времен строки от TT1. Однако TT2 не может включать ни одно из фактических времен строки от TT1, поскольку TT1 не может иметь никаких времен строки, которые падают на любое из регулярных времен строки TT2.

Чтобы интерполировать или заполнить значения в TT2 с помощью различных методов для различных переменных, задайте свойство VariableContinuity TT1. Для получения дополнительной информации смотрите, Повторно синхронизируют и Синхронизируют Переменные Расписания Используя Различные Методы.

Чтобы передискретизировать или агрегированные данные из нескольких расписаний, смотрите synchronize.

пример

TT2 = retime(TT1,'regular',method,'TimeStep',dt) вычисляет расположенные с равными интервалами времена строки с помощью временного шага dt. Входной параметр dt является скалярной длительностью или календарной длительностью, задавая временной шаг любого размера. Времена строки TT2 порождают линейную оболочку столбцов времен строки TT1.

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

пример

TT2 = retime(TT1,'regular',method,'SampleRate',Fs) вычисляет расположенные с равными интервалами времена строки с помощью частоты дискретизации Fs. Входной параметр Fs является положительным числовым скаляром, который задает количество выборок в секунду (Гц).

пример

TT2 = retime(TT1,newTimes,method) настраивает данные о переменных расписания к временному вектору newTimes, с помощью метода, заданного method. Временной вектор newTimes может быть неправильным, но это должно быть отсортированным datetime или вектором длительности и содержать уникальные значения. Времена в newTimes становятся временами строки TT2.

пример

TT2 = retime(TT1,newTimeStep) настраивает данные о расписании с помощью метода 'fillwithmissing'. TT2 имеет индикаторы недостающих данных везде, где TT2 имеет время строки, которое не совпадает ни с каким временем строки в TT1.

Если TT1 имеет строки с временами дублирующейся строки, и TT2 имеет времена строки, которые совпадают с копиями, то TT2 содержит первую строку от каждой группы строк в TT1 с временами дублирующейся строки то соответствие.

TT2 = retime(TT1,'regular','TimeStep',dt) вычисляет расположенные с равными интервалами времена строки с помощью временного шага dt и, при необходимости, вставляет индикаторы недостающих данных.

TT2 = retime(TT1,'regular','SampleRate',Fs) вычисляет расположенные с равными интервалами времена строки с помощью частоты дискретизации Fs и, при необходимости, вставляет индикаторы недостающих данных.

TT2 = retime(TT1,newTimes) возвращает расписание, содержащее индикаторы недостающих данных везде, где newTimes не совпадает с временами строки в TT1.

пример

TT2 = retime(___,Name,Value) настраивает данные о расписании с помощью дополнительных опций, заданных одной или несколькими парами Name,Value. Можно использовать этот синтаксис с входными параметрами любого из предыдущих синтаксисов.

Примеры

свернуть все

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

Time = datetime({'2015-12-18 07:02:12';'2015-12-18 08:00:47';...
                 '2015-12-18 09:01:37';'2015-12-18 10:03:10';...
                 '2015-12-18 10:59:34'});
Temp = [37.3;41.9;45.7;42.3;39.8];
Pressure = [30.1;29.9;30.03;29.9;29.8];
TT = timetable(Time,Temp,Pressure)
TT=5×3 timetable
            Time            Temp    Pressure
    ____________________    ____    ________

    18-Dec-2015 07:02:12    37.3      30.1  
    18-Dec-2015 08:00:47    41.9      29.9  
    18-Dec-2015 09:01:37    45.7     30.03  
    18-Dec-2015 10:03:10    42.3      29.9  
    18-Dec-2015 10:59:34    39.8      29.8  

Чтобы передискретизировать с интерполяцией кубическим сплайном, задайте 'spline'.

TT2 = retime(TT,'hourly','spline')
TT2=5×3 timetable
            Time             Temp     Pressure
    ____________________    ______    ________

    18-Dec-2015 07:00:00    37.228     30.124 
    18-Dec-2015 08:00:00    41.824     29.899 
    18-Dec-2015 09:00:00    45.694     30.029 
    18-Dec-2015 10:00:00    42.552      29.91 
    18-Dec-2015 11:00:00    39.808       29.8 

Создайте расписание с температурными и импульсными показаниями, снимаемыми каждые пятнадцать минут.

Time = [minutes(0):minutes(15):minutes(105)]';
Temp = [98;97.5;97.9;98.1;97.9;98;98.3;97.8];
Pulse = [80;75;73;68;69;65;72;71];
TT = timetable(Time,Temp,Pulse)
TT=8×3 timetable
     Time      Temp    Pulse
    _______    ____    _____

    0 min        98     80  
    15 min     97.5     75  
    30 min     97.9     73  
    45 min     98.1     68  
    60 min     97.9     69  
    75 min       98     65  
    90 min     98.3     72  
    105 min    97.8     71  

Вычислите среднее значение для каждого перечитывания по почасовым временным интервалам. Когда вы агрегированные данные в зависимости от времени интервалы, времена строки выходного расписания являются левыми краями временных интервалов.

TT2 = retime(TT,'hourly','mean')
TT2=2×3 timetable
     Time      Temp     Pulse
    ______    ______    _____

    0 min     97.875       74
    60 min        98    69.25

Создайте расписание, которое содержит времена, температуру и показания давления, снятые приблизительно в получасовой метке, но с одним измерением с 9:00, отсутствующим.

Time = datetime({'2015-12-18 07:29:53';'2015-12-18 08:00:00';...
                 '2015-12-18 08:31:02';'2015-12-18 09:30:00'});
Temp = [37.3;41.9;45.7;39.8];
Pressure = [30.1;29.9;30.03;29.8];
TT1 = timetable(Time,Temp,Pressure)
TT1=4×3 timetable
            Time            Temp    Pressure
    ____________________    ____    ________

    18-Dec-2015 07:29:53    37.3      30.1  
    18-Dec-2015 08:00:00    41.9      29.9  
    18-Dec-2015 08:31:02    45.7     30.03  
    18-Dec-2015 09:30:00    39.8      29.8  

Задайте 30-минутный временной шаг. С 30 минут не предопределенный временной шаг, необходимо задать его как значение длительности, с помощью аргумента пары "имя-значение" 'TimeStep'. Передискретизируйте данные из TT1 с помощью линейной интерполяции.

dt = minutes(30);
TT2 = retime(TT1,'regular','linear','TimeStep',dt)
TT2=6×3 timetable
            Time             Temp     Pressure
    ____________________    ______    ________

    18-Dec-2015 07:00:00    32.736     30.298 
    18-Dec-2015 07:30:00    37.318     30.099 
    18-Dec-2015 08:00:00      41.9       29.9 
    18-Dec-2015 08:30:00    45.573     30.026 
    18-Dec-2015 09:00:00    42.802     29.917 
    18-Dec-2015 09:30:00      39.8       29.8 

Создайте расписание с помощью вектор-столбцов данных. Времена строки между 10 и 50 миллисекундами.

Intensity = [100 98.7 95.2 101.4 99.1]';
Time = milliseconds([11 20 34 40.3 49.9])';
TT1 = timetable(Time,Intensity)
TT1=5×2 timetable
       Time       Intensity
    __________    _________

    0.011 sec         100  
    0.02 sec         98.7  
    0.034 sec        95.2  
    0.0403 sec      101.4  
    0.0499 sec       99.1  

Передискретизируйте данные в TT1 с помощью частоты дискретизации 100 Гц.

TT2 = retime(TT1,'regular','linear','SampleRate',100)
TT2=5×2 timetable
      Time      Intensity
    ________    _________

    0.01 sec     100.14  
    0.02 sec       98.7  
    0.03 sec       96.2  
    0.04 sec      101.1  
    0.05 sec     99.076  

Создайте расписание, которое содержит времена, температуру и показания давления.

Time = datetime({'2015-12-18 07:29:53';'2015-12-18 08:00:00';...
                 '2015-12-18 08:31:02';'2015-12-18 09:30:00'});
Temp = [37.3;41.9;45.7;39.8];
Pressure = [30.1;29.9;30.03;29.8];
TT1 = timetable(Time,Temp,Pressure)
TT1=4×3 timetable
            Time            Temp    Pressure
    ____________________    ____    ________

    18-Dec-2015 07:29:53    37.3      30.1  
    18-Dec-2015 08:00:00    41.9      29.9  
    18-Dec-2015 08:31:02    45.7     30.03  
    18-Dec-2015 09:30:00    39.8      29.8  

Создайте временной вектор и интерполируйте данные о расписании в те времена в векторе. Этот временной вектор запускается в 8:00. Если бы вы вместо этого используете аргумент пары "имя-значение" 'TimeStep', то выходное расписание запустилось бы в 7:00. Одна причина использовать временной вектор состоит в том, чтобы гарантировать, что выходное расписание запускается, и концы, с временами, которые вы задаете.

newTimes = [datetime('2015-12-18 08:00:00'):minutes(30):datetime('2015-12-18 09:30:00')];
TT2 = retime(TT1,newTimes,'linear')
TT2=4×3 timetable
            Time             Temp     Pressure
    ____________________    ______    ________

    18-Dec-2015 08:00:00      41.9       29.9 
    18-Dec-2015 08:30:00    45.573     30.026 
    18-Dec-2015 09:00:00    42.802     29.917 
    18-Dec-2015 09:30:00      39.8       29.8 

Создайте расписание, которое содержит времена и измерения скорости ветра и направления.

Time = datetime({'2015-12-18 07:00:00';'2015-12-18 08:03:47';...
                 '2015-12-18 09:00:00';'2015-12-18 10:00:00';...
                 '2015-12-18 10:59:34'});
WindSpeed = [13.4;6.5;7.3;8.5;2.3];
WindDirection = categorical({'NE';'N';'NE';'NW';'W'});
TT1 = timetable(Time,WindSpeed,WindDirection)
TT1=5×3 timetable
            Time            WindSpeed    WindDirection
    ____________________    _________    _____________

    18-Dec-2015 07:00:00      13.4            NE      
    18-Dec-2015 08:03:47       6.5            N       
    18-Dec-2015 09:00:00       7.3            NE      
    18-Dec-2015 10:00:00       8.5            NW      
    18-Dec-2015 10:59:34       2.3            W       

Настройте данные к почасовому временному вектору. Вставьте индикаторы недостающих данных в TT2, где TT1 не имеет данных по почасовому временному вектору.

TT2 = retime(TT1,'hourly')
TT2=5×3 timetable
            Time            WindSpeed    WindDirection
    ____________________    _________    _____________

    18-Dec-2015 07:00:00      13.4        NE          
    18-Dec-2015 08:00:00       NaN        <undefined> 
    18-Dec-2015 09:00:00       7.3        NE          
    18-Dec-2015 10:00:00       8.5        NW          
    18-Dec-2015 11:00:00       NaN        <undefined> 

Загрузите расписание. Настройте переменные расписания с помощью функции retime и различных методов для различных переменных.

Загрузите расписание с температурой, скоростью ветра и измерениями ливня для Бостона.

load bostonTT
Boston
Boston=6×4 timetable
           Time            Temp    WindSpeed    Rain
    ___________________    ____    _________    ____

    2016-06-09 06:03:00    59.5       0.1       0.05
    2016-06-09 12:00:23      63       2.3       0.08
    2016-06-09 18:02:57    61.7       3.1       0.13
    2016-06-10 06:01:47    55.4       5.7       0.15
    2016-06-10 12:06:00    62.3       2.6       0.87
    2016-06-10 18:02:57    58.8       6.2       0.33

Настройте данные, чтобы произвести среднесуточные температуры и скорости ветра и ежедневные суммы ливня. retime применяет тот же метод ко всем переменным расписания. Чтобы применить различные методы, индексируйте в расписание, чтобы выбрать переменные и вызвать retime для каждого метода, который вы используете.

BOS = Boston(:,{'Temp','WindSpeed'});
TT1 = retime(BOS,'daily','mean')
TT1=2×3 timetable
           Time             Temp     WindSpeed
    ___________________    ______    _________

    2016-06-09 00:00:00      61.4     1.8333  
    2016-06-10 00:00:00    58.833     4.8333  

BOS = Boston(:,'Rain');
TT2 = retime(BOS,'daily','sum')
TT2=2×2 timetable
           Time            Rain
    ___________________    ____

    2016-06-09 00:00:00    0.26
    2016-06-10 00:00:00    1.35

Чтобы объединить все результаты в одном расписании, конкатенируйте TT1 и TT2.

TT = [TT1 TT2]
TT=2×4 timetable
           Time             Temp     WindSpeed    Rain
    ___________________    ______    _________    ____

    2016-06-09 00:00:00      61.4     1.8333      0.26
    2016-06-10 00:00:00    58.833     4.8333      1.35

Данные о расписании интервала в почасовые интервалы. Задайте правые края, или время окончания, временных интервалов как времена строки. По умолчанию, левые края, или запускают времена временных интервалов, времена строки.

Создайте расписание с температурными и импульсными показаниями, снятыми в интервалах пятнадцати минут.

Time = [minutes(15):minutes(15):minutes(105)]';
Temp = [97.5;97.9;98.1;97.9;98;98.3;97.8];
Pulse = [75;73;68;69;65;72;71];
TT = timetable(Time,Temp,Pulse)
TT=7×3 timetable
     Time      Temp    Pulse
    _______    ____    _____

    15 min     97.5     75  
    30 min     97.9     73  
    45 min     98.1     68  
    60 min     97.9     69  
    75 min       98     65  
    90 min     98.3     72  
    105 min    97.8     71  

Вычислите среднее значение для каждого перечитывания по почасовым временным интервалам. Укажите, что времена строки выходного расписания являются правыми краями временных интервалов. Поскольку правые края включены, чтение в 60 минут включено в первый временной интервал.

TT2 = retime(TT,'hourly','mean','IncludedEdge','right')
TT2=2×3 timetable
     Time       Temp     Pulse 
    _______    ______    ______

    60 min      97.85     71.25
    120 min    98.033    69.333

Вычислите средние значения с левыми краями как времена строки. Средние значения отличаются от тех в TT2, потому что чтение в 60 минут находится теперь в интервале второго раза.

TT3 = retime(TT,'hourly','mean')
TT3=2×3 timetable
     Time      Temp     Pulse
    ______    ______    _____

    0 min     97.833       72
    60 min        98    69.25

Входные параметры

свернуть все

Введите расписание.

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

Временной шаг

Описание

'yearly'

Один год

'quarterly'

Одна четверть

'monthly'

Один месяц

'weekly'

Одна неделя

'daily'

Однажды

'hourly'

Один час

'minutely'

Одна минута

'secondly'

Одна секунда

Временной шаг любого размера, заданного как скаляр datetime или скаляр длительности.

Типы данных: datetime | duration | calendarDuration

Частота дискретизации, заданная в виде положительного числа. Fs задает количество выборок в секунду (Гц).

Новый временной вектор, заданный как вектор datetime или вектор длительности. Новый временной вектор должен быть вектор-столбцом. newTimes может иметь различное количество строк, чем TT1.

Метод для корректировки данных о расписании, заданных как вектор символов, представляет в виде строки скаляр или указатель на функцию. Можно использовать любой из перечисленных методов, перечисленных, чтобы настроить данные из TT1.

Методы заполнения

Скопируйте данные из строк TT1, когда времена строки TT2 будут совпадать с временами строки TT1. Затем заполните остающиеся строки TT2 с индикаторами недостающих данных.

Чтобы заполнить остающиеся строки с константой вместо индикатора недостающих данных, задайте method как 'fillwithconstant' и используйте аргумент пары "имя-значение" 'Constant'.

Метод

Описание

'fillwithmissing'

Заполните разрывы с индикаторами недостающих данных (например, NaN для числовых переменных).

'fillwithconstant'

Заполните разрывы со значением аргумента пары "имя-значение" 'Constant'. Значением по умолчанию является 0.

Самые близкие соседние методы

Скопируйте данные из строк TT1 к строкам TT2, времена строки которого являются самым близким соответствием, согласно заданному методу. TT1 должен быть отсортирован по его временам строки.

Метод

Описание

'previous'

Скопируйте данные от самого близкого предыдущего соседа во входном расписании, происхождение конца вектора времен строки. Если существуют времена дублирующейся строки, то 'previous' указывает на последнюю из копий.

'next'

Скопируйте данные от самого близкого следующего соседа во входном расписании, происхождение начала вектора времен строки. Если существуют времена дублирующейся строки, то 'next' указывает на первую из копий.

'nearest'

Скопируйте данные от самого близкого соседа во входном расписании.

Методы интерполяции

Интерполируйте значения данных в TT2 от значений данных в соседних строках TT1. Входное расписание должно иметь времена строки, которые сортируются и уникальны. Чтобы управлять, как данные экстраполируются вне первых и последних времен строки TT1, используйте аргумент пары "имя-значение" 'EndValues'.

Метод

Описание

'linear'

Используйте линейную интерполяцию.

'spline'

Используйте кусочную интерполяцию кубическим сплайном.

'pchip'

Используйте сохраняющую форму кусочную кубичную интерполяцию.

'makima'

Используйте измененного Акима кубическая интерполяция Эрмита.

Методы агрегации

Агрегированные данные из строк TT1 в зависимости от времени интервалы заданы временами строки TT2. Каждый раз строки TT2 является левым краем временного интервала со следующим разом строки подряд, будучи правым краем. По умолчанию левые края включены во временные интервалы. Чтобы управлять, включены ли левые или правильные ребра интервала во временные интервалы, используйте аргумент пары "имя-значение" 'IncludedEdge'.

Если вы задаете временной вектор newTimes, то newTimes должен быть отсортирован в порядке возрастания.

Все перечисленные методы не используют NaN s, NaT s и другие индикаторы недостающих данных, за исключением func. Чтобы включать индикаторы недостающих данных, задайте func как указатель на функцию к функции, которая включает их при агрегации данных.

Метод

Описание

'sum'

Суммируйте значения в каждом временном интервале.

'mean'

Вычислите среднее значение значений в каждом временном интервале.

'prod'

Вычислите продукт значений в каждом временном интервале.

'min'

Вычислите минимум значений в каждом временном интервале.

'max'

Вычислите максимум значений в каждом временном интервале.

'count'

Считайте количество значений в каждом временном интервале.

'firstvalue'

Используйте первое значение в каждом временном интервале.

'lastvalue'

Используйте последнее значение в каждом временном интервале.

@func

Используйте функцию, заданную указателем на функцию (например, @std, чтобы вычислить стандартное отклонение для значений в каждом временном интервале). func должен возвратить выходной аргумент, который является скаляром или вектором - строкой, и должен принять пустые входные параметры.

Метод по умолчанию

Метод по умолчанию эквивалентен отъезду незаданного method.

Метод

Описание

'default' (значение по умолчанию)

Или заполните разрывы с индикаторами недостающих данных или используйте методы на переменную, если они заданы как свойство VariableContinuity входного расписания.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: TT2 = retime(TT1,newTimes,'Constant',-1) создает расписание TT2 и присваивает значение -1 элементам в строках TT2 с временами строки, которые не совпадают с временами строки от TT1.

Значение для заполнения разрывает, когда методом является 'fillwithconstant', заданный как пара, разделенная запятой, состоящая из 'Constant' и массива. Значением по умолчанию является 0. Тип данных значения, заданного 'Constant', должен быть совместим с типами данных переменных расписания.

Пример: TT2 = retime(TT1,'hourly','fillwithconstant','Constant','NONE') заполняет разрывы в TT2 с вектором символов 'NONE', когда все переменные в TT2 содержат текст.

Метод для экстраполяции при использовании метода интерполяции, заданного как пара, разделенная запятой, состоящая из 'EndValues' и или 'extrap' или массив. Если вы задаете массив, то его тип данных должен быть совместим со всеми переменными расписания.

Метод

Описание

'extrap' (значение по умолчанию)

Экстраполируйте использование метода, заданного входным параметром method

массив

Экстраполируйте путем заполнения разрывов вне области значений входных времен строки с массивом

Пример: TT2 = retime(TT1,'daily','previous','EndValues',1000) заполняет разрывы в TT2 с предыдущими значениями строки, где TT2 имеет времена строки в области значений времен строки от TT1, и со значением 1000, где TT2 имеет времена строки вне той области значений.

Ребра, чтобы включать в каждый временной интервал, заданный как пара, разделенная запятой, состоящая из 'IncludedEdge' и или 'left' или 'right'. Каждый раз строки TT2 является левым краем временного интервала со следующим разом строки подряд, будучи правым краем.

Ребра, чтобы включать

Описание

'left' (значение по умолчанию)

Все интервалы включают левое ребро интервала, за исключением последнего интервала, который включает оба ребра

'right'

Все интервалы включают правильное ребро интервала, за исключением первого интервала, который включает оба ребра

Если вы задаете 'left', то временные интервалы включают левые края за исключением последнего интервала, который включает оба ребра. Если вы задаете 'right', то временные интервалы включают правые края за исключением первого интервала, который включает оба ребра.

Пример: TT2 = retime(TT1,'hourly','mean','IncludedEdge','right') включает правильное ребро интервала каждого временного интервала.

Вопросы совместимости

развернуть все

Не рекомендуемый запуск в R2018b

Расширенные возможности

Введенный в R2017b

Для просмотра документации необходимо авторизоваться на сайте