Ejemplo: Caminata de pasos aleatorios o Random Step Process
Referencia: Leon-García. E9.14 p.500
Un contador «up-down» o «sube-baja» genera pulsos +1 ó -1. La entrada del contador está dada por Dn = 2 In-1, donde In es un proceso aleatorio tipo Bernoulli.
Dn={+1−1, In=1, In=0
Por ejemplo Dn representaría el cambio en la posición de una partícula que se mueve a lo largo de una linea recta, y cambia entre ±1 cada unidad de tiempo. Ej: n=20, p=0.5
La media de Dn es:
mD(n) = E[Dn]
= E[ 2In -1] = 2E[In]-1
= 2p - 1
La varianza de Dn se encuentra como:
VAR[Dn] = VAR[2In - 1]
= 22 VAR[In]
= 4p(1 - p)
Las probabilidades de los eventos de Dn se calculan como en el ejemplo del tema de la Binomial.
Instrucciones en Python
# Proceso caminata de pasos aleatorios# Leon-Garcia E 9.14 p.500# propuesta: edelros@espol.edu.ecimport numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
# INGRESO# n=int(input('cuantos aleatorios: '))# p=float(input('probabilidad p: '))
n = 20
p = 0.5
# PROCEDIMIENTO# inicializa vectores
pasos = np.zeros(n, dtype=int)
camina = np.zeros(n, dtype=int)
ejex = np.zeros(n, dtype=int)
s = 0
for i inrange(0,n):
# genera aleatorio con binomial
pasos[i] = 2*(stats.binom.rvs(1,p))-1
s = s+pasos[i]
camina[i] = s
ejex[i] = i
# SALIDA# grafica pasos
plt.subplot(211)
plt.stem(ejex,pasos)
plt.ylabel('Pasos Dn')
plt.margins(0.05)
# grafica caminata aleatoria
plt.subplot(212)
plt.stem(ejex,camina)
plt.ylabel('Caminata Sn')
plt.margins(0.05)
plt.xlabel('n')
plt.show()
La forma mas simple de un proceso aleatorio – independiente, con secuencias identicamente distribuidas (iid).
Procesos aleatorios iid
La secuencia Xn de un proceso aleatorio iid consiste en una secuencia de variables independientes, identicamente distribuidas con cdf Fx(x), media m y varianza σ2 .
dado que Xn1 y Xn2 son variables independientes y si n1 = n2 = n:
Cx(n1, n2) = E[(Xn - m)2] = σ2
lo que permite expresarla como:
Cx(n1, n2) = σ2 δn1n2
donde δn1n2 = 1 si n1 = n2 y 0 para cualquier otro caso, que también expresa que su autocovarianza es cero en cualquier lugar exceptuando n1 = n2.
La función de autocorrelación de un proceso iid es:
Rx(n1, n2) = Cx(n1, n2) + m2
Ejemplo: Proceso aleatorio Bernoulli
Leon-García E9.13 pdf/p.499
La secuencia In es una secuencia de variable aleatoria independiente tipo Bernoulli.
Una ejecución se muestra en a figura. Se puede interpretar como el evento que un foco falle y se reemplace en un dia n.
tiene media y varianza:
m1 = p VAR[In] = p(1-p)
permite realizar cálculos de forma muy sencilla, por ejemplo, la probabilidad que los primeros cuatro bits tengan la secuencia 1001
Sean [X1, X2, … , Xk ] las k variables aleatorias obtenidas del muestreo de un proceso X(t,ω) en los tiempos: [t1, t2, … , tk] se describen como:
X1 = X(t1,ω),
X2 = X(t2,ω),
… ,
Xk = X(tk,ω),
mostrada en la figura:
El comportamiento conjunto del proceso aleatorio a estos k instantes de tiempo se da por la distribución acumulada conjunta del vector de las variables aleatorias :
X1, X2, … , Xk
Las probabilidades de cualquiera de los eventos del proceso aleatorio para todos o solo algunos de los instantes de tiempo, se pueden calcular por medio de la distribucion acumulada (cdf) con los metodos para vectores de variables aleatorias.
Por lo que un proceso aleatorio o estocástico se especifica por la colección de k-ésimo orden de las funciones de distribución acumuladas conjuntas :
Si el proceso estocastico es de tipo discreto, entonces la colección de funciones de probabilidad de masa para especificar el proceso estocastico será:
Sea Xn una secuencia de una variable aleatoria independiente e identicamente distribuida(i.i.d), tipo Bernoulli con p=1/2.
La pmf conjunta para cualquier k muestras de tiempo es entonces:
Sea Xn una secuencia de una variable aleatoria independiente e identicamente distribuida (i.i.d.), tipo Gausiana con media μ=0 y varianza σ2x. La función de densidad de probabilidad (pdf) conjunta para cualquier muestra de tiempo k es entonces:
Sea Xn una secuencia de una variable aleatoria independiente e identicamente distribuida, tipo Bernoulli con p=1/2. Sea Sn el número de 1’s en los primeros n intentos:
Sn = X1 + X2 + … + Xn para n=0,1,…
Sn es una función de n valores enteros crecientes que aumenta en valores unitarios siguiendo intervalos de tiempo aleatorios.
Instrucciones en Python
para Distribuciones conjuntas de muestras en el tiempo
# Realizaciones de un proceso aleatorio# León-García Fig 9.1# propuesta: edelros@espol.edu.ecimport numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
# INGRESO
n = 50 # muestras
A = 10 # amplitud
k = 10 # una muestra k<n# PROCEDIMIENTO
t = np.arange(0,n,1)
# genera variables aleatorias continuas uniformes
x1 = stats.uniform.rvs(loc=-A, scale=2*A ,size=n)
x2 = stats.uniform.rvs(loc=-A, scale=2*A ,size=n)
x3 = stats.uniform.rvs(loc=-A, scale=2*A ,size=n)
# SALIDAprint('t = ',k)
print('x1['+str(k)+']: ', x1[k])
print('x2['+str(k)+']: ', x2[k])
print('x3['+str(k)+']: ', x3[k])
# GRAFICAS
plt.suptitle('Realizaciones')
# grafica X1
plt.subplot(311)
plt.plot(t,x1)
plt.axvline(10)
plt.ylabel('x1')
plt.margins(0.05)
# grafica X2
plt.subplot(312)
plt.plot(t,x2)
plt.axvline(10)
plt.ylabel('x2')
plt.margins(0.05)
# grafica X3
plt.subplot(313)
plt.plot(t,x3)
plt.axvline(10)
plt.ylabel('x3')
plt.margins(0.05)
plt.show()
Un proceso aleatorio o proceso estocástico es una familia de variables aleatorias.
Por ejemplo, al enviar una secuencia de bits sobre un canal inalámbrico, no existe un grupo predeterminado de bits a transmitir, que para modelar se usa una secuencia infinita de variables aleatorias.
Tres realizaciones de X1, X2, … se obtienen como:
Instrucciones en Python
# secuencia de bits (trama)# propuesta: edelros@espol.edu.ecimport numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
# ingreso
n = 25
p = 0.5
# PROCEDIMIENTO# indice k
k = np.arange(1, n+1)
# genera muestras de variable aleatoria con bernoulli
x1 = stats.bernoulli.rvs(p, size=n)
x2 = stats.bernoulli.rvs(p, size=n)
x3 = stats.bernoulli.rvs(p, size=n)
# SALIDA
plt.suptitle('bernoulli rango hasta n='+str(n))
# grafica X1
plt.subplot(311)
plt.stem(k,x1)
plt.ylabel('x1')
plt.margins(0.05)
# grafica X2
plt.subplot(312)
plt.stem(k,x2)
plt.ylabel('x2')
plt.margins(0.05)
# grafica X3
plt.subplot(313)
plt.stem(k,x3)
plt.ylabel('x3')
plt.margins(0.05)
plt.xlabel('k')
plt.show()
Procesos discretos en el tiempo
Un proceso aleatorio discreto en el tiempo es una familia de variables aleatorias {Xn}, donde a partir de n se define en un subgrupo de enteros.
Por ejemplo:
{Xn, n=1, 2, …}
{Xn, n=0, 1, 2, …}
{Xn, n=0, ± 1 , ± 2 …}
Recordando que las variables aleatorias son funciones definidas en un espacio muestral S, se puede pensar en Xn(ω) en dos formas:
Para n fijos, Xn(ω) es función de ω y por lo tanto una variable aleatoria.
Para ω fija, se obtiene una secuencia de números X1(ω), X2(ω), X3(ω), … . Secuencia que se denomina una realización, camino muestral, o función muestral del proceso aleatorio.
Ejemplo: Envío de bits sobre un canal con ruido
Referencia: Gubner 10.1 pdf/p.383
Enviar una secuencia de bits sobre un canal con ruido , los bits se invierten de forma independiente con probabilidad p.
Sea:
Xn(ω)=1 si se invierte el n-ésimo bit y
Xn(ω)=0 de otra forma.
entonces {Xn(ω), n= 1, 2, …} es una secuencia Bernoulli(p) i.i.d .
Tres realizaciones del ruido se reprerentan en la gráfica del ejercicio anterior. Sin embargo, el resultado de la señal Xn afectada por el Ruidon como se vería en el receptor se muestra a continuación.
# Ejercicio: Envío de bits sobre un canal con ruido# Gubner 10.1 # propuesta: edelros@espol.edu.ecimport numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
# INGRESO
n = 25
pcanal = 0.5
p = 0.2 # error o inversión de bit# PROCEDIMIENTO# muestras k
k = np.arange(1, n+1)
# transmisor
x = stats.bernoulli.rvs(pcanal, size=n)
# ruido del canal
ruido = stats.bernoulli.rvs(p, size=n)
# En el receptor
receptor = np.zeros(len(x), dtype = int)
for i inrange(0,len(x)):
if (ruido[i] == 0):
receptor[i] = x[i]
if (ruido[i] == 1):
# invierte el bitif (x[i] == 1):
receptor[i] = 0
if (x[i] == 0):
receptor[i] = 1
# SALIDA
plt.suptitle('Bernoulli rango hasta n='+str(n))
# trama de bits en transmisor
plt.subplot(311)
plt.stem(k,x)
plt.ylabel('x')
plt.margins(0.05)
# ruido del canal
plt.subplot(312)
plt.stem(k,ruido,markerfmt='or')
plt.ylabel('ruido')
plt.margins(0.05)
# Señal recibida en receptor
plt.subplot(313)
plt.stem(k,receptor)
plt.ylabel('receptor')
plt.margins(0.05)
plt.xlabel('k')
plt.show()
Procesos contínuos en el tiempo
Un proceso aleatorio contínuo en el tiempo es una familia de variables aleatorias {Xt} donde t esta definido en un intervalo de tiempo.
{Xt, t ≥ 0}
{Xt, 0 ≤ t ≤ T}
{Xt, -∞ ≤ t ≤ ∞}
Ejemplo: Portadora con fase aleatoria
Referencia: Gubner 10.5 pdf/p.386
En radio comunicación, una señal portadora se modela como una sinusoide con fase aleatoria. La razón para usar una fase aleatoria es que en receptor no se conoce cuando se encendió el transmisor o la distancia entre el transmisor y receptor, que son factores que afectan a la fase.
El modelo matemático para éste caso es el proceso aleatorio contínuo en el tiempo, definido por:
xt = cos(2πft + θ)
donde f es la frecuencia de la portadora y θ es una variable aleatoria uniforme [-π, π].
Tres realizaciones del proceso que dan tres valrores dirferenctes de θ y su efecto en la portadora se obtienen como:
# Gubner 10.5 Portadora con fase aleatoria# propuesta: edelros@espol.edu.ecimport numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
# ingreso
n = 5
f = 1
# PROCEDIMIENTO# muestras ti
t = np.arange(0,n,0.1)
# genera muestras aleatorias con f: uniforme
theta = stats.uniform.rvs(loc=-np.pi, scale=2*np.pi ,size=3)
# selales desfasadas
xt0 = np.cos(2*np.pi*f*t + theta[0])
xt1 = np.cos(2*np.pi*f*t + theta[1])
xt2 = np.cos(2*np.pi*f*t + theta[2])
# SALIDAprint('theta: ',theta)
# grafica
plt.suptitle('Portadora')
# grafica x0
plt.subplot(311)
plt.plot(t,xt0)
plt.ylabel('x0')
plt.margins(0.05)
# grafica x1
plt.subplot(312)
plt.plot(t,xt1)
plt.ylabel('x1')
plt.margins(0.05)
# grafica x2
plt.subplot(313)
plt.plot(t,xt2)
plt.ylabel('x2')
plt.margins(0.05)
plt.xlabel('k')
plt.show()