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