1.5 FUNCIONES SINGULARES

Invítame a un Café

Discretas

Impulso Unitario (dirac)

\begin{equation} \large \delta[n] = \begin{cases} 1, & n = 0 \ 0, & n \neq 0 \end{cases} \end{equation}

import numpy as np
import matplotlib.pyplot as plt
import sympy as sym

%matplotlib inline
plt.style.use('bmh') # estilo de las graficas
from IPython.display import Latex # para visualizar ecuaciones en jupyter
def dirac(n):
    return np.where(n == 0, 1.0, 0.0)

n = np.arange(-10, 11)
x = dirac(n)
plt.stem(n, x, use_line_collection=True)
plt.xlabel('$n$')
plt.title('Impulso Unitario')
plt.ylabel('$\delta[n]$')
plt.ylim([-0.1, 1.1]);

png

Escalon Unitario (Heaviside)

\begin{equation} \large \mu[n] = \begin{cases} 1, & n \geq 0 \ 0, & n < 0 \end{cases} \end{equation}

# definiendo la función heaviside en dominio discreto
def heaviside(n):
    return np.where(n >= 0, 1.0, 0.0)

n = np.arange(-5, 20)
x = heaviside(n)

plt.stem(n, x, use_line_collection=True)
plt.xlabel('$n$')
plt.title('Escalon Unitario')
plt.ylabel('$\mu [n]$')
plt.ylim([-0.1, 1.1]);

png

Rampa

\begin{equation} \large r[n] = \begin{cases} n , & n \geq 0 \ 0 , & n < 0 \end{cases} \end{equation} El valor que multiplique la función rampa modificara la pendiente de la señal.

# definiendo la función rampa en dominio discreto
def rampa(n):
    return n*(np.where(n >= 0, 1.0, 0.0))

n = np.arange(-5, 20)
x = rampa(n)

plt.stem(n, x, use_line_collection=True)
plt.xlabel('$n$')
plt.title('Rampa Discreta')
plt.ylabel('$r[n]$')
plt.ylim([-0.1, 20]);

png

Relaciones entre las funciones

\begin{equation} \large \delta[n] = \mu[n]-\mu[n-1] \end{equation} \begin{equation} \large \mu[n] = \sum_{m=0}^{\infty} \delta[m] = \sum_{k=0}^{\infty} \delta[n-k] \end{equation}

\begin{equation} \large r[n] = n \mu[n] \end{equation}

A partir de las ecuaciones anteriores se puede deducir que la función impulso es la primera derivada del escalón y el escalón es la primera derivada de la función rampa.

La secuencia impulso unitario (ecuación 5) se puede utilizar para obtener muestras del valor de una señal en $n=0 \rightarrow x[n]\delta[n] = x[0]\delta[n]$

De forma general, EL muestreo del impulso unitario esta definido como : $x[n]\delta[n-n_{0}] = x[n_{0}]\delta[n-n_{0}]$

Continuas

Impulso Unitario (dirac)

El impulso unitario $\delta (t)$ es una función definida primero por Paul Dirac de la forma: \begin{equation} \large \delta(t)= \begin{cases} 1, & t = 0 \ 0, & t \neq 0\end{cases} \end{equation} Se puede ver al impulso como un pulso rectangular con ancho infinitesimal y de área unitaria. \begin{equation} \large \int_{-\infty}^{\infty} \delta(t) dt = 1 \end{equation}

Matematica y teoricamente se representa como una flecha con altura de 1 de la siguiente manera

dirac

El impulso de Dirac es una de las señales más importantes en la teoría de sistemas y señales. Se utiliza para la caracterización de sistemas Lineales e invariantes en el tiempo (LTI) y el modelado de señales por medio de impulsos.

import numpy as np
rojo = '\033[91m'  # para imprimir con color rojo
finrojo = '\033[0m'
msg = ('Nota importante: \n'
       'Solo por ilustracion en Python se realiza la siguiente grafica,\n'
       'ya que es un infinitesimal, entonces no se podria ver')
print(rojo+msg+finrojo)

# el código siguiente solo es para hacer una ilustracion
# de la señal impulso, sin ser de esta forma verdaderamente


# INGRESO
def u(t): return np.piecewise(t, t >= 0, [1, 0])


a = -10
b = 10
dt = 0.1

t = np.arange(a, b, dt)

u0 = u(t)
udt = u(t-dt)
impulso = u0 - udt

# SALIDA - GRAFICA
plt.figure(4)
plt.plot(t, impulso)

plt.margins(dt)
plt.xlabel('t')
plt.ylabel('$\delta (t)$')
plt.title('impulso()');
Nota importante:
Solo por ilustracion en Python se realiza la siguiente grafica,
ya que es un infinitesimal, entonces no se podria ver

png

# importar librerias
import sympy as sym
t = sym.symbols('t', real=True)

print('definición de la función impulso')
delta = sym.DiracDelta(t)
delta
definición de la función impulso

$\displaystyle \delta\left(t\right)$

display(Latex('$\int_{-\infty}^{\infty} \delta(t) dt =$'))

sym.integrate(delta, (t, -sym.oo, sym.oo))

$\int_{-\infty}^{\infty} \delta(t) dt =$

$\displaystyle 1$

El impulso es el pulso mas corto que se puede aplicar a un sistema, la respuesta no sera influenciado por la duracion del pulso o por la forma del pulso; sino por el efecto neto integrado del pulso, es decir su area.

Al igual que con las señales discretas: $t=0 \rightarrow x(t)\delta(t) = x(0)\delta(t)$

De forma general, El muestreo del impulso unitario esta definido como : $x(n)\delta(t-t_{0}) = x(t_{0})\delta(t-t_{0})$

Escalon Unitario (Heaviside)

El escalon unitario continuo esta definido como: \begin{equation} \large \mu(t)= \begin{cases} 1, & t\geq 0 \ 0, & t<0\end{cases} \end{equation} Tiene una discontinuidad en $t=0$

En Python se define asi $\theta (t)$

print('definición de la función Escalon Unitario')
paso = sym.Heaviside(t)
paso
definición de la función Escalon Unitario

$\displaystyle \theta\left(t\right)$

sym.plot(paso, (t, -2, 2), ylim=[-0.2, 1.2],
         ylabel='$\mu(t)$', title='Escalon Unitario');

png

Rampa

\begin{equation} \large r(t) = \begin{cases} t , & t \geq 0 \ 0 , & t < 0 \end{cases} \end{equation} El valor que multiplique la función rampa modificara la pendiente de la señal.

print('definición de la función Rampa')
rampa = t*sym.Heaviside(t)
rampa
definición de la función Rampa

$\displaystyle t \theta\left(t\right)$

sym.plot(rampa, (t, -2, 4), ylim=[-0.2, 4],
         ylabel='$r(t)$', title='Rampa');

png

Relaciones entre las funciones

El escalon unitario continuo es la integral del impulso unitario \begin{equation} \large \mu (t) = \int_{-\infty}^{t} \delta(\tau) d\tau \end{equation}

\begin{equation} \large \delta (t) = \frac{\mathrm{d} \mu (t) }{\mathrm{d} t} \end{equation} Lo anterior no es formalmente diferenciable

\begin{equation} \large r(t) = t \mu (t) \end{equation}

REFERENCIAS

Oppenheim 1.4

Phd. Jose R. Zapata

Anterior
Siguiente