Как заменить временные ряды MATLAB и синхронизировать функции в Octave? - PullRequest
0 голосов
/ 15 января 2020

У меня есть скрипт MATLAB, который я хотел бы запустить в Octave. Но оказывается, что функции timeseries и synchronize из MATLAB еще не реализованы в Octave. Поэтому мой вопрос: есть ли способ express или заменить эти функции в Octave. Для понимания у меня есть два текстовых файла с разной длиной строки, которые я хочу синхронизировать в один текстовый файл с одинаковой длиной строки с течением времени. Содержимое текстовых файлов:

Текстовый файл 1:

1-й столбец содержит расстояние

2-й столбец содержит время

Текстовый файл 2:

1-й столбец содержит угол

2-й столбец содержит время

Вот часть моего кода, которую я использую в MATLAB для синхронизации файлов.

ts1 = timeseries(distance,timed);
ts2 = timeseries(angle,timea);
[ts1 ts2] = synchronize(ts1,ts2,'union');
distance = ts1.Data;
angle = ts2.Data;

Заранее благодарим за помощь.

edit:

Вот несколько примеров файлов.

расстояние ввода

угол поворота на входе

на выходе

1 Ответ

1 голос
/ 17 января 2020

Кажется, что функция синхронизации создает общие временные ряды из двух отдельных (здесь, в частности, через их объединение), а затем использует интерполяцию (здесь «линейная»), чтобы найти интерполированные значения для расстояния и угла в общих точках времени.

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

Примечание. Сначала мне пришлось предварительно обработать входные файлы, чтобы заменить ' десятичные запятые »с точками, а затем« табуляции »с запятыми, чтобы сделать их действительными CSV-файлами.

Distance_t = csvread('input_distance.txt', 1, 0);         % skip header row
Rotation_t = csvread('input_rotation_angle.txt', 1, 0);   % skip header row

Common_t   = union( Distance_t(:,2), Rotation_t(:,2) );

InterpolatedDistance = interp1( Distance_t(:,2), Distance_t(:,1), Common_t );
InterpolatedRotation = interp1( Rotation_t(:,2), Rotation_t(:,1), Common_t );

Output = [ InterpolatedRotation, InterpolatedDistance ];
Output = sortrows( Output, -1 );   % sort according to column 1, in descending order
Output = Output(~isna(Output(:,2)), :);   % remove NA entries

(Примечание. Шаг, связанный с удалением записей NA, был необходим, потому что мы мы не указали, что мы хотели экстраполяцию во время шага интерполяции, и некоторые из результирующих значений расстояния будут вне исходного временного диапазона, который в октаве помечен как NA).

...