%sFtpRead_ishne %read ECG data from ISHNE ecgSig file % %in------------------------------------------------------------------------ %fileName: the ishne filename including the path %startOffset: the start offset to read ecgSig %length: length of ecgSig to read (in seconds) % %out----------------------------------------------------------------------- %ecgSig : ECG signal %########################################################################## function [ishneHeader, ecgSig]=sFtpRead_ishne(fileName, sFtpClient, startOffset, length); fid = sFtpFopen(fileName, sFtpClient); if ne(fid,-1) %magicNumber magicNumber = sFtpFread( fid, sFtpClient, 8, 'uchar'); % get checksum checksum = sFtpFread( fid, sFtpClient, 1, 'uint16'); %read header Var_length_block_size = sFtpFread( fid, sFtpClient, 1, 'long'); ishneHeader.Sample_Size_ECG = sFtpFread( fid, sFtpClient, 1, 'long'); Offset_var_lenght_block = sFtpFread( fid, sFtpClient, 1, 'long'); Offset_ECG_block = sFtpFread( fid, sFtpClient, 1, 'long'); File_Version = sFtpFread( fid, sFtpClient, 1, 'short'); First_Name = sFtpFread( fid, sFtpClient, 40, 'uchar'); Last_Name = sFtpFread( fid, sFtpClient, 40, 'uchar'); ID = sFtpFread( fid, sFtpClient, 20, 'uchar'); Sex = sFtpFread( fid, sFtpClient, 1, 'short'); Race = sFtpFread( fid, sFtpClient, 1, 'short'); Birth_Date = sFtpFread( fid, sFtpClient, 3, 'short'); Record_Date = sFtpFread( fid, sFtpClient, 3, 'short'); File_Date = sFtpFread( fid, sFtpClient, 3, 'short'); Start_Time = sFtpFread( fid, sFtpClient, 3, 'short'); ishneHeader.nbLeads = sFtpFread( fid, sFtpClient, 1, 'short'); Lead_Spec = sFtpFread( fid, sFtpClient, 12, 'short'); Lead_Qual = sFtpFread( fid, sFtpClient, 12, 'short'); ishneHeader.Resolution = sFtpFread( fid, sFtpClient, 12, 'short'); Pacemaker = sFtpFread( fid, sFtpClient, 1, 'short'); Recorder = sFtpFread( fid, sFtpClient, 40, 'uchar'); ishneHeader.Sampling_Rate = sFtpFread( fid, sFtpClient, 1, 'short'); Proprietary = sFtpFread( fid, sFtpClient, 80, 'uchar'); Copyright = sFtpFread( fid, sFtpClient, 80, 'uchar'); Reserved = sFtpFread( fid, sFtpClient, 88, 'uchar'); % read variable_length block varblock = sFtpFread( fid, sFtpClient, Var_length_block_size, 'char'); % get data at start offset = int32(startOffset*ishneHeader.Sampling_Rate*ishneHeader.nbLeads*2); % each data has 2 bytes sFtpFseek(fid, sFtpClient, Offset_ECG_block+offset, 'bof'); % read ecgSig signal numSample = length*double(ishneHeader.Sampling_Rate); ecgSig = sFtpFread( fid, sFtpClient, [double(ishneHeader.nbLeads), numSample], 'int16')'; sFtpFclose(fid, sFtpClient); else ihsneHeader = []; ecgSig=[]; end