Source code for draugr.numpy_utilities.signal_utilities.signal_projection
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = "Christian Heider Nielsen"
__doc__ = r"""
Created on 17-12-2020
"""
import numpy
__all__ = [
"normalise_signal",
"normalise_signal_minmax",
"normalise_signal_max_abs",
"heaviside",
]
from draugr.numpy_utilities.signal_utilities.signal_statistics import mean_square
[docs]def normalise_signal_minmax(signal: numpy.ndarray) -> numpy.ndarray:
"""description"""
return numpy.interp(signal, (signal.min(), signal.max()), (-1, 1))
[docs]def normalise_signal_max_abs(signal: numpy.ndarray) -> numpy.ndarray:
"""description"""
return signal / numpy.abs(signal).max()
[docs]def normalise_signal(
signal: numpy.ndarray, variance: numpy.ndarray = None
) -> numpy.ndarray:
"""Normalise power in y to a (standard normal) white noise signal.
Optionally normalise to power in signal `x`.
The mean power of a Gaussian with `mu=0` and `sigma=1` is 1."""
if variance is not None:
variance = mean_square(variance)
else:
variance = 1.0
return signal * numpy.sqrt(variance / mean_square(signal))
[docs]def heaviside(signal: numpy.ndarray) -> numpy.ndarray:
"""Heaviside.
Returns the value 0 for `x < 0`, 1 for `x > 0`, and 1/2 for `x = 0`."""
return 0.5 * (numpy.sign(signal) + 1)
if __name__ == "__main__":
def asiudha() -> None:
"""
:rtype: None
"""
a = numpy.random.random(9) - 0.5
print(
normalise_signal_minmax(a),
"\n",
normalise_signal_max_abs(a),
"\n",
normalise_signal(a),
)
print(heaviside(a))
asiudha()