使用Matlab R2015a。我使用fread从二进制文件中读取传感器数据。数据包含多个精度。一个信号的采样速率是其他信号的5倍。该文件被构造为一个批的序列,其中每批有一个signal_A样本,但是有5个signal_B样本。
我在googled上搜索了关于如何快速加载和格式化数据的例子,但我看到的解决方案仅代表只有一个抽样率的情况,从而使解决方案更简单,据我所知。
我想避免的是for-loops的使用,它非常慢。有关数据在文件中是如何排列的,请参见下面的说明,以及我现在拥有的一个简单的代码示例。
对如何加快速度有什么建议吗?

clear;
fid = fopen('binaryFile.bin','r');
signal_B = [];
numBatches = Inf; % read all
batchSize = 17; % each batch takes up 17 bytes
% PART 1 (everything that is not signal_B)
batchSerialNumber = fread(fid, numBatches, '*uint32', batchSize-4);
fseek(fid, 4, 'bof'); % rewind
signal_A = fread(fid, numBatches, '*uint16', batchSize-2);
fseek(fid, 6, 'bof'); % rewind
misc_info = fread(fid, numBatches, '*uint8', batchSize-1);
% PART 2 (signal_B)
for i = 1:length(batchSerialNumber)
fseek(fid, ((i-1)*batchSize) + 7, 'bof'); % set position in file, according to batch number (i)
signal_B = [signal_B; fread(fid, 5, '*int16')]; % read the 5 samples of signal_B in this batch
end发布于 2015-10-02 20:49:46
更多的谷歌搜索和一个很好的解决方案最终出现..。大约比使用for-loop快100倍。
clear;
fid = fopen('binaryFile.bin','r');
numBatches = Inf; % read all
batchSize = 17; % each batch takes up 17 bytes
% PART 1 (everything that is not signal_B)
batchSerialNumber = fread(fid, numBatches, '*uint32', batchSize-4);
fseek(fid, 4, 'bof'); % rewind
signal_A = fread(fid, numBatches, '*uint16', batchSize-2);
fseek(fid, 6, 'bof'); % rewind
misc_info = fread(fid, numBatches, '*uint8', batchSize-1);
fseek(fid, 7, 'bof'); % rewind
% PART 2 (signal_B)
signal_B_line_1 = fread(fid, numBatches, '*int16', batchSize-2);
fseek(fid, 9, 'bof');
signal_B_line_2 = fread(fid, numBatches, '*int16', batchSize-2);
fseek(fid, 11, 'bof');
signal_B_line_3 = fread(fid, numBatches, '*int16', batchSize-2);
fseek(fid, 13, 'bof');
signal_B_line_4 = fread(fid, numBatches, '*int16', batchSize-2);
fseek(fid, 15, 'bof');
signal_B_line_5 = fread(fid, numBatches, '*int16', batchSize-2);
signal_B(length(batchSerialNumber)*5,1) = int16(0);
signal_B(1:5:end,1) = signal_B_line_1;
signal_B(2:5:end,1) = signal_B_line_2;
signal_B(3:5:end,1) = signal_B_line_3;
signal_B(4:5:end,1) = signal_B_line_4;
signal_B(5:5:end,1) = signal_B_line_5;https://stackoverflow.com/questions/32909040
复制相似问题