Source code for tftb.generators.amplitude_modulated

import numpy as np
from math import sqrt


[docs]def amgauss(n_points, t0=None, spread=None): """Generate a Gaussian amplitude modulated signal. :param n_points: Number of points in the output. :param t0: Center of the Gaussian function. (default: t0 / 2) :param spread: Standard deviation of the Gaussian. (default 2 * sqrt(n_points) :type n_points: int :type t0: float :type spread: float :return: Gaussian function centered at time ``t0``. :rtype: numpy.ndarray :Example: >>> x = amgauss(160) >>> plot(x) #doctest: +SKIP .. plot:: docstring_plots/generators/amplitude_modulated/amgauss1.py >>> x = amgauss(160, 90) >>> plot(x) #doctest: +SKIP .. plot:: docstring_plots/generators/amplitude_modulated/amgauss2.py """ if t0 is None: t0 = round(n_points / 2.0) if spread is None: spread = 2 * sqrt(n_points) if n_points <= 0: raise TypeError("n_points should be >= 0") else: tmt0 = np.arange(1, n_points + 1, dtype=float) - t0 y = np.exp(-((tmt0 / spread) ** 2) * np.pi) return y
[docs]def amexpos(n_points, t0=None, spread=None, kind="bilateral"): """Exponential amplitude modulation. `amexpos` generates an exponential amplitude modulation starting at time `t0` and spread proportioanl to `spread`. :param n_points: Number of points. :param kind: "bilateral" (default) or "unilateral" :param t0: Time center. :param spread: Standard deviation. :type n_points: int :type kind: str :type t0: float :type spread: float :return: exponential function :rtype: numpy.ndarray :Examples: >>> x = amexpos(160) >>> plot(x) #doctest: +SKIP .. plot:: docstring_plots/generators/amplitude_modulated/amexpos_bilateral.py >>> x = amexpos(160, kind='unilateral') >>> plot(x) #doctest: +SKIP .. plot:: docstring_plots/generators/amplitude_modulated/amexpos_unilateral.py """ if t0 is None: t0 = round(n_points / 2.0) if spread is None: spread = 2 * sqrt(n_points) if n_points <= 0: raise TypeError else: tmt0 = np.arange(n_points) - t0 if kind == "bilateral": y = np.exp(-sqrt(2 * np.pi) * np.abs(tmt0) / spread) else: y = np.exp(-sqrt(np.pi) * tmt0 / spread) * (tmt0 >= 0.0) return y
[docs]def amrect(n_points, t0=None, spread=None): """Generate a rectangular amplitude modulation. :param n_points: Number of points in the function. :param t0: Time center :param spread: standard deviation of the function. :type n_points: int :type t0: float :type spread: float :return: A rectangular amplitude modulator. :rtype: numpy.ndarray. :Examples: >>> x = amrect(160, 90, 40.0) >>> plot(x) #doctest: +SKIP .. plot:: docstring_plots/generators/amplitude_modulated/amrect1.py """ if t0 is None: t0 = round(n_points / 2.0) if spread is None: spread = 2 * sqrt(n_points) if n_points <= 0: raise TypeError else: tmt0 = np.arange(n_points) - t0 y = np.abs(tmt0) <= 0.5 * spread * sqrt(3.0 / np.pi) return y
[docs]def amtriang(n_points, t0=None, spread=None): """Generate a triangular amplitude modulation. :param n_points: Number of points in the function. :param t0: Time center :param spread: standard deviation of the function. :type n_points: int :type t0: float :type spread: float :return: A triangular amplitude modulator. :rtype: numpy.ndarray. :Examples: >>> x = amtriang(160) >>> plot(x) #doctest: +SKIP .. plot:: docstring_plots/generators/amplitude_modulated/amtriang1.py """ if t0 is None: t0 = round(n_points / 2.0) if spread is None: spread = 2 * sqrt(n_points) if n_points <= 0: raise TypeError else: tmt0 = np.arange(n_points) - t0 L = sqrt(10.0 / np.pi) * spread / 2.0 t = np.amin(np.c_[L + tmt0, L - tmt0], axis=1) t = np.c_[t, np.zeros(t.shape)] y = np.amax(t, axis=1) / L return y
if __name__ == '__main__': amgauss(128) amexpos(128) amrect(128) amtriang(128)