Skip to content

noise

Add various noise sources to signal.

Functions

add_baseline_wander(data, amplitude=0.1, frequency=0.05, sample_rate=1000, signal_sd=None)

Add baseline wander to signal.

Parameters:

  • data (NDArray) –

    Signal

  • amplitude (float, default: 0.1 ) –

    Amplitude in st dev. Defaults to 0.1.

  • frequency (float, default: 0.05 ) –

    Baseline wander frequency. Defaults to 0.05 Hz.

  • sample_rate (float, default: 1000 ) –

    Sample rate in Hz. Defaults to 1000 Hz.

  • signal_sd (float | None, default: None ) –

    Signal standard deviation. Defaults to None.

Returns:

  • NDArray

    npt.NDArray: Signal w/ baseline wander

Source code in physiokit/signal/noise.py
def add_baseline_wander(
    data: npt.NDArray,
    amplitude: float = 0.1,
    frequency: float = 0.05,
    sample_rate: float = 1000,
    signal_sd: float | None = None,
) -> npt.NDArray:
    """Add baseline wander to signal.

    Args:
        data (npt.NDArray): Signal
        amplitude (float, optional): Amplitude in st dev. Defaults to 0.1.
        frequency (float, optional): Baseline wander frequency. Defaults to 0.05 Hz.
        sample_rate (float, optional): Sample rate in Hz. Defaults to 1000 Hz.
        signal_sd (float|None, optional): Signal standard deviation. Defaults to None.

    Returns:
        npt.NDArray: Signal w/ baseline wander
    """
    if signal_sd is None:
        signal_sd = np.nanstd(data)

    return data + create_noise_distortions(
        len(data),
        signal_sd=signal_sd,
        sample_rate=sample_rate,
        frequencies=frequency,
        amplitudes=amplitude,
        noise_shapes="laplace",
    )

add_burst_noise(data, amplitude=1, frequency=100, num_bursts=1, sample_rate=1000, signal_sd=None)

Add high frequency burst noise to signal.

Parameters:

  • data (NDArray) –

    Signal

  • amplitude (float, default: 1 ) –

    Amplitude in st dev. Defaults to 1.

  • frequency (float, default: 100 ) –

    High frequency burst in Hz. Defaults to 100 Hz.

  • num_bursts (int, default: 1 ) –
    bursts to inject. Defaults to 1.
  • sample_rate (float, default: 1000 ) –

    Sample rate in Hz. Defaults to 1000 Hz.

  • signal_sd (float | None, default: None ) –

    Signal standard deviation. Defaults to None.

Returns:

  • NDArray

    npt.NDArray: Signal w/ burst noise

Source code in physiokit/signal/noise.py
def add_burst_noise(
    data: npt.NDArray,
    amplitude: float = 1,
    frequency: float = 100,
    num_bursts: int = 1,
    sample_rate: float = 1000,
    signal_sd: float | None = None,
) -> npt.NDArray:
    """Add high frequency burst noise to signal.

    Args:
        data (npt.NDArray): Signal
        amplitude (float, optional): Amplitude in st dev. Defaults to 1.
        frequency (float, optional): High frequency burst in Hz. Defaults to 100 Hz.
        num_bursts (int, optional): # bursts to inject. Defaults to 1.
        sample_rate (float, optional): Sample rate in Hz. Defaults to 1000 Hz.
        signal_sd (float|None, optional): Signal standard deviation. Defaults to None.

    Returns:
        npt.NDArray: Signal w/ burst noise
    """

    if signal_sd is None:
        signal_sd = np.nanstd(data)
    return data + create_noise_artifacts(
        len(data),
        signal_sd=signal_sd,
        sample_rate=sample_rate,
        frequency=frequency,
        amplitude=amplitude,
        num_artifacts=num_bursts,
        min_artifact_percent=0.001,
        max_artifact_percent=0.01,
        artifacts_shape="laplace",
    )

add_emg_noise(data, scale=1e-05, sample_rate=1000)

Add EMG noise to signal.

Parameters:

  • data (NDArray) –

    Signal

  • scale (float, default: 1e-05 ) –

    Noise scale. Defaults to 1e-5.

  • sample_rate (float, default: 1000 ) –

    Sampling rate in Hz. Defaults to 1000.

Returns:

  • NDArray

    npt.NDArray: Signal with EMG noise

Source code in physiokit/signal/noise.py
def add_emg_noise(data: npt.NDArray, scale: float = 1e-5, sample_rate: float = 1000) -> npt.NDArray:
    """Add EMG noise to signal.

    Args:
        data (npt.NDArray): Signal
        scale (float, optional): Noise scale. Defaults to 1e-5.
        sample_rate (float, optional): Sampling rate in Hz. Defaults to 1000.

    Returns:
        npt.NDArray: Signal with EMG noise
    """
    noise = np.tile(
        np.sin(np.linspace(-0.5 * np.pi, 1.5 * np.pi, int(sample_rate)) * 10 * sample_rate),
        int(np.ceil(data.size // sample_rate)),
    )
    return data + scale * noise[: data.size]

add_lead_noise(data, scale=0.001)

Add lead noise to signal.

Parameters:

  • data (NDArray) –

    Signal

  • scale (float, default: 0.001 ) –

    Noise scale. Defaults to 1.

Returns:

  • NDArray

    npt.NDArray: Signal with lead noise

Source code in physiokit/signal/noise.py
def add_lead_noise(data: npt.NDArray, scale: float = 1e-3) -> npt.NDArray:
    """Add lead noise to signal.

    Args:
        data (npt.NDArray): Signal
        scale (float, optional): Noise scale. Defaults to 1.

    Returns:
        npt.NDArray: Signal with lead noise
    """
    return data + np.random.normal(0, scale, size=data.shape)

add_motion_noise(data, amplitude=0.2, frequency=0.5, sample_rate=1000, signal_sd=None)

Add motion noise to signal.

Parameters:

  • data (NDArray) –

    Signal

  • amplitude (float, default: 0.2 ) –

    Amplitude in st dev. Defaults to 0.2.

  • frequency (float, default: 0.5 ) –

    Motion frequency in Hz. Defaults to 0.5 Hz.

  • sample_rate (float, default: 1000 ) –

    Sample rate in Hz. Defaults to 1000 Hz.

  • signal_sd (float | None, default: None ) –

    Signal standard deviation. Defaults to None.

Returns:

  • NDArray

    npt.NDArray: Signal w/ motion noise

Source code in physiokit/signal/noise.py
def add_motion_noise(
    data: npt.NDArray,
    amplitude: float = 0.2,
    frequency: float = 0.5,
    sample_rate: float = 1000,
    signal_sd: float | None = None,
) -> npt.NDArray:
    """Add motion noise to signal.

    Args:
        data (npt.NDArray): Signal
        amplitude (float, optional): Amplitude in st dev. Defaults to 0.2.
        frequency (float, optional): Motion frequency in Hz. Defaults to 0.5 Hz.
        sample_rate (float, optional): Sample rate in Hz. Defaults to 1000 Hz.
        signal_sd (float|None, optional): Signal standard deviation. Defaults to None.

    Returns:
        npt.NDArray: Signal w/ motion noise
    """
    if signal_sd is None:
        signal_sd = np.nanstd(data)

    return data + create_noise_distortions(
        len(data),
        signal_sd=signal_sd,
        sample_rate=sample_rate,
        frequencies=frequency,
        amplitudes=amplitude,
        noise_shapes="laplace",
    )

add_noise_sources(data, amplitudes, frequencies, noise_shapes, sample_rate=1000, signal_sd=None)

Add multiple noise sources to signal.

Parameters:

  • data (NDArray) –

    Signal

  • amplitudes (list[float]) –

    Amplitudes in st dev.

  • frequencies (list[float]) –

    Frequencies in Hz.

  • noise_shapes (list[str]) –

    Noise shapes.

  • sample_rate (float, default: 1000 ) –

    Sample rate in Hz. Defaults to 1000 Hz.

  • signal_sd (float | None, default: None ) –

    Signal standard deviation. Defaults to None.

Returns:

  • NDArray

    npt.NDArray: Signal w/ noise

Source code in physiokit/signal/noise.py
def add_noise_sources(
    data: npt.NDArray,
    amplitudes: list[float],
    frequencies: list[float],
    noise_shapes: list[str],
    sample_rate: float = 1000,
    signal_sd: float | None = None,
) -> npt.NDArray:
    """Add multiple noise sources to signal.

    Args:
        data (npt.NDArray): Signal
        amplitudes (list[float]): Amplitudes in st dev.
        frequencies (list[float]): Frequencies in Hz.
        noise_shapes (list[str]): Noise shapes.
        sample_rate (float, optional): Sample rate in Hz. Defaults to 1000 Hz.
        signal_sd (float|None, optional): Signal standard deviation. Defaults to None.

    Returns:
        npt.NDArray: Signal w/ noise
    """
    if signal_sd is None:
        signal_sd = np.nanstd(data)

    return data + create_noise_distortions(
        len(data),
        signal_sd=signal_sd,
        sample_rate=sample_rate,
        frequencies=frequencies,
        amplitudes=amplitudes,
        noise_shapes=noise_shapes,
    )

add_powerline_noise(data, amplitude=0.01, frequency=50, sample_rate=1000, signal_sd=None)

Add powerline noise to signal.

Parameters:

  • data (NDArray) –

    Signal

  • amplitude (float, default: 0.01 ) –

    Amplitude in st dev. Defaults to 0.01.

  • frequency (float, default: 50 ) –

    Powerline frequency in Hz. Defaults to 50 Hz.

  • sample_rate (float, default: 1000 ) –

    Sample rate in Hz. Defaults to 1000 Hz.

  • signal_sd (float | None, default: None ) –

    Signal standard deviation. Defaults to None.

Returns:

  • NDArray

    npt.NDArray: Signal w/ powerline noise

Source code in physiokit/signal/noise.py
def add_powerline_noise(
    data: npt.NDArray,
    amplitude: float = 0.01,
    frequency: float = 50,
    sample_rate: float = 1000,
    signal_sd: float | None = None,
) -> npt.NDArray:
    """Add powerline noise to signal.

    Args:
        data (npt.NDArray): Signal
        amplitude (float, optional): Amplitude in st dev. Defaults to 0.01.
        frequency (float, optional): Powerline frequency in Hz. Defaults to 50 Hz.
        sample_rate (float, optional): Sample rate in Hz. Defaults to 1000 Hz.
        signal_sd (float|None, optional): Signal standard deviation. Defaults to None.

    Returns:
        npt.NDArray: Signal w/ powerline noise
    """
    return data + create_powerline_noise(
        len(data),
        signal_sd=signal_sd,
        sample_rate=sample_rate,
        frequency=frequency,
        amplitude=amplitude,
    )

add_random_scaling(data, lower=0.5, upper=2.0)

Randomly scale signal.

Parameters:

  • data (NDArray) –

    Signal

  • lower (float, default: 0.5 ) –

    Lower bound. Defaults to 0.5.

  • upper (float, default: 2.0 ) –

    Upper bound. Defaults to 2.0.

Returns:

  • NDArray

    npt.NDArray: Signal with random scaling

Source code in physiokit/signal/noise.py
def add_random_scaling(data: npt.NDArray, lower: float = 0.5, upper: float = 2.0) -> npt.NDArray:
    """Randomly scale signal.

    Args:
        data (npt.NDArray): Signal
        lower (float, optional): Lower bound. Defaults to 0.5.
        upper (float, optional): Upper bound. Defaults to 2.0.

    Returns:
        npt.NDArray: Signal with random scaling
    """
    return data * random.uniform(lower, upper)

add_signal_attenuation()

Add signal attenuation to signal.

Source code in physiokit/signal/noise.py
def add_signal_attenuation() -> None:
    """Add signal attenuation to signal."""
    raise NotImplementedError()

add_signal_cutout()

Add cutout augmentation to signal.

Source code in physiokit/signal/noise.py
def add_signal_cutout() -> None:
    """Add cutout augmentation to signal."""
    raise NotImplementedError()

add_signal_shift(data, shift_amount=0.1)

Add signal shift augmentation to signal.

Source code in physiokit/signal/noise.py
def add_signal_shift(data: npt.NDArray, shift_amount: float = 0.1) -> npt.NDArray:
    """Add signal shift augmentation to signal."""
    shift_idx = random.randint(0, data.size)
    rst = data.copy()
    rst[shift_idx:] += shift_amount
    return rst