매우 개의 파일이 Labview에서 바이너리로 저장되었습니다. 각 열은 타임 스탬프 클러스터 다음에 단일 벡터가옵니다.Labview는 클러스터 데이터를 바이너리 파일로 어떻게 저장합니까? MATLAB에서 어떻게 읽을 수 있습니까?
은 내가 입력 배열 N, M의 크기를 계산하는 사전 - 여기서
fid = fopen(filename);
data = fread(fid,[N M],'*single',0,'b');
fclose(fid);
를 사용 매트랩 r2013a에 각 데이터 파일을 읽는다. 나는 데이터가, 내가 data(1:5,:)
가 타임 스탬프 데이터가 숨겨져있는 곳임을 알아 낸 같이하도록되어 알고하지만 M = 1
이 같은 모양 때문에 :
[0 -842938.0625 -1.19209289550781e-07 0 4.48415508583941e-42]
첫 번째 요소는 항상 0입니다, 두 번째 요소는 일정한 스텝 크기로 단조롭게 감소하고, 세 번째 요소는 쌍 안정적 인 것처럼 보이고 두 개의 매우 작은 값 사이를 앞뒤로 전환하고 네 번째 요소는 항상 0, 다섯 번째 요소도 일정합니다.
저는 Labview가 날짜를 인코딩하는 방법과 관련이 있다고 가정합니다.하지만 Google-fu는 그 점을 이해하지 못했습니다.
이 다음보다 일반적인 질문을 확인하려면 : 은 이진 파일로 저장할 때 LabVIEW가 타임 스탬프 클러스터를 인코딩 않으며, 내가 그것을 어떻게 읽을 수 있고 다른 프로그램에서 의미있는 숫자로 변환하는 방법Matlab과 같은 언어?
편집: 후세를 들어 은 여기 (위의 코드에 추가) 내 마지막 코드 : 코드에서
datedata = data(5:-1:1,:);
data(1:5,:) = [];
dms = typecast(reshape(datedata(2:3,:),[],1),'uint64');
dsecs = typecast(reshape(datedata(4:5,:),[],1), 'int64');
timestamp = datenum(1904,1,1) + (double(dsecs) + double(dms)*2^-64)/(3600*24);
는 매스 웍스에서 게시 @Floris, 그들은 두 배로 직선 캐스트,하지만 때 나는 그걸 시도해 봤는데 쓰레기가 났어. 올바른 날짜를 얻으려면 먼저 integer로 변환 한 다음 double으로 변환해야했습니다. 병목이 fread
행 (외부 디스크를 읽는 데 0.3 초)이므로, 여분의 타입 변환 단계는 사물의 웅장한 구성표에서 매우 작습니다.
여분의 열 4.5e-42는 다음 단일성 벡터의 값 수인 3200의 정수 값으로 변환됩니다.
LabVIEW 코드에 접근 할 수 있다면 이러한 클러스터를 문자열이나 XML 파일로 저장해보십시오. 파일의 크기가 얼마나되는지 모르지만이 형식은 MATLAB이 읽는 것이 훨씬 쉬울 것입니다. –
개별 파일은 그다지 크지 않습니다 (각각 ~ 14MB). 그러나 그 중 많은 파일이 있습니다. 나는 완전히 1 개의 Tb 드라이브를 가지고 있고, 두번째 드라이브를 가지고있다. 코드를 변경하기로 결정했다하더라도 그 고양이는 가방에서 잘 나온다. – craigim
오른쪽. 네가 가진 것에 붙어있는 것처럼 보인다. 나중에 참조 할 수 있도록 가능한 한 많이 데이터 마이그레이션을 리허설하는 것이 좋습니다. 오류가 발생하기 쉽고 어려운 작업이므로 가능하면 리허설을하는 것이 좋습니다. –