2

У меня есть сгенерированный акселерометром шестнадцатеричный файл с отметкой времени, он имеет данные ускорения с трех осей. Данные выглядят так:

C1 EB C1 F9 C1 C6

12:57:39.046:

41 F0 81 FA 41 C6

12:57:39.062:

01 F7 C1 FA 81 C6

12:57:39.078:  

Мне нужно выделить это следующим образом:

C1EB C1F9 C1C6 

41F0 81FA 41C6 

01F7 C1FA 81C6  

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

2 ответа2

2

Если каждая строка файла с именем «measure.txt» выглядит как

C1 EB C1 F9 C1 C6 12:57:39.046:

регулярное выражение может использоваться для извлечения шестнадцатеричных чисел (каждое из которых существует из 4 цифр), удаления пробелов и преобразования числа в десятичное с использованием MATLAB со следующим кодом:

data = importdata('measurement.txt',' ');
data_hex = [];
for m = 1 : size(data,1)
    [start_idx, end_idx, extents, matches, tokens, names, splits] = regexp(data{m,1},'([A-F0-9]{2} [A-F0-9]{2}) ([A-F0-9]{2} [A-F0-9]{2}) ([A-F0-9]{2} [A-F0-9]{2}).*');

    for n = 1 : size(tokens{1,1},2)
        data_hex{m,n} = strrep(tokens{1,1}(1,n),' ','');
        data_dec(m,n) = hex2dec(data_hex{m,n});
    end
end
0

Предполагая этот логический формат для сбора данных:

12:57:18.281: C1 F3 81 F6 81 C5
12:57:18.296: 01 F0 41 F7 01 C6
12:57:18.296: 41 ED C1 F7 01 C6
12:57:18.312: C1 E8 01 F8 01 C6

Эта программа Perl:

#!/usr/bin/perl
$time=0;$data='';
while(<>){
  if(s/^(\d+):(\d+):(\d+)\.(\d+):\s*//) {
    $time=3600*$1+60*$2+$3+$4/1000;
  }
  if(s/(..)\s+(..)\s*/(hex($1)<<8|hex($2))."\t"/eg) {
    s/\t$//;
    $data=$_;
  }
  print "$time\t$data\n";
}

С этой командной строкой:

perl accelerometer-parse.pl < data.in > data.out

Преобразует его в универсальный формат с разделением табуляцией, с которым все будет работать:

46638.281       49651   33270   33221
46638.296       496     16887   454
46638.296       16877   49655   454
46638.312       49640   504     454

Чтобы придать смысл данным, вам также понадобится временная ось. Чтобы начать с t = 0, просто вычтите первую запись времени из всех последующих точек данных.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .