用Matlab读取二进制磁场

时间:2015-10-05 20:14:22

标签: matlab binary field

我正在尝试使用Matlab读取一些磁场。为此,我正在使用Windows XP操作系统,我正在使用Putty从设备发送连续读取命令。当Putty运行并保存日志文件时,我正在Matlab上阅读这个日志文件。设备是HMR2300。 当我使用ASCII格式阅读时,我没有遇到任何问题。但是,我需要以二进制形式收集这些数据,这就是问题所在。 输出字符串长7个字节“Xh | Xl | Yh | Yl | Zh | Zl |” Xh =有符号字节,X轴 - X1 =低字节,X轴。

由于我有四个设备,我使用以下代码收集while循环内的所有数据:

%*****% Reading from Device 01
[D1, N] = fread(FidMag1, 7);
while (true)
  MagData1 = [MagData1, D1'];
  CRLF1    = find(MagData1 == 13);
  CRLF1 = [0, CRLF1]';
  if (CRLF1(end) ~= 7)
    MagData1(1:CRLF1(end))=[];
    [D1, N] = fread(FidMag1, 7);
  else
    break;
  end
end
ttt = clock();
TimeStamp1(Count) = ttt(6) + ttt(5)*60 + ttt(4)*3600;
NoCalMagX1(Count) = int16(typecast(uint8(MagData1(1)), 'int8')) * int16(256) + (MagData1(2));
NoCalMagY1(Count) = int16(typecast(uint8(MagData1(3)), 'int8')) * int16(256) + (MagData1(4));
NoCalMagZ1(Count) = int16(typecast(uint8(MagData1(5)), 'int8')) * int16(256) + (MagData1(6));
MagData1(1:CRLF1(end))=[]; 

所以,之后我连续阅读设备2,3和4。

这是我的结果: Image Link

你可以在200秒之前和之后大致看到我有延迟收集数据,这是我需要解决的问题。通常当我的领域开始变化时,我开始收到延迟,我不知道如何解决它。

我尝试用我的代码做一个不同的方法,但这比第一个更差:

%*****% Reading from Device 01
if (SYNC_1)
    [D1, countB] = fread(FidMag1, 7-BIB_1);
    if (countB ~= 7)
        for a=1:countB
            temp(BIB_1+a) = D1(a); 
        end
    end
    if (flag_temp)
        flag_temp = 0;
    else if(find(D1 == 13) == 7)
            for a=1:countB
               temp(a) = D1(a); 
            end
        end
    end
    BIB_1 = BIB_1 + countB;
    if(BIB_1 == 7)
            if  (find(temp == 13) == 7)
                ttt = clock();
                TimeStamp1(Count_1) = ttt(6) + ttt(5)*60 + ttt(4)*3600;
                NoCalMagX1(Count_1) = int16(typecast(uint8(temp(1)), 'int8')) * int16(256) + (temp(2));
                NoCalMagY1(Count_1) = int16(typecast(uint8(temp(3)), 'int8')) * int16(256) + (temp(4));
                NoCalMagZ1(Count_1) = int16(typecast(uint8(temp(5)), 'int8')) * int16(256) + (temp(6));
                fprintf('SENSOR B\nX:%.0f  Y:%.0f  Z:%.0f\n\n', NoCalMagX1(Count_1), NoCalMagY1(Count_1), NoCalMagZ1(Count_1));
                Count_1 = Count_1 + 1;
            else
                SYNC_1 = 0;
            end
            BIB_1 = 0;
    end
end 
if (~SYNC_1)
    [D1, countB] = fread(FidMag1, 7-BIB_1);
    BIB_1 = BIB_1 + countB;
    if (BIB_1 > 0)
        index = find (D1 == 13);
        if(index)
            BIB_1 = 7 - index(end);
            if(BIB_1 == 0)
                flag_temp = 1;
                for a=(BIB_1+1):7
                 temp(a-BIB_1) = D1(a); 
                end
            else
                for a=(index+1):countB
                 temp(aux) = D1(a);
                 aux = aux + 1;
                end
            end
            aux = 1; %temp index
            SYNC_1 = 1;
        else
            SYNC_1 = 0;
            BIB_1 = 0;
        end
    end
end

结果: Image Link

你们有什么想法我怎么解决这个问题?要使用ascii收集数据我的方法类似,我没有任何问题。此外,当我使用第一个代码从一个设备读取时,我也没有任何问题。我只是迷失在如何解决这个问题。

0 个答案:

没有答案