Está en la página 1de 24

Multiplicación por División de

Frecuencias Ortogonales(OFDM)
Integrantes: Jeferson Guillermo Mazo Román.
Santiago Jiménez Sánchez.
Introduccion
• En el mundo de las comunicaciones inalambricas es muy importante
saber aprovechar los anchos de banda utilizados para la transmision de
informacion de un lugar a otro debido a la interferencia entre simbolos
que este puede ocacionar, por esto se busca mejorar los metodos de
transmision cada vez mas para corresponder a esta necesidad. Gracias
a OFDM esto se ha podido mejorar este aspecto debido a que este
metodo permite enviar a la vez mas portadoras utilizando un ancho de
banda mucho menor, lo que permite transmitir mucha mas
informacion por un mismo canal.
OFDM
• Es un Sistema multiportadora para sistemas inalambricos como LTE,
WiMAX, etc. Este es un mecanismo de modulacion creado para
combatir la interferencia entre simbolos (ISI) la cual es consecuencia de
la propagacion multitrayecto, ya que la informacion antes de llegar al
receptor puede tomar varios caminos, donde el directo es el mas corto.
¿Qué es y cuales son las ventajas de utilizar el
prefijo cíclico (CP)?
Que es?
• Es la copia de la parte final del mismo símbolo en OFDM, para prevenir
interferencias intersimbolo (ISI), cuando una señal OFDM es trasmitida
por el mismo canal, este CP conserva la ortogonalidad de las
subportadores y previene ISI entre simbolos OFDM sucesivos.

• La importancia del CP reside en el hecho de que transforma la


convolución linear entre la señal transmitida y el impulso de respuesta
del canal, en una convolución circular símbolo por símbolo
Representación visual
Beneficios y desventajas
• Beneficios: • Desventajas:
• Rigidez. • Mayor capacidad.
• Reducción de interferencia. • Rata de datos.
• Transforma.
• Aísla.
Implementación del código
• Como primer paso se procede a instalar las librerías necesarias para la
implementación del código en Python mediante los siguientes
comandos.
- Pip install Numpy
- Pip install Matplotlib
- Pip install scipy
• Seguidamente se nombran las constantes junto con el valor de las
portadoras (Piloto y full portadoras) y se les da un valor a cada una,
estas serán utilizadas en el transcurso de la realización del código.
CODIGO:
K = 64
CP = K//4
P=8
pilotValue = 3+3j
allCarriers = np.arange(K)
pilotCarriers = allCarriers[::K//P]
pilotpilotCarriers = np.hstack([pilotCarriers, np.array([allCarriers[-1]])])
P = P+1
dataCarriers = np.delete(allCarriers, pilotCarriers)
¿Qué son los bits pilotos (pilots) y para que se usan
en OFDM?
• Es un símbolo conocido que se inserta en determinadas posiciones de
la señal OFDM para obtener información de las características de la
transmisión
• Seguidamente se procede a graficar las portadoras pilotos y las
fullcarrier en una sola, identificandolas asi: de color asi se pueden ver
las 9 portadoras piloto y de color rojo los datos.
CODIGO:
plt.figure(figsize=(8,0.8))
plt.plot(pilotCarriers, np.zeros_like(pilotCarriers), 'bo', label='pilot')
plt.plot(dataCarriers, np.zeros_like(dataCarriers), 'ro', label='data')
plt.legend(fontsize=10, ncol=2)
plt.xlim((-1,K)); plt.ylim((-0.1, 0.3))
plt.xlabel('Carrier index')
plt.yticks([])
plt.grid(True)
plt.savefig("pilots.png")
• Luego de esto se hace el mapeo mediante la utilizacion del codigo Grey
para la modulacion 16QAM y esto nos indica en que parte de la
constelacion van las portadoras piloto como se puede ver en la
siguiente figura.
• Seguidamente se configura la respuesta del canal inalambrico y se
definene las demas variables como SP, Mapping, OFDM_symbol,
IDFT,addCP, channel, removeCP,DFT, channelEstimate, equiqalize,
get_payload, demapping y por iltimo el PS para asi poder completar el
diagrama de bloques implementado en python y con estos datos ya
solo falta nombrar las imagenes para poder mostrarlas. Los comandos
necesarios para nombrar las imagenes son:

• A continuacion veremos el comando para la grafica de respuesta del


canal inalambrico.
bits = np.random.binomial(n=1, p=0.5, size=(payloadBits_per_OFDM, ))
bits_SP = SP(bits)
QAM = Mapping(bits_SP)
OFDM_data = OFDM_symbol(QAM)
OFDM_time = IDFT(OFDM_data)
OFDM_withCP = addCP(OFDM_time)
OFDM_TX = OFDM_withCP
OFDM_RX = channel(OFDM_TX)
OFDM_RX_noCP = removeCP(OFDM_RX)
OFDM_demod = DFT(OFDM_RX_noCP)
plt.figure(); Hest = channelEstimate(OFDM_demod); plt.savefig("channelEstimate.png")
equalized_Hest = equalize(OFDM_demod, Hest)
QAM_est = get_payload(equalized_Hest)
PS_est, hardDecision = Demapping(QAM_est)
bits_est = PS(PS_est)
• Grafica donde se relaciona la señal tranmisita (TX) con la señal recibida
(RX)
plt.figure(figsize=(8,2))
plt.plot(abs(OFDM_TX), label='TX signal')
plt.plot(abs(OFDM_RX), label='RX signal')
plt.legend(fontsize=10)
plt.xlabel('Time'); plt.ylabel('$|x(t)|$');
plt.grid(True);
plt.savefig("Time-domainSignals.png")
• Grafica de la constelacion solo con los 55 simbolos ya que 9 fueron
utilizados para las portadoras piloto.
plt.figure()

plt.plot(QAM_est.real, QAM_est.imag, 'bo');


plt.grid(True); plt.xlabel('Real part'); plt.ylabel('Imaginary Part');
plt.title("Received constellation"); # il
plt.savefig("Constellation.png")
• Grafica de la constelacion solo con los 64 simbolos donde con el color
rojo se representan los 9 simbolos piloto.

plt.figure()
for qam, hard in zip(QAM_est, hardDecision):
plt.plot([qam.real, hard.real], [qam.imag, hard.imag], 'b-o');
plt.plot(hardDecision.real, hardDecision.imag, 'ro')
plt.grid(True); plt.xlabel('Real part'); plt.ylabel('Imaginary part');
plt.title('Hard Decision demapping'); # il
plt.savefig("HardDecision.png")
• Esto ayuda a identificar a
que corresponde cada
simbolo.
¿Para que se utiliza la estimación del canal en
el código OFDM?
• La estación del canal es usada para poder recuperar la información de
forma adecuada, en el receptor se debe revertir los cambios realizados
por el canal de la señal transmitida. A esto se le conoce también como
ecualización.
• Luego despues de tener el codigo montado en python, se procede a
cambiar la respuesta del canal inalambrico. La respuesta original es la
siguiente.
channelResponse = np.array([1, 0, 0.3+0.3j])
Cambio 1 al canal: channelResponse = np.array([2, 0, 0.3+0.3j])

Se puede notar el numero


de las portadoras piloto
sigue siendo el mismo, sin
embargo la respuesta del
canal se ve un poco mas
acertada a la que seria la
ideal
• Cambio 2 al canal: channelResponse = np.array([3, 0, 0.3+0.3j])

En esta figura ya se puede


apreciar como algunas
portadoras piloto se alejan de la
señal ideal del canal, lo cual no
es lo indicado debido a que
deben estar lo mas cerca posible
a la ideal.
• Estas son otras variaciones mas que se hicieron notando que todas se
asemejan la una con la otra debido a que el cambio que tiene es muy
pequeño como se puede notar en las siguientes figuras.
¿Qué función cumple la señal sinc(x) en OFDM, por qué se dice que las
portadoras son ortogonales, y cuáles son las ventajas de esto?

-La señal sinc(x) en OFDM cumple la función de asegurar que si cada


subportadora es múltiplo entero de una frecuencia de referencia y si la
diferencia entre portadoras cercanas es igual a esta frecuencia, se
garantiza la ortogonalidad.
-Se dice que las portadoras son ortogonales debido a que manejan
frecuencias cercanas, pero ninguna se solapa sobre la otra, esto lo logra
debido al prefijo cíclico y gracias a esto se ocupa menos ancho de banda
que en otras multiplicaciones y también reduce las trayectorias
recorridas por la señal de RF.

También podría gustarte