从txt文本中读取连续的9轴数据的matlab代码

按照协议保存的9轴传感器原始数据,读取,计算并处理保存至同名excel文件中

fileName=input('请输入txt文件名(不含.txt):\n','s');
txtName=[fileName,'.txt'];
fprintf('正在读取%s...',txtName);
ss = textread(txtName,'%s');
%ss = textscan('dataDemo.txt','%s');
head=ss(1:2);
devSta = ss(3:4);
counter = ss(5);
sslength = length(ss);
%判断devSta中有多少个sensor的存在
snrCnt = 0;
for cc = 1:8
    if( bitget(hex2dec(devSta(1)),cc))
        snrCnt = snrCnt+1;
    end
end
for cc = 1:8
    if( bitget(hex2dec(devSta(2)),cc))
        snrCnt = snrCnt+1;
    end
end
fprintf('包含%d个9轴传感器数据。处理中...',snrCnt);
%完整一帧长度为2(head)+2(devSta)+1(counter)+18*snrCnt字节+1(checksum)  (6+5*18) *4 = 384   (tt-1)*(6+18*snrCnt)
%acc数据范围+-8G  value=acc*1000/4096(mG)   gyro数据范围+-250degree/s
%value=gyro/131.2 deg/s  mag在xy轴为+-1150uT Z轴为+-2500uT 分辨率0.3uT
tt = 1;
allData =[];
while(tt>0)
    frameData = ss(((tt-1)*(6+18*snrCnt)+6):((tt-1)*(6+18*snrCnt)+(5+18*snrCnt)));   %抽取本帧
    nextStartNumb = (tt-1)*(6+18*snrCnt)+(6+18*snrCnt);
    if(tt*(6+18*snrCnt)< sslength) %
         newHead = ss(nextStartNumb+1:nextStartNumb+2);  %通过判断本帧后两个字节是否为0d 0a判断本帧是否完整    
    end
    sensor = [tt];
    %完成一次所有snrCnt个sensor的9轴数据读取
    for ii = 1:snrCnt
        dataByte = frameData((1+18*(ii-1)):(18*ii));
        for cc=1:9  %按顺序读出一个sensor的9项数据
            numb=hex2dec(dataByte(2*cc-1)) + hex2dec(dataByte(2*cc))*256;
            if (numb>32767)
                dataValue(cc) = numb - 65536;
            else
                dataValue(cc) = numb;
            end
            if(cc<4)
                dataValue(cc) = int16(dataValue(cc)*1000/4096);        %加速度计值 单位mG
            elseif(cc<7)
                dataValue(cc) = int16(dataValue(cc)/131.07);      %角速率值 单位deg/s
            else
                dataValue(cc) = int16(dataValue(cc)*0.3);          %磁力计值  单位uT
            end
        end
        sensor=[sensor dataValue]; %第ii个sensor的9个数据
    end   
    allData=[allData;sensor];
    if(tt*(6+18*snrCnt)>= sslength)
        lines = tt;
        tt = 0;
    else
        tt = tt+1;
    end
end
%title=['No.' 'S1.aX' 'S1.aY' 'S1.aZ' 'S1.gX' 'S1.gY' 'S1.gZ' 'S1.mX' 'S1.mY' 'S1.mZ' ];
time = 0.04*[1:lines]';
%allData=[time allData];
allData=[allData(:,1) time allData(:,2:end)];
fprintf('共%d行数据。',lines);
xlsName=[fileName,'.xls'];
fprintf('正在写入%s...',xlsName);
xlswrite(xlsName,allData);


%allData=[allData(:,1) time allData(:,2:end)];

fprintf('完成,共%d行数据!\n',lines);

% subplot(311)
% hold on
% plot(allData(:,3));
% plot(allData(:,4));
% plot(allData(:,5));
% hold off
% subplot(312)
% hold on
% plot(allData(:,6));
% plot(allData(:,7));
% plot(allData(:,8));
% hold off
% subplot(313)
% hold on
% plot(allData(:,9));
% plot(allData(:,10));
% plot(allData(:,11));
% hold off

%% acc值绘图
% subplot(211)
% hold on
% plot(allData(:,3));
% plot(allData(:,4));
% plot(allData(:,5));
% hold off
% subplot(212)
% hold on
% plot(allData(:,12));
% plot(allData(:,13));
% plot(allData(:,14));
% hold off
%%gyro绘图
% figure
% subplot(211)
% hold on
% plot(allData(:,6));
% plot(allData(:,7));
% plot(allData(:,8));
% hold off
% subplot(212)
% hold on
% plot(allData(:,15));
% plot(allData(:,16));
% plot(allData(:,17));
% hold off

%%mag绘图
% figure
% subplot(211)
% hold on
% plot(allData(:,9));
% plot(allData(:,10));
% plot(allData(:,11));
% hold off
% subplot(212)
% hold on
% plot(allData(:,18));
% plot(allData(:,19));
% plot(allData(:,20));
% hold off
% 
% degree = [0 0 0];
% for ii=2:lines
% degree(ii,1) = degree(ii-1,1)+0.04*allData(ii,6);
% degree(ii,2) = degree(ii-1,2)+0.04*allData(ii,7);
% degree(ii,3) = degree(ii-1,3)+0.04*allData(ii,8);
% end
% 
% subplot(211)
% plot(degree,'DisplayName','degree')
% subplot(212)
% hold on
% plot(allData(:,9));
% plot(allData(:,10));
% plot(allData(:,11));
% hold off
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值