Está en la página 1de 38

UNIVERSIDAD CATÓLICA BOLIVIANA SAN PABLO

FACULTAD DE CIENCIAS EXACTAS E INGENIERÍA

PROYECTO
OFDM

ESTUDIANTES:
Edwin Quispe Ortiz
Rodrigo Uruchi

ASIGNATURA:
Procesamiento Digital De Señales

DOCENTE:
Sylvain Damien Lesage

LA PAZ, 06 de junio de 2015


PROYECTO OFDM

1. INTRODUCCIÓN
OFDM es un metodo de codificacion digital de datos en frecuencias con
multiples portadoras. OFDM ha sido desarrollado en un ambiente popular
para comunicación digital de banda ancha, utilizado en aplicaciones como
transmision de television y audio digital, acceso a internet DSL (por su sigla
en inglés Digital Suscriber Line), redes inalambricas y redes de
comunicaciones moviles 4G.

OFDM (Multiplexacion por división de frecuencia ortogonal) es un tipo de


multiplexacion que consiste en enviar un conjunto de señales portadoras en
diferentes frecuencias, muy cercanas, donde cada una transporta
información la cual puede ser modulada en QPSK o QAM. La característica
principal de este tipo de multiplexacion es que las portadoras que tiene son
ortogonales entre si en frecuencia, lo cual esta definido por la siguiente
fórmula:

𝑇0 +𝑡
∫ 𝑓1 (𝑡) ∗ 𝑓2 (𝑡)𝑑𝑡 = 0
𝑇0

Donde:
𝑓1 y 𝑓2 son las frecuencias de las subportadoras que se encuentran
ortogonales durante el tiempo T donde la separación es 1/T que es el
mínimo para que estas sean ortogonales.

Los datos se dividen en varios flujos o canales en paralelo, uno para cada
subportadora. Y cada subportadora se modula con una técnica
convencional como QAM o PSK a velocidades bajas. Los flujos de datos
que se consiguen con similares a una modulación

2. ESPECIFICACIÓN DEL PROBLEMA


DSL es una tecnologia digital cuya transmision se realiza sobre lineas de
cobre. Esta tecnologia hace uso de la actual red telefonica existente,
alojando acceso a internet de tasa alta, entre otros servicios digitales.
Fig. 1. Se muestra el esquema de la tecnologia xDSL

El rango de frecuencias hasta 4 KHz es utilizado exclusivamente para la


transmision de señales de voz, mientras que el rango entre 25 KHz a 30
MHz esta reservado para la transmision de señales DSL. Como se muestra
en la figura el rango de frecuencias esta dividido en bandas para UpStream
(Flujo de subida) y DownStream (Flujo de bajada) de esta manera la
transmision en ambas direcciones es posible.

Fig. 2. Se muestra las divisiones en el ancho de banda del par de cobre

La tecnica multi-tono discreta (DMT) es utilizada en sistemas DSL. Esta es


una forma de tecnologia de transmision multiportadora, la cual tambien es
conocidad como OFDM en comunicaciones moviles. En este caso todo el
ancho de banda esta particionado en un gran número de subportadoras
ortogonales, las cuales no se interfieren una a la otra debido a su
ortogonalidad. Asi como se muestra en la figura.

Fig. 3. Se muestra una señal OFDM

DMT es un método de separacion de señales DSL para que el rango de


frecuencias utiles este separada en 256 bandas (o canales) de 4,3125 KHz
cada una. DMT utiliza la transformada rapida de fourier (FFT) como
algoritmo de modulacion y demodulacion. Dividiendo el espectro de
frecuencias en multiples canales. Dentro de cada canal, la modulacion
utilizada es QAM (Modulacion por Amplitud de Cuadratura).
Lo que se quiere lograr es implementar una cadena de transmision OFDM
compatible con ADSL.

OFDM necesita menos ancho de banda que FDM para transportar la misma
cantidad de información, lo que se traduce en mayor eficiencia espectral.
Además de una alta eficiencia espectral, un sistema de OFDM como
WiMAX es más resistente a RNE medio ambiente. Puede ser eficiente y
superar las interferencias de frecuencia selectiva de desvanecimiento
causado por múltiples porque la igualación se hace en un subconjunto de
sub-compañías aéreas en lugar de una sola compañía aérea más amplia.
El efecto del ISI (Inter Symbol Interference) se suprime en virtud de un
período más largo símbolo del paralelo OFDM sub-portadoras de un único
sistema de soporte y el uso de un prefijo cíclico (CP).
Fig. 4. Se muestra una serie de portadoras ortogonales

Se denomina Tono multi-discreto (DMT) porque en lugar de una sola


portadora modulada, un gran número de sub portadoras espaciadas son
moduladas a través de algunas constelaciones QAM. Se trata de una
propagación de espectro técnica que aumenta la eficiencia de las
comunicaciones de datos mediante el incremento de datos porque hay más
puntos en la constelación QAM. Además, los problemas con Multi-path
(multi trayectoria) y cancelación de interferencia espectral se reducen de
forma selectiva la modulación de la "clara" o hacer caso omiso de los
transportistas con los transportistas de alta velocidad binaria errores.
Al igual que FDM, OFDM también se utiliza múltiples sub-transportistas,
pero el sub-los transportistas están poco espaciados entre sí, sin causar
interferencia, la supresión de guardia entre bandas adyacentes sub-
portadoras. Esto es posible porque las frecuencias (sub-aéreas) son
ortogonales, es decir, el pico de una sub-portadora coincide con la nula
adyacentes de un sub-carrier.

3. DATOS
Los datos que se utilizaran seran por medio de una simulacion en MatLab.
Se utilizara el archivo de sonido ‘handel’, sonido precargado en el programa

4. CRITERIOS DE EVALUACIÓN
Se trabajará sobre la implementacion de un algoritmo para poder simular el
funcionamiento de una transmision por OFDM, asi se podra verificar como
es que funciona éste. Entonces se trabajará sobre la creacion de un
algoritmo en la plataforma MatLab.

5. SOLUCIÓN
Se trabajará en crear un algoritmo de implementacion de transmision
OFDM en MatLab. Asi podremos simular como es que trabaja la tecnologia
ADSL y principalmente DMT.
La implementación será de la siguiente manera:

Fig. 5. Diagrama de bloques de la implementación OFDM DMT

Antes de mostrar el código se explica el funcionamiento de cada función


empleada por el programa.

a. Conversor A/D y D/A


El conversor Analógico/Digital es representado por un vector
correspondiente en nuestro código de MATLAB, esto significa que
una señal analógica muestreada es convertida a un flujo de bits.
Para esto se sigue un proceso de dos pasos:

 Cuantificacion
 Asignacion de Bits

En la cuantificación, el eje de la amplitud de la señal de entrada es


nominada dentro de 2^B niveles y cada muestra es redondeada al
nivel mas cercano. Cada nivel es asignado a un numero binario de B-
bits, de esta manera la longitud ‘N’ del vector de muestras de entrada
es mapeado en un flujo de bits de longitud B*N.

En la imagen de abajo se muestra la señal de entrada cuantificada.

Fig 6. Se muestra una señal de entrada muestreada

En nuestro estudio se tomó la señal de entrada (sonido) Handel que


ya está incluido dentro de MatLab

La señal cuantificada se muestra a continuación.


Fig. 7. Se muestra la señal Handel cuantificada

El conversor Digital/Analogico es la operación inversa al conversor


Analogico/Digital, en nuestro sistema convierte un flujo de bits en una
señal analógica muestreada. En este caso solo es un proceso de un
paso: desde que se realiza la conversión A/D con B-bits, se asigna a
cada bloque de B-bits el nivel asociado original de cuantificación. En
esto ocurre un error implícito inducido en la conversión D/A debido a
la cuantificación, ya que la señal muestreada se redondea al nivel
mas cercano, entonces el valor exacto de la señal de entrada se
pierde. Esto se denomina error de cuantificación.

b. Conversor Serie/Paralelo – Paralelo/Serie


El concepto de conversion Serie/Paralelo se trata de que un flujo de
bits de datos es partido en varios de igual longitud (o
aproximadamente de igual longitud) los cuales pueden ser utilizados
al mismo tiempo.
En la conversión Paralelo/Serie, estas piezas son concatenadas una
detrás de las otras, colocadas todas en un largo flujo de datos. En
nuestro código, todas estas piezas son manejadas dentro de un
vector. De esta manera la conversión Serie/Paralelo es muy
importante en un sistema DMT.

Los bloques convertidos de Serie a Paralelo son introducidos al


mapeo en la constelación, la cual es básicamente la representación
de segmentos de bits como coeficientes espectrales. La longitud de
los bloques (a lo largo de la constelacion) determina el numero de
coeficientes espectrales que serán usados por la IFFT (Inverse Fast
Fourier Transform) o Transformada Inversa Rapida de Fourier. En
este caso el conversor S/P es esencial en la elección de cuantas
frecuentas serán utilizadas. Normalmente, la longitud del bloque es
una potencia de 2, que hace que los algoritmos IFFT y FFT sean
eficientes computacionalmente.

c. Mapeo de Constelacion
En el proceso del mapeo de la constelación, los flujos de datos de B-
bits son asignados en un único valor complejo en la constelación.
Esto es similar a la Modulacion por Amplitud de Cuadratura (QAM),
porque la IFFT de estas muestras son representadas por valores
proporcionales del eje real en el caso de la amplitud y la fase es
representada con valores del eje complejo.

En nuestro caso usaremos una constelación construida con 4 bits


(16 puntos). Actualmente las constelaciones utilizadas en DMT
pueden tener 240 puntos. Las características importantes de estas
constelación incluyen el área ocupada por los puntos y el espaciado
entre los puntos. La potencia necesaria para transmitir la señal es
proporcional al área, asi que es importante no dejar que los puntos
estén muy separados. Sin embargo, el canal por el que se transmite
la señal introduce ruido que causa que los puntos en la constelación
se reciban con error. Si los puntos están muy cercanos, es imposible
detectar el valor correcto de los puntos en el receptor.
Fig. 8. Se muestra una tabla de valores para un mapa de
constelación de 4 bits (16 puntos)

Fig. 9. Se muestra el mapa de constelación de 4 bits (16 puntos)

d. Reflejo/IFFT y des-reflejo/FFT
Asi como la conversión Serie/Paralelo, el reflejo es sencillo en su
principio y su implementación, y es esencial para DMT. Necesitamos
que se transmita una señal con valores reales, pero después del
mapeo de constelación, los bloques tienen valor complejo. El
proceso de reflejo asegura que la señal transmitida tenga valores
reales tomando en cuenta el hecho que la IFFT (Transformada
Rapida Inversa de Fourier) de un vector conjugado es real. En
nuestro sistema, el reflejo le da simetría a cada bloque. En el
proceso del reflejo, cada bloque es volteado cerca, conjugado y
ubicado al final del bloque original. Hay algunos puntos mas finos.
Sin embargo, si la longitud del bloque antes del reflejo es ‘M’, el
elemento M+1 del bloque reflejado toma cualquier valor real (en
nuestro caso lo reemplazamos con cero) mientras que el elemento
M+2 toma el valor del elemento M-1, luego el elemento M+3 toma el
valor del elemento M-2 y asi sucesivamente hasta completar reflejar
los M elementos, en total tendríamos 2M elementos. También el
primer elemento en ningún bloque no puede tener un valor complejo;
debe ser puesto artificialmente a un valor real. Esto es porque el
primer punto de cualquier bloque corresponde a una frecuencia de
cero después de la IFFT. Si este elemento es complejo, el resultado
del vector, creado por la IFFT, tendrá una compensación compleja y
por lo tanto será complejo también. Aunque esto seria una fuente de
error, asumimos que el receptor conoce correctamente los primeros
elementos de cada bloque, eliminando este error.
Fig. 10. Se muestra un bloque (longitud original de 128 elementos)
de puntos de constelación después del reflejo (solo magnitudes). La
porción reflejada esta mostrada en azul

La Transformada Inversa Rapida de Fourier (IFFT) básicamente


provee la modulación para DMT. Como se observó en el parte del
conversor Serie/Paralelo, los puntos complejos de la constelación en
cada bloque (ahora reflejados) son interpretados como coeficientos
para una señal en el dominio del tiempo, la IFFT nos brida esta
señal. Asegurando que la longitud de nuestro bloque es rellenada
hasta llegar a una potencia de 2 a través de los procesos de mapeo
y reflejo, nos aseguramos que la IFFT es computacionalmente
eficiente. En nuestro caso se uso la función IFFT incluida en MatLab.
Fig. 11. Se muestra la IFFT de la Fig. 5. Tiene valores reales y la
misma longitud que el bloque reflejado

Después de atravesar el canal, los bloques sufren el proceso inverso


a la transmisión. Una vez que los bloques recibidos en el dominio del
tiempo están separados, una FFT (Transformada Rapida de Fourier)
nos retorna los coficientes espectrales de cada bloque, los cuales
incluyen ruido. La FFT esencialmente multiplica las señales de forma
sinusoidal en el dominio del tiempo por su conjugada. El des-reflejo
es parecido, necesitamos deshacernos de la parte simétrica
conjugada de cada bloque (elementos reflejados), asi que los últimos
M valores (para un bloque pre-reflejado de M valores) son
simplemente descartados. De la misma manera, la función de la FFT
utilizada fue la incluida en MatLab.

e. Prefijo Ciclico
En una transmisión OFDM se pueden dar dos formas de
interferencia:

 Interferencia Inter-Simbolo (ISI)


 Interferencia Inter-Portadora (ICI)
La ISI (Inter Symbol Interference) surge del hecho que el canal de
transmisión realiza una convolucion lineal de su respuesta al impulso
con la señal en el dominio del tiempo. Esta vez, los bloques (ahora
conocidos como simbolos) han sido reflejados, procesados por la
IFFT y concatenados. En la intersección de símbolos adyacentes, se
produce un convolucion lineal de la señal con la respuesta al impulso
(cuyo valor es asumido con un valor menor que la longitud del
símbolo pero mayor a un elemento) debido a partes solapadas de
ambos símbolos. Esto significa que los símbolos independientes
afectan a otros. La adicion de un prefijo provee un buffer entre los
símbolos para prevenir este solapamiento.

Fig. 12. Interferencia Inter-Simbolo, esto significa una convolucion


lineal de la respuesta al impulso con el canal x. Se solapan en la
intersección de los dos símbolos.

La ICI (Inter Carrier Interference) vienes del hecho que las


frecuencias de las portadoras en DMT pierden su ortogonalidad
debido a la respuesta en frecuencia del canal. Si observamos a la
FFT de un bloque en la entrada al canal, veriamos una función
sincronizada en cada frecuencia de la portadora ya que la IFFT
modula cada portadora con un pulso rectangular. La base de la DFT
(Transformada de Fourier Discreta) es ortonormal, asi que cada uno
de los vectores base (sinusoides) son ortogonales a todo el resto.
Esto significa que cada una de las portadoras son ortogonales
(producto dentro de cero). La respuesta en frecuencia del canal tiene
el efecto de atenuar ciertas frecuencias mas que otras, asi que cada
una de las portadoras es cambiada por una diferente cantidad. El
producto interior es una medida de la similaridad de dos vectores,
previamente dos ‘completamente diferentes’ las funciones
sinusoidales ahora tienen por lo menos algún grado de similaridad.
Se puede dar que ya no son ortogonales. Pero si las portadoras no
son ortogonales, la FFT no puede recuperar exactamente
correctamente los coeficientes espectrales.

El prefijo cíclico resuelve este problema cambiando la convolucion


lineal de la respuesta al impulso del canal con la señal dentro de una
convolucion cíclica.

Fig. 13. Interferencia Inter-Portadora. La respuesta en frecuencia del


canal causa que las frecuencias de las portadoras, al ser
transmitidas, pierdan su ortogonalidad.
La adicion de un prefijo cíclico a cada símbolo resuelve la ISI y la ICI.
En nuestro caso, asumimos que la respuesta al impulso del canal
tiene una longitud conocida L. el prefijo consiste simplemente en
copiar los últimos L-1 valores de cada símbolo y anexándolos en el
mismo orden al principio del símbolo. Teniendo este buffer con datos
inservibles al principio, la convolucion de la respuesta al impulso con
la señal en el final del símbolo no afecta nada de los datos actuales
en el comienzo del siguiente símbolo. Es decir, repitiendo los últimos
elementos al comienzo, los primeros datos ‘reales’ de cada símbolo
sufren solapamiento con el ‘final’ del símbolo, asi como una
convolucion cíclica. Esto significa que la convolucion lineal de la
respuesta al impulso del canal con los símbolos concatenados llegan
a ser convoluciones cíclicas concatenadas de la respuesta al impulso
con los símbolos individuales. La convolucion cíclica directamente
corresponde a la multiplicación en el dominio de la frecuencia, esto
tiene gran importancia respecto a la ecualización. Después de que la
señal en el dominio del tiempo pasa a través del canal, es partido en
símbolos en paralelo y el prefijo es simplemente descartado.

Fig. 14. Se muestra un símbolo en el dominio del tiempo con su


prefijo cíclico y los últimos ‘L’ elementos son mostrados en rojo
f. Canal de Transmision
Como fue mencionado, DMT es utilizado para enviar datos por
medios inalámbricos como líneas telefónicas de cobre. En ambos de
estos medios, las ondas electromagnéticas de alta frecuencia son
rápidamente atenuadas mientras las ondas de baja frecuencia
retienen mucha potencia, aun en largas distancias. Considerando
esto, modelamos la repuesta en frecuencia de nuestro canal como
un filtro pasa bajos. Para tener en cuenta las irregularidades en el
canal (y cerciorarse que la respuesta en frecuencia es invertible),
realizamos un filtro pasa bajos no ideal; esencialmente, la repuesta
al impulso es un suavizador de M puntos con variaciones aleatorias
de amplitud. Esta porción del canal fue simplemente implementada
utilizando la función de convolucion con una respuesta al impulso
construida. Esta función esta incluida en Matlab.

Fig. 15. Esta es una respuesta del canal de 16 pulsos. Se puede


observar las amplitudes aleatorias, pero la forma general es aun
suavizada
Fig. 16. Respuesta en frecuencia del canal. Se muestra la respuesta
al impulso de 256 muestras a través de la FFT. Se observa su
característica general de pasa bajo, asi como la ausencia de ceros.

En adicion al filtrado de pasa bajo a la señal de entrada, el canal


también incorpora ruido blanco Gaussiano aditivo (AWGN), de
manera aleatoria. El AWGN es llamado “blanco” porque tiene la
misma cantidad de energía en todas las frecuencias (asi como la luz
blanca). Se implemento esta característica del canal añadiendo un
vector ‘rndn’ a la señal después del filtro pasa bajo.

Para un sistema DMT el canal también puede incluir otros tipos de


ruido. Estos incluyen ruido impulsivo (picos en la señal en el dominio
del tiempo), frecuencias ocupadas (picos en el dominio de la
frecuencia) y diafonía (que no se consideró en nuestro programa). En
el código de nuestro programa se incorporó ruido impulsivo ubicando
un numero de elementos en ubicaciones individuales y aleatorias en
la señal. No se incluyeron picos de frecuencia o diafonía.
Fig. 17. Ruido Blanco Gaussiano adicionado a impulsos en el
dominio del tiempo

g. Ecualizacion y aproximación

En la ecualización, los bloques de coeficientes espectrales recibidos


(por ejemplo: después de quitar el prefico cíclico y realizar la FFT)
están ajustados para compensar la respuesta en frecuencia del canal
(no se puede quitar el ruido aditivo). Debido al prefijo cíclico, cada
bloque ha sufrido convolucion cíclica con la respuesta al impulso del
canal. Si la respuesta en frecuencia no tiene ceros y es conocida por
el receptor, es posible quitar perfectamente el efecto de filtrado del
canal. Ya que el canal multiplico puntualmente los bloques por su
respuesta en frecuencia, todo lo que se necesita hacer es multiplicar
los bloques por: uno sobre la respuesta en frecuencia (1/resp. En
frec).
Fig. 18. Se muestra la respuesta en frecuencia del ecualizador.

Después de la ecualización, el efecto de filtro pasa bajo del canal es


quitado, pero el ruido aditivo aun está presente. Se manifiesta
causando que los puntos de la constelación recibida estén desviados
de su ubicación original en la constelación. Para habilitar el flujo de
bits para ser recuperado, se realiza una aproximación en cada punto.
Mientras la amplitud del ruido sea pequeña o los puntos de la
constelación estén alejados, es improbable los puntos estén
desviados lo suficiente para tomar un nuevo punto en la
constelación. Con un alto nivel de ruido, sin embargo, los puntos se
desvían por toda la constelación; en este caso, el punto mas cercano
es improbable que sea el punto original. En el código implementado,
se introdujo esta aproximación con un analizador y una tabla de
búsqueda; de esta manera se examina cada valor complejo en los
bloques y se lo compara con cada punto en la constelación,
seleccionando la aproximación al punto mas cercano.
Fig. 19. Puntos de la constelación recibidos a una SNR=52 dB

Fig. 20. Puntos de la constelación recibidos a una SNR=25 dB


6. RESULTADO Y ANALISIS
A continuación se muestra el código implementado, es importante nombrar
que se el programa principal es el archivo ‘run.m’, este archivo es el que se
compila, sin embargo a su vez este programa llama a las funciones: a2d,
approximate, channel, constbuilder, constmap, cyclicpad, d2a, deconstmap,
decyclicpad, demirror, filterchannel, matlaberr, mirror, parallel2series,
series2parallel; cuyos codigos también serán mostrados.

a. Run.m
Es el archivo principal que llama a las funciones que emulan los
bloques de un sistema de transmisión DMT ADSL, el código es el
siguiente.

B= 4; % # de bits para la cuantificacion


C= 16; % # de puntos de la constelacion, resultado de 2^B
S= 256; % # Subportadoras
L=16; % longitud del canal
noise=.0001; % amplitud del ruido
sN=0; % # picos en el dominio del tiempo
N=L; % Longitud del prefijo ciclico
F=128; % longitud de los bloques (1/2 # de sub portadoras)
M=constbuilder(C); % Matriz de Constelacion

s=abs(randn(L,1)); % canal aleatorio


s=s./sum(s);

load handel
y=y(1:S); %señal de entrada, se tomaran las primeras 256 muestras
x=a2d(y,B); %conversor analogico a digital incluyendo cuantificacion
z=constmap(x,M); %Constelacion para el mapeo de la señal digital x
a=series2parallel(z,F); %conversor de serie a paralelo
b=mirror(a);
c=ifft(b);
d=cyclicpad(c,N);
e=matlaberr(parallel2series(d));

aN = randn(length(conv(e,s)),1)*noise;

f=channel(e,s,aN,sN);
f=f(1:length(e));
g=series2parallel(f,2*F+N);
h=decyclicpad(g,N);%
k=fft(h);
m=filterchannel(k,s);
n=demirror(m);
n(1,:)=a(1,:);
o=parallel2series(n);
p=approximate(o,M);
q=deconstmap(p,M);
r=d2a(q,B);

figure(1)
stem(y/max(abs(y)));title('SEÑAL DE ENTRADA');
xlabel('Muestras'); ylabel('Amplitud');
axis([1 S -1 1]);
grid on

figure(2)
stem(d2a(x,B));
title('ENTRADA CUANTIFICADA');
xlabel('Muestras'); ylabel('Amplitud');
axis([1 S -1 1]);
grid on
%
figure(3)
plot(real(M(:,length(M(1,:)))),imag(M(:,length(M(1,:)))),'.b');
grid on
title('MAPA DE CONSTELACION');
xlabel('Real'); ylabel('Imaginario');
axis([-1.5 1.5 -1.5 1.5]);
%
figure(4)
Q=length(d(:,1));
stem(1:Q-N,matlaberr(d(1:Q-N,1)),'b');ylabel('Prefijo ciclico añadido');
title('PREFIJO CICLICO AÑADIDO');
xlabel('Muestras'); ylabel('Amplitud');
hold
stem(1:N,matlaberr(d(1:N,1)),'r');
stem(Q-N+1:Q,matlaberr(d((Q-N+1):Q,1)),'r');
hold;
%
%
figure(5)
stem(e);
title('ENTRADA CON ISI - ICI ');
xlabel('Muestras'); ylabel('Amplitud');
Q=2*(2*F+N);
stem(1:Q/2,e(1:Q/2));
hold
stem(Q/2+1:Q,e(Q/2+1:Q),'g');
stem(Q/2-L/2+1/2:Q/2+L/2,s,'r');
hold;
%
figure(7)
plot(real(o),imag(o),'*r');
hold;
plot(real(M(:,length(M(1,:)))),imag(M(:,length(M(1,:)))),'.b');
title('PUNTOS DE CONSTELACION RECIBIDOS');
xlabel('Real'); ylabel('Imaginario');
hold;
grid;
axis([-1.5 1.5 -1.5 1.5]);
figure(6)
stem(fftshift(abs(fft(s,256))));
title('FUNCION DE TRANSF. DEL CANAL DE Tx');
xlabel('Muestras'); ylabel('Amplitud');
axis([0 2*F 0 1]);
%
figure(8)
stem(f);title('SALIDA DEL CANAL');
xlabel('Tiempo'); ylabel('Amplitud');
%
figure(9)
stem(h);title('PREFIJO CICLICO EXTRAIDO');
xlabel('Muestras'); ylabel('Amplitud');
%
figure(10)
stem(fftshift(abs(1./fft(s,256))));
title('FUNC. DE TRANSF. DEL ECUALIZADOR');
xlabel('Frecuencia'); ylabel('Amplitud');
%
figure(11)
stem(r);
title('SEÑAL RECIBIDA/CUANTIFICADA');
xlabel('Tiempo'); ylabel('Amplitud');
%
figure(12)
stem(1:128,abs(b(1:length(b)/2,1)),'m')
hold
stem(129:256,abs(b(length(b)/2+1:length(b),1)),'k')
hold
title('REFLEJO');
xlabel('Muestras'); ylabel('Amplitud');

ps=(norm(e))^2;
pn=(norm(aN))^2;
snr=10*log10(ps/pn);
biterr=sum(abs(x-q));

b. A2d.m
Esta función es la conversora de datos analógicos a digitales.

function y = a2d(x,b)
% a2d(x) – convierte a tiempo discreto, una señal analogica a
% un flujo de bits (b bits por muestra)
% x – señal original
% b – numero de bits por muestra

N = length(x);
qinterval = 2*max(abs(x))/((2^b)-1);
if b<=1;
for i=1:N
if x(i)<=0
bits(i)=0;
else
bits(i)=1;
end
end
else
q = quant(x-min(x),qinterval);
bits=zeros(N*b,1);

for k=0:((2^b)-1)
u=dec2bin(k);
for i=1:length(u)
w(i)=str2num(u(i));
end
v=[zeros((b-length(w)),1)',w];
p(k+1,:)=v;
end
for i=0:N-1
for k=0:((2^b)-1)
if q(i+1)==k*qinterval
bits(b*i+1:b*i+b)=p(k+1,:);
break
else
end
end
end
end
y=bits;

c. Constmap.m
Es la función que realiza el mapeo en la constelación

function y = constmap(x,M)
% constmap(x) –mapa de constelacion para el flujo de bits (2
bits/simbolo)
% x – flujo de bits

m=length(M(1,:))-1;
N = length(x);
newN=m*round(N/m);
x=x(1:newN);
for i=1:m
newvector(:,i)=x(i:m:newN-(m-i));
end

alpha=zeros(newN/m,1);
for i=1:newN/m
for k=1:length(M(:,1))
if (newvector(i,:)==M(k,1:m))
alpha(i)=M(k,m+1);
break
else
end
end
end
y=alpha;

d. Series2parallel.m
Es la función que convierte el flujo de bits de serie a paralelo

function y = series2parallel(x,N)

L=length(x);
q=floor(L/N);
newvec=zeros(N,q);
for i=1:q
newvec(1:N,i)=x((1+(i-1)*N):i*N);
end
y=newvec;

e. Mirror.m

Es la función que se encarga del reflejo de el flujo de bits.


function y = mirror(X)
R=length(X(1,:));
L=length(X(:,1));
if isreal(X(1,:))
X=X;
else
X(1,:)=zeros(1,R);
end
newvec=zeros(2*L,R);
newvec(1:L,:)=X;
newvec(L+1,:)=X(1,:);
newvec(L+2:2*L,:)=conj(flipud(X(2:L,:)));
y=newvec;

f. Cyclicpad.m
Es la función encargada del prefijo cíclico

function y=cyclicpad(X,L)
N=length(X(:,1));
Y=[X(N-L+1:N,:);X];
y=Y;

g. Matlaberr.m
Es la función encargada de añadir error al flujo de bits.

function y = matlaberr(X)
R=length(X(1,:));
L=length(X(:,1));
for m=1:R
for n=1:L
if abs(real(X(n,m)))<.000001
a=0;
else
a=real(X(n,m));
end
if abs(imag(X(n,m)))<.000001
b=0;
else
b=imag(X(n,m));
end
X(n,m)=a+j*b;
end
end
y=X;

h. Channel.m
Es el código encargado del canal de transmisión

function y=channel(x,h,aN,sN)

a=conv(x,h);
N=length(a);
w=a+aN;
m=max(abs(x));
for k=1:sN
w(round(abs(randn(1,1))*(N-1))+1)=m;
end
y=w;

i. Decyclicpad.m
Es la función encargada de quitar el prefijo cíclico

function y=decyclicpad(X,L)
N=length(X(:,1));
Y=X(L+1:N,:);
y=Y;

j. Filterchannel.m
Es la función encargada de emular el filtro pasa bajo a causa del
canal.

function y=filterchannel(X,h)
N=length(X(:,1));
W=length(X(1,:));

H=fft(h,N);

invH=1./H;
for k=1:W
y(:,k)=invH.*X(:,k);
end
y;

k. Demirror.m
Es la función encargada de quitar el reflejo de la información en el
símbolo.

function y = demirror(X)
R=length(X(1,:));
L=length(X(:,1));
if rem(L,2)==1
y=[ones(1,R);X(1:L/2,:)];
else
y=X(1:L/2,:);
end

l. Approximate.m
Es la función encargada de la aproximación de puntos a la
constelación.

function y = approximate(x,M)
% approximate(x,M) – aproxima un simbolo con ruido x con símbolos validos
% en M
% x – vector de simbolo con ruido
% M – matriz que representa el mapa de constelacion

%M=[0 0 1;0 1 j;1 0 -1;1 1 -j];


W=length(M(1,:));
L=length(M(:,1));
N = length(x);
a = M(:,W);
alpha=zeros(N,1);

for i=1:N
mindist=100;
symnum=0;
for k=1:L
if abs(a(k)-x(i))<=abs(mindist)
mindist=abs(a(k)-x(i));
alpha(i)=a(k);
else
end
end
end
y=alpha;

m. Deconstmap.m
Se encarga de quitar el mapeo de bits del símbolo.
function y = deconstmap(x,M)
% deconstmap(x) – mapa de constelacion en el simbolo (2 bits/symbol)
% x - bitstream

%M=[0 0 1;0 1 j;1 0 -1;1 1 -j];


m=length(M(1,:))-1; % # of bits/symbol
N = length(x);
bits=zeros(N*m,1);
for i=0:N-1
for k=1:length(M(:,1))
if (x(i+1)==M(k,m+1))
bits(1+(m*i):m*(i+1))=M(k,1:m);
break
else
end
end
end

y=bits;

n. D2a.m
Función encargada de la conversión digital a analógica de la señal.

function y = d2a(x,b)
% d2a(x) convierte el flujo de bits (b bits por muestra) de tiempo
discreto,
% a una señal analogica
% x – flujo de bits
% b – numero de bits por muestra
x=x';
N = length(x);
L=floor(N/b);
qinterval = 2/(2^b-1);

if b<=1;
for i=1:N
if x(i)==0
sig(i)=-1;
else
sig(i)=1;
end
end
else
sig=zeros(L,1);

for k=0:((2^b)-1)
u=dec2bin(k);
w=zeros(1,length(u)); % conversion a binario
for i=1:length(u)
w(i)=str2num(u(i));
end
v=[zeros((b-length(w)),1)',w];
p(k+1,:)=v; % p es un vector de binaries para un interval de #’s
end

if b~=4

for i=0:L-1 % marca el valor de q con etiqueta #


for k=0:((2^b)-1) % inserta el valor binario correspondiente
dentro del flujo de datos
if (x((1+(i*b)):(b*i+b))== p(k+1,:))
sig(i+1)=qinterval*k-1;
break
else
end
end
end

else
for i=0:L-1
%%for k=1:b
if x(1+i*b)==0
if x(2+i*b)==0
if x(3+i*b)==0
if x(4+i*b)==0
sig(i+1) = -1;
else
sig(i+1) = qinterval*1-1;end
else
if x(4+i*b)==0
sig(i+1) = qinterval*2-1;
else
sig(i+1) = qinterval*3-1;end; end
else
if x(3+i*b)==0
if x(4+i*b)==0
sig(i+1) = qinterval*4-1;
else
sig(i+1) = qinterval*5-1;end
else
if x(4+i*b)==0
sig(i+1) = qinterval*6-1;
else
sig(i+1) = qinterval*7-1;end; end; end

else
if x(2+i*b)==0
if x(3+i*b)==0
if x(4+i*b)==0
sig(i+1) = qinterval*8-1;
else
sig(i+1) = qinterval*9-1;end
else
if x(4+i*b)==0
sig(i+1) = qinterval*10-1;
else
sig(i+1) = qinterval*11-1;end; end
else
if x(3+i*b)==0
if x(4+i*b)==0
sig(i+1) = qinterval*12-1;
else
sig(i+1) = qinterval*13-1;end
else
if x(4+i*b)==0
sig(i+1) = qinterval*14-1;
else
sig(i+1) = qinterval*15-1;end; end; end; end
end
end
end
y=sig;

o. Constbuilder
Función encargada de la construcción de la constelación.

function y = constbuilder(N)
b=ceil(log2(N));
p=zeros(N,b);
for k=0:(N-1)
u=dec2bin(k);
w=zeros(1,length(u));
for i=1:length(u)
w(i)=str2num(u(i));
end
v=[zeros((b-length(w)),1)',w];
p(k+1,:)=v;
end
n=0:N-1;
if N<=16
a=exp(j*2*pi/N.*n');
M=[p,a];
else
a=exp(j*2*pi/16.*(0:15)');
if N<=24
b=0.5*exp(j*2*pi/(N-17).*(0:N-17)');
M=[p,[a;b]];
else
b=0.66*exp(j*2*pi/8.*(0:8)'+j*pi/16);
if N<=32
c=0.33*exp(j*2*pi/(N-26).*(0:N-26)');
M=[p,[a;b;c]];
else
a=exp(j*2*pi/N.*n');
M=[p,a];
end
end
end
if N==16
a=[.354+.354*j;sqrt(2)/2;sqrt(2)/2*j;-.354+.354*j;-
sqrt(2)/2*j;.354-.354*j;-.354-.354*j;-sqrt(2)/2];
b=exp(j*2*pi/8.*(0:7)');
M=[p,[a;b]];
else
end
y=matlaberr(M);

p. Resultados Graficos obtenidos

Fig. 21. Señal de entrada


Fig. 22. Entrada cuantificada

Fig.23. Mapa de constelacion


Fig.24. Prefijo ciclico añadido

Fig. 25. Señal con interferencia en el dominio del tiempo


Fig. 26. Puntos de constelacion recibidos

Fig.27. Funcion de Transferencia del canal de transmision


Fig. 28. Señal de salida del canal

Fig. 29. Señal con prefico ciclico extraido


Fig. 30. Funcion de transferencia del ecualizador

Fig. 31. Señal recibida cuantificada


Fig. 32. Señal reflejada, 128 muestras reflejadas

7. CONCLUSIONES Y SUGERENCIAS
 Se logro lo que se quería lograr, una simulación de una transmisión
OFDM en DMT ADSL. Utilizando 256 portadoras.
 El proceso fue satisfactorio

8. REFERENCIAS
 http://cnx.org/contents/513c5788-0900-4745-ab70-
4597a1a791a2@3/DMT:_Implementation
 DSL Advances, Prentice Hall
 OFDM simulation using Matlab, Guillermo Acosta
 Discrete Multitone Technology for 100G Ethernet, Toshiki Tanaka
 DSL Transmission, Technische Universitat Hamburg-Harburg
 Sistemas de transmission por fibra optica basados en OFDM, Raul
Nieto Freire
 The benefits of Discrete Multi-Tone Modulation for VDSL systems,
Ikanos
 Simulaciones en Matlab
 Introduction to Digital Subscriber Line Technolgy, Concord
 OFDM and DMT Systems, Cambridge

También podría gustarte