ECG-Kit 1.0
(7,595 bytes)
function [ Labels, ConfusionMatrix, LabelList ] = a2hbc(varargin)
% Argentino-Aragonés heartbeat classifier (a2hbc) for Matlab
% ----------------------------------------------------------
%
% Description:
%
% Performs ECG heartbeat classification in the input ECG signal in one of the following modes:
% 1. Automatic or Unassisted (default).
% 2. Slightly assisted. Ask minimum user assistance for cluster decision.
% 3. Fully assisted. Ask a decision for each cluster detected.
%
% The classification is performed among the four AAMI classes: normal
% (N), supraventricular (S) and Ventricular (V) heartbeats. The 'Unknown'
% (U) class should in case of doubt or imposibility to label certainly a
% heartbeat.
%
%
% Arguments: (specified as a2hbc('arg_name1', arg_val1, ... , 'arg_nameN', arg_valN) )
%
% a. ECG specification:
%
% a.1 Recording filename where ECG is stored in a valid format.
%
% + recording_name: ECG recording to be classified.
% + recording_format : Valid ECG format. (MIT, ISHNE, AHA, HES, MAT)
%
% a.2 ECG signal/s ADC samples, header and QRS locations. Useful if
% you plan to hook this software in your code. In this case you
% are responsible of coding the I/O to the ECG recording.
%
% + ECG: ECG signal matrix. Columns are leads.
%
% + ECG_header: Description of the ECG typically available in the
% header. Structure with fields:
% -freq: Sampling rate in Hz.
% -nsig: Number of ECG leads.
% -nsamp: Number of ECG samples.
% -adczero: ADC offset (typically 2^(adc_res-1) when using unsigned integers).
% -adcgain: ADC gain in units/adc_sample (typically uV/adc_unit).
%
% + QRS_locations: QRS locations of the ECG. Typically available in the
% "time" field of the annotations in MIT format.
%
% b. Operating modes
%
% + op_mode: Operating mode 'auto' (default), 'slightly-assisted'
% or 'assisted'. Each described above.
%
% + NumOfClusters: Number of cluster to find in the data.
%
% + ClusteringRepetitions: Repetitions in order to increase the
% resolution of the clustering. The higher the repetitions,
% the higher the amount of clusters to find. See the
% documentations for details. Default: 1 (no repetitions).
%
% + ClusterPresence: Threshold for the qualified majority described
% in the articles. Default: 75%
%
% c. Modifiers
%
% + InteractiveMode: Boolean for interacting with A2HBC with a GUI.
% Default: false.
%
% + tmp_path: Path to store temp files. Default: $A2HBC_PATH$\tmp
%
% c.1 Multiprocess modifiers:
%
% + cant_pids: Number of processes to divide the work. Each process
% will work in a 1/cant_pids part of the ECG.
% + this_pid: Identifies each process with an integer between
% 1 - cant_pids.
%
%
% c.2 Other modifiers:
%
% + CacheData: Boolean for allowing A2HBC to cache data in order to
% speedup future execution of the same recording.
% Default: true.
%
% + SimulateExpert: Boolean for using expert annotations (field 'anntyp'
% of annotation structure) as gold standard and
% evaluate the classification performance of
% A2HBC. Default: false
%
% + Repetitions: Repetitions of the classification process. Useful
% when interested in obtaining a center and
% dispersion of the performance distribution.
%
% Output:
% + Labels: Classification Labels for each QRS location provided.
%
% Examples:
%
% Lazy users can start with:
%
% a2hbc
%
% The GUI will appear and ask you for the mandatory information.
%
% In case you want to try the command line, here is an example:
%
% a2hbc( ...
% 'recording_name', [ '.' filesep 'example recordings' filesep '208.dat'], ...
% 'recording_format', 'MIT', ...
% 'op_mode', 'auto');
%
% you can also check 'examples.m' in the same folder of this file.
%
% Note: If you found this software useful, you may be interested in reading these articles:
%
% References:
%
% [0] Llamedo Soria, Mariano. Automatic Processing and Classification of
% Electrocardiogram for the Detection of Risk Indexes. PhD thesis.
%
% [1] Llamedo, M. Mart�nez, J. Heartbeat Classification Using Feature
% Selection driven by Database Generalization Criteria. IEEE
% Transactions on Biomedical Engineering, 2011, 58, 616-625
% [2] Llamedo, M. & Mart�nez, J.P. Cross-Database Evaluation of a Multilead
% Heartbeat Classifier. IEEE Transactions on Information Technology in
% Biomedicine, 2012 expected. Under review, with minor revision.
% [3] Llamedo, M. and Mart�nez, J. P. Multidatabase Evaluation of an
% Automatic Algorithm for ECG Heartbeat Classification with Adjustable
% Patient-Adaptation Capability. Under review.
%
% @ARTICLE{Llamedo11, author = {Llamedo, M. and Mart�nez, J.P.}, title = {Heartbeat Classification Using Feature Selection driven by Database Generalization Criteria}, journal = {IEEE Transactions on Biomedical Engineering}, year = {2011}, volume = {58}, pages = {616-625} }
% @ARTICLE{Llamedo11Multilead, author = {Llamedo, M. and Mart�nez, J.P.}, title = {Cross-Database Evaluation of a Multilead Heartbeat Classifier}, journal = {IEEE Transactions on Information Technology in Biomedicine}, year = {2012}, volume = {accepted} }
% @ARTICLE{}
%
% Limits and Known bugs:
% Probably a lot :( ... but dont panic! send me feedback if you need
% help.
%
% Author: Mariano Llamedo Soria (llamedom at {electron.frba.utn.edu.ar; unizar.es}
% Version: 0.1 beta
% Birthdate : 16/8/2011
% Last update: 9/2/2012
%% Prepare paths, check some context, and start working ...
%path related constants.
% mylocation_path = [fileparts(mfilename('fullpath')) filesep ];
%
% default_paths = { ...
% [ mylocation_path 'scripts' filesep ';' ]; ...
% };
%
% default_paths = char(default_paths)';
% default_paths = (default_paths(:))';
% addpath(default_paths);
% Do path installation during the installation of the ECG kit.
default_paths = '';
%to keep all windows and figures clean and tidy when closing a2hbc
intial_state_open_handles = findall(0);
% uncomment for debugging.
bDebug = false;
% bDebug = true;
db_status = dbstatus();
if( length(db_status) > 1 && strcmpi(db_status(end).cond, 'caught error') )
% already stopping on error caught
bRestoreErrorStatus = false;
else
if( bDebug )
% debug errors inside A2HBC, clear on exit
dbstop if caught error
bRestoreErrorStatus = true;
else
bRestoreErrorStatus = false;
end
end
Cleanup_hdl = onCleanup(@()DoHouseKeeping(default_paths, intial_state_open_handles, bRestoreErrorStatus));
%% Thats all folks !
[ Labels, ConfusionMatrix, LabelList ] = a2hbc_main(varargin{:});