2014-01-17 8 views
2

Я прочитал этот набор шестнадцатеричных значений от акселерометра: регистрации данныхчтение Int16 данных в MATLAB

35AC, 2889,1899,0C4A, 058B, FD46, F620, F001, EE44, EF08, EF46, F750, 007F, 0814,1369,21F3,34F0,45CE, 5992,6D05,7C12,7FEF, 7FF8,7FF8,7FF8,7FF8,7FD9,7F27,74A7,67D8,5826,468F, 3621,2573,1326,0441, F88F, F1BF, F082, ЕАБР, EAEE, EE04, F190, F89E, 01F5,0B0C, 155А, 2721,3A20,48DC, 5985,676A, 721E, 7C20,7FF8,7FEE, 7F1B,

Он должен каким-то образом привлечь синусоидальная кривая, но я не смог найти правильный метод импорта для подписанного int16, а кривая прыгает от 0 до 65535.

Не могли бы Вы помочь мне?

Я попытался sscanf(...,'%4x')

ответ

0

Формата sscanf для помеченного шестигранных int16 просто '%4i'. К сожалению, он ожидает, что шестнадцатеричные значения начнутся с 0x, что, очевидно, у вас нет. Одна из возможностей заключается в том, что вы сканируете его так, как вы, а затем вручную конвертируете его в подписанный int16. Один из возможных способов сделать это было бы следующее:

input = sscanf(...,'%4x'); 
input16 = typecast(uint16(input),'int16'); 

значения считываются как uint32 и автоматически преобразуются в двойной функцией sscanf. Итак, мы конвертируем его в uint16, а затем приведем его к 16-битовому int (обратите внимание, что просто использование int16(input) не работает, так как оно не преобразует значения по INT16_MAX в отрицательные значения).

0
string = '35AC,2889,1899,0C4A,058B,FD46,F620,F001,EE44,EF08,EF46,F750,007F,0814,1369,21F3,34F0,45CE,5992,6D05,7C12,7FEF,7FF8,7FF8,7FF8,7FF8,7FD9,7F27,74A7,67D8,5826,468F,3621,2573,1326,0441,F88F,F1BF,F082,EADB,EAEE,EE04,F190,F89E,01F5,0B0C,155A,2721,3A20,48DC,5985,676A,721E,7C20,7FF8,7FEE,7F1B'; 
%// Your data as a string 

string = [string ',']; %// add ending comma to reshape into groups of five chars 
strings = reshape(string,5,[]).'; 
strings = strings(:,1:4); %'// each row is 4 chars representing a hex number 
numbers = hex2dec(strings); %// convert each row to a number 
ind = numbers>=32768; 
numbers(ind) = numbers(ind)-65535; %// get rid of jumps 
plot(numbers) 

enter image description here

0

спасибо намного

И предыдущий ответ был there тоже.

альтернатива sscanf считается более быстрой.

Смежные вопросы