function a=ats(a) %Reading Alive Technologies .ats files % a.file='AT000083.ats' % a=ats(a); % subplot(211);plot(a.ecg) % subplot(212);plot(a.x) % %Based on Bluetooth Heart Monitor Data Format, August 2006 % Jussi.Virkkala@neuroupdate.com % 2007-08-15 First version, no GPS information? %File f=fopen(a.file,'r','b'); %Header a.id=char(fread(f,5,'uint8'))'; if ~strcmp(a.id,['ATSF' char(0)]), %ATFS a=[a.file ', unknown ats header:' a.id]; fclose(f); return; end a.header=fread(f,1,'uint16'); a.channels=fread(f,1,'uint8'); a.blocks=fread(f,1,'uint32'); a.blocklength=fread(f,1,'uint16'); %date a.year=fread(f,1,'uint16'); a.month=fread(f,1,'uint8'); a.day=fread(f,1,'uint8'); %time a.hour=fread(f,1,'uint8'); a.minute=fread(f,1,'uint8'); a.second=fread(f,1,'uint8'); %reserved reserved=fread(f,107,'uint8'); %Channels %ECG 0xAA(170), Status 0x11(17), 2 Axis 0x55(85), 3 Axis 0x56(86) for i=1:a.channels, a.type(i)=fread(f,1,'uint8'); a.format(i)=fread(f,1,'uint8'); a.length(i)=fread(f,1,'uint16'); switch a.type(i) case 170 %ECG a.ecg=zeros(a.length(i),a.blocks); case 17 %Status a.but=zeros(a.length(i)/2,a.blocks); a.bat=a.but; case 85 %2 axes a.x=zeros(a.length(i)/2,a.blocks); a.y=a.x; case 86 %3 axes a.x=zeros(a.length(i)/3,a.blocks); a.y=a.x; a.z=a.x; otherwise a=[a.file ', unknown ats type:' int2str(a.type(i))]; fclose(f); return end reserved=fread(f,28,'uint8'); %5-32 end %Blocks for b=1:a.blocks, for i=1:a.channels, switch a.type(i) case 170 %ECG a.ecg(:,b)=fread(f,a.length(i),'uint8'); case 17 %status d=fread(f,a.length(i),'uint8'); d=reshape(d,2,a.length(i)/2)'; a.but(:,b)=d(:,1); a.bat(:,b)=d(:,2); case 85 %2 axes d=fread(f,a.length(i),'uint8'); d=reshape(d,2,a.length(i)/2)'; a.x(:,b)=d(:,1); a.y(:,b)=d(:,2); case 86 %3 axes d=fread(f,a.length(i),'uint8'); d=reshape(d,3,a.length(i)/3)'; a.x(:,b)=d(:,1); a.y(:,b)=d(:,2); a.z(:,b)=d(:,3); end end end %Scaling for i=1:a.channels, switch a.type(i) case 170 %ECG a.ecg=2*2.66*a.ecg(:)/255-2.66; case 17 a.but=a.but(:); a.bat=a.bat(:)/2; case 85 a.x=2*2*a.x(:)/255-2; a.y=2*2*a.y(:)/255-2; case 86 a.x=2*2.7*a.x(:)/255-2.7; a.y=2*2.7*a.y(:)/255-2.7; a.z=2*2.7*a.z(:)/255-2.7; end end fclose(f); %end of ats.m