0001 function datafile_utility(inputFile, outputFile, opt)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044 switch opt.action
0045 case 'LQ4_splitEITfile';
0046 if ~isfield(opt,'transform');
0047 opt.transform = 1;
0048 end
0049 if ~isfield(opt,'addition');
0050 opt.addition = 0;
0051 end
0052 splitEITfile(inputFile, outputFile, opt.range, ...
0053 opt.transform, opt.addition);
0054 otherwise;
0055 error('opt.action = "%s" not recognized', opt.action);
0056 end
0057
0058 function splitEITfile(filename, newFilename, range, fcall, addvec)
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070 fid = fopen(filename, 'r', 'ieee-le', 'UTF-8');
0071
0072 format_version = fread(fid, 1, 'int32', 'ieee-le');
0073
0074 if format_version ~= 4
0075 error('wrong file version')
0076 end
0077
0078 header_size = fread(fid, 1, 'uint32', 'ieee-le');
0079
0080 tsStart = fread(fid, 1, 'uint64', 'ieee-le');
0081 tsEnd = fread(fid, 1, 'uint64', 'ieee-le');
0082 nFrames = fread(fid, 1, 'uint32', 'ieee-le');
0083
0084
0085 if length(range) ~= 2
0086 error('range has wrong size');
0087 end
0088
0089 if range(1) > nFrames || range(1) > range(2)
0090 error('range not well defined');
0091 end
0092
0093
0094 if header_size < 2664
0095 disp('assume header size of 2664');
0096 header_size = 2664;
0097 end
0098
0099
0100 fNewId = fopen(newFilename, 'w', 'ieee-le', 'UTF-8');
0101 fseek(fid, 0, 'bof');
0102
0103 tmp = fread(fid, header_size, 'int8', 'ieee-le');
0104 fwrite(fNewId, tmp, 'int8', 'ieee-le');
0105
0106 i = 0;
0107 storeFrames = 0;
0108 copiedFrames = 0;
0109 while fseek(fid, 1,'cof') ~= -1
0110 fseek(fid, -1,'cof');
0111
0112 tStampsAbs = fread(fid,1,'int64','ieee-le');
0113 ft = fread(fid,1,'int32','ieee-le');
0114 pl = fread(fid,1,'int32','ieee-le');
0115
0116 if ft == 0
0117 i = i + 1;
0118
0119 if i >= range(1) && i <= range(2)
0120 storeFrames = 1;
0121 copiedFrames = copiedFrames + 1;
0122 else
0123 storeFrames = 0;
0124 end
0125 end
0126
0127 if storeFrames == 1
0128
0129 fwrite(fNewId, tStampsAbs, 'int64','ieee-le');
0130 fwrite(fNewId, ft, 'int32', 'ieee-le');
0131 fwrite(fNewId, pl, 'int32', 'ieee-le');
0132 if pl > 0
0133 vi_payload = 64;
0134 iq_payload = 2048;
0135 p_startframe = ftell(fid);
0136 payLoad = fread(fid, pl, 'int8', 'ieee-le');
0137 p_endframe = ftell(fid);
0138
0139 fseek(fid,p_startframe + 15*4 + 12 + 4*vi_payload,'bof');
0140 iqPayload = fread(fid,iq_payload,'int32','ieee-le');
0141 fseek(fid,p_endframe,'bof');
0142
0143 p_startframe = ftell(fNewId);
0144 fwrite(fNewId, payLoad, 'int8', 'ieee-le');
0145 p_endframe = ftell(fNewId);
0146
0147 fseek(fNewId,p_startframe + 15*4 + 12 + 4*vi_payload,'bof');
0148 if isnumeric(fcall)
0149 iqPayload = full(fcall*iqPayload);
0150 else
0151 iqPayload = fcall(iqPayload);
0152 end
0153 if size(addvec,2) == 1
0154 iqPayload = iqPayload + addvec;
0155 else
0156 iqPayload = iqPayload + addvec(:,i);
0157 end
0158 fwrite(fNewId, iqPayload, 'int32', 'ieee-le');
0159 fseek(fNewId,p_endframe,'bof');
0160 end
0161 elseif pl > 0
0162
0163 fseek(fid,pl,'cof');
0164 elseif pl < 0
0165 disp('payloadsize < 0. try to continue');
0166 end
0167 end
0168
0169 fseek(fNewId, 4 + 4 + 8 + 8, 'bof');
0170 fwrite(fNewId, copiedFrames, 'uint32', 'ieee-le');
0171
0172
0173 fclose(fid);
0174 fclose(fNewId);
0175