Basic processing procedures for analog signals (e.g., performing a z-score of a signal, or filtering a signal).
elephant.signal_processing.
butter
(signal, highpass_freq=None, lowpass_freq=None, order=4, filter_function='filtfilt', fs=1.0, axis=-1)[source]¶Butterworth filtering function for neo.AnalogSignal. Filter type is determined according to how values of highpass_freq and lowpass_freq are given (see Parameters section for details).
Parameters: | signal : AnalogSignal or Quantity array or NumPy ndarray
highpass_freq, lowpass_freq : Quantity or float
order : int
filter_function : string
fs : Quantity or float
axis : int
|
---|---|
Returns: | filtered_signal : AnalogSignal or Quantity array or NumPy ndarray
|
elephant.signal_processing.
hilbert
(signal, N='nextpow')[source]¶Apply a Hilbert transform to an AnalogSignal object in order to obtain its (complex) analytic signal.
The time series of the instantaneous angle and amplitude can be obtained as the angle (np.angle) and absolute value (np.abs) of the complex analytic signal, respectively.
By default, the function will zero-pad the signal to a length corresponding to the next higher power of 2. This will provide higher computational efficiency at the expense of memory. In addition, this circumvents a situation where for some specific choices of the length of the input, scipy.signal.hilbert() will not terminate.
Parameters: | signal : neo.AnalogSignal
N : string or int
|
---|---|
Returns: | neo.AnalogSignal
|
elephant.signal_processing.
zscore
(signal, inplace=True)[source]¶Apply a z-score operation to one or several AnalogSignal objects.
The z-score operation subtracts the mean of the signal, and
divides by its standard deviation
:
If an AnalogSignal containing multiple signals is provided, the z-transform is always calculated for each signal individually.
If a list of AnalogSignal objects is supplied, the mean and standard
deviation are calculated across all objects of the list. Thus, all list
elements are z-transformed by the same values of and
. For AnalogSignals, each signal of the array is
treated separately across list elements. Therefore, the number of signals
must be identical for each AnalogSignal of the list.
Parameters: | signal : neo.AnalogSignal or list of neo.AnalogSignal
inplace : bool
|
---|---|
Returns: | neo.AnalogSignal or list of neo.AnalogSignal
|
Examples
>>> a = neo.AnalogSignal(
... np.array([1, 2, 3, 4, 5, 6]).reshape(-1,1)*mV,
... t_start=0*s, sampling_rate=1000*Hz)
>>> b = neo.AnalogSignal(
... np.transpose([[1, 2, 3, 4, 5, 6], [11, 12, 13, 14, 15, 16]])*mV,
... t_start=0*s, sampling_rate=1000*Hz)
>>> c = neo.AnalogSignal(
... np.transpose([[21, 22, 23, 24, 25, 26], [31, 32, 33, 34, 35, 36]])*mV,
... t_start=0*s, sampling_rate=1000*Hz)
>>> print zscore(a)
[[-1.46385011]
[-0.87831007]
[-0.29277002]
[ 0.29277002]
[ 0.87831007]
[ 1.46385011]] dimensionless
>>> print zscore(b)
[[-1.46385011 -1.46385011]
[-0.87831007 -0.87831007]
[-0.29277002 -0.29277002]
[ 0.29277002 0.29277002]
[ 0.87831007 0.87831007]
[ 1.46385011 1.46385011]] dimensionless
>>> print zscore([b,c])
[<AnalogSignal(array([[-1.11669108, -1.08361877],
[-1.0672076 , -1.04878252],
[-1.01772411, -1.01394628],
[-0.96824063, -0.97911003],
[-0.91875714, -0.94427378],
[-0.86927366, -0.90943753]]) * dimensionless, [0.0 s, 0.006 s],
sampling rate: 1000.0 Hz)>,
<AnalogSignal(array([[ 0.78170952, 0.84779261],
[ 0.86621866, 0.90728682],
[ 0.9507278 , 0.96678104],
[ 1.03523694, 1.02627526],
[ 1.11974608, 1.08576948],
[ 1.20425521, 1.1452637 ]]) * dimensionless, [0.0 s, 0.006 s],
sampling rate: 1000.0 Hz)>]