- 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).
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).
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.
- From the AllenSDK
spikeinterface.qualitymetrics.misc_metrics.compute_snrs
Presented by [Lemon] and useful initial discussion by [Jackson].