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()