Module alexandria.signals.standard

Standard signals

Expand source code
# SPDX-FileCopyrightText: © 2021 Antonio López Rivera <antonlopezr99@gmail.com>
# SPDX-License-Identifier: GPL-3.0-only

"""
Standard signals
----------------
"""


import numpy as np

from alexandria.math.differentiation import forward_euler

from alexandria.data_structs.array import find_nearest_entry


def step(t):
    """
    Step signal.

    :param t: Time vector.
    :return: Step signal.
    """
    return np.array([1 if i > 0 else 0 for i in t]).flatten()


def ramp(t):
    """
    Ramp signal.

    :param t: Time vector.
    :return: Ramp signal.
    """
    return np.array([max(0, i) for i in t]).flatten()


def square(f, t):
    """
    Square signal.

    :param f: Square signal "formula".
    :param t: Time vector.
    :return: Square signal vector.

    Example:

        t = np.linspace(0, 10, 100)
        f = (-t+5)/3

        s = square(f, t)

    """
    base           = abs(1/forward_euler(t, f))
    center_idx     = find_nearest_entry(f, 0)[0]
    center         = t[center_idx]
    l_idx          = find_nearest_entry(t, center - base/2)[0]
    u_idx          = find_nearest_entry(t, center + base/2)[0]
    s              = np.zeros(t.shape)
    s[l_idx:u_idx] = 1
    return s


def triangular(f, t):
    """
    Triangular signal. Convolution of two square waves.

    :param f: Triangular signal "formula".
    :param t: Time vector.
    :return: Triangular signal vector.

    Example:

        t = np.linspace(0, 10, 100)
        f = (-t+5)/3

        s = triangular(f, t)

    """
    s = np.convolve(square(f, t), square(f, t), 'same')
    s = s/s.max()
    return s

Functions

def ramp(t)

Ramp signal.

:param t: Time vector. :return: Ramp signal.

Expand source code
def ramp(t):
    """
    Ramp signal.

    :param t: Time vector.
    :return: Ramp signal.
    """
    return np.array([max(0, i) for i in t]).flatten()
def square(f, t)

Square signal.

:param f: Square signal "formula". :param t: Time vector. :return: Square signal vector.

Example

t = np.linspace(0, 10, 100) f = (-t+5)/3

s = square(f, t)

Expand source code
def square(f, t):
    """
    Square signal.

    :param f: Square signal "formula".
    :param t: Time vector.
    :return: Square signal vector.

    Example:

        t = np.linspace(0, 10, 100)
        f = (-t+5)/3

        s = square(f, t)

    """
    base           = abs(1/forward_euler(t, f))
    center_idx     = find_nearest_entry(f, 0)[0]
    center         = t[center_idx]
    l_idx          = find_nearest_entry(t, center - base/2)[0]
    u_idx          = find_nearest_entry(t, center + base/2)[0]
    s              = np.zeros(t.shape)
    s[l_idx:u_idx] = 1
    return s
def step(t)

Step signal.

:param t: Time vector. :return: Step signal.

Expand source code
def step(t):
    """
    Step signal.

    :param t: Time vector.
    :return: Step signal.
    """
    return np.array([1 if i > 0 else 0 for i in t]).flatten()
def triangular(f, t)

Triangular signal. Convolution of two square waves.

:param f: Triangular signal "formula". :param t: Time vector. :return: Triangular signal vector.

Example

t = np.linspace(0, 10, 100) f = (-t+5)/3

s = triangular(f, t)

Expand source code
def triangular(f, t):
    """
    Triangular signal. Convolution of two square waves.

    :param f: Triangular signal "formula".
    :param t: Time vector.
    :return: Triangular signal vector.

    Example:

        t = np.linspace(0, 10, 100)
        f = (-t+5)/3

        s = triangular(f, t)

    """
    s = np.convolve(square(f, t), square(f, t), 'same')
    s = s/s.max()
    return s