Introduction: The aim of the Physionet/CinC Challenge 2017 is to automatically classify atrial fibrillation (AF) from a short single lead ECG recording. The Challenge provides 8,528 labeled ECG recordings; each recording was labeled as normal, AF, other, or noisy. In addition, the Challenge provides sample code which includes an R-peak detector and a simple classifier.Algorithm: We use an ensemble of features extracted from the ECG signals to create a four-class support vector machine (SVM) classifier. Included in the feature set are statistics obtained from the ECG signal, its spectrum, and the RR-intervals. In addition, we learn a 32-element sparse coding dictionary on the sorted RR-intervals of the ECG signals. Using the dictionary, we calculate a sparse coefficient vector for each training sample and put these through a soft-margin linear SVM. The soft-margin scores are used as additional features in the final classifier.Results: Our algorithm achieves cross-validated F1 scores of 0.874, 0.756, and 0.689 (for normal, AF, and other files, respectively), resulting in a final crossvalidated challenge score of 0.773. The score when tested on a subset of the unknown data is 0.78 (with F1 scores of 0.88, 0.80, 0.65). The official challenge score was 0.77.Conclusions: We developed an algorithm to classify ECG recordings as normal, AF, other, or noisy. Our results show that sparse coding is an effective way to define discriminating features from a list of sorted RR-intervals. In addition, these sparse codes complement more commonly used features in the classification task. Further work will attempt to increase the accuracy of the algorithm by exploring other features and classifiers while still using sparse coding as an unsupervised feature extractor.