问题可能很幼稚,但答案可以帮助我。
测量以二进制格式记录,标题包含有关数据和数据本身的所有信息(即一系列双打)。
测量数据可以从应用程序以csv格式导出,但需要很长时间。
尝试从二进制文件读取数据时,您需要注意什么?这个过程是否可行,使用Matlab导入数组或labview(导出为.txt可能?)
答案 0 :(得分:0)
二进制.rec
文件格式可能涉及各种事物(基于MPEG4-TS的Topfield的音频/视频编码格式,专有音频编码,甚至菲利普斯的MRI扫描仪)......
如果它涉及MRI扫描仪,您可以在fileexchange上找到一些直接阅读器:Matlab PAR REC Reader
如果引用其他内容,您可以使用低级例程自行解析二进制文件头和数据:fread
修改强>
不知道您记录的传感器位移的确切文件格式,这里是虚拟示例,其中fread用于逐块读取大型rec文件,假设标头仅包含数据长度,并且该数据只是一系列双值:
function [] = DummyReadRec()
%[
% Open rec file for reading
[fid, errmsg] = fopen('dummy.rec', 'r');
if (fid < 0), error(errmsg); end
cuo = onCleanup(@()fclose(fid));
% Read header (here supposing it is only an integer giving length of data)
reclenght = fread(fid, 1, 'uint32');
% Read data block-by-block (here supposing it is only double values)
MAX_BLOCK_LENGTH = 512;
blockCount = ceil(reclenght / MAX_BLOCK_LENGTH);
for bi = 1:blockCount,
% Will read a maximum of 'MAX_BLOCK_LENGTH' (or less if we're on the last block)
[recdata, siz] = fread(fid, [1 MAX_BLOCK_LENGTH], 'double');
% Do something with this block (fft or whatever)
offset = (bi-1)*MAX_BLOCK_LENGTH;
position = (offset+1):(offset+siz);
plot(position, 20*log10(abs(fft(recdata))));
drawnow();
end
%]
end
答案 1 :(得分:0)
答案取决于二进制文件的格式及其大小。
我已经对各种二进制文件进行了很多转换,所有二进制文件都有不同的布局。如果文件适合内存,那么只要知道二进制文件的布局就可以使用fread。以下是阅读标题和放大器的示例。简单的数据块。它当然必须根据文件的布局进行修改。取决于录音设备和计算机类型你可能还需要使用machinefmt
('ieee-le'或'ieee-be')选项fread ...之前烧过我。
%Open the File for reading
fid = fopen(yourRECfile,'r');
%Read the Header ... your layout will be different
header.MajorRel = fread(fid,1,'uint16'); %Major File Rev #
header.MinorRel = fread(fid,1,'uint16'); %Minor File Rev #
header.IRIGStart = fread(fid,1,'double'); %Start time in secs
header.Flags = fread(fid,1,'uint32'); %Flags
%Read everything else from there until end of file as a series of doubles.
data = fread(fid,inf,'double');
fclose(fid);
如果文件不适合内存,您需要在块中处理它或使用memmapfile查看。