Source code for elephant.waveform_features

# -*- coding: utf-8 -*-
Features of waveforms (e.g waveform_snr).

:copyright: Copyright 2014-2016 by the Elephant team, see `doc/authors.rst`.
:license: Modified BSD, see LICENSE.txt for details.

from __future__ import division, print_function

import numpy as np
import quantities as pq
import neo
import warnings

[docs]def waveform_snr(spiketrain): """ Return the signal-to-noise ratio of the waveforms of a SpikeTrain. Signal-to-noise ratio is defined as the difference in mean peak-to-trough voltage divided by twice the mean SD. The mean SD is computed by measuring the SD of the spike waveform over all acquired spikes at each of the sample time points of the waveform and then averaging [1]. Parameters ---------- spiketrain : Neo SpikeTrain The spike times with attached waveforms. Returns ------- snr : float signal-to-noise ratio according to Hatsopoulos 2007 Raises ------ ValueError If `spiketrain` has no attached waveforms. References ---------- [1] Hatsopoulos, N. G., Xu, Q. & Amit, Y. Encoding of Movement Fragments in the Motor Cortex. J. Neurosci. 27, 5105–5114 (2007). """ # check whether spiketrain contains waveforms if spiketrain.waveforms is None: raise ValueError('There are no waveforms attached to this \ neo.Spiketrain. Did you forget to set \ load_waveforms=True in neoIO.read_block()?') # average over all waveforms for each bin mean_waveform = np.mean(spiketrain.waveforms.magnitude, axis=0)[0] # standard deviation over all waveforms for each bin std_waveform = np.std(spiketrain.waveforms.magnitude, axis=0)[0] mean_std = np.mean(std_waveform) # signal peak_to_trough_voltage = np.max(mean_waveform) - np.min(mean_waveform) # noise noise = 2 * mean_std if noise == 0: warnings.warn('The noise was evaluated to 0.') snr = np.nan else: snr = peak_to_trough_voltage / noise return snr