This directory contains software, mostly contributed by PhysioNet users, for use with Matlab and Octave. Matlab is a popular commercial program that provides an interactive environment for numeric computation and graphics using an interpreted programming language that optionally can be compiled. Octave is a freely available opensource program that is compatible with Matlab. Both Octave and Matlab can run under most popular operating systems, including GNU/Linux, Mac OS X, MSWindows, and many versions of Unix. Sources for Octave are available here and from the official Octave web site.
Reading and writing PhysioBank and compatible data
PhysioBank data are stored in a variety of formats ("WFDBcompatible formats") that can be read and written using the WFDB library, which is written in C and can be called directly from userwritten applications written in C, C++, or Fortran. Digitized signals (waveforms) are most often stored in "format 212", in which pairs of 12bit samples are bitpacked into three 8bit bytes. The library can read and write signal files in many other WFDBcompatible formats, and a few of these formats are used for PhysioBank data that cannot be stored in format 212. Although the WFDB library also supports multiple annotation formats, only one of these is used for PhysioBank annotation files, which are binary files containing variablelength annotations averaging slightly over 2 bytes each.
Software available here offers several ways of reading and writing WFDBcompatible files from Matlab, with varying levels of effort required:

The WFDB Toolbox for Matlab: This toolbox is a collection of MATLAB functions for reading, writing, and manipulating (processing) PhysioBank data. The functions are implemented as system calls through MATLAB and Java wrappers to native binary executables based on the WFDB Software Package, so they support reading data directly from the PhysioNet web site (using HTTP) as well as from local disk files. The toolbox can be installed from within MATLAB. It runs on 64bit GNU/Linux, Mac OS X, or MSWindows, and it requires Matlab 7.11 (R2010b) or later, with a working Java Virtual Machine (JVM) that supports Java 1.6 or later. It is not currently usable on any 32bit platform, on Solaris, with Octave, or with earlier versions of Matlab or Java.

The PhysioBank ATM: Use the ATM in your web browser to locate and visualize PhysioBank data of interest, then use its Export signals as .mat tool to create .mat files that you can download and read directly in any version of Matlab or Octave. If you also save the short .info file generated by the tool, the function plotATM (in either Matlab or Octave) can read the .mat file, baselinecorrect and scale the signals in it, and plot them. The segments that can be obtained from the ATM are limited to 1 million samples per signal in length.

wfdb2mat: This application, which is part of the WFDB Software Package, is used by the ATM's Export signals as .mat tool, but you can also run it on your own computer, with no restriction on segment length. If the original signal files have not been downloaded from PhysioNet, wfdb2mat can read them directly from the PhysioNet server. (The .mat files generated by wfdb2mat, when accompanied by the .hea files generated at the same time, are also directly readable by dozens of other applications in the WFDB Software Package, including WAVE.)

Converting annotations to text: You can do this using the Show annotations as text tool in the PhysioBank ATM, or you can use rdann to do this on your own computer once you have installed the WFDB Software Package. The text contains one annotation per line, and can be easily parsed in any version of Matlab or Octave.
The older methods listed below also remain available:

Converting signals to text: You can do this using the Show signals as text tool in the PhysioBank ATM, or you can use rdsamp to do this on your own computer once you have installed the WFDB Software Package. The text contains one sample of each signal per line, and can be easily parsed in any version of Matlab or Octave.

WFDB library wrappers for Matlab R13 (6.5, 2003) only: Use the standard WFDB library via a set of wrappers, usable with Matlab R13 under GNU/Linux and Mac OS X. Jonas Carlson has contributed a nearly complete set of such wrappers (missing only the calibrationrelated functions and a few other rarelyused functions in the WFDB library). See WFDB_tools.
All of the methods above use the WFDB library to read or write PhysioBank and compatible records. The advantages of doing so are that they can be updated to handle new file formats simply by updating the WFDB library, they are highly efficient, and they can read data directly from PhysioNet as well as from local files. Several users contributed software that does not use the WFDB library, but can read local disk copies of signal files in format 212 or in PhysioBank annotation file format:

WFDB library subset for Matlab: a useful selection of WFDB library functions, reimplemented in a mixture of mcode and C compiled with Matlab's builtin C compiler, by Jose Garcia Moros and Salvador Olmos. This can be used to read and write WFDBcompatible annotation files and format 212 signal files using Matlab. The authors have also provided compiled versions of these files for use with Matlab under GNU/Linux, Solaris, and MSWindows.

A Matlab viewer that displays signals and annotations: Robert Tratnig and Klaus Rheinberger have contributed rddata.m, a Matlab program that reads 1 or 2channel PhysioBank records stored in format 212 (see signal(5) for a description of this format) and displays them together with annotations in a Matlab figure. Lines 2629 of this program can be edited to specify the input files. (Note that most PhysioBank records are stored in format 212. The program will warn you if the record you choose is not in this format, or if it contains more than 2 signals. In such cases, you can use xform(1) from the WFDB Software Package to reformat records in other formats and to select 1 or 2 signals from a larger set if necessary.)

A signal file exporter: Use the code available in ECG_Exporter to create .mat files containing digitized signals from PhysioBank and compatible records. This package, contributed by James Lamberg of the University of Minnesota, converts twosignal format 212 records using code from Robert Tratnig's rddata.m, as well as text files created using rdsamp or the PhysioBank ATM. The package also includes a viewer.
Other PhysioToolkit software for Matlab and Octave
The directory ECGwaveGen contains software contributed by Floyd Harriott for generating a synthesized ECGlike test signal.
A Matlab/Octave implementation of ECGSYN, which generates realistic ECGs, has been contributed by Patrick McSharry and Gari Clifford.
A Matlab/Octave implementation of ecgpuwave, which locates P, QRS, and T wave onsets, peaks, and ends in ECG signals, has been contributed by the authors of the original Fortran 77 implementation.
For an example of a large Matlab application that works together with Clanguage software from the WFDB Software Package, see RCVSIM, contributed by Ramakrishna Mukkamala.
Matlab code for calculating sample entropy (SampEn) has been contributed by Doug Lake, Randall Moorman, and Cao Hanqing, and is available here.
We thank the authors for these generous contributions to PhysioToolkit. If you find these programs useful, please send us a note (or write to the contributors directly).
Name Last modified Size Description
Parent Directory  ECG_Exporter/ 17May2005 15:34  ECGwaveGen/ 05Jan2012 20:46  WFDB_tools.tar.gz 29Apr2006 22:35 393K gzipcompressed tar archive plotATM1.0.m 11Dec2009 11:39 1.8K Matlab/Octave source plotATM.m 31Jan2014 10:53 1.9K Matlab/Octave source rddata.m 28Feb2003 09:10 5.3K Matlab/Octave source wfdbappmatlab/ 30Oct2015 16:51  wfdbsubset/ 05Jan2012 20:46  wfdbswigmatlab/ 22Aug2013 16:39  wfdb_tools/ 05Jan2012 20:46 
Your comments and suggestions are welcome. We encourage you to use our feedback form to comment on this page. If you would like to receive a reply, please send your comments by email to webmaster@physionet.org. Updated Wednesday, 6 January 2016 at 14:44 EST 
PhysioNet is supported by the National Institute of General Medical Sciences (NIGMS) and the National Institute of Biomedical Imaging and Bioengineering (NIBIB) under NIH grant number 2R01GM10498709.
