Source code for neurodsp.utils.norm
"""Normalization related utility functions."""
import numpy as np
###################################################################################################
###################################################################################################
[docs]def normalize_sig(sig, mean=None, variance=None):
"""Normalize the mean and variance of a signal.
Parameters
----------
sig : 1d array
Signal to normalize.
variance : float, optional
Variance to normalize to.
mean : float, optional
New mean for data to have.
Returns
-------
sig : 1d array
Input signal, with normalizations applied.
"""
# Apply variance & mean transformations
if variance is not None:
sig = normalize_variance(sig, variance=variance)
if mean is not None:
sig = demean(sig, mean=mean)
return sig
[docs]def demean(array, mean=0.):
"""Demean an array, updating to specified mean.
Parameters
----------
array : 1d array
Data to demean.
mean : float, optional, default: 0
New mean for data to have.
Returns
-------
out : 1d array
Demeaned data.
"""
return array - array.mean() + mean
[docs]def normalize_variance(array, variance=1.):
"""Normalize the variance of an array, updating to specified variance.
Parameters
----------
array : 1d array
Data to normalize variance to.
variance : float, optional, default: 1.0
Variance to normalize to.
Returns
-------
out : 1d array
Variance normalized data.
Notes
-----
If the input array is all zeros, this function simply returns the input.
"""
# If array is all zero, set to return the same array (can't update variance of 0)
if not array.any():
out = array
else:
out = array / array.std() * np.sqrt(variance)
return out