Skip to content

Latest commit

 

History

History
65 lines (40 loc) · 1.95 KB

File metadata and controls

65 lines (40 loc) · 1.95 KB

Signal-to-noise ratio (snr)

Calculation

  • Aμs : maximum amplitude of the mean spike waverform (on the best channel).
  • σb : standard deviation of the background noise on the same channel (usually computed via the median absolute deviation).

$$\textrm{SNR} = \frac{A_{\mu s}}{\sigma_b}$$

Expectation and use

A high SNR unit has a signal which is greater in amplitude than the background noise and is likely to correspond to a neuron [Jackson], [Lemon]. A low SNR value (close to 0) suggests that the unit is highly contaminated by noise (type I error).

Example code

Without SpikeInterface:

import numpy as np
import scipy.stats

data        # The data from your recording in shape (channel, time)
mean_wvf    # The mean waveform of your unit in shape (channel, time)
# If your data is filtered, then both data and mean_wvf need to be filtered the same.

best_channel = np.argmax(np.max(np.abs(mean_wvf), axis=1))
noise_level = scipy.stats.median_abs_deviation(data[best_channel], scale="normal")
amplitude = np.max(np.abs(mean_wvf))

SNR = amplitude / noise_level

With SpikeInterface:

import spikeinterface.qualitymetrics as qm

# Make recording, sorting and wvf_extractor object for your data.

SNRs = qm.compute_snrs(wvf_extractor)
# SNRs is a dict containing the units' ID as keys and their SNR as values.

References

spikeinterface.qualitymetrics.misc_metrics.compute_snrs

Literature

Presented by [Lemon] and useful initial discussion by [Jackson].