R-DECO: An open-source Matlab based graphical user interface for the detection and correction of R-peaks 1.0.0

File: <base>/Common/Load_files/read_ecg.m (2,207 bytes)
function [data,fs] = read_ecg(fileName)
% Read .ecg file 
%
% Input:      
% fileName - the filename including the path
%
% Ouput:
% data     - ECG signal
% fs       - sampling frequency

% Open file for reading
fid = fopen(fileName,'r');

if ne(fid,-1) % Continue if it was possible to read the file
    
    % Magic number
    magicNumber = fread(fid, 8, 'char'); %#ok % First eight values
    
    % Get checksum
	checksum = fread(fid, 1, 'uint16'); %#ok
	
	% Read header
    Var_length_block_size = fread(fid, 1, 'long');
    ishneHeader.Sample_Size_ECG = fread(fid, 1, 'long');	
    Offset_var_lenght_block = fread(fid, 1, 'long'); %#ok
    Offset_ECG_block = fread(fid, 1, 'long');
    File_Version = fread(fid, 1, 'short'); %#ok
    First_Name = fread(fid, 40, 'char'); %#ok  		 							        								
    Last_Name = fread(fid, 40, 'char'); %#ok  									        								
    ID = fread(fid, 20, 'char'); %#ok  									        								
    Sex = fread(fid, 1, 'short'); %#ok
    Race = fread(fid, 1, 'short'); %#ok
    Birth_Date = fread(fid, 3, 'short'); %#ok	
    Record_Date = fread(fid, 3, 'short'); %#ok	
    File_Date = fread(fid, 3, 'short'); %#ok	
    Start_Time = fread(fid, 3, 'short'); %#ok	
    ishneHeader.nbLeads = fread(fid, 1, 'short');
    Lead_Spec = fread(fid, 12, 'short'); %#ok	
    Lead_Qual = fread(fid, 12, 'short'); %#ok	
    ishneHeader.Resolution = fread(fid, 12, 'short');	
    Pacemaker = fread(fid, 1, 'short'); %#ok	
    Recorder = fread(fid, 40, 'char'); %#ok
    ishneHeader.Sampling_Rate = fread(fid, 1, 'short');	
    Proprietary = fread(fid, 80, 'char'); %#ok
    Copyright = fread(fid, 80, 'char'); %#ok
    Reserved = fread(fid, 88, 'char'); %#ok
    
    % Read variable_length block
    varblock = fread(fid, Var_length_block_size, 'char'); %#ok
    
    % Get data at start
    fseek(fid, Offset_ECG_block, 'bof');
    
    % Read the signal
    numSample = ishneHeader.Sample_Size_ECG;
    data = fread(fid, [ishneHeader.nbLeads, numSample], 'int16')';
    
    % Define the sampling frequency
    fs = ishneHeader.Sampling_Rate;
     
    fclose(fid);
else
     data=[];
     fs=[];
 end