Извлечь данные акселерометра из файла Excel в MATLAB

Я попытался найти, но не смог решить мою конкретную проблему. Я должен упомянуть, что я довольно новичок в MATLAB, так что это может быть что-то очевидное, но ускользнуло из моей головы.

У меня есть файл Excel с записями акселерометра 5 событий с некоторым промежутком между ними. Эти события происходят время от времени (то есть строки), которые я должен указать, например, 120:250, 280:390, 430:943, и так далее, и так далее.

То, что я хотел бы сделать, это иметь возможность циклически проходить и извлекать необходимые данные и хранить их в переменных, так что каждое событие будет иметь свой собственный "раздел", если хотите, и каждый "раздел" будет содержать свой собственный набор подразделов с данными акселерометра X, Y, Z.

Моя текущая настройка - ручная, и выглядит это так:

X1 = xlsread('location.xlsx','sheet1','d110:d367');
X2 = xlsread('location.xlsx','sheet1','d367:d631');
X3 = xlsread('location.xlsx','sheet1','d631:d891');
X4 = xlsread('location.xlsx','sheet1','d891:d1134');
X5 = xlsread('location.xlsx','sheet1','d1134:d1361');

Y1 = xlsread('location.xlsx','sheet1','e110:e367');
Y2 = xlsread('location.xlsx','sheet1','e367:e631');
Y3 = xlsread('location.xlsx','sheet1','e631:e891');
Y4 = xlsread('location.xlsx','sheet1','E891:e1134');
Y5 = xlsread('location.xlsx','sheet1','e1134:e1361');

Z1 = xlsread('location.xlsx','sheet1','f110:f367');
Z2 = xlsread('location.xlsx','sheet1','f367:f631');
Z3 = xlsread('location.xlsx','sheet1','f631:f891');
Z4 = xlsread('location.xlsx','sheet1','f891:f1134');
Z5 = xlsread('location.xlsx','sheet1','f1134:f1361');

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

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

1 ответ

Решение

Запуск XLSREAD для каждой переменной не будет оптимальным для производительности. Эта функция использует интерфейс COM (по крайней мере, под Windows) и медленно. Если данные не очень большие и могут поместиться в памяти, лучше сразу прочитать весь лист во временную переменную, а затем отсортировать значения в переменные.

Другой совет - не использовать X1, X2 и т. Д. У вас будут проблемы, если вы захотите использовать эти переменные в цикле. Если они имеют разную длину, создайте массив ячеек, чтобы они стали X{1}, X{2} и т. Д.

Итак, сначала прочитайте весь файл:

data = xlsread('location.xlsx','sheet1','D:F');

Если вы введете все числовые данные, вы получите их в data матрица.

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

index = {120:250, 280:390, 430:943};
for ii = 1:numel(index)
    X{ii} = data(index{ii},1);
    Y{ii} = data(index{ii},2);
    Z{ii} = data(index{ii},3);
end
Другие вопросы по тегам