Source code for patch_denoise.simulation.noise
"""Functions to add different source of temporal noise to data."""
import numpy as np
from numpy.random import default_rng
[docs]
def add_temporal_gaussian_noise(array, sigma=1, g_factor_map=None, rng=None):
"""Add gaussian noise to array.
Parameters
----------
array: numpy.ndarray
The noise_free ND-array, where the last dimension is a dynamical one
(e.g. time)
sigma: float
gaussian noise variance
g_factor_map: numpy.ndarray, optional
Spatial variation of the noise ((N-1)D array). default is identity.
Returns
-------
numpy.ndarray
A noisy array
"""
if rng is None:
rng = default_rng()
shape = array.shape
g_noise = sigma * rng.standard_normal(shape)
if g_factor_map is None:
g_factor_map = np.ones(shape[:-1])
if np.iscomplex(array).any():
g_noise += 1j * sigma * rng.standard_normal(shape)
return array + (g_noise * g_factor_map[..., None])
[docs]
def add_temporal_rician_noise(array, scale=1, rng=None):
"""Add center rician noise to array.
Parameters
----------
array: numpy.ndarray
The noise-free array
sigma: float
The scale of the Rice distribution
Notes
-----
This function considered centered Rician noise [1]_,
and thus the noise generated follows a Rayleigh distribution [2]_.
References
----------
.. [1] https://en.m.wikipedia.org/wiki/Rice_distribution
.. [2] https://en.m.wikipedia.org/wiki/Rayleigh_distribution
"""
if rng is None:
rng = default_rng()
noise = rng.rayleigh(scale, array.shape)
return array + noise