Referencia: León-García 5.6.2 p258, Gubner 2.4 p91
Correlación
La correlación entre dos variables aleatorias X y Y se define como E[XY].
La correlación determina cuando dos variables se encuentran linealmente relacionadas; es decir cuando una es función lineal de la otra.
R(X,Y) = E[XY]Propiedades de la función de correlación
Simetría
R(X,Y) = R[Y,X] R(X,X) = E[X^2] \geq 0Desigualdad de Cauchy-Schwarz
|R(X,Y)| = \sqrt{(E[X]^2 E[Y]^2)}Covarianza
Retomando la función de covarianza de un proceso estocástico se muestra que:
Cov(X,Y) = E[XY] - E[X]E[Y] = = R(X,Y) - E[X]E[Y]Coeficiente de correlación lineal
Al multiplicar una de las variables X o Y por un número se incrementa la covarianza, para una mejor medida se normaliza la covarianza y así tener los valores en una escala absoluta.
El coeficiente de correlación de X y Y se define por:
\rho_{X,Y} = \frac{Cov(X,Y)}{\sigma_X \sigma_Y} = \frac{E[XY]-E[X]E[Y]}{\sigma_X \sigma_Y} donde: \sigma_X=\sqrt{Var(X)} \sigma_Y=\sqrt{Var(Y)} -1 \leq \rho_{X,Y} \leq 1El coeficiente de correlación es como máximo en magnitud 1.
Note que la correlación y el coeficiente de correlación no son lo mismo al resultar de la formula de covarianza.
Correlación bits con ruido
Dada una secuencia de bits, al transmitirlos se distorsionó con ruido aditivo. En el receptor será dificil discriminar los valores de los bits tomados de la señal recibida.
La correlación permite "limpiar" un poco la señal en el receptor y una mejor estimación de los bits recibidos.

Para el ejemplo se usa una secuencia de bits 01101001 como señal a transmitir, el ruido aditivo es de tipo normal con media m=0 y varianza σ2=1
Para referencia del proceso, se usa un punto rojo en el centro de la ventana de tiempo de cada bit.
La correlación se realiza con un bit y la señal con ruido.
Observe que luego de la correlación es más sencillo discriminar si lo recibido fué un bit 0 o un bit 1.
señal de bits sin ruido
[0 1 1 0 1 0 0 1]
estimado de bits en el receptor
[ 0.002 0.985 1.07 0.054 0.947 -0.079 -0.006 1.149]
Instrucciones en Python
# secuencia de bits con Ruido
# usar correlación para mejorar la senal
# estimar el bit recibido
# Tarea: convertir estimado en bits
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as st
# INGRESO
senalbit = np.array([0, 1, 1, 0, 1, 0, 0, 1])
# PROCEDIMIENTO
# señal moduladora son escalones por cada bit
# o forma rectangular de duración anchobit
anchobit = 128
mitadbit = anchobit//2
senal = np.repeat(senalbit, anchobit)
muestras=len(senal)
# reloj para observar la mitad del bit
reloj = np.arange(mitadbit, muestras, anchobit)
# Ruido normal o Gausiano
media = 0
varianza = 1
ruido = st.norm.rvs(media,varianza,muestras)
# Añade el ruido a la señal
senalruido = senal + ruido
# Referencia de un bit para correlación
modelo = np.ones(anchobit)
# correlación modelo de bits
correlacion = np.correlate(senalruido, modelo, mode='same')
# normaliza el resultado [0,1]
correlacion = correlacion / anchobit
# estimado de bits en el receptor
estimado=correlacion[reloj]
# SALIDA
print('señal de bits sin ruido')
print(senalbit)
print('estimado de bits en el receptor')
np.set_printoptions(precision=3)
print(estimado)
#GRAFICA
plt.figure(1) # define la grafica
plt.suptitle('señal binaria con ruido gaussiano')
plt.subplot(311)
plt.plot(senal)
plt.plot(reloj, senal[reloj], 'ro')
plt.ylabel('señal original')
plt.margins(0,0.05)
plt.subplot(312)
plt.plot(senalruido)
plt.plot(reloj, senalruido[reloj], 'ro')
plt.ylabel('senal con ruido')
plt.margins(0,0.05)
plt.subplot(313)
plt.plot(correlacion)
plt.ylabel('correlación')
plt.plot(reloj, correlacion[reloj], 'ro')
plt.margins(0,0.05)
plt.show()