Está en la página 1de 159

Proyecto Fin de Carrera

Ingeniera de Telecomunicacin












Diseo y realizacin de un
modulador/demodulador COFDM
sobre SoundBlaster









Autora: Ins Mara Prez Ortega

Tutor: D. Jos Ramn Cerquides Bueno
Departamento de Ingeniera Electrnica
rea de Teora de la Seal y Comunicaciones
Universidad de Sevilla
Septiembre 2003



2


Agradecimientos

Me gustara dar las gracias a mi profesor y tutor D. Jos Ramn Cerquides
Bueno por permitirme realizar con l este proyecto tan interesante, variado, prctico y
motivador. Tambin agradezco la amable atencin y orientacin que me ha prestado
siempre que he necesitado consultarle.

Por supuesto, quiero dar las gracias a mis padres y hermanos por apoyarme,
confiar en m y por proporcionarme todo lo necesario a lo largo de este proyecto, sobre
todo cuando me han surgido problemas tcnicos con mi PC durante la realizacin del
mismo.

Por ltimo, me gustara agradecer especialmente a David todo el nimo, todo el
apoyo, todo el tiempo que me ha dedicado y toda la ayuda que me ha proporcionado,
porque gracias a l he sido capaz de realizar este trabajo.

















3


ndice de contenidos

1. Introduccin............................................................................................................ 6

2. Estudio del canal de comunicaciones............................................................. 8

2.1 Configuracin del mezclador............................................................................. 9

2.2 Anlisis del ruido presente en el sistema ........................................................ 14

2.3 Respuesta frecuencial del canal de comunicaciones...................................... 16

3. Modulador/demodulador COFDM.............................................................. 18

3.1 Introduccin...................................................................................................... 18

3.1.1 Modulacin multiportadora............................................................................ 18
3.1.2 Sistemas digitales de radiodifusin: modulacin COFDM................................ 20
3.1.3 Historia de la modulacin .............................................................................. 23
3.1.4 Ventajas de la Modulacin............................................................................. 24
3.1.4.1 Igualacin ........................................................................................ 24
3.1.4.2 Proteccin contra desvanecimientos....................................................... 24
3.1.4.3 Redes de frecuencia nica.................................................................... 25
3.1.5 Esquema del sistema OFDM.......................................................................... 25

3.2 Transmisor COFDM........................................................................................ 29

3.2.1 Bloques para correccin de errores ................................................................. 29
3.2.1.1 Codificador Reed-Solomon.................................................................. 31
3.2.1.2 Codificador convolucional ................................................................... 31
3.2.2 Conversor Serie-Paralelo ............................................................................... 33
3.2.3 Modulador QAM................................................................................................... 33
3.2.4 Extensin del espectro................................................................................... 36
3.2.5 IFFT ............................................................................................................ 36
3.2.6 Insercin del intervalo de guarda.................................................................... 38
3.2.7 Conversor Paralelo-Serie ...................................................................................... 39
3.2.8 Bloques no incluidos en el transmisor implementado....................................... 39
3.2.8.1 Aleatorizador de Energa ..................................................................... 40
3.2.8.2 Barajador Externo.............................................................................. 41
3.2.8.3 Barajador interno ............................................................................... 42

ndice de contenidos


4
3.3 Receptor COFDM............................................................................................. 44

3.3.1 Conversor Serie-Paralelo ............................................................................... 44
3.3.2 Eliminacin del intervalo de guarda................................................................ 45
3.3.3 FFT.............................................................................................................. 45
3.3.4 Reduccin del espectro.................................................................................. 46
3.3.5 Igualador de canal ......................................................................................... 47
3.3.6 Demodulador QAM...................................................................................... 48
3.3.7 Conversor Paralelo-Serie ............................................................................... 48
3.3.8 Decodificador Convolucional......................................................................... 48
3.3.9 Decodificador Reed-Solomon ........................................................................ 50
3.3.10 Bloques no incluidos en el receptor .............................................................. 50
3.3.10.1 Desbarajador Interno ............................................................................... 51
3.3.10.2 Desbarajador Externo ....................................................................... 52
3.3.10.3 Desaleatorizador de Energa............................................................... 53

3.4 Programacin en MATLAB del modem COFDM.............................................. 54

3.4.1 Programa principal........................................................................................ 55
3.4.2 Transmisor ................................................................................................... 59
3.4.2.1 Codificacin Reed-Solomon ................................................................ 62
3.4.2.2 Codificacin Convolucional ................................................................ 65
3.4.2.3 Modulador QAM............................................................................... 69
3.4.2.4 Insercin del supersmbolo de entrenamiento .......................................... 73
3.4.2.5 Extensin del espectro........................................................................ 74
3.4.2.6 IFFT ............................................................................................... 78
3.4.2.7 Insercin del intervalo de guarda .......................................................... 79
3.4.3.8 Conversin Paralelo/Serie ................................................................... 80
3.4.3.9 Insercin de sincronismo..................................................................... 81
3.4.3 Receptor....................................................................................................... 83
3.4.3.1 Deteccin de sincronismo .......................................................................... 86
3.4.3.2 Conversor Serie/Paralelo..................................................................... 87
3.4.3.3 Eliminacin del intervalo de guarda ...................................................... 88
3.4.3.4 FFT ................................................................................................ 89
3.4.3.5 Reduccin del espectro ....................................................................... 90
3.4.3.6 Extraccin del supersmbolo de entrenamiento ........................................ 91
3.4.3.7 Igualador de canal.............................................................................. 92
3.4.3.8 Demodulador QAM........................................................................... 93
3.4.3.9 Decodificador Convolucional............................................................... 95
3.4.3.10 Decodificador Reed-Solomon............................................................. 98

4. Sincronizacin.................................................................................................... 101

4.1 Sincronizacin de smbolo.............................................................................. 101

4.1.1 Errores de temporizacin............................................................................. 101
4.1.2 Sincronizacin de trama y smbolo en el sistema implementado ..................... 102
4.1.3 Ruido de fase de la portadora .............................................................................. 107

ndice de contenidos


5
4.2 Sincronizacin de la frecuencia de muestreo ............................................... 107

4.2.1 Sincronizacin de la frecuencia de muestreo en el sistema implementado......... 108
4.2.1.1 Clculo del desajuste de frecuencias de muestreo................................... 108

4.3 Sincronizacin de la frecuencia de la portadora.......................................... 110

4.3.1 Errores de frecuencia................................................................................... 110
4.3.2 Estimadores de frecuencia ........................................................................... 112

5. Entorno grfico.................................................................................................. 113

5.1 Interfaz grfico de usuario de MATLAB (GUI).......................................... 113

5.1.1 Entorno de desarrollo de la GUI ......................................................................... 113
5.1.2 Ficheros generados por el GUIDE ...................................................................... 114
5.1.3 Caractersticas del fichero-M.............................................................................. 114
5.1.4 Creacin de la GUI.............................................................................................. 115
5.1.4.1 Programacin de la GUI ................................................................... 117
5.2 Resultado de las pruebas realizadas ............................................................. 122

6. Conclusiones ....................................................................................................... 128

6.1 Posibles mejoras y lneas de continuacin.................................................... 128

Apndice A. Cdigos lineales de bloques: Cdigos Reed-Solomon ..... 130

Apndice B. Cdigos convolucionales ............................................................ 135

Apndice C. Cdigo MATLAB del entorno grfico.................................. 143










6


Captulo 1

Introduccin

La tarjeta de sonido del PC adems de permitir la reproduccin y adquisicin de
seales de audio, puede tambin utilizarse como convertidor A/D y D/A, permitiendo
as el desarrollo de numerosas aplicaciones, incluyendo el rea de transmisin de datos.
En este proyecto se utilizar dicha tarjeta para programar un sistema de comunicaciones
en banda base que utilice una modulacin COFDM.

La modulacin COFDM (Coded-Ortogonal-Frequency-Division-Multiplexing)
realiza una multiplexacin por divisin en frecuencia donde las frecuencias son
ortogonales entre s. Esta modulacin es especialmente adecuada para comunicaciones
de alta velocidad (p.e. sistemas digitales de radiodifusin y de comunicaciones
mviles) debido a su resistencia a la interferencia entre smbolos (ISI).

Los sistemas de comunicacin aumentan cada vez ms la velocidad de
transmisin de la informacin y por lo tanto, se reduce el tiempo para cada transmisin.
Dado que el retardo temporal causado por el multitrayecto (problema importante de la
radiocomunicacin) permanece constante, la ISI se convierte en una limitacin en las
comunicaciones con alta tasa de datos. COFDM evita este problema enviando muchas
transmisiones de baja velocidad simultneamente, lo que aumenta el periodo de los
smbolos que se envan y por tanto, se disminuye la ISI. Adems, COFDM utiliza
codificacin para la correccin de errores lo que hace al sistema ms robusto. Otra
razn para considerar COFDM es la baja complejidad de su implementacin para
sistemas de alta velocidad si se compara con las tcnicas tradicionales de portadora
nica.

A lo largo del proyecto se har un estudio exhaustivo de la modulacin enfocado
a su posterior implementacin prctica.

A continuacin se presentan las distintas partes de que se compone este proyecto
explicndose brevemente lo que se realiza en cada una de ellas:

Estudio del canal de comunicaciones

En este apartado se realizar un anlisis y caracterizacin del canal de
comunicaciones formado por la tarjeta de sonido y el cable de audio, obtenindose
conclusiones acerca de la respuesta frecuencial del sistema y el ancho de banda que
ocupa. Tambin se realizar una estimacin del ruido presente en sistema.

Introduccin


7
Modulador/Demodulador COFDM

En este apartado se realizar, en primer lugar, un estudio terico de la
modulacin COFDM y de los bloques que forman el modulador y el demodulador. En
segundo lugar se programarn en MATLAB las rutinas que permitan la
modulacin/demodulacin de las seales transmitidas o recibidas por la tarjeta de
sonido, integrndose estas en un nico programa que verifica si la comunicacin ha sido
correcta mostrndose los valores de la BER (bit error rate), la SER (symbol error rate),
la tasa neta de transmisin de datos y el tiempo que dura la ejecucin del programa.

Sincronizacin

En este apartado se realiza un estudio exhaustivo de la sincronizacin en los
sistemas OFDM explicndose la forma en que se ha llevado a cabo sta en este sistema
particular.

Entorno grfico

En este apartado se explica la programacin en MATLAB del entorno grfico
creado para la aplicacin prctica, mostrndose as mismo la apariencia del mismo. Se
presentan tambin los resultados de las diversas pruebas de simulacin realizadas.

Conclusiones

Para finalizar se presentan las conclusiones obtenidas del estudio realizado as como las
posibles mejoras o lneas de continuacin.
























8


Captulo 2

Estudio del canal de comunicaciones

En este apartado trataremos de obtener conclusiones acerca de la respuesta
frecuencial del canal o sistema de comunicaciones y el ancho de banda que ocupa, as
como realizar una estimacin del ruido presente en sistema.

En nuestro caso el canal de comunicaciones estar formado por el cable de audio
y la tarjeta de sonido del PC. El cable de audio conecta las lneas LINE IN (o Lnea de
entrada) y LINE OUT (o Lnea de salida) de la misma tarjeta de sonido que estar
configurada en modo full-duplex, ya que este modo permite reproducir y grabar datos
simultneamente, por lo que la comunicacin (transmisin y recepcin), se realiza
dentro de un nico ordenador.







Figura 2.1. Esquema simplificado del sistema de comunicaciones

Tambin se podra simular la comunicacin entre dos ordenadores conectando la
lnea de entrada de un ordenador (receptor) con la de salida del otro (transmisior), pero
por simplicidad todas las pruebas prcticas de este proyecto se desarrollarn en un PC
con una sola tarjeta de sonido.

Dado que un anlisis y caracterizacin de este canal de comunicaciones ya
fueron llevados a cabo en un proyecto anterior, nos limitaremos a verificar las
conclusiones obtenidas entonces.

Estas conclusiones fueron:

El canal de comunicaciones es un canal paso-banda (BP) pese a que a simple
vista parece tratarse de un canal paso-bajo (LP). Esto se comprueba ya que al
transmitir una seal continua, en recepcin vemos que se bloquea la DC.
TX/RX
TARJETA DE SONIDO
LINE IN
LINE OUT
C
A
B
L
E

D
E

A
U
D
I
O

A/D
D/A
ONDA
Control de Volumen
Estudio del canal de comunicaciones


9
Adems, esto se puede apreciar tambin al hacer un zoom a bajas frecuencias de
la respuesta frecuencial del sistema.

El ancho de banda del canal es aproximadamente 20 KHz, ya que se extiende
desde los 20 Hz hasta algo menos de los 20 KHz.

La respuesta frecuencial no es totalmente plana, lo cual nos obligar en
recepcin, a introducir un bloque de ecualizacin o igualacin de canal, con
objeto de contrarrestar la atenuacin producida por el cable en ciertas bandas de
frecuencia.

El ruido presente en el sistema no es tan importante como para que haya que
realizar un filtrado de Wiener , de forma que la ecualizacin ser suficiente y
eficiente si se lleva a cabo con un filtrado que no tenga en cuenta el ruido como,
por ejemplo, filtrado inverso o de cero forzado (ZF).


Antes de verificar estas conclusiones, debemos mencionar que la tarjeta de
sonido que usaremos para llevar a cabo la comunicacin no es una SoundBlaster como
la que se utiliz en el proyecto anterior, sino que en nuestro caso usaremos una tarjeta
de sonido integrada en la placa base que es como se encuentran en la mayora de los
PCs actuales y el modelo utilizado es el SiS 7012 Wave. Es posible, por tanto, que
aunque el cable de audio sea prcticamente igual al utilizado en el proyecto anterior, al
usarse una tarjeta de sonido diferente podamos obtener algunas conclusiones
ligeramente distintas a las anteriores.

A continuacin comprobaremos estas conclusiones con la ayuda de MATLAB
pero sin detenernos en detalles, por lo que nos limitaremos a verificar que el canal es
efectivamente paso-banda, que su ancho de banda es aproximadamente 20 KHz y que el
ruido del canal no es importante.

2.1 Configuracin del mezclador

Antes de llevar a cabo estas comprobaciones acerca del canal de comunicaciones
es importante, en primer lugar, realizar los ajustes adecuados en el mezclador de la
tarjeta de sonido (SiS 7012 Wave) para conseguir nuestro propsito, que ser el de
transmitir un fichero de datos por el cable de audio y grabarlo para comprobar ciertas
caractersticas de la transmisin realizada.

Debemos recordar que desde el mezclador de la tarjeta de sonido, lo que se hace
internamente es controlar los amplificadores de esta. Las distintas fuentes que controlan
estos amplificadores pueden ser de dos tipos:

INTERNAS (Onda, Midi y CD audio principalmente)

EXTERNAS ( Lnea de Entrada y Micrfono)

Dentro del mezclador encontramos dos tipos de controles: reproduccin y
grabacin. Con el de reproduccin, controlamos lo que enviamos a la salida de la tarjeta
Estudio del canal de comunicaciones


10
y con el de grabacin, controlamos lo que queremos que la tarjeta de sonido registre
cuando la ponemos a grabar fuentes externas.

Nuestro objetivo ser generar una seal dentro del ordenador, enviarla por Lnea
de salida y recogerla por Lnea de entrada, y para ello debemos cerrar los interruptores
correspondientes en el mezclador seleccionando las propiedades de audio del control de
volumen de Windows XP que se muestran a continuacin:

En el Control de Volumen de Reproduccin de sonido:

Silenciamos el Sintetizador SW, la Profundidad en 3D, el Reproductor de CD y
la Lnea de entrada por lo que solo dejamos activos el Control de volumen (obligatorio,
ya que si no, no saldra nada de la tarjeta) y la Onda (con esto permitimos el envo de un
sonido procedente de un fichero almacenado en el PC).
















En el Control de Grabacin de Grabacin de sonido:

Seleccionamos la Lnea de entrada (para grabar solo lo que llegue por ah)
dejando sin activar el Reproductor de CD y el Micrfono.

Con esto conseguimos reproducir un fichero interno y grabar slo por la Lnea
de entrada, obviando las dems fuentes.













Estudio del canal de comunicaciones


11
Una vez realizados todos los ajustes en el mezclador para reproducir y grabar
correctamente, el siguiente paso es elegir el formato de audio que vamos a utilizar
durante todo el proyecto. Para ello se explicamos en primer lugar lo que es el audio
digital y los parmetros de dicho formato:
Una seal de audio es simplemente una serie de ondas de presin en
movimiento. En la vida real esto no es ms que una onda analgica, pero en el mundo
digital debemos almacenar la seal como un conjunto de muestras a lo largo de esta
onda. Una muestra es un valor que representa la amplitud de la onda en un instante
temporal dado.
La tasa de muestreo indica con qu frecuencia tomamos una muestra de la onda.
Se mide en hertzios (Hz) o muestras por segundo. Obviamente cuanto mayor sea la tasa
de muestreo ms parecida a la onda analgica se hace la onda muestreada, por lo tanto
mejor ser la calidad del sonido.
Otro factor que contribuye a la calidad del audio es el tamao de cada muestra.
Cuanto mayor sea el tamao de la muestra ms calidad de audio tendremos. El tamao
de las muestras se mide en bits. Consideremos una muestra de 8 bits. Esta tiene 256
(2^8) posibles valores. Esto significa que posiblemente no se puede representar el valor
exacto de la amplitud de la onda con ella. Si consideramos ahora una muestra de 16 bits
esta podr representar 65536 posibles valores (2^16). Esto significa que puede
representar la amplitud con una precisin 256 veces mayor que la muestra de 8 bits.
En cuanto a los canales que se usan, debemos tener en cuenta que en la mayora
de los sistemas se tienen 2 canales, el izquierdo y el derecho. Esto significa que se debe
almacenar una muestra para el canal izquierdo y otra para el canal derecho.
Afortunadamente esto se hace de forma fcil con 2 canales ya que las muestras se
entrelazan, lo que significa que las muestras se almacenan, izquierda, derecha,
izquierda, derecha, y esto es lo que se llama formato de sonido estreo.
La calidad de audio de CD muestrea a 44100 Hz, tiene un tamao de muestra de 16 bits
y usa 2 canales. Esto significa que 1MB de audio dura aproximadamente 6 segundos.
Para optimizar los resultados el formato de audio que usaremos ser el siguiente:

PCM 44100 Hz/48000Hz; 16 bits; mono (calidad de CD con un solo canal)

El formato de sonido PCM no modula pulsos codificados como se podra pensar
sino que es un sistema de codificacin de pulsos modulados, codifica la seal
(realizando previamente un muestreo y cuantizacin de la misma) para
convertirla en digital.

Se ha elegido la frecuencia de muestreo 44100 Hz dado que la calidad de CD es
la ms extendida popularmente, aunque finalmente se ha aadido tambin la
frecuencia de muestro de 48000Hz ya que la mayora de las tarjetas actuales
permiten tambin el uso de esta frecuencia. Una frecuencia de muestreo de
44100 Hz nos indica que en la duracin de un segundo, tendremos 44100
muestras o lo que es lo mismo, que la separacin entre muestra y muestra
(tiempo de muestra) ser de 1/44100 segundos.
Estudio del canal de comunicaciones


12

Este formato utilizar 16 bits para codificar cada muestra, esto significa que en
rango de 16 bits, una muestra podr ser codificada con los nmeros enteros entre
-32768 y 32767 que, el programa MATLAB lo normaliza y equivale al rango -1
y 1.

Por ltimo, dado que slo usaremos un canal de transmisin, el formato de
sonido es mono, y no estreo, ya que ste equivaldra realmente a dos canales.

A continuacin deberemos realizar un ajuste de amplitudes en el transmisor y el
receptor para que todo funcione correctamente. Se trata de que la seal transmitida no se
sature ni tampoco se atene en exceso. Estos fenmenos son debidos a los
amplificadores del mezclador de la tarjeta de sonido por lo que antes de comenzar la
transmisin de la seal deberemos calibrar su ganancia.

Para ello transmitiremos una seal senoidal de 4 KHz de amplitud mxima con
la configuracin actual del mezclador, si la seal recibida aparece cortada o por el
contrario muy atenuada deberemos ajustar las ganancias de los amplificadores de Onda
y Control de Volumen ,en reproduccin, y Lnea de entrada ,en grabacin, hasta lograr
que la respuesta a esta senoide tenga mxima amplitud sin que llegue a cortarse por
excesivo nivel de seal de entrada, ya que pretendemos usar todo el rango dinmico sin
que se sature la seal.

El programa MATLAB que nos permite el ajuste de amplitudes es:

%Programa calibra. Enva una seal senoidal a travs del canal y registra la
%seal recibida calculando tambin su transformada de Fourier. Representa
%tambin tanto la seal recibida como su espectro en frecuencia.

while 1==1

frecMue = 44100;
frecSin = 4000;
durSin = 0.1;

numMue = frecMue * durSin;
pasoSin = 2*pi*frecSin/frecMue;

t = ( 1:numMue ) * pasoSin;
tx = sin(t);
wavplay(tx, frecMue, 'async');

%%%%%%%%%%
rx = wavrecord(numMue, frecMue, 1, 'double')';

esp = fft(rx(ceil(numMue/4):ceil(3*numMue/4)));
f = 0:((frecMue/2+1)/(length(esp)/2)):(frecMue/2);

subplot(2,1,1),plot(rx);
axis([(numMue/2-100) (numMue/2+100) -1 1]);
xlabel('Indice temporal n');ylabel('Amplitud');
title('Seal senoidal recibida');

subplot(2,1,2),plot(f,20*log(abs(esp(1:ceil(length(esp)/2)))));
axis([0 (frecMue/2) -100 150]);
xlabel('Frecuencia');ylabel('Amplitud');
title('Espectro frecuencial de la seal recibida');
pause;
clf reset;
Estudio del canal de comunicaciones


13

end

El objetivo de este programa es ajustar el rango dinmico del transmisor y el receptor y
para ello genera una seal senoidal de 4 KHz de frecuencia, la transmite a travs de la
tarjeta de sonido (a travs de la fuente interna Onda mediante la funcin wavplay), y al
mismo tiempo va grabando por la lnea de entrada lo recibido a travs del canal
(mediante la funcin wavrecord). Para poder realizar los ajustes fcilmente se
representa adems de la seal recibida, el espectro frecuencial de esta seal con el fin de
apreciar si aparecen armnicos y por lo tanto saber si los amplificadores saturan la
seal. El programa se engloba dentro de un bucle infinito para poder ir cambiando los
valores de ganancia de los amplificadores y al mismo tiempo poder visualizar la seal
recibida y as se consigue calibrar el mezclador de forma fcil y cmoda.

Como ya habamos indicado lo que debemos tener en cuenta para realizar los
ajustes es lo siguiente:

Los amplificadores con ganancia alta pueden distorsionar la seal.
Los amplificadores pueden saturar la seal.
Se desea utilizar todo el rango dinmico.

Los amplificadores con los que jugamos son el de Onda, el de Control de
Volumen y el de Lnea de Entrada.

Para tratar el problema de la distorsin lo que hacemos es bajar mucho uno de
ellos y poner los otros al mximo de ganancia pero de forma que la seal no se sature.
Por el espectro comprobamos que el rango dinmico es bajo y que no se produce
distorsin, por lo que no aparecen armnicos en el espectro, debido a que los
amplificadores estn configurados con ganancia mxima. Esto implica que no
tendremos restricciones de ganancia en los amplificadores.

Por otro lado habr que ajustar la saturacin de la seal, para ello nos fijaremos
en que el seno no aparezca truncado y que no aparezcan picos en el espectro, ya que
esto significa que aparecen armnicos y por lo tanto habra saturacin. Realizando
varias pruebas con distintas configuraciones de los amplificadores llegamos a una
solucin de compromiso en la que vemos que el seno no se satura y adems se
aprovecha casi por completo el rango dinmico de seal permitido.

En MATLAB mostramos la senoide recibida y su espectro, donde como vemos
no aparecen armnicos a otras frecuencias que no sean la fundamental (4 KHz):

Estudio del canal de comunicaciones


14
2120 2140 2160 2180 2200 2220 2240 2260 2280 2300
-1
-0.5
0
0.5
1
Indice temporal n
A
m
p
l
i
t
u
d
Seal senoidal recibida
0 0.5 1 1.5 2
x 10
4
-100
-50
0
50
100
150
Frecuencia
A
m
p
l
i
t
u
d
Espectro frecuencial de la seal recibida

Figura 2.1. Ajuste del mezclador.

Una vez realizados todos los ajustes del mezclador necesarios para la
comunicacin pasaremos a analizar el ruido del canal.

2.2 Anlisis de ruido del sistema

En este apartado trataremos de comprobar que el ruido presente en el sistema de
comunicaciones es realmente escaso y podremos hacer consideraciones posteriores
sobre el canal que nos simplifiquen mucho nuestro estudio.

Para llevar a cabo este anlisis nos limitaremos a enviar a travs del canal una
cadena larga de ceros, es decir, como si no transmitisemos nada, de forma que en
recepcin, tendremos el ruido presente en el sistema, y posiblemente interferencias
procedentes de la red elctrica y sus primeros armnicos: 50 Hz/100 Hz/150 Hz.

Con el siguiente programa MATLAB podemos calcular el ruido y su densidad
espectral de potencia:

%Programa txvacio. Realiza una transmisin de vaco a travs del canal y
%registra el ruido que aparece en el mismo calculando su densidad espectral.

frecMue = 44100;
durSin = 100;
numMue = frecMue * durSin;
tx = zeros(1,numMue);
wavplay(tx, frecMue, 'async');

%%%%%%%%%%
Estudio del canal de comunicaciones


15

rx = wavrecord(numMue, frecMue, 1, 'double')';
rx = rx(ceil(numMue/4):ceil(3*numMue/4));
subplot(2,1,1),plot(rx);
title('Ruido recibido')
xlabel('Numero de muestras');
ylabel('Amplitud');
[Snno,F] = PSD(rx,2046,44100);
subplot(2,1,2),plot(F,10*log10(Snno));grid;
xlabel('Frecuencia');
ylabel('Densidad espectral de ruido del sistema');

A continuacin se muestra grficamente el ruido presente en el sistema y su
densidad de potencia.


0 0.5 1 1.5 2 2.5
x 10
6
-4
-3.5
-3
-2.5
-2
-1.5
x 10
-3
Ruido recibido
Numero de muestras
A
m
p
l
i
t
u
d
0 0.5 1 1.5 2 2.5
x 10
4
-100
-80
-60
-40
-20
0
Frecuencia
D
e
n
s
i
d
a
d

e
s
p
e
c
t
r
a
l

d
e

r
u
i
d
o

d
e
l

s
i
s
t
e
m
a

Figura 2.2. Ruido presente en el sistema

Con esto podemos comprobar que el ruido presente en el sistema tiene una
amplitud lineal de aproximadamente 0.0007 que aparece superpuesta sobre un valor de
continua de -0.0027, por lo que vemos que la presencia de ruido en este sistema es un
poco mayor que la que suponamos, ya que en el estudio que se realiz anteriormente el
ruido tomaba valores de amplitud 0.0001 aproximadamente. En este caso solo habr que
tener en cuenta este ruido en el diseo del detector en el receptor, ya que los puntos de
la constelacin se vern ligeramente alterados por el ruido, pero este problema ser
estudiado con ms detalle en el captulo 3.



Estudio del canal de comunicaciones


16

2.3 Respuesta frecuencial del canal de comunicaciones

La funcin de transferencia del canal se puede obtener mediante la transmisin
de una funcin impulso (delta) y viendo, en recepcin, cul es la respuesta impulsiva del
sistema. Otra forma de obtener la respuesta frecuencial del sistema que adems es ms
robusta que la transmisin de una delta, es hacer uso de la expresin:

) ( ) ( ) (
2
f Snni f Hc f Snno =

donde debemos tener en cuenta que ) ( f Snno es la densidad espectral de potencia del
ruido a la salida del sistema, ) ( f Snni es la densidad espectral de potencia del ruido a la
entrada y
2
) ( f Hc es el mdulo al cuadrado de la respuesta frecuencial del sistema.

Por tanto, para el clculo de esta respuesta frecuencial haremos lo siguiente:
Creamos un ruido blanco en MATLAB y le calculamos su densidad espectral de
potencia ) ( f Snni , lo transmitimos por el canal, lo registramos en recepcin y le
calculamos tambin su densidad espectral de potencia ) ( f Snno . Ya tan solo nos queda
despejar en la ecuacin
2
) ( f Hc , que como vemos se obtiene de la divisin
) ( ) ( f Snni f Snno . Veamos la rutina que permite hacer esto en MATLAB:

%Programa respfrec. Calcula la respuesta frecuencial del sistema.

frecMue = 44100;
frecSin = 4000;
durSin = 100;
numMue = frecMue * durSin;
tx = wgn(1,numMue,5);
tx = tx/max(abs(tx));
wavplay(tx, frecMue, 'async');

%%%%%%%%%%%%%%%

rx = wavrecord(numMue, frecMue, 1, 'double')';
tx = tx(ceil(numMue/4):ceil(3*numMue/4));
rx = rx(ceil(numMue/4):ceil(3*numMue/4));
%Hacemos un recorte de las seales de ruido transmitidas
%y recibidas para evitar problemas de transitorio a la
%hora de transmitir y comenzar a grabar
[Snni,F] = PSD(tx,2046,44100);
[Snno,F] = PSD(rx,2046,44100);
H2 = Snno./Snni;
plot (F, 20*log10(H2));grid
title('Respuesta frecuencial del sistema')
xlabel('Frecuencia');
ylabel('Modulo');


Estudio del canal de comunicaciones


17
0 0.5 1 1.5 2 2.5
x 10
4
-30
-25
-20
-15
-10
-5
0
5
Respuesta frecuencial del sistema
Frecuencia
M
o
d
u
l
o

Figura 2.3. Respuesta frecuencial del sistema de comunicaciones

Como se puede comprobar en la grfica obtenida, en nuestro caso el sistema
tiene un ancho de banda menor de 20 KHz (obtenemos un ancho de banda de unos 18
KHz si usamos el criterio de -3dB) que era el que suponamos y adems el canal en este
caso no slo es que deje pasar la continua sino que adems tiene un pico negativo en la
frecuencia cero. Esto suponemos que se debe a que la tarjeta de sonido no posee
condensadores de desacoplo, algo que no es muy usual, y por esto aparece ms ruido y
el canal es paso-baja (LP).

De cualquier forma, y dado que la respuesta frecuencial no es plana sino que
decae con la frecuencia por tratarse de un canal de transmisin no ideal, supondremos
que el ancho de banda de nuestro sistema es de aproximadamente 20 KHz (un poco
inferior) que es la frecuencia a la que se produce una cada ms abrupta de la respuesta
frecuencial, an as se procurar no transmitir nada a frecuencias muy bajas o muy altas
dentro de esta banda para evitar errores en la comunicacin.



















18


Captulo 3

Modulador/demodulador COFDM

3.1 Introduccin

3.1.1 Modulacin multiportadora

Cuando consideramos una transmisin digital a travs canales no ideales
observamos que estos canales causan interferencia entre smbolos cuando el inverso de
la tasa de transmisin del sistema es mucho menor que la dispersin temporal (duracin
de la respuesta impulsiva) del canal no ideal. En tal caso se emplea un ecualizador para
compensar la distorsin del canal. Si el canal es paso de banda con un ancho
especificado, la seal de informacin debe ser generada en banda base y ser trasladada a
la frecuencia del canal. Por lo tanto, la seal de informacin se transmite con una nica
portadora. Tambin se puede observar que la interferencia entre smbolos normalmente
produce una degradacin en el rendimiento del sistema, incluso en el caso donde se usa
un detector ptimo para recuperar los smbolos de informacin en el receptor.

Una propuesta alternativa para el diseo de un sistema de comunicacin paso-
banda eficiente en presencia de distorsin del canal es la divisin del ancho de banda
del canal disponible en un nmero de subcanales con igual ancho de banda, donde el
ancho de banda de cada subcanal sea lo suficientemente estrecho para que la respuesta
impulsiva de cada subcanal sea aproximadamente ideal. Por lo tanto, creamos
f W K = / subcanales, donde smbolos diferentes de informacin pueden ser
transmitidos simultneamente en los K subcanales. Como consecuencia, los datos son
transmitidos mediante multiplexin por divisin en frecuencia (FDM).

Con cada subcanal asociamos una portadora

t f t x
k k
2 sin ) ( = , 1 ,..., 1 , 0 = k k [3.1]

donde
k
f es la frecuencia central en el subcanal k . Si se elige la tasa de smbolo T / 1 de
cada subcanal que sea igual a la separacin f entre subportadoras adyacentes, las
subportadoras son ortogonales en el intervalo smbolo T , independientemente de la
relacin relativa de fase entre subportadoras; es decir,

0 ) 2 sin( ) 2 sin(
0
= + +

dt t f t f
j
T
j k k
[3.2]
Modulador/demodulador COFDM


19

donde T n f f
j k
/ = , ,... 2 , 1 = n , independientemente de los valores de las fases
k
y
j . En este caso, tenemos un sistema con multiplexacin por divisin en frecuencias
ortogonales (OFDM).

La modulacin OFDM tiene como fin fundamental adecuar los datos que se
quieren transmitir a las caractersticas del canal empleado. Esta modulacin es un
sistema de transmisin en paralelo, es decir, varios datos son transmitidos en el mismo
instante de tiempo por mltiples portadoras, portadoras que se eligen de forma que sean
ortogonales entre s de la forma mencionada anteriormente.

La ortogonalidad de las portadoras puede ser mantenida siempre y cuando el
canal no introduzca interferencia entre smbolos (ISI). En la prctica los canales siempre
introducen ISI y para prevenirla se utiliza en esta modulacin el concepto de intervalo
de guarda, que se explicar ms adelante de forma detallada.



PORTADORAS

Figura 3.1. Los espectros de las portadoras moduladas con seales pulsantes con
duracin del pulso
u
T tienen una envolvente del tipo x senx / y sus ceros se encuentran
a una distancia 1/
u
T

En un sistema OFDM que tiene K subcanales, la tasa de smbolo de cada
subportadora se reduce un factor de N en relacin a la tasa de smbolo de un sistema de
una nica portadora que emplea todo el ancho de banda W y transmite datos a la misma
tasa que OFDM. Por lo tanto, el periodo de smbolo en el sistema OFDM es
s
KT T = ,
donde
s
T es el periodo de smbolo del sistema de una nica portadora. Si se selecciona
K lo suficientemente grande, el periodo de smbolo T puede ser de forma significativa
mayor que la duracin en tiempo de la dispersin temporal del canal. Por lo tanto, la
interferencia entre smbolos puede hacerse arbitrariamente pequea mediante la
seleccin de un K determinado. En otras palabras, cada subcanal parece tener una
respuesta frecuencial fijada ) (
k
f C , . 1 ,..., 1 , 0 = K k

Portadoras
OFDM
Modulador/demodulador COFDM


20
Mientras mantengamos la sincronizacin temporal entre las subportadoras,
OFDM nos permite transmitir un nmero diferente de bits/smbolo en cada
subportadora. Por esto, subportadoras que logran una SNR mayor debido a que sufren
una atenuacin menor, pueden ser moduladas para soportar ms bits/smbolo que
subcanales que obtienen menores SNR. Por ejemplo, podemos usar QAM con
constelaciones de diferentes tamaos en un sistema OFDM.

El modulador y demodulador de un sistema OFDM pueden ser implementados
mediante el uso de un banco paralelo de filtros basado en la transformada de Fourier
discreta (DFT). Cuando el nmero de subcanales es grande, digamos K >25, el
modulador y demodulador en un sistema OFDM son implementados de forma eficiente
mediante el uso del algoritmo de la transformada de Fourier rpida (FFT) para el
cmputo de la DFT.

El concepto de lo que se hace fundamentalmente en esta modulacin se puede
entender de esta manera: tenemos una secuencia de smbolos que queremos transmitir;
estos smbolos se ven como puntos en frecuencia de una seal que forman lo que se
llama una constelacin de puntos. Se agrupan de N en N (a cada grupo de N smbolos
se les llama supersmbolo) y se hace una FFT inversa. El nmero de portadoras que
vamos a tener se corresponde con el nmero de puntos que van a ser procesados en el
algoritmo de la IFFT. En recepcin bastar aplicar la transformada directa de Fourier a
las muestras recibidas para recuperar la secuencia de datos transmitida.

Un problema importante con la modulacin multiportadora en general y con los
sistemas OFDM en particular es su alta relacin de potencia pico-promedio (PAR:
peak-to-average power ratio) que es inherente en la seal transmitida. Aparecen grandes
picos de seal en la seal transmitida cuando las seales de los K subcanales se aaden
constructivamente en fase. Tales picos pueden saturar el amplificador de potencia del
transmisor y, por tanto, causar distorsin de intermodulacin en la seal transmitida.
Esta distorsin se puede reducir y, generalmente evitar, reduciendo la potencia de la
seal transmitida y, por tanto, operando el amplificador de potencia del transmisor en el
rango lineal. Tal reduccin de potencia tiene como resultado una operacin ineficiente
del sistema OFDM.

Se han ideado una gran variedad de mtodos para reducir la PAR en sistemas
multiportadora. Un mtodo relativamente simple es insertar diferentes desplazamientos
de fase en cada una de las subportadoras, donde estos desplazamientos de fase se
seleccionan de forma pseudoaleatoria, o mediante algn algoritmo, para reducir la PAR.

3.1.2 Sistemas digitales de radiodifusin: modulacin COFDM

Los sistemas digitales definidos en la normativa europea para radiodifusin
sonora y de TV tienen en comn la utilizacin del formato de modulacin OFDM para
la transmisin terrenal. La ventaja principal de este formato estriba en su resistencia a la
propagacin multitrayecto. A cambio, para ser eficaz necesita un mnimo ancho de
banda, as como la utilizacin de codificacin y entrelazado para la correccin de
errores.

Modulador/demodulador COFDM


21
Los nuevos sistemas digitales se han diseado tomando en consideracin el caso
de peor recepcin, correspondiente a los receptores porttiles mviles. De esta forma se
garantiza que funcionarn correctamente en todos los entornos previstos.

En radiodifusin, la trama digital se divide en un gran nmero de flujos binarios
de mucha menor velocidad que son transportados por las N portadoras. La modulacin
que se emplea es, dependiendo del sistema, QPSK, 16-QAM o 64-QAM.

El principio de ortogonalidad define la separacin entre portadoras de manera
que sea exactamente la inversa del periodo til de smbolo
u
T , de forma que, en la
duracin de dicho periodo, las seales son ortogonales entre s, y por tanto pueden
demodularse sin interferencia entre ellas.

Pongamos un ejemplo. Si tenemos un flujo binario de 1 Mb/s, podemos
transmitirlo dividido entre N = 1000 subportadoras. Cada una de ellas transportar un
flujo de 1 Kb/s. Si suponemos, por simplicidad, que cada una de las subportadoras se
modula en QPSK (2 bits/smbolo), la velocidad de smbolo es de 500 smbolos/segundo,
y el periodo de smbolo resulta de 2 ms (1/500segundos/smbolo).

Durante ese periodo de smbolo, la modulacin permanece estable, es decir, cada
una de las portadoras tendr una de las cuatro fases posibles en QPSK. Por tanto, la
seal modulada sigue la siguiente expresin, vlida durante un periodo de smbolo
individual:

[3.3]

Donde se comprueba que la seal es la combinacin de N sinusoides, de
frecuencias
u c
T k f / + , cada una de ellas modulada en QPSK a travs de los cuatro
posibles valores que puede tomar
k
. Estas fases permanecen estables durante todo el
periodo til del smbolo. Si la modulacin es 16-QAM 64-QAM, tanto la amplitud
como la fase de cada subportadora se veran afectadas por la modulacin, pero
permaneceran estables en el tiempo
u
T .

Los valores que puede tomar k dependen de cmo se defina la frecuencia de
portadora, que en este caso es una referencia del canal. Es frecuente que la referencia se
site en la mitad de la banda, y que adems la subportadora correspondiente a esa
frecuencia no se emita, con lo que, siguiendo el ejemplo, k tomara valores entre -500 y
-1 y entre 1 y 500. El ancho de banda total es de 1000 veces 1/
u
T , es decir, del orden de
500 KHz.

Se puede comprobar fcilmente que, si las amplitudes y fases de las
subportadoras son estables dentro de un periodo
u
T , las seales son ortogonales entre s.
La demostracin es inmediata como ya se ha visto anteriormente. Otra forma de
comprobar esto es expresando las seales mediante exponenciales complejas, donde se
verifica que para valores de my n diferentes entre s se cumple:
| |

+ + =
(

=
k
k u c
k
j T kt j t j
t T k e e e t s
k u c


) / 2 ( cos Re ) (
/ 2
Modulador/demodulador COFDM


22

0
) ) / 2 (( ) ) / 2 ((
=

+ + + +
u
n u c m u c
T
t T n j t T m j
e e

[3.4]

Siguiendo con el ejemplo, qu ventaja aporta la modulacin OFDM? Podra
tambin emplearse una modulacin QPSK a 500 Ks/s con el mismo flujo binario de 1
Mb/s, y prcticamente con el mismo ancho de banda. La ventaja est en que el periodo
de smbolo se extiende desde 2 s, en el caso de una sola portadora, hasta 2 ms en el
caso multiportadora con OFDM. Ello lo hace mucho ms inmune frente a interferencia
entre smbolos por multitrayecto, eliminando la necesidad de ecualizacin.

Pese a ello, el multitrayecto provocara an una cierta interferencia entre
smbolos, reducida, pero que puede causar prdidas de ortogonalidad que el sistema
tolera mal. Para evitarlo, se habilita un tiempo de guarda entre cada dos smbolos, en el
que se transmite ya la seal correspondiente al siguiente smbolo, pero el receptor
permanece inactivo para que lleguen todos los ecos del smbolo anterior. Es decir, el
periodo de smbolo T ahora se compone de un tiempo de guarda
g
T seguido del tiempo
til
u
T . Las portadoras deben ser ortogonales en el tiempo til
u
T .

La insercin del tiempo de guarda provoca una cierta ineficiencia, pues hay un
tiempo en el que el canal no se usa para transmitir datos sino para permitir la llegada de
los ecos del smbolo anterior. Por ello el ancho de banda es algo superior al mnimo
necesario. Siguiendo con el ejemplo anterior, si se desea mantener el flujo de 1Mb/s, el
periodo de smbolo debe ser, como antes de 2 ms. Si se destina un 20% a tiempo de
guarda, es decir,
g
T = 400 s, el periodo til es ahora
u
T = 1,6 ms. La separacin entre
portadoras pasa a ser de 625 Hz, en lugar de 500 Hz, y el ancho de banda total es de 625
KHz.

Sin embargo, el tiempo de guarda aporta ventajas considerables en cuanto a la
inmunidad adicional frente a multitrayecto, y la posibilidad de utilizar redes de
frecuencia nica.

Los principales parmetros de la modulacin OFDM son, por tanto, los
siguientes:

Periodo de smbolo T
Tiempo til de smbolo
u
T
Tiempo de guarda
g
T
Nmero de portadoras N
Ancho de banda total
T
B
Bits/smbolo de la constelacin M

En un entorno con multitrayecto, adems de la posible interferencia entre
smbolos se produce desvanecimiento. Algunas subportadoras sufren una atenuacin
fuerte por la combinacin destructiva de las seales procedentes de diferentes trayectos.
La modulacin OFDM permite combatir el desvanecimiento si el ancho de banda supera
un mnimo, que corresponde al ancho de banda de coherencia del canal. En este caso el
desvanecimiento es selectivo, afectando solamente a un grupo de subportadoras. Los
Modulador/demodulador COFDM


23
datos transportados en dichas subportadoras se pierden si el desvanecimiento es
profundo, pero pueden recuperarse en base a los datos detectados correctamente de las
subportadoras no afectadas por desvanecimiento. Para ello es necesario utilizar una
combinacin de codificacin para correccin de errores, entrelazado temporal y
entrelazado de frecuencia:

La codificacin aade redundancia para permitir la recuperacin de los bits
errneos partiendo de los que se reciben sin errores. Se utilizan tcnicas estndar
de codificacin de bloques y/o convolucional.

El entrelazado temporal mitiga el efecto de las rfagas de errores, al dispersar en
el tiempo los bits ligadas por la codificacin, de manera que no todos ellos se
vean simultneamente afectados por los errores.

El entrelazado en frecuencia es dual del anterior, y su objetivo es mitigar el
efecto del desvanecimiento selectivo, que afecta a un grupo de portadoras
contiguas, de manera que los bits ligados por la codificacin se distribuyan en
todo el ancho de banda de la seal.

Se suele hablar de COFDM (Coded OFDM) para denotar el uso de OFDM
combinado con codificacin.

3.1.3 Historia de la modulacin

Esta modulacin no es de nueva creacin. El concepto de transmitir datos en
paralelo y hacer un multiplexado por divisin en frecuencia es una idea aparecida ya a
mediados de los aos sesenta. Ya en el mes de Enero de 1970 se present una patente en
Estados Unidos con la idea de transmitir datos en paralelo al multiplexar por divisin en
frecuencia con solapamiento de los subcanales, de esta manera se empleaba el ancho de
banda total disponible. Las primeras aplicaciones se realizaron en el campo militar.

En el caso de tener un gran nmero de subcanales el conjunto de generadores
sinusoidales y demoduladores coherentes que se requieren para un sistema as hacan
que el sistema fuese caro y complejo. Fueron Weinstein y Ebert quienes aplicaron la
transformada discreta de Fourier (DFT) a la transmisin de datos en paralelo como parte
del modulador y demodulador.

Los avances en la escala de integracin electrnica hacen posible que se pueda
disponer de chips que realizan la transformada rpida de Fourier (FFT) y, por lo tanto,
hacen factible la aplicacin de la modulacin COFDM.

En los aos 80 esta modulacin se estudi para su uso en modems de alta
velocidad, comunicaciones digitales para mviles, grabaciones de alta densidad y
comunicaciones de datos en banda ancha sobre canales de radio FM para receptor
mvil.

En esta dcada se debe resaltar el estudio sobre el que fue objeto la modulacin
para su empleo en el medio terrenal. Fue finalmente elegida como la modulacin para el
estndar de radio comercial digital DAB (Digital Audio Broadcasting). Los resultados
Modulador/demodulador COFDM


24
obtenidos en el proyecto DAB resultaron sin duda fundamentales para la eleccin de
esta modulacin en la radiodifusin terrenal de las seales de televisin (DVB-T).

3.1.4 Ventajas de la Modulacin

3.1.4.1 Igualacin

Las caractersticas de esta modulacin facilitan la igualacin en el receptor. Esta
modulacin distribuye una serie de portadoras a lo largo de todo el ancho de banda que
se va a usar en la transmisin, por lo tanto, es muy fcil hallar la respuesta en frecuencia
del canal mediante la transmisin de una secuencia de entrenamiento o una serie de
seales piloto.

3.1.4.2 Proteccin contra desvanecimientos

Un desvanecimiento es una distorsin provocada por las variaciones de las
caractersticas fsicas del canal que tiene como resultado una disminucin de la potencia
recibida. Las mayores distorsiones son provocadas por los desvanecimientos profundos
que son selectivos en frecuencia, afectando de manera distinta a las diferentes
componentes frecuenciales de la seal enviada. De esta manera, algunas frecuencias se
vern muy atenuadas mientras que otras pueden tener una ganancia en potencia. Suelen
ser provocados por la existencia de multitrayecto al producirse una interferencia entre
los rayos que alcanzan el receptor, teniendo como seal resultante la suma de las seales
que llegan hasta l.

Como consecuencia inmediata de la atenuacin soportada en las portadoras ms
afectadas por el desvanecimiento, se puede citar que si el nivel de ruido en el canal es
suficientemente elevado, no va a ser posible recuperar la informacin transportada por
las mismas, hecho que implicar la aparicin de una rfaga de errores en la
decodificacin como consecuencia de la prdida de los smbolos que las modulan.

La modulacin OFDM no proporciona ninguna proteccin contra estos
desvanecimientos, como ya se ha comentado anteriormente. Como solucin se dota a la
modulacin de un codificador de canal compuesto de dos elementos: un cdigo
convolucional y un barajador (por este motivo pasa a llamarse la modulacin Coded-
OFDM).

La intencin pretendida al introducir un cdigo convolucional es aadir cierta
redundancia en los datos que se desean transmitir, redundancia que en recepcin ser
empleada en la correccin de errores. Esa correccin de errores tiene ciertas
limitaciones pues si a la entrada del decodificador apareciese una secuencia larga de
errores, este elemento no sera capaz de decodificar de una manera correcta. Para
acortar la longitud de estas rfagas de errores, y que sean abordables por el cdigo
convolucional, se aade el barajador.

El barajador (interleaver) trata de introducir un cierto desorden (entrelazado) de
manera que las portadoras adyacentes no sean moduladas por datos consecutivos. Si se
produce una prdida de informacin llevada por portadoras adyacentes, al deshacer el
desorden debido al barajador, el error debido a cada portadora queda aislado,
acortndose la longitud de la rfaga.
Modulador/demodulador COFDM


25

A modo de resumen se puede decir que el efecto conjunto del cdigo
convolucional y del barajador puede verse como un promediado de los
desvanecimientos locales sobre todo el espectro de la seal.

3.1.4.3 Redes de frecuencia nica

En un principio se podra pensar que el multitrayecto es debido a causas
exclusivamente naturales, pero el hecho de tener herramientas para paliar los efectos del
mismo, puede inducir a pensar que de manera artificial se introduzca un multitrayecto
controlado como consecuencia del empleo de redes de frecuencia nica.

El espectro para radiodifusin de televisin est muy saturado ya que con el
actual sistema de modulacin un canal de televisin ocupa el propio canal, los
adyacentes, los canales del oscilador y el canal imagen, es decir, cinco ms aparte del
propio. Adems, para la radiodifusin de una misma seal por parte de dos transmisores
geogrficamente adyacentes, se tiene que usar dos canales distintos, precisamente por
culpa del multitrayecto. Usando la modulacin COFDM se podra tener una red de
transmisores que operen todos en la misma frecuencia, una red de frecuencia nica
(SFN).

COFDM se apoya en el intervalo de guarda (prefijo cclico) para paliar los
efectos del multitrayecto, sea este natural o artificial, fruto de que un receptor reciba
seales procedentes de diversos transmisores.

Aparte del mejor aprovechamiento del espectro, otra ventaja de las redes de
frecuencia nica es que debido a la adicin de seales provenientes de dos transmisores
cercanos pertenecientes a la red, se produce una ganancia que se denomina ganancia de
red. Esta ganancia trae consigo mltiples ventajas: la infraestructura para la
radiodifusin es ms barata, ya que se necesita menos potencia en los transmisores;
hacen un mejor uso de la potencia transmitida y logra una mejor cobertura.

Un inconveniente es que la divisin de la red no es posible; es decir, en caso de
querer radiodifusin regional sera necesaria la creacin de una red por mbito de
radiodifusin.

3.1.5 Esquema del sistema OFDM

En este apartado, describiremos un sistema OFDM en el que se usa la QAM para
la transmisin de datos de cada una de las subportadoras y el algoritmo FFT en la
implementacin del modulador y demodulador.

El diagrama de bloques bsico del sistema OFDM se ilustra a continuacin.



Modulador/demodulador COFDM


26


Figura 3.2. Diagrama de bloques bsico del sistema OFDM

Un convertidor serie paralelo subdivide la secuencia de informacin en bloques
de
f
B bits. Los
f
B bits de cada bloque son analizados en K grupos, donde al i-simo
grupo se le asignan
i
b bits. Por tanto,

=
=
K
i
f i
B b
1
[3.5]

Podemos ver el modulador multiportadora como un generador de K subcanales
QAM independientes, donde la tasa e smbolo para cada subcanal es T / 1 y la seal de
cada subcanal tiene una constelacin QAM definida. Por tanto, el nmero de puntos de
seal para el i-simo subcanal es
i
b
i
M 2 = . Si denotamos los valores complejos de los
puntos de seal que corresponden a las seales de informacin de los K subcanales
como
k
X , 1 ,... 1 , 0 = K k , Estos smbolos de informacin {
k
X } representan los
valores de la transformada discreta de Fourier (DFT) de una seal multiportadora
OFDM ) (t x , donde la modulacin de cada subportadora es QAM. Como ) (t x debe ser
una seal real, su DFT de N puntos {
k
X } debe satisfacer la propiedad de simetra
*
k k N
X X =

. Por lo tanto, creamos K N 2 = smbolos de K smbolos de informacin


definiendo

*
k k N
X X =

, 1 ,... 2 , 1 = K k
) Re(
0
'
0
X X = [3.6]
) Im(
0
X X
N
=

Notar que el smbolo de informacin
0
X se divide en dos partes, siendo ambas
reales. Si denotamos la nueva secuencia de smbolos como {
'
k
X , 1 ,... 1 , 0 = K k }, la
DFT-inversa (IDFT) de N puntos da como resultado la secuencia de valores reales

N nk j
N
k
k n
e X
N
x
/ 2
1
0
'
1

=
= 1 ,..., 1 , 0 = N n [3.7]

Modulador
QAM

IFFT

D/A

Demodulador
QAM

FFT

A/D
TRANSMISOR
RECEPTOR
Datos
Datos
Seal
OFDM

Seal
OFDM
Aade
Prefijo
Cclico

S/P

P/S

S/P
Elimina
Prefijo
Cclico

S/P
Modulador/demodulador COFDM


27

donde 1/ N es simplemente un factor de escala. Esta secuencia {
n
x , 1 0 N n } se
corresponde con las muestras de la seal multiportadora OFDM ) (t x , compuesta por K
subportadoras, que puede ser expresada como

T kt j
N
k
k
e X
N
t x
/ 2
1
0
'
1
) (

=
= , T t 0 [3.8]

donde T es la duracin de la seal y ) / ( N nT x x
n
= , 1 ,..., 1 , 0 = N n . Las frecuencias
de las subportadoras son T k f
k
/ = , . 1 ,..., 1 , 0 = K k La seal muestreada {
n
x }
generada mediante el clculo de la IDFT se pasan a travs del convertidor analgico-
digital, donde a la salida, idealmente, est la forma de onda de la seal OFDM ) (t x .

Con ) (t x como entrada al canal, la salida del canal en el receptor se puede
expresar como
) ( ) ( * ) ( ) ( t n t c t x t r + = [3.9]

donde ) (t c es la respuesta impulsiva del canal y * denota convolucin. Como el ancho
de banda
f
de cada subcanal se selecciona para que sea muy pequeo en relacin con
el ancho de banda del canal total
f
K W = , la duracin del smbolo
f
T = / 1 es
grande comparada con la respuesta impulsiva del canal. Para ser especfico,
supongamos que la respuesta impulsiva del canal se expande sobre m +1 muestras de
seal, donde N m << . Una forma simple de evitar completamente la interferencia entre
smbolos (ISI) es insertar un intervalo de guarda de duracin N mT / entre la
transmisin de bloques de datos sucesivos. Esto permite que la respuesta del canal se
desvanezca antes de que el siguiente bloque de K smbolos se transmita.

Un tipo de intervalo de guarda comnmente usado es aadir un llamado prefijo
cclico a cada bloque de N muestras de seal {
n
x , 1 0 N n }. El prefijo cclico
para el bloque de muestras se compone de las muestras
1 1
,..., ,
+ N m N m N
x x x . Estas
muestras se colocan al principio del bloque, y por tanto, se crea una secuencia de
longitud m N + muestras, que pueden indexarse desde m n = a 1 = N n , donde las
primeras m muestras constituyen el prefijo cclico. Entonces si los valores muestreados
de la respuesta del canal son {
n
c , m n 0 }, la convolucin de {
n
c } con {
n
x ,
1 N n m } produce la seal recibida {
n
r }. Como la ISI en cualquier par de
bloques de transmisin de seal sucesivos afecta las primeras m muestras, desechamos
las primeras m muestras de {
n
r } y demodulamos la seal basndonos en las muestras
de la seal recibida {
n
r , 1 0 N n }.

Si vemos las caractersticas del canal en el dominio de la frecuencia, la respuesta
frecuencial del canal en las frecuencias subportadoras T k f
k
/ = es

N nk j
m
n
n k
e c
N
k
C C
/ 2
0
)
2
(

= = , 1 ,..., 1 , 0 = N k [3.10]
Modulador/demodulador COFDM


28

Como la ISI se elimina por el uso de o el prefijo cclico o la banda de guarda
temporal, la secuencia demodulada de smbolos se puede expresar como

k k k
k X C X + =

'
, 1 ,..., 1 , 0 = N k [3.11]
donde { k X

} es la salida de la DFT de N puntos calculada por el demodulador y {


k
}
es el ruido aditivo que corrompe la seal.

Como se ilustraba en la figura, la seal recibida se demodula mediante el clculo
de la DFT de la seal recibida despus de que ha pasado a travs del convertidor
analgico-digital. Como en el caso del modulador OFDM, el clculo de la DFT en el
demodulador se lleva a cabo de forma eficiente mediante el uso del algoritmo FFT.

Para recomponer los smbolos de informacin de los valores calculados por la
DFT, es necesario estimar y compensar los factores del canal {
k
C }. La estimacin del
canal se puede llevar a cabo transmitiendo inicialmente, o una secuencia modulada
conocida en cada una de las subportadoras, o simplemente, transmitiendo las
subportadoras sin modular pero esto podra provocar PAR. Si las caractersticas del
canal varan lentamente con el tiempo, las variaciones temporales se pueden seguir
usando las decisiones a la salida del detector de una forma de decisin directa. Por
tanto, el sistema OFDM multiportadora puede ser hecho para operar de forma
adaptativa. La tasa de transmisin de cada una de las subportadoras se puede optimizar
asignando adecuadamente la potencia transmitida en promedio y el nmero de bits que
son transmitidos por cada subportadora. La SNR por subcanal se puede definir como

2
2
nk
k k
k
C TP
SNR

= [3.12]

donde T es el periodo de smbolo,
k
P la potencia transmitida promedio del subcanal k-
simo,
2
k
C es la magnitud al cuadrado de la respuesta frecuencial del k-simo
subcanal, y
2
nk
es la varianza del ruido correspondiente. En subcanales, con alta SNR,
transmitimos ms bits/smbolo usando una constelacin QAM mayor comparada con
los subcanales con menor SNR. Por lo tanto, la tasa de bits de cada subcanal se puede
optimizar de tal forma que el resultado de la tasa de error entre los subcanales queda
igualado para satisfacer las especificaciones deseadas.

El OFDM multiportadora usando modulacin QAM en cada una de las
subportadoras como se ha descrito anteriormente ha sido implementado en una gran
variedad de aplicaciones incluyendo transmisin de alta velocidad sobre la lnea
telefnica. Este tipo de modulacin multiportadora OFDM se ha llamado tambin DMT
o modulacin multitono discreta.





Modulador/demodulador COFDM


29
3.2 Transmisor COFDM

En la siguiente figura se muestra el transmisor implementado:


Figura 3.3. Diagrama de bloques del transmisor COFDM

El transmisor implementado en este proyecto es un modelo simplificado del
transmisor OFDM estandarizado en DVB-T o DAB, ya que usa para codificacin para
la correccin de errores pero no utiliza tcnicas de entrelazado lo que hara al sistema
ms robusto frente a rfagas de errores, pero dado que nuestra transmisin no es de
difusin sino que se realiza a travs de un canal (cable de audio) prcticamente ideal, la
codificacin ser suficiente para la correccin de los posibles errores de transmisin que
pudieran ocurrir. De cualquier modo, ms adelante se vern cmo son las tcnicas de
entrelazado externo e interno que se utilizan en sistemas modulados con COFDM.

Se presentan a continuacin los distintos bloques que constituyen la cadena
transmisora:

3.2.1 Bloques para correccin de errores: codificador Reed-Solomon y
codificador convolucional
1

El ruido, fundamentalmente, y otros factores como las interferencias, pueden
producir errores en la transmisin de un flujo binario que se manifiestan en la errnea
interpretacin de un 1 por un 0, y viceversa. Es por lo tanto necesario usar una tcnica
de correccin de errores. Se puede crear un cdigo sencillo de deteccin de errores de n
dgitos binarios, situando los bits de informacin en las primeras n-1 posiciones y
llenando la ltima posicin con un 0 1, (el llamado bit de paridad) de forma que la

1
En los apndices A y B se encuentra una explicacin ms detallada del funcionamiento de los cdigos
de bloque y convolucionales empleados en la correccin de errores.
TRANSMISOR COFDM

Codificador
Convolucional

Conversor
Serie-
Paralelo

Modulador
QAM

Extensin de
espectro

Codificador
Reed-
Solomon

Aade
prefijo cclico
(guarda)

Conversor
Paralelo-Serie

IFFT
Pasa a binario
Inserta
Supersmbolo
Entrenamiento
Inserta
Seal
Sincronismo

Trama
de
datos
Muestras
Modulador/demodulador COFDM


30
palabra completa de cdigo contenga un nmero par de unos. Si cuando esta palabra
que se detecta en el extremo receptor contiene un nmero impar de unos, evidentemente
se ha producido un error. Del mismo modo podra utilizarse paridad impar colocando en
la posicin n un bit de forma que la palabra cdigo contenga un nmero impar de unos.
En general, se puede crear un cdigo ) , ( k n de longitud n, aadiendo c k n = bits de
paridad o redundantes a k bits de informacin. Se llama tasa de cdigo a la relacin
n k / . Si esta relacin es, por ejemplo 3/4, se utilizaran 4 bits para transmitir 3 bits de
informacin.

Figura 3.4. Cdigos de bloque ) , ( k n
Esta correccin de errores mediante cdigos insertados antes del modulador en
la cadena de transmisin se la denomina correccin de errores sin canal de retorno,
conocida tambin por las siglas FEC (Forward Error Correction). A la entrada del
codificador llega una secuencia continua de dgitos de informacin y del codificador
sale otra secuencia con algunos dgitos mas que va al modulador. En el lado receptor, el
demodulador enva una secuencia de bits al decodificador que los convierte en una
secuencia algo ms corta de dgitos de informacin. Las reglas de operacin del
codificador y decodificador estn dictadas por el cdigo especfico que se utilice.
Hay muchos tipos de cdigos, en general muy complejos, pero aqu nos vamos a
referir nicamente a los cdigos lineales de bloque y a los de convolucin. Cuando se
utiliza uno de los primeros, el codificador rompe la secuencia continua de dgitos de
informacin en secciones o bloques de k bits y opera independientemente con cada uno
de ellos de acuerdo con el cdigo especifico que se utilice. Con cada bloque posible de
informacin esta asociado un numero n de bits de canal, siendo k n > . El resultado
(bloque de n bits), que ahora se llama palabra de cdigo, se transmite afectada por el
ruido, y se decodifica con independencia de todas las dems palabras de cdigo. A la
cantidad k se la llama longitud de bloque.
Las palabras de cdigo llegan al modulador, el cual genera un conjunto de
formas de onda de duracin finita para su transmisin. El codificador de bloque es un
dispositivo que acta como si no tuviese memoria ya que cada palabra de cdigo de n
bits depende exclusivamente de un bloque especifico de informacin de k bits y no de
otros. Si llamamos R a la tasa de cdigo antes definida, y
b
R y
c
R a las velocidades
binarias a la entrada y a la salida del codificador respectivamente se tiene:
Dgitos de informacin
Dgitos de
correcin
Redundancia
k
c
n
La tasa de codificacin o coding rate se define:
R = k/n= 1-c/n
Modulador/demodulador COFDM


31
k nR R R R
b b c
/ / = = [3.13]
Los valores prcticos de la longitud de bloque de informacin k van de 3 a varios
centenares, y los correspondientes a R , de 1/4 a 7/8.
3.2.1.1 Codificador Reed-Solomon

Este bloque va a ser el primer paso para conseguir robustez contra errores. Su
inclusin viene motivada porque a la salida del decodificador de canal en el receptor se
tiene una tasa de bits errneos del orden de 10
-4
la cual es muy elevada para la
transmisin de la seal de televisin o audio. As, la introduccin de este cdigo
consigue obtener a la salida del receptor unas tasas de errores muy bajas.

Este codificador implementa un cdigo bloque del tipo Reed-Solomon, que
pertenece a una subclase de los cdigos BCH en la que los elementos con los que se
trabaja son grupos de bits, ocho en este caso.
Estos cdigos corrigen cualquier combinacin de t o menos errores y necesitan
no ms de t 2 bits de paridad. Los parmetros son t c k n 2 = = y 1 2 + = t d siendo d
la distancia mnima entre cualesquiera palabras de cdigo (distancia de Hamming), es
decir, el nmero mnimo de cambios de bits necesario para convertir una palabra de
cdigo en otra.
En el estndar DVB-T, el cdigo Reed-Solomon definido es el sistemtico RS
(204,188,8) lo que quiere decir que ante una entrada de 188 bytes aade 16 bytes de
paridad lo que da un total de 204 bytes, poseyendo la capacidad de corregir hasta 8
bytes errneos arbitrarios.
3.2.1.2 Codificador convolucional

Este elemento constituye el primer bloque que forma parte del codificador de
canal. La funcin que va a desarrollar va a ser la codificacin de los bits que se
presentan a la entrada mediante la introduccin de bits de redundancia que habilitarn la
correccin de errores en recepcin.

El funcionamiento del convolucional est basado en registros de memoria (de
capacidad un bit) y sumas mdulo dos. La codificacin de los bits se realiza a partir del
valor del bit presente a la entrada y los valores de los m bits anteriores que estn
guardados en los registros.
En los cdigos de convolucin, los datos de informacin pasan a travs de un
registro de desplazamiento lineal con M pasos que desplazan k bits a la vez .Para cada
M bits de informacin almacenada en el registro de desplazamiento, hay n circuitos
lgicos lineales que operan sobre el contenido del registro para obtener n bits
codificados a la salida del codificador. La tasa de cdigo es, por tanto n k R / = . Puesto
que cada bit de informacin permanece en el registro k M / desplazamientos afecta al
valor de k nM / bits codificados. As pues el codificador de convolucin es un
dispositivo con memoria. El estado del codificador se define como el contenido del
registro de desplazamiento. La longitud K del cdigo de convolucin es la suma de los
bits de estado y de los bits de entrada, aunque en algunas referencias se define K
Modulador/demodulador COFDM


32
nicamente por el nmero de bits de estado. Valores tpicos para k y n estn en la gama
de 1 a 8, para R de 1/4 a 7/8, para M e 5 a 70 y para K de 6 a 9. Los cdigos de
bloque y de convolucin tienen una capacidad de correccin de errores similar y las
mismas limitaciones fundamentales.
El codificador convolucional que define el estndar DVB-T se construye a partir
de un cdigo convolucional que denominaremos como cdigo base. Por lo tanto, se
definir este cdigo en primer lugar, para posteriormente, obtener las distintas tasas que
el estndar contempla en funcin del cdigo base.

El cdigo convolucional base est formado por seis registros de memoria y dos
bits de salida por cada bit de entrada.

Los polinomios que generan el cdigo son:

6 3 2
1 ) ( 1 D D D D D g + + + + = [3.14]
6 5 3 2
1 ) ( 2 D D D D D g + + + + =

Estos polinomios se pueden ver representados en la siguiente figura sin ms que
tener en cuenta que D indica un retardo unidad.



Figura 3.5 .Codificador convolucional de una entrada y dos salidas. Tasa 1/2

Como se indic anteriormente, el estndar contempla diversas tasas para el
codificador convolucional. La tasa 1/2 viene aportada por el propio cdigo base,
mientras que las restantes tasas se consiguen a partir de estrategias de perforado. Estas
estrategias consisten en descartar salidas del cdigo convolucional base siguiendo
ciertos patrones predeterminados que no se van a presentar.






Codificador
Convolucional
Perforado con
salida serie
X
Y
Modulador/demodulador COFDM


33

Tasas de cdigo r Modelo de perforado Secuencia transmitida

1/2
X: 1
Y: 1

X1 Y1

2/3
X: 10
Y: 11

X1 Y1 X2

3/4
X: 101
Y: 110

X1 Y1 X2 X3

5/6
X:10101
Y:11010

X1 Y1 Y2 X3 Y4 X5

7/8
X:1000101
Y:1111010

X1 Y1 Y2 Y3 Y4 X5 Y6 X7

Figura 3.6. Modelos de perforado para obtener distintas tasas de cdigo

3.2.2 Conversor Serie-Paralelo

Este bloque tratar de agrupar la cadena de bits en serie que sale del codificador
convolucional en conjuntos de N bits o smbolos en paralelo que sern la unidad del
trabajo del siguiente bloque, el modulador QAM.

3.2.3 Modulador QAM

Ser este bloque el encargado de modular cada una de las subportadoras. La
funcin bsica que realiza este bloque ser asignar a los smbolos de su entrada un valor
complejo de la constelacin correspondiente al nmero de niveles empleados en la
modulacin QAM.

Figura 3.7. Modulacin QAM

La modulacin M-QAM (M =16, 32, 64, 256) permite aumentar la capacidad de
transmisin, sin aumenta el ancho de banda ocupado. La seal M-QAM se obtiene
sumando vectorialmente dos oscilaciones de la misma frecuencia pero en cuadratura,
moduladas en amplitud, con doble banda lateral pero con la portadora suprimida.

El bloque anterior (convertidor serie-paralelo), toma la cantidad de bits
necesarios para formar un smbolo: 6 en 64-QAM, 4 en 16-QAM y 2 en QPSK, y se
convierten de serie a paralelo, en esta parte se gana en ancho de banda ya que de 6 bits
se forma un solo smbolo a transmitir, y se convierte esa combinacin de bits al nivel
analgico correspondiente, dando por resultado, 64 (para el caso 64-QAM) niveles
analgicos que luego formarn la constelacin.

Modulacin

QAM
S[n]
Xn[0]
Xn[1]
Xn[N-1]
Modulador/demodulador COFDM


34

En la figura 3.8, se explica la mecnica utilizada en QAM siguiendo el ejemplo
16-QAM: los niveles obtenidos a la salida del conversor digital-analgico en forma de
seal pulsante NRZ (sin retorno a cero) se divide, siguiendo secuencialmente los
distintos smbolos sucesivos, en dos ramas que sern las seales llamadas I (in phase) y
Q (quadrature). Estas seales pasan a modular en amplitud a dos seales senoidales de
la misma frecuencia pero en cuadratura. En COFDM estas seales provienen de
desfasar una de las mltiples subportadoras ortogonales generadas por la IFFT como se
ver en la etapa siguiente. (Se debe tener cuidado de no confundir el desfase de 90
inherente a la modulacin QAM con la ortogonalidad de las distintas portadoras).


Figura 3.8. Esquema de modulacin QAM explicado a travs del 64-QAM

Obsrvese que cuando la seal modulante pasa de un cuadrante a otro, la
portadora cambia de fase. Este cambio de fase, combinado con los cambios de niveles
da la posicin de los smbolos de la constelacin ubicada en los cuatro cuadrantes.
Obviamente en el receptor, la fase de la portadora debe ser detectada con precisin.

Si f 2 = es la frecuencia de la portadora y V su amplitud se tiene:

) cos( ) ( ) ( ) ( ) ( t V t Q t Vsen t I t S + = [3.15]

donde las seales ) (t I y ) (t Q son pulsos digitales cuya amplitud y polaridad son
determinadas por el cdigo de la palabra a la entrada de acuerdo a la combinacin de
bits presentes a la entrada del conversor analgico-digital. Como regla, los valores
pueden asumir L niveles (en realidad [+/- (L/2)], donde L = raz cuadrada de M) sobre
cada uno de los ejes. Por ejemplo, para 64-QAM se representan cuatro niveles positivos
en el eje X y cuatro negativos. El mismo anlisis es vlido para el eje Y, dando un total
de 8 por 8 (64) niveles en toda la constelacin. El mapeado se realiza segn el cdigo de
Gray que establece que los puntos que difieren en un bit, estn vecinos en la
constelacin a los efectos de no realizar excesivos cambios de fase y/o nivel. Un cdigo
Gray se caracteriza por tener una diferencia de un solo bit entre dos smbolos que estn
a distancia mnima. Si la relacin seal a ruido es suficientemente alta es mucho ms
Modulador/demodulador COFDM


35
probable que un smbolo sea confundido con un smbolo vecino que con otros que
disten mucho del smbolo inicialmente transmitido.



Figura 3.9. Constelacin 64-QAM

En la figura 3.9, se muestran los valores de fase y amplitud que corresponden a
cada smbolo as como los umbrales de decisin dentro de lo cual deben caer los
smbolos.

Las constelaciones recogidas en el estndar son las siguientes: QPSK, 16-QAM
y 64-QAM. Todas estas constelaciones tienen en comn que la asignacin binaria de los
elementos se corresponde a un cdigo Gray.















Figura 3.10. Constelaciones de la modulacin QPSK y QAM

De los bits que forman parte de la asignacin binaria de un smbolo, algunos de
ellos estn relacionados con la parte real del mismo y otros con la parte imaginaria. Por
ejemplo, en el caso de emplear una 64-QAM (6 bits), los bits 0, 2 y 4 estn relacionados
con la parte real de los smbolos y los bits 1, 3 y 5 con la imaginaria.

Para finalizar hay que decir que los smbolos de la constelacin deben de ser
multiplicados por unos valores para conseguir que estn normalizados en energa.

I
Q
16-QAM
I
Q
QPSK
01
00 10
11
Modulador/demodulador COFDM


36
3.2.4 Extensin del espectro

Este bloque tiene como funcin principal aadir la parte simtrica conjugada al
espectro que se obtiene a la salida del modulador QAM. Esto se hace, ya que como se
explic anteriormente queremos obtener una seal real a la salida del bloque que realiza
la IFFT.

La explicacin de cmo se lleva a cabo esta extensin del espectro, ya fue
comentada en este captulo pero se incluye de nuevo para que quede ms claro.

Si denotamos los valores complejos de los puntos de seal (obtenidos del
modulador QAM) que corresponden a las seales de informacin de los K subcanales
como
k
X , 1 ,... 1 , 0 = K k , Estos smbolos de informacin {
k
X } representan los
valores de la transformada discreta de Fourier (DFT) de una seal multiportadora
OFDM ) (t x , donde la modulacin de cada subportadora es QAM. Como ) (t x debe ser
una seal real, su DFT de N puntos {
k
X } debe satisfacer la propiedad de simetra
*
k k N
X X =

. Por lo tanto, creamos K N 2 = smbolos de K smbolos de informacin


definiendo

*
k k N
X X =

, 1 ,... 2 , 1 = K k
) Re(
0
'
0
X X = [3.6]
) Im(
0
X X
N
=

Con lo que se ha duplicado el nmero de smbolos a los que se les aplica la IFFT
y adems, estos smbolos cumplen la propiedad de simetra conjugada para que
podamos obtener a la salida del siguiente bloque una seal real, que es nuestro
propsito.

Tal y como se muestra en el diagrama de bloques del transmisor, antes de
realizarse la expansin del espectro se inserta un supersmbolo de entrenamiento que
ser conocido cuya misin ser poder obtener la rotacin y escalado que produce el
canal sobre los smbolos transmitidos para as, en el receptor poder realizar una
igualacin para cada subcanal de los smbolos recibidos y poder detectar correctamente
el supersmbolo que se transmiti.

3.2.5 IFFT

Este bloque es especialmente importante, y ha sido objeto de estudio durante
mucho tiempo. Su funcin ser obtener una seal real en tiempo a partir del espectro de
la seal, es decir de un conjunto de coeficientes en el dominio de la frecuencia.

Si tenemos en cuenta que para lograr una seal OFDM con xito la relacin
entre las portadoras debe ser escogida adecuadamente para garantizar la ortogonalidad
entre ellas, entonces, tras escoger el espectro requerido, debemos convertir la seal de
nuevo al dominio del tiempo usando la transformada de Fourier inversa. En la mayora
de las aplicaciones esta transformada se lleva a cabo usando el algoritmo de la
transformada rpida de Fourier inversa (IFFT), ya que este algoritmo consigue esta
Modulador/demodulador COFDM


37
transformacin de forma muy eficiente y proporciona una forma simple de asegurar que
las subportadoras producidas son ortogonales.


Figura 3.11. Transformada inversa de Fourier mediante el algoritmo IFFT

Como ya se explic con anterioridad, si denotamos la nueva secuencia de smbolos
obtenida tras la expansin del espectro como {
'
k
X , 1 ,... 1 , 0 = K k }, la DFT-inversa
(IDFT) de N puntos da como resultado la secuencia de valores reales

N nk j
N
k
k n
e X
N
x
/ 2
1
0
'
1

=
= 1 ,..., 1 , 0 = N n [3.7]

donde 1/ N es simplemente un factor de escala. Esta secuencia {
n
x , 1 0 N n } se
corresponde con las muestras de la seal multiportadora OFDM ) (t x , compuesta por K
subportadoras, que puede ser expresada como

T kt j
N
k
k
e X
N
t x
/ 2
1
0
'
1
) (

=
= , T t 0 [3.8]

donde T es la duracin de la seal y ) / ( N nT x x
n
= , 1 ,..., 1 , 0 = N n . Las frecuencias
de las subportadoras son T k f
k
/ = , . 1 ,..., 1 , 0 = K k La seal muestreada {
n
x }
generada mediante el clculo de la IDFT se pasan a travs del convertidor analgico-
digital, donde a la salida, idealmente, est la forma de onda de la seal OFDM ) (t x .
Slo cabe destacar que para que sea eficiente el algoritmo, el nmero de puntos
con los que debe trabajar tiene que ser potencia de dos, por lo que en el modo 2K del
estndar DVB-T se trabaja con 2048 puntos y en el modo 8K de este mismo estndar
con 8192. En caso de no tener estos nmeros de forma exacta, tendremos que rellenar
con ceros hasta completar estos valores.
3.2.6 Insercin del intervalo de guarda

Este es el ltimo bloque del transmisor (antes de volver a serializar las muestras)
y trata de combatir el multitrayecto, ya que sta es una caracterstica habitual en el tipo
de canal para el que est destinada esta modulacin (medio terrenal). Debemos recordar




IFFT
Xn[0]
Xn[1]
Xn[N-1]
xn[0]
xn[1]
xn[N-1]
Modulador/demodulador COFDM


38
que una de las propiedades ms importantes de las transmisiones OFDM es su robustez
contra esta expansin del retardo por multitrayecto que se consigue teniendo un periodo
de smbolo grande que minimice la interferencia entre smbolos o ISI.

Para la consecucin de este objetivo, la modulacin emplea una tcnica que
consiste en habilitar un cierto intervalo temporal que se aade al intervalo de tiempo
necesario para la transmisin de un supersmbolo. Con esto se evita que unos smbolos
se vean afectados por otros (interferencia intersmbolo), aunque un smbolo siempre
puede ser afectado por una versin retardada de s mismo (interferencia intrasmbolo).

Los efectos anteriormente mencionados se pueden ver en la figura de abajo, en
donde el smbolo K de la seal directa se ve afectado por la versin retardada de s
mismo. Ahora bien, si la duracin del intervalo de guarda ( ) est bien dimensionada,
el smbolo K de la seal directa no se ve afectado por el smbolo 1 K de la seal
retardada, cosa que s ocurrira en caso de no existir el intervalo de guarda.


Figura 3.12. Ventaja del intervalo de guarda: el smbolo K no se ve afectado por el K-1

La realizacin de este bloque se lleva a cabo mediante una extensin cclica de
la salida de la IFFT. Esto nos lleva a que la duracin total del periodo de smbolo ser
+ =
0
T T
smbolo
, siendo
0
T la parte que denominbamos como parte de smbolo til
pues en ese intervalo se concentra toda la informacin transmitida, y la duracin del
intervalo de guarda. Esta extensin cclica no es ms que la copia de un determinado
nmero de las ltimas muestras de salida de la IFFT, y la colocacin al principio a
modo de prefijo, como se muestra en la figura de abajo.


Figura 3.13. Adicin del intervalo de guarda mediante extensin cclica del smbolo

Cabe destacar por tanto, que el intervalo de guarda ms efectivo que podemos
usar es una extensin cclica del smbolo. Esto es as porque la transformada rpida de
Fourier (Fast Fourier Transform) que usaremos en el receptor, transforma una seal
cclica en el dominio del tiempo a su espectro frecuencial equivalente. Dado que la
seal muestreada | | k x
n
no es necesariamente cclica, podemos formar una seal de
1 + L N muestras repitiendo las 1 L muestras de la seal | | k x
n
al comienzo de la
seal. Esta tcnica es lo que llamamos intervalo de guarda mediante prefijo cclico.
Modulador/demodulador COFDM


39

La desventaja de la introduccin del intervalo de guarda estriba en una reduccin
de la eficiencia espectral, ya que hay que transmitir muestras duplicadas que no aportan
nueva informacin.

El estndar DVB-T considera cuatro posibles valores para la duracin del
intervalo de guarda. Estos cuatro valores son 1/4, 1/8, 1/16 y 1/32 de la duracin de la
parte til del periodo de smbolo de cada uno de los dos modos posibles.

3.2.7 Conversor Paralelo-Serie

Este bloque transformar el supersmbolo al que se le han aadido los
correspondientes intervalos de guarda (uno por smbolo, es decir, por cada
subportadora) en una serie de muestras, colocando cada smbolo del supersmbolo uno a
continuacin de otro.

Como se muestra en el diagrama de bloques del transmisor, antes de mandar
estas muestras a travs del canal se inserta una seal de sincronismo, que ms tarde se
ver como se implementa, para que el receptor sea capaz de sincronizarse a las
diferentes tramas de datos y as demodular correctamente la seal de muestras recibida.

3.2.8 Bloques no incluidos en el transmisor implementado

Cuando se comenz la explicacin de los diversos bloques que componen el
transmisor COFDM se coment que adems de los bloques implementados existen otros
ms, utilizados por los estndares de DVB-T y DAB, que no se han incluido en este
proyecto ya que sirven para proporcionar todava ms proteccin frente a errores que se
puedan producir. Como ya se dijo, dadas las caractersticas de nuestro sistema, la
correccin que nos permite la inclusin de los bloques de codificacin ser suficiente
para que el sistema funcione dentro de unos lmites ms que aceptables. De cualquier
forma, se explican aqu los bloques no incluidos por si en un proyecto posterior la
simulacin se llevara a cabo utilizando otro canal menos ideal y se quisieran incluir
estos bloques en la implementacin para ajustarla an ms a la utilizada por los
estndares digitales actuales de difusin de radio y televisin.

El diagrama de bloques del transmisor es el siguiente:

Modulador/demodulador COFDM


40

Figura 3.14. Diagrama de bloques completo del transmisor usado en DVB-T y DAB

Podemos ver en la figura que los bloques sombreados son los que difieren del
transmisor implementado y que por tanto sern los que se comentan a continuacin.

3.2.8.1 Aleatorizador de Energa
El objetivo de este bloque consiste en evitar que en una ristra de bits haya ciertas
secuencias que se repitan con mayor asiduidad, ya que esto provocara la aparicin de
ciertos puntos de la constelacin con mayor frecuencia. Si estos puntos coincidiesen en
necesitar mayor energa para su transmisin se tendra un gran desperdicio de potencia.
En definitiva, el objetivo consiste en obtener una cierta uniformidad en la transmisin
de los smbolos de la constelacin.

Para conseguir esto se utiliza una secuencia binaria pseudoaleatoria que se
obtiene a partir del polinomio generador 1+X
14
+X
15
y una secuencia binaria inicial. En
la siguiente figura se puede observar el esquema hardware para la obtencin de la
secuencia pseudoaleatoria:

TRANSMISOR COFDM ESTNDAR

Codificador
Reed-
Solomon

Barajador
externo

Codificador
Convolucional

Extensin de
espectro

Aleatorizador
de energa

Aade prefijo
cclico
(guarda)

Conversor
Paralelo-
Serie

IFFT
Pasa a binario
Inserta
Supersmbolo
Entrenamiento
Inserta
Seal
Sincronismo

Trama
de
datos


Muestras

Conversor
Serie-
Paralelo

Modulador
QAM

Barajador
interno
Modulador/demodulador COFDM


41

Figura 3.15. Esquema hardware del aleatorizador de energa.

El proceso de aleatorizacin consiste en hacer una Or-exclusiva entre los bits
que componen los datos de entrada y la secuencia pseudoaleatoria obtenida. El estndar
contempla ciertas consideraciones adicionales para la consecucin del objetivo de este
bloque, consideraciones que no sern expuestas aqu ya que no aaden nada de inters y
slo son necesarias en una implementacin prctica.
3.2.8.2 Barajador Externo
El cdigo Reed-Solomon tiene la capacidad de corregir un cierto nmero de
errores consecutivos, lo cual implica que ante la aparicin de una gran cantidad de
errores consecutivos, el cdigo no es efectivo. Es por lo que se acaba de ver por lo que
tiene inters la introduccin del barajador externo. Este bloque se encarga de introducir
un cierto desorden en los bytes de entrada de forma que si hubiese una secuencia de
bytes errneos en recepcin, al pasar por el elemento inverso a ste, esos bytes
quedaran dispersos, con lo cual, el cdigo Reed-Solomon podra corregirlos.

El motivo de que la unidad de trabajo sean bytes estriba en el hecho de que es la
unidad de trabajo del cdigo Reed-Solomon.

A continuacin se muestra una figura que representa el funcionamiento de este
bloque y que ayudar a entender cmo se produce el desorden.


Figura 3.16. Esquema hardware del entrelazado de bytes

El sistema est compuesto por dos conmutadores y doce ramas en las que hay
intercalados un nmero creciente de registros. Los conmutadores siempre estn
sincronizados, lo que quiere decir que si el de entrada apunta a una rama el de salida
Modulador/demodulador COFDM


42
coge datos de la misma rama. Cada vez que un dato entra por una rama ambos
conmutadores pasan a la siguiente posicin (de forma cclica).

La aleatorizacin se ve reflejada en el hecho de que en cada rama exista un
nmero determinado de registros que provoca un retardo variable entre la entrada de un
dato por un conmutador y la salida por el otro.

Cada registro contiene capacidad para 17 bytes. Estos registros se comportan
como colas FIFO y caracterizan el comportamiento que presenta cada rama. Partiendo
de la primera rama que no posee ningn registro, el nmero de registros que posee cada
rama se incrementa en una unidad con respecto a la anterior, llegando as a la
duodcima rama, que posee once registros. Una caracterstica que conviene resaltar es
que los bytes dirigidos por la primera rama no sufren ningn retardo. Esta circunstancia
se aprovecha con fines de sincronizacin; as, los bytes de sincronismo de las tramas
MPEG-2 (tramas utilizadas en el estndar DVB-T) van siempre dirigidos por la primera
rama.

Una ltima consideracin a realizar es que al empezar a trabajar, y debido a las
colas FIFO, el bloque pasa por un periodo transitorio (en este periodo se entregan a la
salida bytes que no pertenecen a la estructura de datos de la entrada) que hay que tener
en cuenta para su posterior eliminacin.

3.2.8.3 Barajador interno

El barajador interno tiene como misin limitar en lo posible la longitud de las
rfagas de errores que se puedan producir durante la transmisin para que estas no
desborden la longitud mxima soportada por el cdigo corrector intentando conseguir
as una decodificacin libre de errores.

Para conseguir esta limitacin se implantan dos barajadores, uno que trabaja a
nivel de bits y otro que trabaja a nivel de grupos de bits (smbolos).

El barajador de bits consigue que los grupos de bits que dan lugar a un smbolo
no estn formados por bits consecutivos de la entrada. Esto se consigue barajando los
bits siguiendo un patrn fijo que se basa en una rotacin cclica.
Los bits serializados que provienen del bloque anterior se agrupan de 126 en 126
y cada grupo se introduce en los registros de cada una de las ramas que conforman el
barajador. El nmero de ramas depende de la modulacin empleada, as, para la QPSK
y la 16-QAM habr cuatro ramas y para la 64-QAM seis ramas.

Una vez que tenemos cada registro lleno con los 126 bits, se les aplica una
rotacin que depende de la rama con la que se est trabajando. Despus de aplicar dicha
rotacin los bits de cada rama pasan a alimentar la entrada del barajador de smbolo.

En la figura se puede observar un diagrama de bloques del barajador interno:

Modulador/demodulador COFDM


43

Figura 3.17. Esquema hardware del entrelazado de bits

El ltimo bloque de la figura es el barajador de smbolo que como se observa
agrupa los bits de 4 en 4 (QPSK o 16-QAM) o de 6 en 6 (64-QAM) cogiendo uno de
cada rama.

Ahora que ya se han formado los smbolos el barajador de smbolo ser el
encargado de desordenarlos. El barajador de smbolo es el primer bloque que se ve
afectado por el modo de transmisin. Dependiendo del modo utilizado la profundidad
de trabajo de este barajador ser de 1512 posiciones en el modo 2K o 6048 en el modo
8K; con profundidad de trabajo se quiere decir la cantidad de smbolos que se cogen
cada vez para desordenar.

Para finalizar cabe destacar que al desordenar smbolos lo que se est
consiguiendo es separar portadoras (cada smbolo modula una portadora) que estn
correladas entre s de forma que ante un desvanecimiento profundo la posibilidad de que
smbolos contiguos se vean afectados sea pequea. As, una portadora atenuada puede
ser recuperada a partir de la correlacin que existe con otras portadoras que no han sido
atenuadas.


















Modulador/demodulador COFDM


44
3.3 Receptor COFDM

A continuacin se presenta el esquema del receptor implementado:



Figura 3.18. Diagrama de bloques del receptor COFDM

Al igual que ocurra con el transmisor, el receptor COFDM implementado es un
modelo simplificado del receptor estandarizado para DVB-T o DAB, ya que se han
omitido los bloques que introducen una mayor robustez al sistema para la correccin de
errores mediante la aleatorizacin de la energa de los datos y las tcnicas de
entrelazado de los mismos. Como ya se coment en el transmisor, dado que el sistema
que se usar para la simulacin es prcticamente ideal en cuanto a desvanecimiento por
multitrayecto o ruido
2
, ser suficiente aplicar codificacin para la correccin de los
posibles errores que se puedan producir en la comunicacin.

Se presentan a continuacin los distintos bloques que constituyen la cadena
receptora:

3.3.1 Conversor Serie-Paralelo

La funcin de este bloque no es otra que pasar las muestras de seal transmitidas
en serie a travs del canal al supersmbolo correspondiente. Este supersmbolo estar
formado smbolos de tamao s Nportadora T
g
+ 2 , es decir, de tamao igual al

2
Recordemos que se utilizar el cable de audio estudiado en el captulo 1 como canal de transmisin en la
comunicacin que simularemos con Matlab.
RECEPTOR COFDM

Elimina
prefijo cclico
(guarda)

FFT

Reduccin
del espectro

Igualador de
canal

Conversor
Serie-
Paralelo

Decodificador
Convolucional

Decodificador
Reed-
Solomon

Demodulador
QAM
Pasa a Bloques
Reed-Solomon

Datos Recibidos
Detecta
Seal
Sincronismo

Conversor
Paralelo-
Serie
Extrae
Supersmbolo
Entrenamiento
Muestras
Modulador/demodulador COFDM


45
intervalo de guarda de cada smbolo ms dos veces el nmero de portadoras que
intervienen en la FFT.

Debemos tener en cuenta, tal y como se muestra en el diagrama, que antes de
realizar esta conversin de muestras a supersmbolos, el receptor debe detectar la seal
de sincronismo para alinearse a la trama y comenzar todo el proceso de demodulacin.

3.3.2 Eliminacin del intervalo de guarda

Este primer bloque del receptor tras la formacin de los supersmbolos, tiene
como misin la eliminacin del intervalo de guarda en transmisin, introducido justo
antes de la salida al canal con el objetivo de evitar los efectos del multitrayecto con
respecto a la interferencia intersmbolo, de forma que la nica interferencia posible sea
la denominada como intrasmbolo.

La seal recibida se muestrea con un periodo de muestreo de Fsam T / 1 = , y se
toman un nmero determinado de muestras segn el modo de transmisin y el valor de
la duracin del intervalo de guarda. La eliminacin del intervalo de guarda consiste en
no tener en cuenta las M primeras muestras de cada periodo de smbolo, como se
muestra en la siguiente figura:



Figura 3.19. Eliminacin del intervalo de guarda del smbolo

El valor que ha de tomar M vara en funcin del modo de transmisin y de la
duracin del intervalo guarda.

Una vez eliminado el intervalo de guarda, las muestras restantes llevan toda la
informacin necesaria para una correcta demodulacin y constituirn la entrada del
siguiente elemento.

3.3.3 FFT

Este bloque tiene como objetivo realizar la operacin inversa a la IFFT de la
cadena transmisora, por lo que ahora se realizar la transformada de Fourier directa
(FFT). Esto implica que pasaremos de un conjunto de muestras en el dominio temporal
al espectro frecuencial de la misma, tal como se muestra en la figura.

De forma inversa a como se haca en el transmisor:

Modulador/demodulador COFDM


46

Figura 3.20. Transformada de Fourier de la seal mediante el algoritmo FFT

Debemos tener en cuenta que gracias a la ortogonalidad entre las subportadoras
hemos evitado el uso de cientos de filtros y gracias a la FFT tambin se ahorra una gran
carga computacional de multiplicadores, integradores y osciladores. En la prctica, se
trabaja con la seal recibida muestreada. El proceso de integracin se convierte por
tanto, en uno de suma y el proceso completo de demodulacin toma una forma idntica
al de la transformada discreta de Fourier (DFT), la cual, como ya se ha comentado, se
implementa en la actualidad de forma muy eficiente gracias a la FFT (disponemos de
circuitos integrados que la llevan a cabo), por lo que la modulacin COFDM se puede
realizar fcilmente sin grandes complicaciones en cuanto a instrumentacin.

Las versiones ms comunes de la FFT operan en un grupo de
M
2 muestras de
tiempo y proporcionan el mismo nmero de coeficientes frecuenciales. Estos se
corresponden con los datos demodulados de las subportadoras. En la prctica como
muestreamos por encima de la tasa de Nyquist, no todos los coeficientes obtenidos se
corresponden con portadoras que hemos usado realmente
3
.

El nmero de puntos que se utilizarn en el algoritmo de la FFT depender del
modo de transmisin usado, que como ya mencionamos en el transmisor, para el
estndar DVB-T ser de 2048 puntos para el modo 2K y 8192 puntos para el modo 8K.

Como ya se vio en el transmisor, para poder realizar el algoritmo de la IFFT
haba que completar con ceros las muestras de entrada hasta obtener 2048 o 8192
puntos, segn el caso. Por lo tanto, en el receptor, despus de realizar la FFT es
necesaria una ordenacin frecuencial para eliminar los puntos correspondientes a las
altas frecuencias y que no llevan informacin ya que valen cero. Esta ordenacin
frecuencial consiste en descartar esos valores nulos y serializar solamente 1705 o 6817
valores dependiendo del modo de transmisin.

3.3.4 Reduccin del espectro

Al igual que en el transmisor se llevaba a cabo la extensin del espectro para
lograr una seal de K N 2 = puntos y que, de esta forma se pudiera realizar la IFFT, en

3
Notar que esto no nos lleva a ninguna prdida de capacidad o a un uso ineficiente del ancho de banda,
sino que simplemente se corresponde con headroom para el filtrado analgico del sistema.




FFT
Xn[1]
Xn[N-1]
xn[0]
xn[1]
xn[N-1]
Xn[0]
Modulador/demodulador COFDM


47
el receptor debemos eliminar la simetra conjugada de la seal y quedarnos de nuevo
con una seal de K puntos para que pueda ser demodulada por el demodulador QAM.

Tambin es en este momento, justo al reducir el espectro tal y como muestra el
diagrama de bloques del receptor, cuando se extrae el supersmbolo de entrenamiento
que ser procesado en el siguiente bloque, el igualador de canal.

3.3.5 Igualador de canal

Una vez hecho el paso del dominio temporal al frecuencial, el igualador tiene
como misin mitigar en lo posible las distorsiones inherentes al canal.

Debido a que no existen canales perfectos, el receptor ser alcanzado por
diversas seales que sern versiones retardadas del rayo directo. Como ya se ha visto, el
intervalo de guarda elimina la interferencia entre smbolos, y la misin del igualador
ser la de eliminar la interferencia intrasmbolo intentando compensar la accin del
canal.

Si el nmero de portadoras transmitidas es suficientemente grande, el
comportamiento frecuencial del canal no ser selectivo, es decir, se puede considerar
que la influencia del canal para cada portadora se reduce a una atenuacin y una fase (o
escalado y rotacin), siempre que el canal sea estable durante el periodo de tiempo que
dura un supersmbolo.

Si denominamos
k
H al valor con el que el canal afecta al ancho de banda
ocupado por la portadora k-sima, la igualacin, segn el criterio de cero forzado se
realiza multiplicando la portadora k-sima por 1/
k
H . Este criterio no tiene en cuenta el
ruido presente, por lo que ante nulos espectrales,
k
H ser un valor alto y el ruido que
acompaa a la seal en esas frecuencias se ver tremendamente amplificado.

Si se quiere tener en cuenta el efecto combinado del ruido y de la interferencia,
se puede optimizar segn el criterio del mnimo error cuadrtico, en la que la portadora
k-sima se ve multiplicada por el coeficiente

donde
n
2
es la varianza de ruido aditivo y
a
2
es la varianza de los smbolos
transmitidos.

Para obtener los valores de
k
H se usan las seales piloto insertadas en todos los
supersmbolos. En nuestro caso para obtener estos valores se ha enviado un
supersmbolo de entrenamiento constituido por una secuencia pseudoaleatoria conocida
tanto por el transmisor como por el receptor, por lo que en recepcin se puede calcular
la rotacin y escalado que habr que aplicar a los smbolos recibidos antes de realizar la
decisin.



Modulador/demodulador COFDM


48
3.3.6 Demodulador QAM

Este ser el bloque del receptor encargado de realizar de deteccin de los
smbolos. La entrada a este bloque sern los coeficientes frecuenciales o nmeros
complejos que indican los smbolos recibidos, que tras habrseles aplicado la
correccin de fase y amplitud (en el igualador de canal) podrn ser demodulados
fcilmente ya que se correspondern con smbolos de la constelacin QAM
(constelacin cuyo tamao depender del nmero de niveles empleados en la
modulacin). Por lo tanto, a la salida de este bloque tendremos los datos demodulados o
lo que es lo mismo la | | n S .


Figura 3.21. Demodulacin QAM

3.3.7 Conversor Paralelo-Serie

Este bloque tendr como funcin convertir los valores detectados tras el
demodulador en una secuencia serie de estos valores, ya que los bloques de correccin
de errores del receptor (el decodificador convolucional y el decodificador Reed-
Solomon) trabajan con los datos en serie, a nivel de bits el decodificador convolucional
y a nivel de bytes el decodificador Reed-Solomon.

3.3.8 Decodificador Convolucional

Este bloque que trabaja a nivel de bits realizar la decodificacin convolucional
de los datos serie recibidos. Debemos tener en cuenta que cuando se trata de
codificacin convolucional, el decodificador ms eficiente es el decodificador Viterbi
4
.
Este decodificador se basa sobre todo en el tipo de decisin suave (o soft-decision). A
continuacin se explica brevemente en qu consiste tal decisin y por qu es la elegida
para la decodificacin de este tipo de sistemas

Decodificacin por decisin suave (soft-decision)

Tomemos primero el ejemplo de un sistema de portadora nica.
Consideremos un seal de 2 niveles ( ). Podemos transmitir un bit por smbolo
indicando con -1V que se ha transmitido un 0 y con +1V que se ha transmitido un 1

4
En el apndice B se tratarn de explicar de forma ms detallada los cdigos convolucionales, tanto el
funcionamiento de la codificacin como su decodificacin llevada a cabo por el decodificador Viterbi.

Demodulacin

QAM
S[n]
Xn[0]
Xn[1]
Xn[N-1]
Modulador/demodulador COFDM


49
En el receptor, suponiendo que la ganancia es correcta, podramos esperar recibir una
seal siempre cercana a -1V o +1V, segn se haya transmitido un 0 o un 1, la
distancia a los valores exactos 1V ser debida al inevitable ruido que se aade en la
transmisin.

Un receptor simple puede operar segn la regla de que seales negativas se
decodifiquen como 0 y seales positivas como 1. Esto es un ejemplo de decisin
fuerte (hard decisin), con 0V como el umbral de decisin.

Si la amplitud instantnea del ruido nunca excediera 1V entonces, este
receptor simple no cometera errores. Pero el ruido normalmente tiene una distribucin
gaussiana y puede alcanzar ocasionalmente amplitudes mayores, aunque con menor
probabilidad que valores menores. Por lo tanto, si decimos que se reciben +0.5V, es ms
probable que signifique que se transmiti un 1 que un 0 aunque existe una cierta
probabilidad de que ocurriera. El sentido comn sugiere que si se recibe una seal con
amplitud grande podemos estar ms seguros con la decisin fuerte que si la amplitud es
pequea.

Este hecho de la existencia de un grado de confianza est es la base en los
decodificadores de Viterbi de decisin suave (soft-decision). Estos almacenan una
historia de las posibles secuencias transmitidas, hacindose una idea de sus
probabilidades relativas y finalmente seleccionando el valor 0 o 1 para cada bit
segn el que tenga mayor probabilidad. Por conveniencia, un decodificador Viterbi
aade probabilidades logartmicas para acumular la probabilidad de cada posible
secuencia. Por tanto, el decodificador de Viterbi est basado en una decisin suave
compuesta de una decisin dura junto con una medida de la amplitud de la seal
recibida.

En sistemas de modulaciones con constelaciones rectangulares, como la 16-
QAM o la 64-QAM cada eje soporta ms de un bit, a menudo con codificacin Gray.
En el receptor la decisin suave puede ser hecha de forma separada para cada bit
recibido. Las mtricas son ms complicadas que para QPSK pero el principio del
decodificador explotando su conocimiento de la fiabilidad de cada bit permanece.

Las mtricas para COFDM son ligeramente ms complicadas. Hemos
comenzado entendiendo que la informacin de la decisin suave es una medida de la
fiabilidad del lugar en que se coloca acompaado de una decisin fuerte.

Cuando los datos se modulan con un nica portadora en un sistema invariable en
el tiempo, entonces, a priori, todos los smbolos sufren la misma potencia de ruido en
media; la informacin de la decisin suave simplemente necesita tomar nota de las
variaciones aleatorias entre smbolos que causa este ruido.

Cuando los datos son modulados por mltiples portadoras, como en OFDM, las
distintas portadoras tendrn diferentes SNRs. Por ejemplo, una portadora que caiga
dentro de un rechazo en la respuesta frecuencia estar compuesta principalmente de
ruido; una en un pico sufrir mucho menos. Por lo tanto podemos ver que adems de las
variaciones entre smbolos hay otro factor a tener en cuenta en las decisiones suaves: los
datos que llevan portadoras que tienen una alta SNR son a priori ms fiables que los
Modulador/demodulador COFDM


50
llevados por portadoras con baja SNR. Esta informacin extra a priori es conocida como
informacin del estado del canal (CSI).

Este concepto de CSI engloba la interferencia que puede afectar a las portadoras
selectivamente tal y como lo hace el ruido.

Incluir la informacin sobre el estado del canal en la generacin de decisiones
soft es la clave del rendimiento sin igual de COFDM en presencia de desvanecimiento
selectivo en frecuencia e interferencia.

3.3.9 Decodificador Reed-Solomon

Este bloque es el ltimo de la cadena receptora. Trabaja a nivel de bytes y
llevar a cabo la decodificacin del cdigo Reed-Solomon que se introdujo al comienzo
del transmisor. La salida de este bloque sern los datos recibidos ya demodulados y
decodificados por lo que si la comunicacin ha sido aceptable, estos datos deberan ser
iguales a los transmitindose admitindose una cierta tasa de error que haya sido
imposible de corregir.

El cdigo empleado en transmisin fue el cdigo sistemtico RS (204, 188, t =
8), que tiene la capacidad de corregir hasta ocho bytes errneos de los 204 bytes que
constituyen la entrada en una ejecucin, ya que este cdigo posee una distancia mnima
de 2t+1. Como se ha podido observar la unidad de trabajo de este decodificador es el
byte.
Una vez que se conocen los bytes errneos que hay en cada trama de entrada a
este bloque, stos pueden ser corregidos. Al tener la trama libre de errores el bloque da
como salida los primeros 188 bytes, ya que este codificador es sistemtico, lo que
implica que toda la redundancia se introduce en los ltimos 16 bytes (el resto es
informacin).

3.3.10 Bloques no incluidos en el receptor

Al igual que se ha comentado en el transmisor, el receptor COFDM utilizado en
los estndares digitales de difusin, incluye tcnicas de entrelazado y de aleatorizacin
de la energa de los smbolos para obtener una gran proteccin frente a los errores que
se puedan producir en la comunicacin. Los bloques que se aparecen en el receptor
estndar que no han sido incluidos en el receptor implementado sern los homlogos a
los del transmisor, es decir, bloques que realizan la operacin contraria a la realizada en
transmisin.

En la siguiente figura se muestra el diagrama de bloques del receptor completo
utilizado en el estndar donde los bloques sombreados sern los que se explican a
continuacin ya que son los que difieren del receptor implementado en este proyecto.

Modulador/demodulador COFDM


51


Figura 3.22. Receptor COFDM estndar

3.3.10.1 Desbarajador Interno

A la entrada del desbarajador de smbolos (o interno), los datos son valores
complejos y en este bloque se va a implementar la funcin inversa de la segunda parte
del barajador interno implementado en transmisin. Como se haba dicho, en el
barajador interno, las unidades de trabajo son grupos de bits que conforman los
smbolos.

En el transmisor lo que se haca era alejar los smbolos correlados entre s para
que, en el caso de que hubiese un desvanecimiento, no se viesen afectados todos a la vez
y as ayudar a la recuperacin de la informacin. Por lo tanto aqu, en el desbarajador de
smbolo, lo que se har ser deshacer lo barajado en el transmisor (agrupar las
portadoras correladas).

Es importante sealar que, en este bloque, no se toma ninguna decisin sobre los
valores recibidos, simplemente se reubican los datos.

Para realizar su tarea, este bloque usa la misma permutacin que la empleada por
el transmisor. As, a la entrada se tienen 1512 valores complejos (en el modo 2K) o
6048 (en el modo 8K), y despus de aplicar la permutacin se obtienen a la salida la
misma cantidad de valores complejos. Se consigue as que los smbolos recuperen la
ordenacin primitiva que tendran de no haber barajador de smbolo.

RECEPTOR COFDM ESTNDAR

Elimina
prefijo cclico
(guarda)

FFT

Reduccin
del espectro

Demodulador
QAM

Conversor
Serie-
Paralelo

Decodificador
Reed-
Solomon

Desaleatorizador
de energa

Decodificador
Convolucional
Pasa a Bloques
Reed-Solomon


Muestras

Datos
Recibidos
Detecta
Seal
Sincronismo

Desbarajador
Externo
Extrae
Supersmbolo
Entrenamiento
Igualador de
canal

Desbarajador
Interno

Conversor
Paralelo-
Serie
Modulador/demodulador COFDM


52
La figura da una idea de como funciona la permutacin:


Figura 3.23. Desbarajador de smbolos

3.3.10.2 Desbarajador Externo

Despus de las decisiones tomadas en el decodificador de canal lo que
obtenemos es una secuencia binaria que no est libre de errores de transmisin. El
estndar pone como lmite superior aceptable a la salida del bloque anterior una tasa de
errores de 2x10-4.Esta tasa de errores es muy elevada para las aplicaciones de
radiodifusin digital por lo que se introduce el barajador externo en el transmisor y el
equivalente en el receptor para as poder bajar la tasa de errores hasta un lmite que hace
que se pueda considerar que se ha realizado una comunicacin libre de errores

La misin que tiene el desbarajador externo es la de limitar las longitudes de las
posibles rfagas de errores que se puedan producir, para que los errores estn lo ms
dispersos posible. Con esto se logra que su deteccin y correccin sea ms fcil de
realizar.

Este elemento trabaja a nivel de bytes ya que el cdigo externo est diseado
para dar proteccin a estas unidades. El funcionamiento de este bloque es el siguiente:
Los bytes son paralelizados por el conmutador de entrada. El conmutador funciona de
forma cclica: cada vez que dirige un byte por una rama, conmuta a la siguiente
posicin.

A la salida hay otro conmutador que siempre est apuntando a la misma rama
que el conmutador de entrada y que recoge un byte de la cola FIFO situada en esa rama.
Las colas FIFO que forman parte de cada rama disminuyen su nmero de registros a
medida que vamos aumentando el nmero de la rama. As, llegamos a que la ltima
rama no tiene ningn registro.

Cada registro tiene una capacidad de 17 bytes, lo cual concuerda con el sistema
equivalente en transmisin.

Las caractersticas explicadas anteriormente se ven representadas grficamente
en la siguiente figura:

Modulador/demodulador COFDM


53

Figura 3.24. Desbarajador de bytes

La nica caracterstica que diferencia el barajador en transmisin del
desbarajador en recepcin es que los registros crecen de forma contraria, lo cual tiene
como objetivo compensar los retardos introducidos en transmisin, de forma que todos
los bytes sufran el mismo retardo.

Al igual que en el barajador, al principio hay un estado transitorio mientras los
registros no se llenan con bytes y esto ha de ser tenido en cuenta para eliminar los bytes
que sobran.

3.3.10.3 Desaleatorizador de Energa

El desaleatorizador de energa es el ltimo bloque de la cadena receptora. Es el
homlogo del aleatorizador de energa implementado en el transmisor y, por lo tanto,
tiene las mismas caractersticas fsicas que ste.

La intencin del aleatorizador en el transmisor era impedir que hubiese cierta
predileccin en enviar unos smbolos frente a otros. La misin de este bloque en el
receptor es la de recomponer la secuencia original y conseguir as los datos que
constituan las tramas MPEG-2 (tramas usadas en el estndar DVB-T).

Para realizar el aleatorizador se usaba la funcin OR-exclusiva; por lo tanto, en
el desaleatorizador hemos de usar la misma funcin y la misma secuencia
pseudoaleatoria. Todas las consideraciones que se tuvieron en cuenta en el caso del
aleatorizador son aplicables aqu.

A la salida de este bloque debemos de obtener una secuencia binaria que debera
de coincidir con las tramas MPEG-2 que se usaron a la entrada del transmisor, de esta
forma cumplimos con el objetivo de todo sistema de transmisin: la informacin a la
entrada del transmisor ha de ser la misma que la informacin obtenida a la salida del
receptor.








Modulador/demodulador COFDM


54
3.4 Programacin en MATLAB del modem COFDM

Una vez adquiridos los conocimientos tericos sobre la modulacin COFDM es
necesario implementar el sistema de transmisin en un lenguaje de programacin para
poder simular el comportamiento del mismo y comprobar que los resultados concuerdan
con lo explicado en teora.

El lenguaje que se ha elegido para la programacin del modulador y
demodulador es el lenguaje MATLAB (archivos .m) ya que simplifica mucho el
tratamiento de seales y datos y adems, proporciona funciones para la transmisin y
recepcin a travs de la tarjeta de sonido, por lo que se utilizar este programa para
hacer las diversas pruebas.

Los parmetros generales de configuracin de la comunicacin provendrn del
interfaz grfico que se explica en el captulo 5, centrndose este captulo en lo que es la
programacin bsica del modulador/demodulador. Se explicar, por tanto, la
programacin de la rutina principal del modem, y tambin del transmisor y el receptor
que son llamadas por el principal.

Para las pruebas de la transmisin se van a utilizar tanto secuencias aleatorias de
datos como ficheros que contienen imgenes y estos datos se transmitirn y recibirn en
forma de tramas.

El formato de las tramas es el siguiente:


Figura 3. Esquema de las tramas COFDM.

Una vez pasada la etapa de codificacin para la correccin de errores tendremos
un flujo binario que debe modularse en OFDM para esto se forman bloques de bits que
se van modulando y formando supersmbolos OFDM donde tras aadrsele la guarda ya
forman la trama de datos serie que se transmite a travs del canal.

El procedimiento que se va a seguir para explicar la programacin realizada es el
siguiente:

En primer lugar, se presenta el cdigo del programa principal. Este programa
realizar una transmisin y una recepcin de una secuencia de datos, segn los
Modulador/demodulador COFDM


55
parmetros que se indiquen, calculando al final la tasa de error de smbolo Reed-
Solomon, la tasa de error de bit sin proteccin, es decir, sin tener en cuenta las
etapas de codificacin y decodificacin, la tasa neta de transmisin (teniendo en
cuenta slo datos tiles) y el tiempo tardado en ejecutarse todo el programa, que
superior al que se tarda en transmitir y recibir por el canal.

En segundo lugar, se presenta el cdigo completo del transmisor, desglosndose
seguidamente, en los distintos bloques y explicndose cada uno de ellos.

En ltimo lugar, se presenta el cdigo completo del receptor, desglosndose,
seguidamente, en los distintos bloques y explicndose el funcionamiento de cada
uno de ellos.

Se presenta a continuacin el cdigo MATLAB del programa principal. Se disear
en el captulo 5 un entorno grfico que permita pedir al usuario los parmetros de
configuracin del sistema de transmisin pero para este captulo se supondrn ciertos
parmetros que se irn modificando en las diversas pruebas.

3.4.1 Programa principal

Esquema bsico del programa principal:










Cdigo MATLAB del programa principal:

function [ Tiempo,TasaNeta,BER,SER,esImagen,DatosTX,DatosRX,EspectroTX,
EspectroRX,ConstelacionTX,ConstelacionRX ] = principal_(imag,imagen,NumTramas,
RSn,RSk,CCk,CCn,QAMm,ESPbanda,ESPginf,ESPgsup,GUAint,AUDIOfrec)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%PARAMETROS DEL SISTEMA
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
tic
% Parametros de configuracion general

% Parametros de configuracion RS
%RSn = 204; RSk = 188;
%RSn = 7; RSk = 3;
RSm = ceil( log2(RSn + 1) );
SimbRS = floor(BDT*8/RSm);

% Parametros de configuracion cod conv
CCLength = [7];
CCGenerator = [171 133];
CCtrellis = poly2trellis(CCLength, CCGenerator);

if CCk==1
model = [1 1];
elseif CCk==2

Transmisor Canal

Receptor
Seleccin de
parmetros
Presenta-
cin de
resultados
Modulador/demodulador COFDM


56
model = [1 0 1 1];
elseif CCk==3
model = [1 1 0 1 1 0];
elseif CCk==5
model = [1 1 0 1 1 0 0 1 1 0];
elseif CCk==7
model= [1 1 0 1 0 1 0 1 1 0 1 0 1 0];
else
disp('error en el codigo convolucional');
end
%CCk=1; CCn=2; model= [1 1];
%CCk=2; CCn=3; model= [1 0 1 1];
%CCk=3; CCn=4; model= [1 1 0 1 1 0];
%CCk=5; CCn=6; model= [1 1 0 1 1 0 0 1 1 0];
%CCk=7; CCn=8; model= [1 1 0 1 0 1 0 1 1 0 1 0 1 0];

% Parametros de configuracion QAM
%QAMm = 2; % Bits por Simbolo de la QAM
%QAMm = 4;
%QAMm = 6;
QAMtable = tablaqam(QAMm);


% Parametros de configuracion de espectro
%ESPbanda = 100;
%ESPbanda = 10;
%ESPginf = 10;
%ESPginf = 2;
%ESPgsup = 10;
%ESPgsup = 4;

% Parametros de configuracion de guarda
%GUAint = 1/4;
%GUAint = 1/8;
%GUAint = 1/16;
%GUAint = 1/32;


% Parametros de configuracion de sincronismo
SINCpre = 200;
SINCchi = 100;
SINCf0 = 0;
SINCf1 = .5;
SINCpos = 200;
sincro = [ zeros(1,SINCpre) chirp(0:(SINCchi-1), SINCf0, SINCchi, SINCf1)
zeros(1,SINCpos) ];
sincro = sincro/max(abs(sincro));

% Parametros de configuracion de audio
AUDIOmargen = 0.5;


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


if imag== 1
%imagen = 'Fish.bmp';
[X,MAP] = imread(imagen);
A = ind2gray(X,MAP);
I = round(255*A);
% figure(1)
% subplot(1,2,1),imagesc(I,[0 255]); colormap(gray);
totaldatos = reshape(I,1,size(I,1)*size(I,2));
numdatos = length(totaldatos);
DATpad = mod(BDT-mod(numdatos,BDT),BDT);
Datos = [totaldatos zeros(1,DATpad)];
NumTramas = length(datos)/BDT;
else
Modulador/demodulador COFDM


57
datos = randint(1, floor(NumTramas*SimbRS), [0 2^RSm-1]);
% figure(1)
% subplot(2,1,1),plot(datos);
% title('Datos transmitidos'),xlabel('Indice temporal
%n'),ylabel('Amplitud');
end


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%TRANSMITE%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%
% Bucle del transmisor
%%%%%%%%%%%%%%%%%%
totaldatosTX = [];
totaltramas = [];
txSinProt = [];
i=1;
for trama=1:NumTramas

%%%%%%%%%%%%%%%%%%
% Genera los datos de la trama
%%%%%%%%%%%%%%%%%%
txDatos = datos(i:i+SimbRS-1);

totaldatosTX = [ totaldatosTX txDatos ];

tramasTX=totaltramas;

[totaltramas,txSS,SINCss,CCtam,CCPtam,QAMtam,ESPtam,RStam,GUAmue,BloqueRSTrama
,txSinPr,EspectroTX,ConstelacionTX] = transmisor_(tramasTX,SimbRS,txDatos,
RSk,RSn,RSm,CCtrellis,CCk,CCn,model,QAMm,QAMtable,ESPbanda,ESPginf,ESPgsup,
GUAint,sincro,AUDIOfrec);

txSinProt = [txSinProt txSinPr];

i=i+SimbRS;

end

%figure(4)
%subplot(2,1,1),plot(totaltramas);
%title('Tramas transmitidas por el canal'),xlabel('Indice temporal
%n'),ylabel('Amplitud');
%esp = fftshift(fft(totaltramas));
%subplot(2,1,2),plot((abs(esp)));

%%%%%%%%%%%%%%%%
%Calculo de la tasa de transmision neta
%%%%%%%%%%%%%%%%

bitDatos = BloqueRSTrama * RSk * RSm * NumTramas;
tasaNeta = bitDatos/(length(totaltramas)/AUDIOfrec)


totaltramasTX = totaltramas;
%%%%%%%%%%%%%%%%%%
%Transmision a traves del canal
%%%%%%%%%%%%%%%%%%

totaltramas = [ zeros(1, AUDIOmargen*AUDIOfrec) totaltramas zeros(1,
AUDIOmargen*AUDIOfrec) ] / max(abs(totaltramas));

wavplay(totaltramas, AUDIOfrec, 'async');



Modulador/demodulador COFDM


58
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%FIN TRANSMISOR%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%RECIBE%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

totaltramas = wavrecord(length(totaltramas), AUDIOfrec, 1, 'double')';
totaltramasRX = totaltramas;
%figure(4)
%subplot(2,1,2),plot(totaltramas,'r');
%title('Tramas recibidas tras el canal'),xlabel('Indice temporal
%n'),ylabel('Amplitud');

[totaldatosRX,rxSinProt,EspectroRX,ConstelacionRX] = receptor_(totaltramas,
sincro,SINCss,GUAmue,ESPginf,ESPbanda,ESPgsup,ESPtam,QAMm,QAMtam,CCtrellis,mod
el,CCPtam,CCtam,RSn,RSk,RSm,BloqueRSTrama,txSS,RStam,AUDIOfrec);

if imag == 1
totaldatosRX = totaldatosRX(1:numdatos);
totaldatosTX = totaldatosTX(1:numdatos);
imagenrx = reshape(totaldatosRX,size(I,1),size(I,2))
% figure(1)
% subplot(1,2,2),imagesc(imagenrx,[0 255]); colormap(gray);
else
% figure(1)
% subplot(2,1,2),plot(datos,'r');
% title('Datos recibidos'),xlabel('Indice temporal n'),ylabel('Amplitud');
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%FIN RECEPTOR%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%
%Calculo de la tasa de error de simbolo Reed-Solomon
%%%%%%%%%%%%%%%%
if imag ==1
Errores=find(double(totaldatosTX) - double(totaldatosRX));
else
Errores=find(totaldatosTX - totaldatosRX);
End

NumErr=length(Errores);
NumDatos=length(totaldatosTX);
SER=NumErr/NumDatos

errSinProt=find(txSinProt - rxSinProt);
numErrSinProt=length(errSinProt);
numDatSinProt=length(txSinProt);
BERSinProt=numErrSinProt/numDatSinProt
disp(['Tasa de error de bit (sin proteccion): ' num2str(BERSinProt)]);

toc

Tiempo = toc;
TasaNeta = tasaNeta;
BER = BERSinProt;
esImagen = imag;

if esImagen,
DatosTX = I;
DatosRX = imagenrx;
else
DatosTX = totaltramasTX;
DatosRX = totaltramasRX;
end
Modulador/demodulador COFDM


59

3.4.2 Transmisor

El siguiente diagrama de bloques muestra las principales funciones de
MATLAB que conforman cada bloque del transmisor as como los vectores o matrices
entrada y salida a estos bloques. Esto nos servir para explicar ms claramente el
funcionamiento conjunto del transmisor COFDM programado.


TRANSMISOR MATLAB






































Figura 3. . Esquema del transmisor MATLAB

A continuacin se presenta el cdigo MATLAB del transmisor completo:

Codificador
Reed
Solomon

Codificador
Convo-
lucional

Conversor
Serie/
Paralelo

Modulador
QAM

Extensin
del
Espectro

IFFT


Adicin
del
Intervalo
de Guarda

Conversor
Paralelo/
Serie
Aade
Supersmbolo
de
Entrenamiento
Aade Seal
de Sincronismo
txDatos txRS
BloqueRS
Relleno
Relleno
txPAR txCOM
txCOM
txSS
txESP
txTIE txGUA
txMUE
Sincro
Relleno
rsenc convenc s2p_
qam_ extesp_ ifft_
guard_ p2s_
txCC
txMUE
Modulador/demodulador COFDM


60

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%TRANSMISOR%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [totaltramas,txSS,SINCss,CCtam,CCPtam,QAMtam,ESPtam,RStam,
GUAmue,BloqueRSTrama,txSinProt,EspectroTX,ConstelacionTX]=transmisor_(tramasTX
,
SimbRS,txDatos,RSk,RSn,RSm,CCtrellis,CCk,CCn,model,QAMm,QAMtable,ESPbanda,ESPg
inf,ESPgsup,GUAint,sincro,AUDIOfrec)

totaltramas=[];

%%%%%%%%%%%%%%%%%%
% Codificacion RS
%%%%%%%%%%%%%%%%%%

%Aade padding
BloqueRSTrama = ceil(SimbRS/RSk);
Rstam = length(txDatos);
Rspad = mod(RSk-mod(SimbRS,RSk),RSk);
txDatos = [txDatos zeros(1,RSpad)];

txRS = [];
j = 1;
for i=1:BloqueRSTrama
bloqueDatos = txDatos(j:j+RSk-1);

bloqueGalois = gf(bloqueDatos, RSm);

bloqueRS = rsenc(bloqueGalois, RSn, RSk);

j = j + RSk;

txRS = [ txRS double(bloqueRS.x) ];
end

% Pasa a 0s y 1s
txRS = de2bi(txRS, RSm, 'left-msb');
txRS = reshape(txRS, 1, BloqueRSTrama * RSn * RSm);


%%%%%%%%%%%%%%%%%%
% Codificacion Convolucional
%%%%%%%%%%%%%%%%%%

% Aadir padding
CCtam = BloqueRSTrama * RSn * RSm; % Guarda el tamao para cuando se
% quite el padding
CCpad = mod(CCk - mod(CCtam, CCk), CCk); % Numero de bits de padding
txRS = [txRS zeros(1, CCpad) ]; % Aande el padding con ceros

txCC = convenc(txRS, CCtrellis);
CCPtam = length(txCC);
txCC = puncture(txCC,model); % Introduce el perforado para obtener la tasa

txSinProt = txCC;

%%%%%%%%%%%%%%%%%%
% Codificacion QAM
%%%%%%%%%%%%%%%%%%

% Aade padding
QAMtam = ( CCtam + CCpad ) / CCk * CCn;
QAMpad = mod(QAMm - mod(QAMtam, QAMm), QAMm);
txCC = [txCC zeros(1, QAMpad) ];

txPAR = s2p_(txCC, QAMm);
Modulador/demodulador COFDM


61
txCOM = qam_(txPAR, QAMtable);

%figure(2)
%subplot(1,3,1),plot(txCOM,'.b');
%title('Constelacion transmitida'), xlabel('Eje de fase'),ylabel('Eje de
%cuadratura');
%axis square;
%axis equal;
%grid on;

ConstelacionTX=txCOM;

%%%%%%%%%%%%%%%%%%
% Inserta SuperSimbolo entrenamiento
%%%%%%%%%%%%%%%%%%

rand('state',0);
txSS = QAMtable(1)/sqrt(2) * exp(2i*pi*rand(ESPbanda, 1));
txCOM = [ txSS ; txCOM ];

%%%%%%%%%%%%%%%%%%
% Extension espectro
%%%%%%%%%%%%%%%%%%

% Aade padding
ESPtam = ESPbanda + ( QAMtam + QAMpad ) / QAMm;
%ESPtam = ( QAMtam + QAMpad ) / QAMm;

ESPpad = mod(ESPbanda - mod(ESPtam, ESPbanda), ESPbanda);
txCOM = [txCOM ; zeros(ESPpad, 1) ];

txESP = extesp_(txCOM, ESPbanda, ESPginf, ESPgsup);

%%%
% Necesitamos saber el numero de supersimbolos por trama
SINCss = ( ESPtam + ESPpad ) / ESPbanda;
%%%

%%%%%%%%%%%%%%%%%%
% IFFT
%%%%%%%%%%%%%%%%%%

txTIE = ifft_(txESP);

%%%%%%%%%%%%%%%%%%
% Aade guarda
%%%%%%%%%%%%%%%%%

GUAmue=ceil(GUAint*size(txTIE,2));
txGUA = guard_(txTIE, GUAmue);

%%%%%%%%%%%%%%%%%%
% Pasa a muestras
%%%%%%%%%%%%%%%%%%

txMUE = p2s_(txGUA);

txMUE = txMUE/max(abs(txMUE));

%figure(3)
esp=(fft(txMUE));
f = 0:AUDIOfrec/(length(esp)/2-1)/2:AUDIOfrec/2;
%subplot(2,1,1),plot(f, 20*log(abs(esp(1:floor(length(esp)/2)))));
%title('Espectro COFDM transmitido'),
%xlabel('Frecuencia(Hz)'),ylabel('Magnitud(dB)');

EspectroTX = 20*log(abs(esp(1:floor(length(esp)/2))));

Modulador/demodulador COFDM


62
%%%%%%%%%%%%%%%%%%
% Aade seal sincronismo
%%%%%%%%%%%%%%%%%%

txMUE = [ sincro txMUE];

%%%%%%%%%%%%%%%%%%
% Fin bucle del transmisor
%%%%%%%%%%%%%%%%%%

totaltramas = [ tramasTX txMUE ];

A continuacin se explican, por bloques, las distintas funciones del transmisor.
Adems comprobaremos mediante un sencillo ejemplo que la comunicacin se realiza
de forma correcta, es decir, que el vector de datos recibidos es el mismo que el vector de
datos transmitidos. Para el ejemplo supondremos que transmitimos una nica trama de
datos aleatorios de un solo byte.

3.4.2.1 Codificacin Reed-Solomon

% Parametros de configuracion RS

RSn = 7;
RSk = 3;
RSm = ceil( log2(RSn + 1) );


%%%%%%%%%%%%%%%%%%
% Codificacion RS
%%%%%%%%%%%%%%%%%%

%Aade padding
BloqueRSTrama = ceil(SimbRS/RSk);
Rstam = length(txDatos);
Rspad = mod(RSk-mod(SimbRS,RSk),RSk);
txDatos = [txDatos zeros(1,RSpad)];

txRS = [];
j = 1;
for i=1:BloqueRSTrama
bloqueDatos = txDatos(j:j+RSk-1);

bloqueGalois = gf(bloqueDatos, RSm);

bloqueRS = rsenc(bloqueGalois, RSn, RSk);

j = j + RSk;

txRS = [ txRS double(bloqueRS.x) ];
end

% Pasa a 0s y 1s
txRS = de2bi(txRS, RSm, 'left-msb');
txRS = reshape(txRS, 1, BloqueRSTrama * RSn * RSm);


El bloque de codificacin Reed-Solomon va tomando todos los bloques de la
trama y los va codificando gracias a la funcin de MATLAB rsenc formndose as el
vector txRS que ser el vector de entrada al siguiente bloque, el codificador
convolucional.


Modulador/demodulador COFDM


63
Los parmetros que se utilizan en la codificacin RS sern: RSk (tamao del
bloque o palabra de entrada al codificador), RSn (tamao de la palabra codificada de
salida segn los cdigos Reed-Solomon) y RSm (el nmero de bits por smbolo que se
utilizarn para formar los bloques Galois, este nmero vendr determinado por el valor
de RSn).

Este bloque se encarga en primer lugar de calcular el nmero de smbolos Reed-
Solomon de la trama y a continuacin rellena con ceros el vector de entrada, para
prepararlo para la funcion de MATLAB rsenc, que lo recibir como parmetro.

Para el clculo de los bits de relleno que hacen falta se utiliza el operador mod de
MATLAB. Este operador realiza la divisin entera entre los operandos (x, y) que se le
pasan como parmetros (mod(x,y)) y devuelve el resto. Esto nos es muy til ya que
como la funcin convenc tomar los smbolos del vector de datos de entrada en grupos
de RSk, pero es posible que no siempre salga exacto y sobren ciertos smbolos.
Realizando la operacin mod(SimbRS,RSk) averiguamos los smbolos que sobran. Si
hacemos esto se lo restamos a RSk ya tenemos el nmero de bits de relleno que hacen
falta. Hay que destacar que volvemos a hacer un mod del resultado con RSk slo para el
caso en que nos salgan cero bits sobrantes, ya que si no lo incluyramos nos saldran
CCk bits de relleno, mientras que debe salir cero. Un ejemplo sencillo de esta operacin
sera:

>> RSk=3;
>> SimbRS=10;
>> mod(SimbRS,RSk)

ans =

1

>> RSpad=mod(RSk-ans,RSk)

RSpad =

2

Se queda tanto por tanto, que si el nmero de smbolos Reed-Solomon de la
trama es 10 y se toman los smbolos en grupos de 3, habr que aadir 2 smbolos de
relleno al vector para obtener un nmero que sea divisible entre 3 (12/3 = 4 grupos de 3
smbolos Reed-Solomon).

Para cada bloque RS (Reed-Solomon) de la trama se forma un bloque de datos
que se obtiene de tomar RSk elementos del vector txDatos que ser el vector que
guarda los datos que se van a transmitir. A continuacin y tomando como parmetros
de entrada el bloque de datos y los bits por smbolo de cada bloque RS se forma las
estructura Galois (mediante la funcin de MATLAB gf) con la que trabaja la funcin de
MATLAB rsenc.

La funcin rsenc codifica el bloque Galois segn el cdigo Reed-Solomon
(RSk,RSn) y devuelve otra estructura Galois con el bloque RS ya codificado. Por esto, al
final del bucle se va aadiendo al vector txRS el bloque RS pero pasado del tipo
estructura Galois al tipo array de MATLAB (esto se hace poniendo bloqueRS.x) ya que
el resto de funciones del transmisor trabajarn con este tipo de datos (array).
Modulador/demodulador COFDM


64

Las ltimas lneas de cdigo que se presentan en este bloque tienen la misin de
preparar el vector txRS para el siguiente bloque, el codificador convolucional. Para ello
se utilizan las funciones de MATLAB de2bi y reshape que realizan en primer lugar la
conversin de decimal a binario (de2bi) del vector de smbolos codificados, donde cada
smbolo del vector pasa a ser una fila de la matriz de salida con el valor en binario. En
segundo lugar pasamos esta matriz de 0s y 1s a un vector fila que ser la entrada al
siguiente bloque, el codificador convolucional.

Para que quede ms claro el funcionamiento del modem, usaremos un ejemplo
muy sencillo de datos a transmitir y comprobaremos si estos datos, a la salida del
receptor coinciden, lo que implicar que el modem funciona de forma correcta.

Comenzamos con el ejemplo, y tomamos los siguientes parmetros de
configuracin general y del bloque de codificacin Reed-Solomon:

NumTramas = 1;
BDT = 1;
RSn=7; RSk=3;
RSm=3;
datos = randint(1, floor(NumTramas*BDT*8/RSm), [0 2^RSm-1]);

El resultado que se obtiene al ejecutar el programa es:

datos =

7 0


BloqueRSTrama =

1


RStam =

2


RSpad =

1


txDatos =

7 0 0


bloqueDatos =

7 0 0


bloqueGalois = GF(2^3) array. Primitive polynomial = D^3+D+1 (11 decimal)

Array elements =

7 0 0


bloqueRS = GF(2^3) array. Primitive polynomial = D^3+D+1 (11 decimal)

Array elements =

7 0 0 4 7 4 3
Modulador/demodulador COFDM


65


Vector codificado. Pasamos de tamao 3 a tamao 7:

txRS =

7 0 0 4 7 4 3


txRS =

1 1 1

0 0 0

0 0 0

1 0 0

1 1 1

1 0 0

0 1 1

Tomando los valores por columnas pasamos esta matriz a un vector serie:

txRS =

Columns 1 through 14

1 0 0 1 1 1 0 1 0 0 0 1 0 1

Columns 15 through 21

1 0 0 0 1 0 1


3.4.2.2 Codificacin convolucional

% Parametros de configuracion cod conv

CCLength = [7];
CCGenerator = [171 133];
CCtrellis = poly2trellis(CCLength, CCGenerator);
[CCk CCn] = size(CCGenerator);

%%%%%%%%%%%%%%%%%%
% Codificacion Convolucional
%%%%%%%%%%%%%%%%%%

% Aadir padding
CCtam = BloqueRSTrama * RSn * RSm; % Guarda el tamao para cuando se
% quite el padding
CCpad = mod(CCk - mod(CCtam, CCk), CCk); % Numero de bits de padding
txRS = [txRS zeros(1, CCpad) ]; % Aande el padding con ceros

txCC = convenc(txRS, CCtrellis);
CCPtam = length(txCC);
txCC = puncture(txCC,model); % Introduce el perforado para obtener la tasa

txSinProt = txCC;

Esta funcin realiza la codificacin convolucional del vector de entrada txRS,
que a su vez era la salida del codificador Reed-Solomon, obtenindose a la salida del
bloque el vector codificado txCC. Con esto acaba la fase de codificacin en el
transmisor.

Modulador/demodulador COFDM


66
La codificacin convolucional es un caso especial de codificacin para el control
de errores. A diferencia de los codificadores de bloque un codificador convolucional es
un dispositivo con memoria. A pesar de que un codificador convolucional admite un
nmero fijo de smbolos de mensaje y produce un nmero fijo de smbolos codificados,
sus clculos no slo dependen del conjunto actual de smbolos de entrada sino tambin
de algunos smbolos de entrada previos.

Este bloque se encarga en primer lugar de rellenar con ceros el vector de entrada,
para prepararlo para la funcion de MATLAB convenc, que lo recibir como parmetro.

La funcin de MATLAB que realiza la codificacin convolucional, convenc,
sigue la estructura:
code=convenc(msg,trellis)

Esta funcin codifica el vector binario msg usando el codificador convolucional
definido por la estructura trellis de MATLAB. Cada smbolo en msg est formado
por log2(trellis.numInputSymbols) bits, por lo que el nmero de bits de la entrada
vendr fijado para que el nmero de smbolos que se obtengan de msg sea entero. El
vector msg contiene uno o ms smbolos. El vector de cdigo de salida contiene uno o
ms smbolos y cada uno est formado por log2(trellis.numOutputSymbols) bits.

La estructura Trellis se puede definir explcitamente indicndose el nmero de
smbolos de entrada, de salida, el nmero de estados, los estados a los que se pasan, y
las salidas. Un ejemplo de esto sera:

trel = struct('numInputSymbols',2,'numOutputSymbols',4,...
'numStates',4,'nextStates',[0 2;0 2;1 3;1 3],...
'outputs',[0 3;1 2;3 0;2 1]);
code2 = convenc(randint(10,1),trel);

Este ejemplo define una estructura trellis explcitamente y utiliza convenc para
codificar 10 smbolos de 1 bit.

Otra forma de definir la estructura trellis, es mediante la funcin poly2trellis,
que es la que se ha utilizado en este proyecto. La funcin poly2trellis acepta una
descripcin polinomial de un codificador convolucional y devuelve la descripcin de la
estructura trellis correspondiente.

trellis = poly2trellis(ConstraintLength,CodeGenerator)

Lleva a cabo la conversin para un codificador de tasa n k / . ConstraintLength
es un vector k 1 que especifica el retraso para los k flujos de bits de entrada del
codificador. Los elementos de este vector indican el nmero de bits almacenados en
cada registro de desplazamiento incluyendo los bits de entrada actuales.
CodeGenerator es una matriz n k de nmeros en octal que especifica las n
conexiones de salida para cada uno de los k flujos de bits de entrada. El elemento de la
i-sima fila y j-sima columna indica cmo la i-sima entrada contribuye a la i-sima
salida.

La estructura trellis elegida para el codificador convolucional en nuestro
proyecto es la utilizada en el estndar de DAB y DVB-T y se representa como sigue:
Modulador/demodulador COFDM


67

CCLength = [7];
CCGenerator = [171 133];
CCtrellis = poly2trellis(CCLength, CCGenerator);
[CCk CCn] = size(CCGenerator);

Si la representamos mediante sumadores mdulo 2 y registros de desplazamiento
obtenemos:



Como ya se comentaba en la seccin 3.2.1.2 donde se describa tericamente el
codificador convolucional, la tasa base que se obtiene del codificador es 1/2 y para
obtener el resto de tasas hay que incluir un bloque que realice el llamado perforado o
puncturing. Las tcnicas de perforado parten del vector codificado convolucionalmente
y segn la tasa que se desee obtener, toman un modelo o patrn determinado que indica
los bits que habr que eliminar del vector codificado. Un ejemplo de modelo puede ser:

model = [1 1 0 1 1 0]

que es el modelo que se utiliza para obtener la tasa 3/4, que indica que entran tres bits
en el codificador convolucional y saldrn cuatro. En el cdigo del programa principal
aparecen el resto de patrones o modelos de las distintas tasas. La funcin de MATLAB
que realiza el perforado del cdigo es la siguiente:

%Funcion punture. Realiza el perforado del vector codificado
%convolucionalmente para obtener la tasa de cdigo deseada.

function txCC = puncture(txCOD,model)
j = 1;
k = 1;
txCC = [];
for i=1:length(txCOD)
if model(k)==1
txCC(j)=txCOD(i);
j=j+1;
end
if k==length(model)
k=1;
else
k=k+1;
end
end

Esta funcin tiene como argumentos de entrada el vector codificado y el modelo
de la tasa determinada. A la salida devuelve el vector codificado al que se le ha
Modulador/demodulador COFDM


68
realizado el perforado, es decir, se le han eliminado ciertos bits redundantes para
obtener dicha tasa.

El procedimiento que se sigue para realizar el puncturing es el siguiente:
Se va recorriendo el vector codificado y a la vez el modelo. En caso de que en el
modelo aparezca un 0 ese bit habr que eliminarlo, por lo que no se copia en el vector
final.

Para entender ms fcilmente todo esto, ponemos un ejemplo:

>> txCOD = [ 1 1 1 1 0 0 1 0 1 0 0 1 0 0 1 1 1 1];
>> model = [1 1 0 1 1 0];
>> txCC = puncture(txCOD, model)

txCC =

1 1 1 0 1 0 0 0 0 0 1 1

Se puede observar que el perforado se ha realizado de forma correcta, y que el vector de
salida es de menor tamao que txCOD, tal y como debera ser. Debemos recordar que las
tcnicas de perforado pretenden reducir la redundancia y por tanto, proteccin de los
datos. Parten de la tasa 1/2 que es la que introduce ms redundancia ya que dobla el
nmero de bits, y para conseguir la 3/4 eliminan los bits correspondientes. Es por esto
que el vector txCOD es de longitud 18 y txCC es de longitud 12.


Continuando con el ejemplo de transmisin de partida y tomando como entrada
el vector de salida del anterior bloque, txRS y los siguientes parmetros se obtiene:

Parmetros:

CCLength = [7];
CCGenerator = [171 133];
CCtrellis = poly2trellis(CCLength, CCGenerator);
CCk = 7;
CCn = 8;

Resultado en MATLAB:

CCtam =

21


CCpad =

0


txRS =

Columns 1 through 14

1 0 0 1 1 1 0 1 0 0 0 1 0 1

Columns 15 through 21

1 0 0 0 1 0 1


Antes del perforado:

Modulador/demodulador COFDM


69
txCC =

Columns 1 through 14

1 1 1 0 1 1 0 0 0 1 1 1 0 1

Columns 15 through 28

1 1 0 0 0 1 0 1 0 0 1 1 1 1

Columns 29 through 42

1 0 0 1 0 1 0 0 1 0 0 0 1 1


CCPtam =

42


Tras el perforado:

txCC =

Columns 1 through 14

1 1 0 1 0 0 1 0 1 1 0 1 1 0

Columns 15 through 24

1 1 1 0 1 1 0 1 0 1


Al ser la tasa del codificador 7/8 vemos que el vector codificado txCC tiene una
longitud 8/7 mayor a la del vector de entrada txRS.


3.4.2.3 Modulador QAM

% Parametros de configuracion QAM

QAMm = 2; % Bits por Simbolo de la QAM
QAMtable = tablaqam(QAMm);

%%%%%%%%%%%%%%%%%%
% Modulacion QAM
%%%%%%%%%%%%%%%%%%

% Aade padding
QAMtam = ( CCtam + CCpad ) / CCk * CCn;
QAMpad = mod(QAMm - mod(QAMtam, QAMm), QAMm);
txCC = [txCC zeros(1, QAMpad) ];

[txPAR] = s2p_(txCC, QAMm);
[txCOM] = qam_(txPAR, QAMtable);

El modulador QAM ser el que se encargue de asignar a cada smbolo que se
transmite un punto de la constelacin. Esta constelacin tendr tantos niveles o bits por
smbolo como se indiquen en el parmetro de entrada del sistema. Para llevar a cabo
esta asignacin vemos que en primer lugar se debe crear la tabla de la QAM a partir del
nmero de bits por smbolo de la modulacin.

Dado que el vector de entrada al modulador deber tener una cierta longitud
divisible por el nmero de bits por smbolo, y es posible que esto no sea as, se hace
Modulador/demodulador COFDM


70
necesaria, en determinados casos, la adicin de bits de relleno en el vector de salida del
codificador convolucional que ser el de entrada a este bloque.

Una vez que se han aadido los bits de relleno necesarios, realizamos en primer
lugar y antes de la modulacin, la conversin serie paralelo de los datos (vector txCC)
por lo que pasamos de la ristra de bits a smbolos formados por tantos bits como indique
el parmetro y adems en paralelo, es decir, como vector columna. Son estos smbolos
los que pasarn al modulador QAM.

El modulador QAM tomar los smbolos (que tendrn un valor en decimal) y la
tabla de la constelacin, y dada la correspondencia entre ambos, obtiene un vector
columna donde cada elemento ser el nmero complejo correspondiente al smbolo,
segn la constelacin de la modulacin QAM dada, obtenindose a la salida de este
bloque el vector txCOM.

Las funciones implicadas en este bloque son s2p_ y qam_ que no son funciones
de MATLAB propiamente sino que han sido creadas para los propsitos explicados. El
cdigo de estas funciones se muestra a continuacin:

%Funcion s2p_. Transforma un vector binario de entrada ser, en un vector
%decimal columna con tantas filas como resulte de dividir ser entre tam.

function [par] = s2p_(ser, tam)

bloq = floor( length(ser) / tam);
par = [];
if bloq > 0,
par = reshape( ser(1:(bloq * tam)), tam, bloq).';
par = bi2de(par, 'left-msb');%pasa a decimal;
end

Pongamos un ejemplo sencillo de su funcionamiento:

Vamos a suponer el siguiente vector de datos y 3 bits por cada smbolo que se
transmite. El resultado en MATLAB es el siguiente:

>> datos
datos =

0 0 0 1 0 1 0 1 0 1 1 1

>> QAMm
QAMm =

3

>> par=s2p_(datos,QAMm)
par =

0
5
2
7

Con lo que se comprueba que el resultado es un vector columna de nmeros
decimales y de tantas filas como el resultado de dividir la longitud del vector datos entre
el nmero de bits por smbolo, es decir 12/3=4.

Modulador/demodulador COFDM


71
A continuacin se va a realizar la asignacin del nmero complejo
correspondiente segn la tabla de la QAM. La funcin que crea la tabla no es de
MATLAB y su cdigo es:

%Funcion tablaqam. Crea la tabla con los puntos de la constelacion.

function [tablaqam] = tablaqam(BitSimb)

iBits = floor(BitSimb/2); %numero de bits para el eje de fase
qBits = ceil(BitSimb/2); %numero de bits para el eje de cuadratura

tablaqam = []; %Vector columna que contendra los numeros complejos de la
%constelacion

for k = 0:(2^BitSimb-1),
iLin = gray2lin_(bitshift(k, -qBits)); %se queda con los bits de
%fase
qLin = gray2lin_(bitand(k, 2^qBits-1)); %se queda con los bits de
%cuadratura

tablaqam = [tablaqam ; (iLin*2-(2^iBits-1))+(qLin*2-(2^qBits-1))*i ];
%Se centra la constelacion y se multiplica por dos para obtener
%numeros enteros
end


De los BitSimb bits de cada smbolo los ms significativos sern los que se usen
para el eje en fase y los menos significativos para el eje en cuadratura, es decir se
escogen de forma consecutiva, aunque normalmente se suelen escoger de forma alterna.

Esta funcin decide, en primer lugar, el nmero de bits que se van a usar para el
eje de fase y para el eje de cuadratura. A continuacin y para cada smbolo se separa la
parte en fase y la parte en cuadratura, y se pasa del valor gray (en que est codificada
cada posicin) a su posicin determinada dentro de la tabla (gray2lin_). Con estos
valores se calculan los nmeros complejos correspondientes a los puntos de la
constelacin, de forma que quede centrada y con valores enteros.

La funcin tablaqam hace uso de otra funcin, gray2lin_ que se explica a
continuacin.

%Funcion gray2lin_. Pasa un numero codificado en gray a su correspondiente
%lineal

function lin = gray2lin_(gray)

bin = de2bi(gray,'left-msb'); %Pasa el numero gray a binario

invierte = 0;
new_bin = []; %Vector binario con el numero correspondiente al gray

for k = 1:length(bin),
if invierte
new_bin(k) = ~ bin(k); %hace la not al bit k, lo invierte
else
new_bin(k) = bin(k);
end
if bin(k)
invierte = ~ invierte; %modifica invierte para el siguiente bit
end
end

lin = bi2de(new_bin,'left-msb');Pasa el numero en binario a decimal
Modulador/demodulador COFDM


72

Ya se ha comentado en la primera parte de este captulo, que se utiliza
codificacin gray para los smbolos de la constelacin QAM y esto es as porque esta
codificacin tiene la propiedad de que smbolos vecinos (a distancia mnima) de la
constelacin solo varan un bit por lo que disminuye la probabilidad de error ya que si la
relacin seal a ruido es suficientemente alta es mucho ms probable que un smbolo
sea confundido con un smbolo vecino que con otros que disten mucho del smbolo
inicialmente transmitido.

La funcin gray2lin_ pasa de un nmero codificado en gray a su
correspondiente en lineal. Para ello en primer lugar pasa el nmero a binario (a ceros y
unos). La bandera invierte se usa para indicar si hay que invertir el bit o no, es decir,
para pasar de uno a cero o viceversa. Se recorrer el vector bin que almacena los
valores binarios del nmero codificado que se pasa como argumento de entrada. El
vector new_bin almacenar el nmero en binario una vez decodificado. El primer bit de
este vector ser igual al del vector bin. Los siguientes bits vendrn determinados por el
valor del bit correspondiente de bin. En caso de ser uno habr que invertir el siguiente
bit de bin antes de copiarlo en new_bin, y en caso de ser cero, se copia tal cual. Ya, por
ltimo, se pasa el nmero decodificado de binario a decimal con la funcin de
MATLAB bi2de.

Si creamos una tabla de 3 bits por smbolo, el resultado que ofrece MATLAB es:

>> tqam=tablaqam(QAMm)
tqam =

-1.0000 - 3.0000i
-1.0000 - 1.0000i
-1.0000 + 3.0000i
-1.0000 + 1.0000i
1.0000 - 3.0000i
1.0000 - 1.0000i
1.0000 + 3.0000i
1.0000 + 1.0000i

La funcin qam_ solo realizar la correspondencia entre cada smbolo y cada
punto de la constelacin, teniendo en cuenta que al smbolo 0 le corresponde el valor de
la primera fila, al smbolo 1 el de la segunda fila y as sucesivamente. El cdigo de esta
funcin se muestra a continuacin:

%Funcion qam_. Realiza la asignacion de los bloques (simbolos)con el %numero
complejo correspondiente segun la tabla de la modulacion qam.El %resultado lo
guarda en el vector columna com que tendr tantas filas como %el vector par
que se le pasa como entrada a la funcion.

function [com] = qam_(par, tqam)

com = [ tqam(par(:) + 1) ];

Si continuamos con el ejemplo anterior, con la tabla de la QAM obtenida y el
vector de smbolos par, el resultado que se obtiene de ejecutar la funcin qam_ es:

>> com=qam_(par,tqam)

com =

-1.0000 - 3.0000i
Modulador/demodulador COFDM


73
1.0000 - 1.0000i
-1.0000 + 3.0000i
1.0000 + 1.0000i

El vector com ser el vector de salida del modulador QAM y estar formado por
nmeros complejos. Estos nmeros forman lo que es el espectro de la seal que se est
transmitiendo, pero dado que la seal en tiempo que se transmite a travs del canal debe
ser una seal real, debemos entonces pasar este vector al siguiente bloque que se
encargar de realizar una extensin de este espectro adecuada (aade la parte simtrica
conjugada del espectro) para que a la salida del transmisor obtengamos la seal real que
queremos.

Si continuamos con la cadena de datos del ejemplo inicial podemos ver que el
vector resultado que se obtiene a la salida de este bloque sera:

QAMtam =

24


QAMpad =

0


txCC =

Columns 1 through 14

1 1 0 1 0 0 1 0 1 1 0 1 1 0

Columns 15 through 24

1 1 1 0 1 1 0 1 0 1


txPAR =

13
2
13
11
11
5

Constelacin transmitida:

txCOM =

1.0000 - 1.0000i
-3.0000 + 3.0000i
1.0000 - 1.0000i
3.0000 + 1.0000i
3.0000 + 1.0000i
-1.0000 - 1.0000i

Donde se ha usado una constelacin de cuatro bits/smbolo o 16-QAM.

3.4.2.4 Insercin del supersmbolo de entrenamiento

%%%%%%%%%%%%%%%%%%
% Inserta SuperSimbolo entrenamiento
%%%%%%%%%%%%%%%%%%

rand('state',0);
txSS = QAMtable(1)/sqrt(2) * exp(2i*pi*rand(ESPbanda, 1));
txCOM = [ txSS ; txCOM ];
Modulador/demodulador COFDM


74

Justo antes de realizar la extensin del espectro debemos insertar un
supersmbolo
5
de entrenamiento, es decir, un supersmbolo conocido tanto por el
transmisor como por el receptor. Este ser clave en la comunicacin ya que gracias a l
se podrn calcular la rotacin y escalado que sufre cada supersmbolo al transmitirse por
el canal, con lo que una vez conocidos ambos, el receptor ya no tendr problema para
detectar los smbolos.

Como muestra el cdigo del bloque, este supersmbolo estar modulado en PSK
y tendr una potencia parecida al resto de smbolos de la constelacin (como indica su
amplitud), estar ocupando las primeras filas del vector que contiene el espectro, y por
tanto ser el primer supersmbolo que se transmita.

Suponiendo que el espectro estar formado por 4 bandas y que el vector que
contiene el espectro es txCOM (salida del bloque anterior) podemos ver el resultado de la
ejecucin de MATLAB de este programa como:

txSS =

-2.6719 - 1.3641i
1.8556 - 2.3573i
0.3415 + 2.9805i
2.2997 + 1.9265i


txCOM =

-2.6719 - 1.3641i
1.8556 - 2.3573i
0.3415 + 2.9805i
2.2997 + 1.9265i
1.0000 - 1.0000i
-3.0000 + 3.0000i
1.0000 - 1.0000i
3.0000 + 1.0000i
3.0000 + 1.0000i
-1.0000 - 1.0000i


3.4.2.5 Extensin del espectro

% Parametros de configuracion de espectro

ESPbanda = 4;
ESPginf = 2;
ESPgsup = 2;

%%%%%%%%%%%%%%%%%%
% Extension espectro
%%%%%%%%%%%%%%%%%%

% Aade padding
ESPtam = ESPbanda + ( QAMtam + QAMpad ) / QAMm;
ESPpad = mod(ESPbanda - mod(ESPtam, ESPbanda), ESPbanda);
txCOM = [txCOM ; zeros(ESPpad, 1) ];

[txESP] = extesp_(txCOM, ESPbanda, ESPginf, ESPgsup);



5
Recordemos que se ha llamado supersmbolo a la agrupacin de N smbolos correspondientes a las N
portadoras que intervienen en la FFT/IFFT.
Modulador/demodulador COFDM


75
%%%
% Necesitamos saber el numero de supersimbolos por trama
SINCss = ( ESPtam + ESPpad ) / ESPbanda;
%%%


El bloque extensin del espectro, como ya se ha comentado, tiene la funcin de
aadir la parte simtrica conjugada al espectro que recibe como entrada. Esta extensin
del espectro se lleva a cabo tal y como se explic en la parte terica del captulo.

En el cdigo del bloque que aqu se presenta, se puede ver que en primer lugar
se prepara el vector columna de entrada para que se le pueda realizar la extensin
mediante la adicin de relleno o ceros al final del mismo. Esto se hace ya que la
longitud que debe tener este vector a la hora de realizarse la extensin es fija y viene
determinada por el nmero de bandas o subportadoras que van a intervenir
posteriormente en la realizacin de la transformada inversa de Fourier (bloque IFFT).

El nmero de bandas vendr dado por el parmetro ESPbanda. Los parmetros
ESPginf y ESPgsup se utilizarn para dejar algunas bandas de guarda, es decir, bandas
por las que no se transmita nada por proteccin, ya que puede haber casos (como el de
nuestro cable) en los que la transmisin por la banda base (o por bandas de alta
frecuencia) no sea conveniente
6
.

El cdigo de la funcin extesp_ se muestra a continuacin:

%Funcion extesp_. Aade la parte simtrica conjugada del espectro

function [esp] = extesp_(com, NumPort, Ginf, Gsup)

bloq = floor(length(com)/NumPort); %calcula el numero de supersimbolos
ext = reshape(com, NumPort, bloq).';%pasamos a una matriz donde cada
%supersmbolo esta en una fila

ext = [ zeros(bloq, Ginf) ext zeros(bloq, Gsup)]; %aade bandas de guarda
esp = [ real(ext(:,1)) ext(:,2:end) imag(ext(:,1)) conj(ext(:,end:-1:2)) ];
%realiza la extension del espectro

La funcin extesp_ recibe como parmetros de entrada el vector com, que es un
vector columna de nmeros complejos, el nmero de portadoras que intervendrn en la
IFFT, y las bandas tanto inferiores como superiores que se reservarn como guarda y
por las que no se transmitir nada. Esta funcin devuelve la matriz esp. Esta matriz
tendr tantas filas como supersmbolos hubiese en el vector com, y tantas columnas
como el doble de NumPort+Ginf+Gsup.

Para ver ms claramente cmo se realiza la extensin del espectro pondremos
tres ejemplos. Estos tres ejemplos extendern el mismo vector com, slo que las bandas
de guarda sern diferentes en cada uno de ellos:

com =

-1.0000 - 3.0000i
1.0000 - 1.0000i
-1.0000 + 3.0000i

6
En nuestro caso, dadas las caractersticas del canal no ser conveniente transmitir ni a muy bajas
frecuencias ni a frecuencias altas en torno a 20 KHz.
Modulador/demodulador COFDM


76
1.0000 + 1.0000i

>> ESPbanda=3;
>> ESPginf=0;
>> ESPgsup=0;
>> ESPtam=length(com)

ESPtam =

4

>> ESPpad = mod(ESPbanda - mod(ESPtam, ESPbanda), ESPbanda)

ESPpad =

2

>> com = [com ; zeros(ESPpad, 1) ]

com =

-1.0000 - 3.0000i
1.0000 - 1.0000i
-1.0000 + 3.0000i
1.0000 + 1.0000i
0
0

>> txESP = extesp_(com, ESPbanda, ESPginf, ESPgsup)
txESP =

Columns 1 through 5

-1.0000 1.0000 - 1.0000i -1.0000 + 3.0000i -3.0000 1.0000 3.0000i
1.0000 0 0 1.0000 0

Column 6

1.0000 + 1.0000i
0


Si ahora aadimos una banda de guarda inferior (ESPginf =1) obtendremos:

txESP =

Columns 1 through 4

0 -1.0000 - 3.0000i 1.0000 - 1.0000i -1.0000 + 3.0000i
0 1.0000 + 1.0000i 0 0

Columns 5 through 8

0 -1.0000 3.0000i 1.0000 + 1.0000i -1.0000 + 3.0000i
0 0 0 1.0000 - 1.0000i

Si en lugar de una banda de guarda inferior reservamos una banda superior
(ESPgsup=1) obtenemos:

>> ESPbanda=3;
>> ESPginf=0;
>> ESPgsup=1;
>> txESP = extesp_(com,ESPbanda,ESPginf,ESPgsup)

txESP =

Columns 1 through 4
Modulador/demodulador COFDM


77

-1.0000 1.0000 - 1.0000i -1.0000 + 3.0000i 0
1.0000 0 0 0

Columns 5 through 8

-3.0000 0 -1.0000 - 3.0000i 1.0000 + 1.0000i
1.0000 0 0 0



Una vez realizada la extensin del espectro, ya podemos realizar la transformada
inversa de Fourier para cada supersmbolo. Antes de realizar la IFFT para obtener la
seal en tiempo calculamos el nmero de supersmbolos que hay en cada trama, ya que
nos har falta saberlo para el sincronismo del sistema y esto es lo que realizan las
ltimas lneas de cdigo que se presentan en este bloque.

Antes de pasar al siguiente bloque, seguimos con el ejemplo de transmisin
tomado desde el principio, y ejecutamos este bloque en MATLAB tomando como
entrada el vector txCOM obtenido del bloque de modulacin QAM. El resultado que se
obtiene es:

ESPtam =

10


ESPpad =

2


txCOM =

-2.6719 - 1.3641i
1.8556 - 2.3573i
0.3415 + 2.9805i
2.2997 + 1.9265i
1.0000 - 1.0000i
-3.0000 + 3.0000i
1.0000 - 1.0000i
3.0000 + 1.0000i
3.0000 + 1.0000i
-1.0000 - 1.0000i
0
0


txESP =

Columns 1 through 5

0 0 -2.6719 - 1.3641i 1.8556 - 2.3573i 0.3415 + 2.9805i
0 0 1.0000 - 1.0000i -3.0000 + 3.0000i 1.0000 - 1.0000i
0 0 3.0000 + 1.0000i -1.0000 - 1.0000i 0

Columns 6 through 10

2.2997 + 1.9265i 0 0 0 0
3.0000 + 1.0000i 0 0 0 0
0 0 0 0 0

Columns 11 through 15

0 2.2997 - 1.9265i 0.3415 - 2.9805i 1.8556 + 2.3573i -2.6719 + 1.3641i
0 3.0000 - 1.0000i 1.0000 + 1.0000i -3.0000 - 3.0000i 1.0000 + 1.0000i
0 0 0 -1.0000 + 1.0000i 3.0000 - 1.0000i

Column 16
Modulador/demodulador COFDM


78

0
0
0

Donde se han utilizado cuatro subportadoras tiles, y se han tomado dos de
guarda inferior y dos de guarda superior.


3.4.2.6 IFFT

%%%%%%%%%%%%%%%%%%
% IFFT
%%%%%%%%%%%%%%%%%%

[txTIE] = ifft_(txESP);

Este bloque, como ya se ha comentado, calcula la transformada inversa de
Fourier de la seal de entrada. Esta transformada se lleva a cabo mediante el algoritmo
IFFT (Inverse-Fast-Fourier-Transform) y realiza la conversin de la seal representada
por sus coeficientes espectrales a una seal de muestras en tiempo. Debemos tener en
cuenta que la IFFT se realiza para cada supersmbolo y por lo tanto, depende del
nmero de bandas de que dispongamos.

La funcin principal de este bloque es ifft_ cuyo cdigo MATLAB se muestra
a continuacin:

%Funcion ifft_.Realiza la IFFT a cada supersmbolo, pasando de
%coeficientes espectrales a muestras en tiempo.

function [tie] = ifft_(esp)

tie = [];

for k = 1:size(esp,1),
tie = [ tie ; real(ifft(esp(k,:))) ];
end

Esta funcin va realizando la IFFT a cada supersmbolo, es decir a cada fila del
vector de entrada esp y devuelve en el vector tie las distintas muestras a las que da
lugar cada supersmbolo, es decir, en cada fila tendremos los valores reales de tiempo
que se generan al calcular la transformada inversa de Fourier a cada coeficiente
complejo. Las dimensiones de los vectores de entrada y salida coinciden, por tanto.

Para mostrar el funcionamiento de este bloque continuamos con el ejemplo de
transmisin, por lo que la funcin ifft_ tomar como matriz de entrada la obtenida a la
salida del bloque anterior de extensin de espectro, txESP. El resultado de este bloque
es el siguiente:


txTIE =

Columns 1 through 8

0.2281 -0.4597 0.1392 0.7600 -0.1588 -0.3289 0.5327 0.0868
0.2500 -0.4472 -0.1768 0.7593 0.2500 -0.5533 -0.4268 -0.2999
0.2500 0.2444 0.0518 -0.2859 -0.5000 -0.3401 0.1250 0.5169

Columns 9 through 16

Modulador/demodulador COFDM


79
-0.8107 -0.5167 0.1165 0.6986 0.9121 -0.1851 -0.9591 -0.0552
0.2500 1.0507 0.1768 -1.0093 -0.2500 0.4498 -0.0732 0.0499
0.5000 0.1091 -0.3018 -0.4212 -0.2500 -0.0135 0.1250 0.1902

Una vez obtenida la seal en tiempo ya estamos en condiciones de transmitirla
pero antes de hacerlo y para la proteccin por multitrayecto pasamos esta seal por el
siguiente bloque.

3.4.2.7 Insercin del intervalo de guarda

% Parametro de configuracion de guarda

GUAint = 1/32;

%%%%%%%%%%%%%%%%%%
% Aade guarda
%%%%%%%%%%%%%%%%%%

GUAmue = ceil(GUAint*size(txTIE,2));
[txGUA] = guard_(txTIE, GUAmue);

Este bloque como se explic en teora, va a aadir un intervalo de muestras de
guarda en cada supersmbolo. El intervalo de guarda que se va a aadir tiene la forma de
prefijo cclico, es decir se tomarn las GUAmue muestras finales de cada supersmbolo de
la seal de entrada al bloque (la seal temporal obtenida tras la IFFT) y se repetirn al
comienzo de cada supersmbolo, por lo que cada supersmbolo ve aumentada su
longitud en GUAmue muestras.

El cdigo de la funcin que realiza este bloque se presenta a continuacin:

%Funcion guard_. Aade el prefijo cclico a cada supersmbolo temporal.

function [gua] = guard_(tie, IntGuar)

gua = [];
if length(tie)>0,
gua = [ tie( :, (size(tie,2) - IntGuar + 1):size(tie,2) ) tie ];
end

Para comprobar que efectivamente esta funcin aade el intervalo de guarda con
forma de prefijo cclico ponemos el siguiente ejemplo donde tomamos el vector txTIE
obtenido anteriormente como entrada a este bloque y GUAint = 1/32:

GUAmue =

1

txGUA =

Columns 1 through 8

-0.0552 0.2281 -0.4597 0.1392 0.7600 -0.1588 -0.3289 0.5327
0.0499 0.2500 -0.4472 -0.1768 0.7593 0.2500 -0.5533 -0.4268
0.1902 0.2500 0.2444 0.0518 -0.2859 -0.5000 -0.3401 0.1250

Columns 9 through 16

0.0868 -0.8107 -0.5167 0.1165 0.6986 0.9121 -0.1851 -0.9591
-0.2999 0.2500 1.0507 0.1768 -1.0093 -0.2500 0.4498 -0.0732
0.5169 0.5000 0.1091 -0.3018 -0.4212 -0.2500 -0.0135 0.1250

Column 17

Modulador/demodulador COFDM


80
-0.0552
0.0499
0.1902

Efectivamente se comprueba que esta funcin ha aadido la ltima muestra de
cada supersmbolo al comienzo de estos y que, por lo tanto, el nmero de columnas de
la matriz de salida ha aumentado en una unidad.

3.4.2.8 Conversin Paralelo/Serie

%%%%%%%%%%%%%%%%%%
% Pasa a muestras
%%%%%%%%%%%%%%%%%%

[txMUE] = p2s_(txGUA);

La misin de este bloque no es otra que obtener un vector fila de muestras que
pueda ser transmitido a travs del canal. Para esto simplemente toma la matriz txGUA
donde cada fila es un supersmbolo y coloca en el vector de salida txMUE un
supersmbolo tras otro. Mostramos a continuacin el cdigo de la funcin que realiza
este bloque:

%Funcion p2s_. Serializa una matriz que se le pasa como entrada (par).
%La salida sera el vector fila serie (ser).

function [ser] = p2s_(par)

ser = reshape( par.', 1, size(par,1) * size(par,2) );


Esta funcin hace uso de la funcin de MATLAB reshape que es de la forma:

reshape(x,m,n)

que devuelve una matriz mxn tomando los elementos por columnas de la matriz x. En
este caso los elementos se toman de par y la salida es un vector fila y tantas columnas
como elementos tiene la matriz par.

El siguiente ejemplo ilustra el funcionamiento de este bloque de conversin
paralelo/serie, en el que se ha tomado como matriz de entrada al bloque txGUA, que era
la obtenida tras el bloque de insercin del intervalo de guarda. El resultado que se
obtiene es:

txMUE =

Columns 1 through 8

-0.0552 0.2281 -0.4597 0.1392 0.7600 -0.1588 -0.3289 0.5327

Columns 9 through 16

0.0868 -0.8107 -0.5167 0.1165 0.6986 0.9121 -0.1851 -0.9591

Columns 17 through 24

-0.0552 0.0499 0.2500 -0.4472 -0.1768 0.7593 0.2500 -0.5533

Columns 25 through 32

-0.4268 -0.2999 0.2500 1.0507 0.1768 -1.0093 -0.2500 0.4498

Modulador/demodulador COFDM


81
Columns 33 through 40

-0.0732 0.0499 0.1902 0.2500 0.2444 0.0518 -0.2859 -0.5000

Columns 41 through 48

-0.3401 0.1250 0.5169 0.5000 0.1091 -0.3018 -0.4212 -0.2500

Columns 49 through 51

-0.0135 0.1250 0.1902

3.4.2.9 Insercin de sincronismo

% Parametros de configuracion de sincronismo
SINCpre = 5;
SINCchi = 10;
SINCf0 = 0;
SINCf1 = .5;
SINCpos = 5;
SINCk = 1;

sincro = [ zeros(1,SINCpre) SINCk * chirp(0:(SINCchi-1), SINCf0, SINCchi,
SINCf1) zeros(1,SINCpos) ];

%%%%%%%%%%%%%%%%%%
% Aade seal sincronismo
%%%%%%%%%%%%%%%%%%

txMUE = [ sincro txMUE];
txMUE = txMUE/max(abs(txMUE));

Dado que se dedicar el prximo captulo a explicar el sincronismo de los
sistemas OFDM no vamos a detallar el funcionamiento de este bloque. Nos nos
limitaremos a mencionar, que una vez obtenida la seal en tiempo debemos introducirle
al comienzo de la misma una seal de sincronismo conocida para que el receptor sea
capaz de detectar el principio de cada trama y pueda sincronizarse a la misma. Esto le
permitir llevar a cabo de forma correcta el proceso de demodulacin.

El vector que se obtiene al aadirse la seal de sincronismo en cada trama es:

txMUE =

Columns 1 through 8

0 0 0 0 0 1.0000 0.9877 0.8090

Columns 9 through 16

0.1564 -0.8090 -0.7071 0.8090 0.1564 -0.8090 0.9877 0

Columns 17 through 24

0 0 0 0 -0.0525 0.2171 -0.4375 0.1325

Columns 25 through 32

0.7233 -0.1511 -0.3130 0.5070 0.0826 -0.7716 -0.4917 0.1109

Columns 33 through 40

0.6649 0.8681 -0.1761 -0.9128 -0.0525 0.0475 0.2379 -0.4256

Columns 41 through 48

-0.1682 0.7226 0.2379 -0.5266 -0.4062 -0.2854 0.2379 1.0000

Columns 49 through 56
Modulador/demodulador COFDM


82

0.1682 -0.9605 -0.2379 0.4281 -0.0697 0.0475 0.1810 0.2379

Columns 57 through 64

0.2326 0.0493 -0.2721 -0.4759 -0.3237 0.1190 0.4919 0.4759

Columns 65 through 71

0.1039 -0.2872 -0.4009 -0.2379 -0.0128 0.1190 0.1810

En color rojo se ha resaltado la parte de la trama que constituye la seal de
sincronismo. Hay que decir, que esta seal de sincronismo ser modificada para el
programa final, donde los parmetros sern los que siguen:

SINCpre = 200;
SINCchi = 100;
SINCf0 = 0;
SINCf1 = .5;
SINCpos = 200;
sincro = [ zeros(1,SINCpre) chirp(0:(SINCchi-1), SINCf0, SINCchi, SINCf1)
zeros(1,SINCpos) ];
sincro = sincro/max(abs(sincro));

Se normaliza tanto la seal de sincronismo como la seal de muestras para que
ocupen el rango dinmico del transmisor.

























Modulador/demodulador COFDM


83
3.4.3 Receptor

El siguiente diagrama de bloques muestra las principales funciones de
MATLAB que conforman cada bloque del receptor as como los vectores o matrices
entrada y salida a estos bloques. Esto nos servir para explicar ms claramente el
funcionamiento conjunto del receptor COFDM programado.

RECEPTOR MATLAB












































Conversor
Serie/
Paralelo


Elimina
cin del
Intervalo
de Guarda

FFT

Detecta Seal
de
Sincronismo

Reduccin
del
Espectro


Igualador
de canal

Demodulador
QAM
Extrae
Supersmbolo
de
Entrenamiento

Conversor
Paralelo/
Serie

Decodificador
Convolu-
cional

Decodificador
Reed-
Solomon
rxDatos
rxMUE rxTrama
rxGUA rxTIE
rxESP rxCOM
rxCOM
rxPAR
rxSS
rxCOM
rxCC rxRS
qguard_ ser2par
fft_ redesp_
detec p2s vitdec
depuncture_unquant
rsdec
Modulador/demodulador COFDM


84
A continuacin se presenta el cdigo MATLAB del receptor completo:

function [totaldatosRX,rxSinProt,EspectroRX,ConstelacionRX] =
receptor(totaltramas,sincro,SINCss,GUAmue,ESPginf,ESPbanda,ESPgsup,ESPtam,
QAMm,QAMtam,CCtrellis,model,CCPtam,CCtam,RSn,RSk,RSm,BloqueRSTrama,txSS,RStam,
AUDIOfrec)


%%%%%%%%%%%%%%%%%%
% Deteccion de sincronismos
%%%%%%%%%%%%%%%%%%

cor = xcorr(totaltramas, sincro);
cor = cor((length(totaltramas)-length(sincro)+1):end);
SINCumbral=0.6*max(cor);

%figure(6)
x=1:length(cor);
line=ones(1,length(cor))*SINCumbral;
%plot(x,cor,x,line,'r'),title('Deteccion de sincronismos'),xlabel('Indice
%temporal n'),ylabel('Amplitud');
%legend('Correlacion con seal de sincronismo','Umbral de deteccion');


SINCtamtram = SINCss * ( GUAmue + 2 * ( ESPginf + ESPbanda + ESPgsup ) );

indice = 1;
detec = [];
while 1,
superan = find(cor(indice:end)>SINCumbral) + indice;

if length(superan) == 0
break
end

detec = [ detec superan(1) ];

indice = superan(1) + SINCtamtram;
end

rxSinProt = [];

%%%%%%%%%%%%%%%%%%
% Bucle del receptor
%%%%%%%%%%%%%%%%%%

totaldatosRX = [];
for inicio = detec
rxMUE = totaltramas(inicio:(inicio+SINCtamtram-1));
%figure(3)
esp=(fft(rxMUE));
f = 0:AUDIOfrec/(length(esp)/2-1)/2:AUDIOfrec/2;
%subplot(2,1,2),plot(f, 20*log(abs(esp(1:floor(length(esp)/2)))),'r');
%title('Espectro COFDMrecibido'),
%xlabel('Frecuencia(Hz)'),ylabel('Magnitud(dB)');

EspectroRX = 20*log(abs(esp(1:floor(length(esp)/2))));

%%%%%%%%%%%%%%%%%%
% Pasa de muestras a supersimbolos
%%%%%%%%%%%%%%%%%%

rxGUA = ser2par( rxMUE, GUAmue + 2 * ( ESPginf + ESPbanda + ESPgsup ) );




Modulador/demodulador COFDM


85
%%%%%%%%%%%%%%%%%%
% Quita guarda
%%%%%%%%%%%%%%%%%%

rxTIE = qguard_(rxGUA, GUAmue);

%%%%%%%%%%%%%%%%%%
% FFT
%%%%%%%%%%%%%%%%%%

rxESP = fft_(rxTIE);


%%%%%%%%%%%%%%%%%%
% Reduccion espectro
%%%%%%%%%%%%%%%%%%

rxCOM = redesp_(rxESP, ESPginf, ESPgsup);

% Quita padding
rxCOM = rxCOM(1:ESPtam);

%%%%%%%%%%%%%%%%%%
% Extrae SuperSimbolo Entrenamiento
%%%%%%%%%%%%%%%%%%

rxSS = rxCOM(1:ESPbanda);
rxCOM = rxCOM(ESPbanda+1:end);
%figure(2)
%subplot(1,3,2),plot(rxCOM,'.r');
%title('Constelacion recibida'),xlabel('Eje de fase'),ylabel('Eje de
%cuadratura');
%axis square;
%axis equal;
%grid on;

% Aplica el igualador
igualador = txSS./rxSS;
%figure(5)
%subplot(2,1,1),plot(abs(igualador));
%subplot(2,1,2),plot(phase(igualador));
for i = 1:size(rxCOM)
j = mod(i-1, size(igualador,1))+1;
rxCOM(i) = rxCOM(i) * igualador(j);
end

%figure(2)
%subplot(1,3,3),plot(rxCOM,'.g');
%title('Constelacion recibida'),xlabel('Eje de fase'),ylabel('Eje de
%cuadratura');
%axis square;
%axis equal;
%grid on;

ConstelacionRX = rxCOM;

%%%%%%%%%%%%%%%%%%
% Decodificacion QAM
%%%%%%%%%%%%%%%%%%

rxPAR = detec_(rxCOM, QAMm);
rxCC = p2s_(rxPAR);

% Quita padding
rxCC = rxCC(1:QAMtam);

rxSinProt = [rxSinProt rxCC];

Modulador/demodulador COFDM


86
%%%%%%%%%%%%%%%%%%
% Decodificacion Convolucional
%%%%%%%%%%%%%%%%%%

%rxRS = vitdec(rxCC, CCtrellis, 1, 'trunc', 'hard');

rxCC = depuncture_unquant(rxCC,model,CCPtam);
rxRS = vitdec(rxCC, CCtrellis, 1, 'trunc', 'unquant');


% Quita padding
rxRS = rxRS(1:CCtam);

%%%%%%%%%%%%%%%%%%
% Decodificacion RS
%%%%%%%%%%%%%%%%%%

% Pasa de 0s y 1s
rxRS = reshape(rxRS, BloqueRSTrama * RSn, RSm);
rxRS = bi2de(rxRS, 'left-msb')';

rxDatos = [];
j = 1;
for i=1:BloqueRSTrama
bloqueRS = rxRS(j:j+RSn-1);

bloqueGalois = gf(bloqueRS, RSm);

bloqueDatos = rsdec(bloqueGalois, RSn, RSk);

j = j + RSn;

rxDatos = [ rxDatos double(bloqueDatos.x) ];
end

%%%Quita el Padding
rxDatos = rxDatos(1:RStam);

%%%%%%%%%%%%%%%%%%
% Fin bucle del receptor
%%%%%%%%%%%%%%%%%%

totaldatosRX = [ totaldatosRX rxDatos ];

end

Se explican ahora, por bloques, las distintas funciones del receptor.

3.4.3.1 Deteccin de sincronismo

%%%%%%%%%%%%%%%%%%
% Deteccion de seal de sincronismo
%%%%%%%%%%%%%%%%%%

cor = xcorr(totaltramas, sincro);
cor = cor((length(totaltramas)-length(sincro)+1):end);

SINCtamtram = SINCss * ( GUAmue + 2 * ( ESPginf + ESPbanda + ESPgsup ) );

indice = 1;
detec = [];
while 1,
superan = find(cor(indice:end)>SINCumbral) + indice;

if length(superan) == 0
break
end
Modulador/demodulador COFDM


87

detec = [ detec superan(1) ];

indice = superan(1) + SINCtamtram;
end

Este es el primer bloque del receptor y se encargar de detectar la seal de
sincronismo de cada trama para poder demodular los datos correctamente. Como ya se
ha comentado, todo lo referente al sincronismo se va a explicar en el captulo 4 por lo
que no detallaremos aqu cmo funciona el cdigo de deteccin de sincronismo.

A continuacin se presenta el cdigo que extrae los datos de la trama recibida,
una vez nos hemos sincronizado a la misma.

>> inicio=detec;
>> rxMUE = tolastramas(inicio:(inicio+SINCtamtram-1));

rxMUE =

Columns 1 through 8

0.0281 0.0957 -0.4390 0.3249 0.5865 -0.2889 -0.1563 0.5089

Columns 9 through 16

-0.1379 -0.7766 -0.3872 0.2153 0.7273 0.7487 -0.4551 -0.7545

Columns 17 through 24

-0.0248 0.0912 0.1321 -0.4852 0.0298 0.7047 0.0341 -0.5401

Columns 25 through 32

-0.3826 -0.2451 0.4164 0.9333 -0.1247 -0.9278 -0.0298 0.3285

Columns 33 through 40

-0.0933 0.0815 0.1783 0.2359 0.1984 -0.0202 -0.3352 -0.4790

Columns 41 through 48

-0.2567 0.1958 0.5040 0.4093 0.0078 -0.3345 -0.3948 -0.1960

Columns 49 through 51

0 0.1382 0.1379


3.4.3.2 Conversor Serie/Paralelo

%%%%%%%%%%%%%%%%%%
% Pasa de muestras a supersimbolos
%%%%%%%%%%%%%%%%%%

[rxGUA] = ser2par( rxMUE, GUAmue + 2 * ( ESPginf + ESPbanda + ESPgsup ) );

El receptor, una vez que se ha sincronizado a la trama rxMUE, debe pasar este
vector de muestras a una matriz donde cada fila contenga un supersmbolo. Se trata en
definitiva de una conversin serie/paralelo pero no se ejecuta de igual forma que en el
transmisor porque el vector de entrada al bloque no es binario. Por eso, este bloque
ejecuta una funcin diferente llamada ser2par. Esta funcin recibe como parmetros de
entrada el vector de muestras rxMUE y el tamao de los supersmbolos (intervalo de
guarda ms dos veces el nmero de bandas con las que contamos para la transmisin).

El cdigo de la funcin ser2par se muestra a continuacin:
Modulador/demodulador COFDM


88

%Funcion que transforma un vector de entrada ser, a una matriz de tam
columnas.

function [par] = ser2par(ser, tam)

bloq = floor( length(ser) / tam);

par = [];

if bloq > 0,
par = reshape( ser(1:(bloq * tam)), tam, bloq).';
end

A diferencia de la funcin s2p_ del transmisor esta funcin no ejecuta la funcin
de MATLAB bi2de ya que el vector que recibe como entrada ya est en decimal. Se
puede ver que este cdigo lo que hace es calcular el nmero de supersmbolos que
contiene el vector serie y forma una matriz de tamao bloqxtam (esto es as ya que se
traspone (operador .) la matriz obtenida por la funcin reshape de MATLAB).

A continuacin se muestra un ejemplo de la ejecucin de este bloque donde
tomamos como vector de entrada el vector de salida del transmisor txMUE y los
parmetros se conservan los mismos del transmisor:

rxGUA =

Columns 1 through 8

0.0281 0.0957 -0.4390 0.3249 0.5865 -0.2889 -0.1563 0.5089
0.0912 0.1321 -0.4852 0.0298 0.7047 0.0341 -0.5401 -0.3826
0.1783 0.2359 0.1984 -0.0202 -0.3352 -0.4790 -0.2567 0.1958

Columns 9 through 16

-0.1379 -0.7766 -0.3872 0.2153 0.7273 0.7487 -0.4551 -0.7545
-0.2451 0.4164 0.9333 -0.1247 -0.9278 -0.0298 0.3285 -0.0933
0.5040 0.4093 0.0078 -0.3345 -0.3948 -0.1960 0 0.1382

Column 17

-0.0248
0.0815
0.1379

3.4.3.3 Eliminacin del intervalo de guarda

%%%%%%%%%%%%%%%%%%
% Quita guarda
%%%%%%%%%%%%%%%%%%

[rxTIE] = qguard_(rxGUA, GUAmue);

Este bloque tiene como funcin eliminar de cada supersmbolo o fila de la matriz
de entrada rxGUA el prefijo cclico que se aadi en el transmisor para aumentar la
proteccin del sistema frente a desvanecimientos por multitrayecto. A la salida del
bloque obtendremos la matriz rxTIE donde cada fila es un supersmbolo de muestras
temporales, ya sin intervalo de guarda y preparado para el siguiente bloque, el bloque
FFT.

La funcin que ejecuta este bloque es qguard_ y el cdigo de la misma se
presenta a continuacin:

Modulador/demodulador COFDM


89
%Funcion qguard_. Extrae el intervalo de guarda que se inserto en transmisor.

function [tie] = qguard_(par, IntGuar)

tie = par(:, (1:(size(par,2)-IntGuar)) + IntGuar);

Esta funcin recibe como parmetros de entrada la matriz de salida del bloque
serie/paralelo (par) y el nmero de muestras del intervalo de guarda (IntGuar) y
devuelve la matriz tie que tendr el mismo nmero de filas o supersmbolos pero con
IntGuar menos columnas, al haberse eliminado el prefijo cclico.

Un ejemplo del funcionamiento de este bloque es el siguiente, donde el intervalo
de guarda es de 1 muestra (el mismo que en el transmisor) y que el vector de entrada al
bloque es el que se obtuvo a la salida del conversor serie/paralelo:

rxTIE =

Columns 1 through 8

0.0957 -0.4390 0.3249 0.5865 -0.2889 -0.1563 0.5089 -0.1379
0.1321 -0.4852 0.0298 0.7047 0.0341 -0.5401 -0.3826 -0.2451
0.2359 0.1984 -0.0202 -0.3352 -0.4790 -0.2567 0.1958 0.5040

Columns 9 through 16

-0.7766 -0.3872 0.2153 0.7273 0.7487 -0.4551 -0.7545 -0.0248
0.4164 0.9333 -0.1247 -0.9278 -0.0298 0.3285 -0.0933 0.0815
0.4093 0.0078 -0.3345 -0.3948 -0.1960 0 0.1382 0.1379

Se puede comprobar que la matriz rxTIE ya no contiene la primera columna de
rxGUA puesto que se le ha indicado que el intervalo de guarda de cada supersmbolo es
una muestra.

3.4.3.4 FFT

%%%%%%%%%%%%%%%%%%
% FFT
%%%%%%%%%%%%%%%%%%

[rxESP] = fft_(rxTIE);

Este bloque va a realizar la transformada de Fourier mediante el algoritmo FFT a
la seal de tiempo (matriz rxTIE) que recibe como entrada. A la salida del bloque
obtendremos los coeficientes espectrales o nmeros complejos correspondientes (matriz
rxESP).

La funcin principal de este bloque es fft_ . Esta funcin realiza la FFT de cada
supersmbolo (la fft por filas de la matriz de entrada), es decir, por cada fila obtiene
una serie de nmeros complejos que se corresponden con el espectro en frecuencia de
cada supersmbolo. El cdigo de esta funcin se presenta a continuacin:

%Funcion fft_. Realiza la transformada de Fourier a la seal de tiempo que
%recibe como entrada (tie) y devuelve la matriz (esp) con los coeficientes de
%espectrales correspondientes.

function [esp] = fft_(tie)

esp = [];

for k = 1:size(tie,1),
esp = [ esp ; fft(tie(k,:)) ];
Modulador/demodulador COFDM


90
end

Un ejemplo del funcionamiento de este bloque es el siguiente, donde la seal en
tiempo que se le pasa como entrada es la obtenida a la salida del bloque de eliminacin
del intervalo de guarda rxTIE:

rxESP =

Columns 1 through 5

-0.2131 -0.0553 - 0.0161i -2.3367 - 1.6780i 2.1178 - 1.7956i -0.5157 + 2.5887i
-0.1681 -0.0223 - 0.0065i 1.0527 - 0.8054i -3.3268 + 2.0637i 1.1237 - 0.6231i
-0.1891 -0.0331 - 0.0109i 2.6177 + 1.3314i -0.7143 - 1.1357i -0.0090 - 0.0377i

Columns 6 through 10

1.2586 + 2.2212i 0.0551 - 0.1064i 0.1681 - 0.1498i 0.3600 0.1681 + 0.1498i
2.1304 + 1.7454i 0.0357 - 0.0434i 0.0812 - 0.0694i 0.1322 0.0812 + 0.0694i
0.0045 - 0.0438i 0.0227 - 0.0458i 0.0493 - 0.0511i 0.0882 0.0493 + 0.0511i

Columns 11 through 15

0.0551 + 0.1064i 1.2586 - 2.2212i -0.5157 - 2.5887i 2.1178 + 1.7956i -2.3367 + 1.6780i
0.0357 + 0.0434i 2.1304 - 1.7454i 1.1237 + 0.6231i -3.3268 - 2.0637i 1.0527 + 0.8054i
0.0227 + 0.0458i 0.0045 + 0.0438i -0.0090 + 0.0377i -0.7143 + 1.1357i 2.6177 - 1.3314i

Column 16

-0.0553 + 0.0161i
-0.0223 + 0.0065i
-0.0331 + 0.0109i

3.4.3.5 Reduccin del espectro

%%%%%%%%%%%%%%%%%%
% Reduccion espectro
%%%%%%%%%%%%%%%%%%

[rxCOM] = redesp_(rxESP, ESPginf, ESPgsup);

% Quita padding
rxCOM = rxCOM(1:ESPtam);

Recordemos que en el transmisor, antes del bloque IFFT, debamos realizar una
extensin del espectro para aadir la parte simtrica conjugada de este. Esto se haca
con la intencin de obtener, una vez realizada la IFFT, una seal real en tiempo. En el
receptor necesitaremos por tanto, un bloque que elimine esta parte simtrica conjugada
del espectro que se aadi, y esta es la funcin de este bloque, reduccin de espectro.

La funcin principal de este bloque es redesp_ cuyo cdigo en MATLAB se
muestra a continuacin:

%Funcion redesp_.Elimina la parte simetrica conjugada del espectro que se le
%pasa como entrada, teniendo en cuenta las bandas de guarda que se han
%utilizado en la comunicacion

function [com] = redesp_(esp, Ginf, Gsup)

com = [];

for k = 1:size(esp,1) %Para cada fila de la matriz esp

red = zeros(1, size(esp,2) / 2);
%formamos un vector con la mitad de columnas

Modulador/demodulador COFDM


91
red(1) = esp(k,1) + esp(k,size(esp,2)/2+1)* i;
%el primer elemento del vector de espectro reducido se forma tomando como
%parte real el primer elemento de la fila y como parte imaginaria el elemento
%mitad ms uno de la fila

red(2:(size(esp,2)/2)) = esp(k, 2:(size(esp,2) / 2));
%El resto de elementos de del vector red se forman tomando desde el segun-
%do elemento de la fila hasta el elemento mitad

red = red((1 + Ginf):(size(esp,2) / 2 - Gsup));
% Quita las bandas de guarda


com = [ com ; red.' ];
%com sera un vector columna. Una vez calculado el espectro reducido para %cada
%supersmbolo (fila) se va aadiendo al vector de salida pero traspuesto


end

Esta funcin toma como argumentos de entrada, el espectro ampliado de la
seal, el nmero de bandas de guarda inferiores y el nmero de bandas de guarda
superiores. Devuelve el vector com, formado por los coeficientes espectrales de los
supersmbolos.

A continuacin se muestra el resultado de la ejecucin de este bloque en
MATLAB, para ello se han tomado como parmetros de entrada, la matriz rxESP que se
obtuvo como resultado del bloque anterior, y ESPginf y ESPgsup con valor dos, es
decir en la comunicacin se han tomado dos bandas de guarda inferior y dos de guarda
superior.

rxCOM =

-2.3367 - 1.6780i
2.1178 - 1.7956i
-0.5157 + 2.5887i
1.2586 + 2.2212i
1.0527 - 0.8054i
-3.3268 + 2.0637i
1.1237 - 0.6231i
2.1304 + 1.7454i
2.6177 + 1.3314i
-0.7143 - 1.1357i
-0.0090 - 0.0377i
0.0045 - 0.0438i

Se puede comprobar que en este caso, los nmeros complejos que forman el
vector ya no son enteros, al haberse visto alterados por el canal de transmisin.

3.4.3.6 Extraccin del supersmbolo de entrenamiento

%%%%%%%%%%%%%%%%%%
% Extrae SuperSimbolo entrenamiento
%%%%%%%%%%%%%%%%%%

rxSS = rxCOM(1:ESPbanda);
rxCOM = rxCOM(ESPbanda+1:end);

Este bloque tiene como funcin principal extraer el supersmbolo de
entrenamiento que se aadi en el transmisor al principio de la trama, para poder
realizar ahora en el receptor la igualacin del canal. Este supersmbolo es un vector
columna de valores pseudoaleatorios conocido por ambos extremos de la comunicacin.
Modulador/demodulador COFDM


92
En este punto del receptor lo extraemos para ver los cambios de amplitud y fase que ha
sufrido y as poder corregir el vector de coeficientes complejos recibido, para que la
deteccin posterior sea correcta.

Este bloque guarda por un lado el supersmbolo de entrenamiento en rxSS, y por
otro el vector de complejos rxCOM.

Vemos un ejemplo del funcionamiento de este bloque, tomando como rxCOM el
que se ha obtenido a la salida del bloque anterior:

rxSS =

-2.3367 - 1.6780i
2.1178 - 1.7956i
-0.5157 + 2.5887i
1.2586 + 2.2212i


rxCOM =

1.0527 - 0.8054i
-3.3268 + 2.0637i
1.1237 - 0.6231i
2.1304 + 1.7454i
2.6177 + 1.3314i
-0.7143 - 1.1357i

A continuacin ya podemos pasar al bloque igualador de canal con la seal de
sincronismo extrada rxSS.

3.4.3.7 Igualador de canal

%%%%%%%%%%%%%%%%%
% Calcula y aplica el igualador
%%%%%%%%%%%%%%%%%

%calcula el igualador
igualador = txSS./rxSS;

%aplica el igualador a cada supersmbolo
for i = 1:size(rxCOM)
j = mod(i-1, size(igualador,1))+1;
rxCOM(i) = rxCOM(i) * igualador(j);
end

La funcin de este bloque es no es otra que calcular la desviacin que sufren los
smbolos al atravesar el canal. Para esto se transmite un supersmbolo conocido al
principio de cada trama, y en el receptor se calcula el igualador del canal dividiendo el
supersmbolo de entrenamiento transmitido entre el recibido.

Como muestra el cdigo MATLAB de este bloque, una vez conocida la
desviacin (igualador), no tenemos ms que multiplicar cada smbolo (de cada
supersmbolo) por su desviacin correspondiente. Con esto nos aseguramos que el
vector de salida del bloque sea apropiado antes de realizarse la deteccin.

A continuacin se muestra el resultado de ejecutar este bloque en MATLAB
siguiendo con el ejemplo de comunicacin considerado por lo que rxSS se ha obtenido
del bloque anterior y txSS es un parmetro de entrada del receptor:

Modulador/demodulador COFDM


93
igualador =

1.0310 - 0.1566i
1.0588 - 0.2154i
1.0821 - 0.3475i
1.1006 - 0.4117i


rxCOM =

0.9592 - 0.9952i
-3.0780 + 2.9015i
0.9994 - 1.0647i
3.0632 + 1.0439i
2.9073 + 0.9629i
-1.0009 - 1.0487i

Vemos que el nuevo rxCOM contiene valores complejos ms prximos a los de la
constelacin QAM de 4 bits/smbolo. Estos valores no son exactamente iguales a los
puntos de la constelacin (valores de la tabla QAM calculada) debido al ruido del canal,
pero al no ser este muy importante, son valores muy prximos a los exactos por lo que
la deteccin se podr llevar a cabo fcilmente.

3.4.3.8 Demodulador QAM

%%%%%%%%%%%%%%%%%%
% Demodulacion QAM
%%%%%%%%%%%%%%%%%%

[rxPAR] = detec_(rxCOM, QAMm);
[rxCC] = p2s_(rxPAR);

% Quita padding
rxCC = rxCC(1:QAMtam);

Este bloque recibe como entrada el vector rxCOM obtenido tras aplicarse la
igualacin de canal y el parmetro QAMm, que es el nmero de bits por smbolo que se
usan para la modulacin y demodulacin.

En primer lugar, realiza una deteccin de los smbolos que recibe como entrada
obtenindose una matriz de valores binarios que representan los puntos de la
constelacin correspondientes.

A continuacin realiza una conversin de esta matriz a un vector fila y
finalmente elimina el relleno que pudiese contener este vector. A la salida del bloque
obtenemos el vector binario fila rxCC preparado para la decodificacin convolucional.

El cdigo MATLAB de la funcin que realiza la deteccin se muestra a
continuacin:

%Funcion detec_. Realiza la deteccion de los simbolos que se enviaron.
%Recibe como parametros de entrada el vector con los coeficientes complejos y
%el numero de bits por cada simbolo de la constelacion y devuelve un matriz
%binaria donde cada fila representa el valor del smbolo enviado

function [par] = detec_(com, BitSimb)

iBits = floor(BitSimb/2); %bits que se tomaron para el eje de fase
qBits = ceil(BitSimb/2); %bits que se tomaron para el eje de cuadratura

par = [];
Modulador/demodulador COFDM


94

ifron = (0:2^iBits - 2) * 2 - (2^iBits - 2); %umbrales de decision en i
qFron = (0:2^qBits - 2) * 2 - (2^qBits - 2); %umbrales de decision en q

for k = 1:size(com,1), %para cada fila de com o cada simbolo


iLin = quantiz(real(com(k)),ifron); %region en que se encuentra segun i
qLin = quantiz(imag(com(k)),qFron); %region en que se encuentra segun q

%pasa de la posicion (lin) al valor gray en binario
i = de2bi(lin2gray_(iLin),'left-msb');
q = de2bi(lin2gray_(qLin),'left-msb');

par = [ par ; zeros(1,iBits-length(i)) i zeros(1,qBits-length(q)) q ];
%se rellena con ceros hasta completar el numero de bits de cada eje
end

Esta funcin detecta los puntos de la constelacin que se transmitieron. Para
ello, tiene en cuenta, en primer lugar, el nmero de bits que se asignaron para la
codificacin de cada eje y calcula los valores de los umbrales o fronteras de las regiones
de decisin para cada componente (fase y cuadratura). A continuacin, para cada fila de
la matriz o smbolo, calcula la regin en la que se encuentra dicho smbolo haciendo uso
de la funcin de MATLAB quantiz . Esta funcin es de la forma:

indx=quantiz(sig,partition)

y produce un ndice de cuantizacin indx de la seal de entrada sig basndose en los
puntos de decisin de partition. Cada elemento de indx es uno de los N enteros en el
rango [0:N-1]. partition es un vector de tamao N-1 estrictamente ordenado de forma
ascendente que especifica los lmites o umbrales.

Finalmente, una vez conocida la posicin del punto de la constelacin, se pasa a
su codificacin gray en binario, rellenndose el valor con ceros, en caso de que sea
necesario antes de introducirlo como fila de la matriz par. Esta matriz contiene los
valores de cada smbolo.

Se muestra a continuacin el cdigo MATLAB de la funcin lin2gray_.

%Funcion lin2gray_. Pasa un numero en decimal a su codificacion gray.

function gray = lin2gray_(lin)

bin = de2bi(lin,'left-msb'); %pasa a binario

invierte = 0;
new_bin = [];

for k = 1:length(bin),
if invierte
new_bin(k) = ~ bin(k); %realiza la not del bit correspondiente
else
new_bin(k) = bin(k);
end
if new_bin(k)
invierte = ~ invierte; %invierte pasa de 0 a 1 o viceversa
end
end

gray = bi2de(bin,'left-msb'); %pasa a numero
Modulador/demodulador COFDM


95

Esta funcin es la inversa de la funcin comentada en el transmisor gray2lin_,
es decir, esta funcin realiza la codificacin gray de un nmero decimal. La funcin, en
primer lugar, pasa el nmero a codificar a binario. Al igual que ocurra en lin2gray_,
invierte ser la bandera que indique si hay que invertir el bit o se queda tal cual. El
vector new_bin almacenar el vector

El cdigo MATLAB de la funcin que realiza la conversin paralelo serie se
muestra a continuacin:

%Funcion p2s_.Funcion que serializa una matriz que se le pasa como entrada
%(par). La salida sera el vector fila (ser).

function [ser] = p2s_(par)

%Trasponemos la matriz par, ya que reshape toma los elementos por columnas
%Forma un vector fila con todos los elementos de la matriz par
ser = reshape( par.', 1, size(par,1) * size(par,2) );


Continuando con el ejemplo que se est desarrollando, el vector de entrada a este
bloque ser el obtenido a la salida del bloque igualador de canal y se le pasar como
parmetro de entrada a la funcin detec_ .Esta funcin recibe tambin como argumento
de entrada el parmetro general QAMm, es decir el nmero de bits por smbolo que usa la
modulacin QAM:

rxPAR =

1 1 0 1
0 0 1 0
1 1 0 1
1 0 1 1
1 0 1 1
0 1 0 1

rxCC =

Columns 1 through 14

1 1 0 1 0 0 1 0 1 1 0 1 1 0

Columns 15 through 24

1 1 1 0 1 1 0 1 0 1

3.4.3.9 Decodificador Convolucional

%%%%%%%%%%%%%%%%%%
% Decodificacion Convolucional
%%%%%%%%%%%%%%%%%%

rxCC = depuncture_unquant(rxCC,model,CCPtam);
rxRS = vitdec(rxCC, CCtrellis, 1, 'trunc', 'unquant');

% Quita padding
rxRS = rxRS(1:CCtam);

Este bloque realiza la decodificacin convolucional del vector de entrada rxCC
utilizando un decodificador de Viterbi y devuelve en rxRS el vector decodificado. Antes
de realizar la decodificacin se debe realizar la operacin inversa al perforado del
transmisor ya que el decodificador Viterbi supone una tasa 1/2. Este bloque toma
Modulador/demodulador COFDM


96
adems el parmetro CCtrellis, es decir, la estructura trellis que utiliza tambin el
transmisor a la hora de la codificacin convolucional.

La primera operacin que realiza este bloque es, por tanto, deshacer el perforado
del cdigo. La funcin que la lleva a cabo es la siguiente:

%Funcin depunture_unquant. Realiza el rellenado del vector rxCC para obtener
%un vector de tasa 1/2.

function rxCOD = depuncture_unquant(rxCC,model,tam)
j = 1;
k = 1;
rxCOD = [zeros(1,tam)];
for i=1:length(rxCOD)
if model(k)==1
if(rxCC(j)),
rxCOD(i)=-1;
else
rxCOD(i)=+1;
end
j=j+1;
end
if k==length(model)
k=1;
else
k=k+1;
end
end

Esta funcin recibe como parmetros de entrada el vector rxCC, el modelo
correspondiente a la tasa de codificacin empleada y el tamao del vector txCOD, ya que
ser este tamao el que debe tener el vector de salida, antes de realizarse la
decodificacin Viterbi. El vector rxCOD que se obtiene a la salida contendr 1s en las
posiciones donde rxCC tena 0s y -1s en las posiciones donde tena un 1 pero hay que
tener en cuenta el modelo e intercalar ciertas posiciones con relleno. Este relleno se har
con ceros.

Veamos con un ejemplo el funcionamiento de esta funcin:
>> rxCC
rxCC =
1 1 1 0 1 0 0 0 0 0 1 1
>> model
model =
1 1 0 1 1 0
>> tam = length(txCOD)
tam =

18
>> rxCOD = depuncture_unquant(rxCC,model,tam)
rxCOD =

Columns 1 through 12

-1 -1 0 -1 1 0 -1 1 0 1 1 0

Columns 13 through 18

1 1 0 -1 -1 0

El mtodo usado para deshacer el perforado podra ser distinto, ya que cada
estndar define el ms conveniente en cada caso. Se ha elegido este porque es el
Modulador/demodulador COFDM


97
apropiado en la decodificacin Viterbi tipo unquant que ser la que se use y ms
adelante se explicar las ventajas que tiene esta eleccin.

La funcin de MATLAB que se encarga de la decodificacin convolucional es
vitdec. Esta funcin tiene la forma:

decoded = vitdec(code,trellis,tblen,opmode,dectype)

Esta funcin decodifica el vector code usando el algoritmo de Viterbi. La
estructura de MATLAB trellis especifica el codificador convolucional que produjo
code. tblen es un escalar entero positivo que indica la profundidad de traceback de la
estructura. La cadena opmode indica el modo de operacin del decodificador y sus
suposiciones sobre la operacin del codificador correspondiente. Las opciones se
muestran a continuacin:

trunc: supone que el codificador ha empezado en el estado todo-ceros. El
decodificador vuelve hacia atrs desde el estado con la mejor mtrica.
term: supone que el codificador ha empezado y terminado en el estado todo-
ceros. El decodificador vuelve hacia atrs desde el estado todo-ceros.
cont: supone que el codificador ha empezado en el estado todo-ceros. El
decodificador vuelve hacia atrs desde el estado con la mejor mtrica. Hay un
retraso igual a tblen smbolos antes de que el primer smbolo decodificado
aparezca a la salida.

La cadena dectype indica el tipo de decision que toma el decodificador, y tiene
influencia en el tipo de datos que el decodificador espera en code (palabra codificada).
Las opciones de estos parmetros son:

unquant: code contiene valores de entrada reales, donde 1 representa un cero
lgico y 1 representa el 1 lgico.
hard: code contiene valores de entrada binarios.
soft: para una decodificacin por decisin suave es necesario tambin el
parmetro nsdec. code est formado por enteros entre 0 y 2^nsdec-1, donde 0
representa el 0 de mayor probabilidad y 2^nsdec-1 representa el 1 de mayor
probabilidad.

En el decodificador que se ha implementado se ha elegido un modo de operacin
trunc (que tiene menos restricciones), una tblen de 1 y una decodificacin con
decisin unquant. La decodificacin de tipo unquant es bsicamente una
decodificacin dura ya que decide los valores 1 y -1 como 0 y 1 respectivamente, solo
que cuando aparece un 0 no decide con total probabilidad su valor.

No se ha elegido la decodificacin tipo soft que sera la ms apropiada en
sistemas OFDM porque requerira una estimacin de la potencia del ruido en cada
banda y usndose el tipo unquant se obtiene una solucin correcta tambin, en este
caso.

La ltima lnea de cdigo de este bloque se limita a eliminar el relleno antes de
enviar el vector al decodificador Reed-Solomon. Para esto utiliza el parmetro de
entrada al receptor, CCtam.
Modulador/demodulador COFDM


98


A continuacin se muestra el resultado que da MATLAB al ejecutar este bloque.
Los parmetros se han tomado siguiendo el ejemplo que se est desarrollando, es decir,
el vector rxCC ser el que se ha obtenido en el ejemplo del bloque anterior:

rxCC =

Columns 1 through 14

1 1 0 1 0 0 1 0 1 1 0 1 1 0

Columns 15 through 24

1 1 1 0 1 1 0 1 0 1

Tras deshacer el perforado:

rxCC =

Columns 1 through 14

-1 -1 0 1 0 -1 0 1 1 0 -1 0 1 0

Columns 15 through 28

-1 -1 0 1 0 -1 0 -1 1 0 -1 0 -1 0

Columns 29 through 42

-1 1 0 -1 0 -1 0 1 -1 0 1 0 -1 0

Tras la decodificacin de Viterbi:

rxRS =

Columns 1 through 14

1 0 0 1 1 1 0 1 0 0 0 1 0 1

Columns 15 through 21

1 0 0 0 1 0 1

3.4.3.10 Decodificador Reed-Solomon

%%%%%%%%%%%%%%%%%%
% Decodificacion RS
%%%%%%%%%%%%%%%%%%

% Pasa de 0s y 1s
rxRS = reshape(rxRS, BloqueRSTrama * RSn, RSm);
rxRS = bi2de(rxRS, 'left-msb')';

rxDatos = [];
j = 1;
for i=1:BloqueRSTrama
bloqueRS = rxRS(j:j+RSn-1);

bloqueGalois = gf(bloqueRS, RSm);

bloqueDatos = rsdec(bloqueGalois, RSn, RSk);

j = j + RSn;

rxDatos = [ rxDatos double(bloqueDatos.x) ];
end

Modulador/demodulador COFDM


99
Este bloque es el ltimo del receptor y lleva a cabo la decodificacin Reed-
Solomon del vector de entrada rxRS. A la salida de este bloque obtendremos, por tanto,
el vector de datos recibidos.

La funcin que realiza la decodificacin Reed-Solomon de cada bloque de la
trama recibido es rsdec y toma la forma:

decoded = rsdec(code,n,k)

rsdec intenta decodificar la seal recibida en code usando un proceso de
decodificacin Reed-Solomon [n,k] con el generador polynomial. code es una
estructura Galois de smbolos de m bits. Cada fila de n elementos de code representa
una palabra de cdigo sistemtica, donde los smbolos de paridad estn al final y el
smbolo ms a la izquierda es el ms significativo. n es como mximo 1 2
m
. Si n no es
exactamente 1 2
m
, entonces rsdec supone que code es una versin degradada de un
cdigo acortado (shortened code).

En la estructura Galois decodificada, cada fila representa la tentativa de
decodificar la fila correspondiente de code. Ocurre un fallo de decodificacin si una fila
de code contiene ms de (n-k)/2 errores. En este caso, rsdec forma la correspondiente
fila de decoded simplemente eliminando n-k smbolos del final de la fila de code.

El siguiente ejemplo codifica tres palabras de informacin usando un codificador
Reed-Solomon (7,3). Se degradar despus el cdigo introduciendo un error en la
primera palabra de cdigo, dos errores en la segunda palabra de cdigo, y tres errores en
la tercera palabra de cdigo. Despus rsdec intenta decodificar el cdigo degradado.

m = 3; % Numero de bits por simbolo
n = 2^m-1; k = 3; % Longitud de las palabras para code
msg = gf([2 7 3; 4 0 6; 5 1 1],m); % Tres filas de smbolos de m-bits
code = rsenc(msg,n,k);
errors = gf([2 0 0 0 0 0 0; 3 4 0 0 0 0 0; 5 6 7 0 0 0 0],m);
noisycode = code + errors;
[dec,cnumerr] = rsdec(noisycode,n,k)

dec = GF(2^3) array. Primitive polynomial = D^3+D+1 (11 decimal)

Array elements =

2 7 3
4 0 6
4 0 0


cnumerr =

1
2
-1

La salida muestra que rsdec corrige con xito los errores en las dos primeras
palabras de cdigo y recupera las dos primeras palabras de informacin originales. Sin
embargo, un cdigo Reed-Solomon (7,3) puede corregir como mximo dos errores de
cada palabra, por lo tanto rsdec no puede recuperar la tercera palabra de informacin.
Los elementos del vector cnumerr indica el nmero de errores corregidos en las dos
primeras palabras y tambin indica el fallo de decodificacin de la tercera palabra.
Modulador/demodulador COFDM


100

Para finalizar presentamos el resultado que se obtiene de ejecutar este bloque de
decodificacin Reed-Solomon, cuando el cdigo usado es (7,3) y el vector a decodificar
(code) es rxRS.

rxRS =

Columns 1 through 14

1 0 0 1 1 1 0 1 0 0 0 1 0 1

Columns 15 through 21

1 0 0 0 1 0 1


rxRS =

1 1 1
0 0 0
0 0 0
1 0 0
1 1 1
1 0 0
0 1 1


rxRS =

7 0 0 4 7 4 3


bloqueRS =

7 0 0 4 7 4 3


bloqueGalois = GF(2^3) array. Primitive polynomial = D^3+D+1 (11 decimal)

Array elements =

7 0 0 4 7 4 3


bloqueDatos = GF(2^3) array. Primitive polynomial = D^3+D+1 (11 decimal)

Array elements =

7 0 0


rxDatos =

7 0 0


rxDatos =

7 0

Se puede comprobar que el vector obtenido es idntico al vector de datos transmitidos
por lo que la comunicacin de la trama se ha realizado de forma correcta y con cero
errores, que es lo que se pretenda.

SER =

0


BERSinProt =

0


101


Captulo 4

Sincronizacin

Para lograr una deteccin y demodulacin precisa de la seal OFDM es
necesario que las subportadoras sean ortogonales. Variaciones en el oscilador de la
portadora, la frecuencia de muestreo o la temporizacin de smbolo alteran la
ortogonalidad del sistema y complican la sincronizacin.

Mientras que variaciones de la frecuencia de muestreo inferiores a 50 ppm
tienen un ligero efecto en el rendimiento del sistema, la temporizacin de smbolo y los
offsets de frecuencia pueden causar interferencia entre smbolos (ISI) e interferencia
entre portadoras (ICI) por lo que deben ser tenidos en cuenta.

Uno de los argumentos en contra de OFDM es este, ya que se trata de una
modulacin muy sensible a errores de sincronizacin, en particular, a errores de
frecuencia. Aqu se hace una revisin de estos tres problemas de la sincronizacin: la
sincronizacin de smbolo, de frecuencia de portadora y de frecuencia de muestreo.
Tambin, se tratan los efectos de los offsets de fase y del ruido de fase.

4.1 Sincronizacin de smbolo

4.1.1 Errores de temporizacin

En los sistemas OFDM se le presta mucha atencin a la sincronizacin de
smbolo. Sin embargo, usando el periodo de guarda (prefijo cclico), los requerimientos
temporales de algn modo se relajan. Una dispersin temporal da lugar a una rotacin
de fase de las subportadoras. Esta rotacin de fase es ms acusada en los extremos de la
banda de frecuencia. Si un error temporal es lo suficientemente pequeo como para
mantener la respuesta impulsiva del canal dentro del prefijo cclico, la ortogonalidad de
las subportadoras se mantiene. En este caso el retraso temporal del smbolo puede ser
visto como un desplazamiento de fase introducido por el canal, y las rotaciones de fase
se pueden estimar con un estimador de canal. Si el desplazamiento en tiempo es mayor
que el prefijo cclico, entonces tendremos ISI.

Hay dos mtodos principales de sincronizacin en tiempo: uno basado en seales
piloto y otro basado en el prefijo cclico. Warner y Leung [11] sugirieron un algoritmo
para resolver este problema. Ellos usan un esquema donde la seal OFDM se transmite
mediante una modulacin en frecuencia (FM). El transmisor codifica con fases y
amplitudes conocidas un nmero de subcanales reservados. La tcnica de
Sincronizacin


102
sincronizacin, con modificaciones, se aplica a las seales OFDM transmitidas
mediante modulacin de amplitud. Su algoritmo consta de tres fases: deteccin de
potencia, sincronizacin grosera y sincronizacin fina.

La primera fase (deteccin de potencia) detecta si la seal OFDM est presente,
midiendo la potencia recibida y comparndola con un umbral. La segunda fase
(deteccin grosera) se usa para adquirir un alineamiento de sincronizacin con un error
de 0.5 muestras. Esta desviacin no es aceptable, pero esta fase sirve para simplificar
el algoritmo de seguimiento (que puede asumir que el error de temporizacin es
pequeo).

La sincronizacin grosera se realiza correlando la seal recibida con una copia
de la seal de sincronizacin transmitida. Para encontrar el pico de esta correlacin con
suficiente exactitud, se usa un filtro digital para proporcionar valores interpolados a
cuatro veces la tasa de datos original. En la ltima fase (sincronizacin fina) de la
sincronizacin, los subcanales con seales piloto se ecualizan con el canal estimado
obtenido de los pilotos. Como la sincronizacin grosera garantiza que el error de
temporizacin es menor que 0.5, la respuesta impulsiva del canal est dentro del
prefijo cclico. Los errores de fase que permanecen en los subcanales piloto se deben al
error de temporizacin y pueden ser estimados mediante regresin lineal.

Hay tambin algoritmos basados en el prefijo cclico [12]. La diferencia entre
muestras recibidas separadas por N muestras se forma como ) ( ) ( N k r k r + . Si una de
las muestras pertenece al prefijo cclico y la otra al smbolo OFDM del que se copia, la
diferencia debera ser pequea. De otra forma, la diferencia (entre dos variables
aleatorias incorreladas) tendr el doble de potencia, y por tanto, de media, ser mayor.
Enventanando esta diferencia con una ventana rectangular con la misma longitud que el
prefijo cclico, la seal de salida tiene un mnimo en el comienzo de un nuevo smbolo
OFDM.

Podemos maximizar la funcin de probabilidad dada la seal observada ) (k r ,
con un error de temporizacin y de frecuencia (esta funcin se obtiene en [13,14]) para
obtener simultneamente una estimacin de ambos offsets, el de tiempo y el de
frecuencia. Si no tenemos en cuenta el offset de frecuencia la funcin de probabilidad
con respecto al offset de temporizacin es

2
1
) ( ) (
1
)} ( * ) ( Re{
1
2
) ( N k r k r
SNR
SNR
N k r k r
SNR
L
k
+
+
+
+
=

+
=

[4.1]

Para SNRs medias y altas (SNR>>1) un estimador de mxima probabilidad
(ML) basado en ) ( aplica esencialmente un promediado mvil a el trmino
2
) ( ) ( N k r k r + . Sin embargo para valores bajos de SNR tambin debe tenerse en
cuenta el trmino de correlacin cruzada ) ( * ) ( N k r k r + . Se puede usar tambin un
procedimiento similar [15] con la diferencia de que las partes de fase y cuadratura de la
seal observada ) (k r se cuantizan con 1 bit antes de estimar . Esto nos lleva a un
sincronizador de smbolo de baja complejidad y que puede ser usado en un modo de
adquisicin.

Sincronizacin


103
La sincronizacin en el enlace ascendente es ms difcil que en el enlace
descendente o en difusin. Esto es debido al hecho de que habr un offset separado para
cada usuario. Todava no se le ha dado mucha importancia a este problema. Sin
embargo, se usa una secuencia de acceso aleatorio para sincronizar la estacin base con
la mvil.

4.1.2 Sincronizacin de trama y smbolo en el sistema implementado

La sincronizacin temporal ser fundamental para el correcto funcionamiento
del sistema de transmisin y, como ya se ha visto, en sistemas OFDM es incluso ms
compleja usndose algoritmos que se basan en seales piloto o el prefijo cclico.

El sistema de transmisin que se ha implementado en este proyecto utiliza como
medio de transmisin el cable de audio, que introduce poco ruido y tiene una
caracterstica frecuencial prcticamente ideal, como ya se ha visto en el captulo 2. Esto
nos permite sincronizar el sistema de una forma ms sencilla, ya que nos limitaremos a
sincronizarnos a cada trama.

La sincronizacin de trama se lleva a cabo mediante la insercin, al comienzo de
cada trama, de una seal de sincronismo en el transmisor. En el receptor se detectar
esta seal de cada trama realizando una correlacin cruzada entre la seal de datos
recibida y la seal de sincronismo que es conocida, ya que al hacer esto se obtienen
picos al comienzo de cada trama. La seal de sincronismo utilizada es la seal chirp,
seal generadora de un coseno con barrido en frecuencia, que se ha escogido por sus
buenas caractersticas a la hora de la correlacin.

Una vez sincronizados a la trama, la sincronizacin de smbolo (supersmbolo en
este caso) se har tomndose las muestras correspondientes a cada supersmbolo ya que
el tamao de cada uno de estos es conocido por el receptor, es decir, se realiza lo que
antes se ha denominado como sincronizacin grosera.

Como ya se ha comentado, este tipo de sincronizacin puede lograr un
alineamiento con un error de 0.5 muestras por lo que en la mayora de los casos habr
que realizar posteriormente una sincronizacin fina debido a que los relojes del
transmisor y receptor estn desfasados al muestrear y esto provocar un giro de la
constelacin lo que producir numerosos errores en la comunicacin. En nuestro caso,
como se ver en el apartado 4.2, no existe desjuste en las frecuencias de muestreo del
transmisor y receptor por lo que una sincronizacin grosera ser suficiente para obtener
un funcionamiento correcto del modem.

Dado que el desvo de alineamiento de 0.5 muestras se produce en todos los
supersmbolos, y este ser bastante importante en frecuencias altas del espectro,
usaremos el supersmbolo de entrenamiento para corregir este error en el igualador. Por
lo tanto, tras el bloque igualador todos los smbolos estarn en su posicin correcta
aunque no se correspondan con los puntos exactos de la constelacin debido al ruido del
canal.
Sincronizacin


104
-5 0 5
-4
-2
0
2
4
Constelacion transmitida
Eje de fase
E
j
e

d
e

c
u
a
d
r
a
t
u
r
a
-2 0 2
-2
-1
0
1
2
Constelacion recibida pre-igualador
Eje de fase
E
j
e

d
e

c
u
a
d
r
a
t
u
r
a
-5 0 5
-4
-2
0
2
4
Constelacion recibida pos-igualador
Eje de fase
E
j
e

d
e

c
u
a
d
r
a
t
u
r
a

Figura 4.1. En color rojo se representa la constelacin recibida antes de la ecualizacin
y en verde despus de la ecualizacin. Se puede observar que el giro de la constelacin
producido por el desfase de 0.5 muestras es corregido por el igualador.

A continuacin se muestra el cdigo MATLAB de la parte de sincronizacin del
sistema de transmisin implementado:

% Parametros de configuracion de sincronismo

SINCpre = 10;
SINCchi = 100;
SINCf0 = 0;
SINCf1 = .5;
SINCpos = 10;
SINCk = 1;
sincro = [ zeros(1,SINCpre) SINCk * chirp(0:(SINCchi-1), SINCf0, SINCchi,
SINCf1) zeros(1,SINCpos) ];

%En el transmisor

%%%%%%%%%%%%%%%%%%
% Aade seal sincronismo
%%%%%%%%%%%%%%%%%%

txMUE = [ sincro txMUE];

%En el receptor

%%%%%%%%%%%%%%%%%%
% Deteccion de sincronismos
%%%%%%%%%%%%%%%%%%

cor = xcorr(totaltramas, sincro);
cor = cor((length(totaltramas)-length(sincro)+1):end);

SINCumbral=0.8*max(cor)

%Se utiliza el tamao de la trama para avanzar ms rpido en el bucle de
%deteccin de las seales de sincronismo
SINCtamtram = SINCss * ( GUAmue + 2 * ( ESPginf + ESPbanda + ESPgsup ) );

indice = 1;
detec = [];
while 1,
superan = find(cor(indice:end)>SINCumbral) + indice;

if length(superan) == 0
break
end
Sincronizacin


105

detec = [ detec superan(1) ];

indice = superan(1) + SINCtamtram;
end

%%%%%%%%%%%%%%%%%%
% Bucle del receptor
%%%%%%%%%%%%%%%%%%
totaldatosRX = [];
for inicio = detec
rxMUE = totaltramas(inicio:(inicio+SINCtamtram-1));

%%%%%%%%%%%%%%%%%%
% Pasa de muestras a supersimbolos
%%%%%%%%%%%%%%%%%%
rxGUA = ser2par( rxMUE, GUAmue + 2 * ( ESPginf + ESPbanda + ESPgsup ) );

La seal de sincronismo como se ha comentado es una seal chirp, esta seal se
puede generar en MATLAB fcilmente y tiene la siguiente forma:

y = chirp(t,f0,t1,f1)

Esta funcin genera muestras de una seal de barrido en frecuencia lineal en los
instantes definidos en el vector t. La frecuencia instantnea en el tiempo 0 es f0 y la
frecuencia instantnea f1 se consigue en t1.

Se puede ver que la amplitud de la seal chirp es un parmetro que se podr
modificar segn los parmetros de transmisin escogidos.

La seal de sincronismo est formada por una secuencia de ceros al comienzo, la
seal chirp en medio, y una secuencia de ceros al final. Estos ceros no tienen otra
finalidad que la de aadir una cierta guarda para separar las tramas. Se observa que el
transmisor no hace ms que aadir la seal de sincronismo al comienzo de cada trama
antes de enviarla por el canal de transmisin.

900 950 1000 1050 1100 1150 1200 1250 1300
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
Trama con seal de sincronismo
Indice temporal n
A
m
p
l
i
t
u
d


Figura 4.2. Esta figura se ha hecho un zoom de una trama con su seal de
sincronismo donde se aprecia la forma de la seal chirp
Sincronizacin


106
0 500 1000 1500 2000 2500 3000 3500
-1
-0.5
0
0.5
1
Tramas transmitidas por el canal
Indice temporal n
A
m
p
l
i
t
u
d
2.15 2.2 2.25 2.3 2.35 2.4 2.45 2.5
x 10
4
-1
-0.5
0
0.5
1
Tramas recibidas tras el canal
Indice temporal n
A
m
p
l
i
t
u
d

Figura 4.3. Distintas tramas separadas por su seal de sincronismo

Se puede observar que tanto las tramas como la seal de sincronismo estn
normalizadas a la unidad para ajustarse al rango dinmico del transmisor.

El receptor lleva a cabo la deteccin de las diversas seales de sincronismo. En
primer lugar realiza la correlacin de la seal recibida formada por todas las tramas
transmitidas con la seal de sincronismo. Con esto obtiene mximos al comienzo de
cada trama como se puede ver en la siguiente figura:



















Figura 4.4. Deteccin de las seales de sincronismo
0 2 4 6 8 10 12 14 16
x 10
4
-10
-5
0
5
10
15
20
25
30
35
Deteccion de sincronismos
Indice temporal n
A
m
p
l
i
t
u
d
Correlacion con seal de sincronismo
Umbral de deteccion
Sincronizacin


107

A continuacin el receptor toma un umbral de decisin
7
para poder detectar las
seales de sincronismo. El siguiente bucle almacena en la variable detec las posiciones
temporales de las seales de sincronismo que se han detectado. Una vez detectadas estas
seales se van tomando las tramas de la seal recibida a partir de las posiciones
indicadas en detec y tomndose un tamao de trama SINCtamtram. Seguidamente se
forma una matriz donde cada fila es un supersmbolo, ya que el tamao de los mismos
es conocido para el receptor por lo que ya puede comenzar el proceso de demodulacin.

4.1.3 Ruido de fase de la portadora

El ruido de fase de la portadora lo causan las imperfecciones en los osciladores
del transmisor y el receptor. Para canales selectivos en frecuencia, no se puede hacer
una distincin entre la rotacin de fase introducida por un error de temporizacin y un
offset de fase de la portadora [16]. En un estudio realizado del impacto del ruido de fase
de la portadora [17] se modela este como un proceso de Wiener ) (t con 0 )} ( { = t E y
t t t t E 4 } )) ( ) ( {(
2
0 0
= + , donde (en Hz) denota la anchura de lnea lateral del
espectro densidad de potencia Lorentziano del generador de portadoras de libre
ejecucin. La degradacin de la SNR, i.e., el aumento de la SNR necesario para
compensar el error, se puede aproximar por

0
4
10 ln 6
11
) (
N
E
W
N dB D
s
|
.
|

\
|


[4.2]

donde W es el ancho de banda y
0
N E
s
es la SNR por smbolo. Notar que la
degradacin aumenta con el nmero de portadoras. Debido a las rpidas variaciones del
ruido de fase, puede causar graves problemas.

4.2 Sincronizacin de la frecuencia de muestreo

La seal continua en tiempo recibida se muestrea en unos instantes determinados
por el reloj del receptor. Hay dos formas de tratar este desajuste de la frecuencia de
muestreo. En sistemas de muestreo sincronizado un algoritmo de temporizacin
controla un cristal oscilador controlado por tensin para alinear el reloj del receptor con
el reloj del transmisor. El otro mtodo es el muestreo no sincronizado donde la tasa de
muestreo permanece fija, lo que requiere un post-procesado en el dominio digital.

El efecto de un offset en la frecuencia del reloj es doble: la componente de seal
til se rota y atena y adems, se introduce ICI (interferencia entre portadoras). Se ha
investigado el rendimiento de un sistema OFDM con muestreo no sincronizado [18] y
se muestra que estos sistemas son mucho ms sensibles a offset de frecuencia,
comparados con los sistemas de muestreo sincronizado. Para los sistemas de muestreo
no sincronizado resulta que la degradacin (en dB) debida al offset de muestreo de

7
Existen tarjetas de sonido que invierten la polaridad de la seal, por lo que la grfica anterior aparecera
invertida. En las pruebas que se han realizado en PCs con este tipo de tarjetas no ha habido problemas de
sincronizacin, pero posiblemente haya casos en que s falle, por lo que en estos casos habr que cambiar
el programa inviertendose la seal antes de realizarse la deteccin de las seales de sincronismo
Sincronizacin


108
frecuencia depende del cuadrado del ndice de la portadora y del cuadrado del offset de
la frecuencia relativa.

4.2.1 Sincronizacin de la frecuencia de muestreo en el sistema
implementado

En el diseo y realizacin de un sistema de transmisin es fundamental tener en
cuenta la posible desviacin que puede ocurrir entre la frecuencia de muestreo del
transmisor y el receptor, ya que esta desviacin puede provocar que la comunicacin se
realice de forma incorrecta y con una alta tasa de errores.

En el sistema de transmisin que se est usando para la simulacin de la
modulacin COFDM se utiliza la tarjeta de sonido en modo full-duplex (o dos tarjetas
de sonido distintas en el caso de utilizar dos ordenadores) y es con ella con la que se
transmiten y reciben los datos. La tarjeta de sonido posee dos convertidores D/A y A/D
para la transmisin y recepcin respectivamente, y cada uno de estos realizar la
conversin a la tasa que indica la frecuencia de muestreo. Las tarjetas de sonidos
actuales poseen la capacidad de poder generar sonidos utilizando una amplia gama de
frecuencias de muestreo, es decir se puede variar la frecuencia de los osciladores que
utilizan los convertidores A/D y D/A.

Recordemos que la frecuencia de muestreo que se usa en este proyecto es 44100
Hz (la bsica del formato PCM) pero puede ocurrir un leve desajuste en esta frecuencia,
es decir es posible que los osciladores del transmisor y receptor no permitan esta
frecuencia exacta sino que:

El oscilador del transmisor funcionar a una frecuencia de 44100
T
Hz
El oscilador del receptor funcionar a una frecuencia de 44100
R
Hz

donde
T
y
R
son cantidades relativamente pequeas en relacin a la
frecuencia base de 44100 Hz y dependen, en todo caso, de la calidad de las tarjetas de
sonido empleadas.

Se debe considerar tambin, que este desajuste de las frecuencias de muestreo es
ms probable que se de cuando se usan dos tarjetas distintas, una para transmitir y otra
para recibir, pero cuando slo se usa una tarjeta, es lgico pensar que se use el mismo
oscilador para los dos convertidores por lo que no habra desajuste y no tendramos que
resolver este problema.

4.2.1.1 Clculo del desajuste de frecuencias de muestreo

Para calcular el posible desajuste que puede haber entre las frecuencias de
muestreo del transmisor y el receptor, enviaremos a travs del canal dos deltas de Dirac
separadas una cierta distancia conocida. Al recibirlas volvemos a medir esta distancia
por lo que obtendremos el nmero de muestras de diferencia entre lo transmitido y lo
recibido. El siguiente programa de MATLAB realiza este clculo:

%Funcion desajuste_. Calcula la diferencia entre la frecuencia de muestreo del
%transmisor y la del receptor en partes por millon.

Sincronizacin


109
frecMue = 48000;
dur = 60;
gua = 1;

tx = [ zeros(1,gua*frecMue) 1 zeros(1,dur*frecMue) 1 zeros(1,gua*frecMue) ];

wavplay(tx, frecMue,'async');

%%%%%%%%%%%%%%%%

rx = wavrecord(length(tx), frecMue, 1,'double')';

figure(1);
subplot(2,1,1);
plot(tx),title('Seal transmitida');
subplot(2,1,2);
plot(rx),title('Seal recibida');

tx1=tx(1:length(tx)/2);
tx2=tx(length(tx)/2:length(tx));
txd1=find(tx1==max(tx1));
txd2=find(tx2==max(tx2));

rx1=rx(1:length(rx)/2);
rx2=rx(length(rx)/2:length(rx));
rxd1=find(rx1==max(rx1));
rxd2=find(rx2==max(rx2));

disp(['Desajuste: ' num2str(1000000*((txd1-rxd1)-(txd2-rxd2))/(dur*frecMue+1))
' ppm Precision: ' num2str(1000000/(dur*frecMue+1)) ' ppm']);

Si ejecutamos esta rutina obtenemos:


>>desajuste_

Desajuste: 0 ppm Precision: 0.34722 ppm


En cambio si cambiamos la frecuencia de muestreo a 44100 Hz:


>>desajuste_

Desajuste: 43 ppm Precision: 0.75586 ppm


Es interesante resaltar que cuando se utiliza una frecuencia de muestreo de
44100 Hz se obtiene un desajuste entre las frecuencias de 43 ppm, en cambio si
utilizamos la frecuencia de 48000 Hz no se obtiene desajuste alguno entre frecuencias.

Este hecho nos hace pensar no existe un desajuste real en las frecuencias de
muestreo del transmisor y receptor, ya que al usarse un nica tarjeta, esta utiliza un
nico oscilador para ambos convertidores (A/D y D/A). La explicacin a lo anterior es
la siguiente:

El oscilador de la tarjeta de sonido funciona a una frecuencia base de 48000 Hz.
El resto de frecuencias de muestreo que se pueden utilizar se obtienen mediante
divisores de frecuencia digitales. Cabe pensar que si la tarjeta es de mala calidad, y dado
que 44100 Hz no es divisor de 48000 Hz, la conversin de frecuencia no se realice de
forma correcta obtenindose una ligera desviacin respecto del valor nominal, esto
explicara la obtencin del desajuste de 43 ppm en el caso de utilizar la frecuencia de
Sincronizacin


110
muestro de 44100 Hz. Por lo tanto, y para evitar problemas de sincronizacin, para las
pruebas de simulacin del sistemas se ha empleado la frecuencia de 48000 Hz.

4.3 Sincronizacin de la frecuencia de la portadora

A continuacin se presentan los errores de frecuencia que se pueden dar en un
sistema OFDM cuando el sistema no es paso-baja (LP) sino paso-banda (BP), por lo que
ser necesario el uso de una portadora que suba la seal OFDM a la frecuencia del canal
en el transmisor y despus la baje (la traslade a la banda base) en el receptor. Este
proceso, cuando ocurren offsets o errores en la frecuencia de la portadora, puede
provocar los efectos destructivos en el sistema que se presentan en este apartado.

Dado que el sistema COFDM que se ha implementado usa un canal
prcticamente LP, se trabajar en banda base y por lo tanto, no habr que tener en
cuenta los posibles problemas de sincronizacin de la frecuencia de portadora. An as,
presentamos cules podran ser estos errores y su posible solucin para el caso de que el
canal de transmisin que se use sea paso-banda.

4.3.1 Errores de frecuencia

Los offsets de frecuencia se crean por las diferencias entre los osciladores del
transmisor y del receptor, desplazamientos Doppler, o ruido de fase introducido por
canales no lineales. Hay dos efectos destructivos causados por un offset en la frecuencia
de portadora en sistemas OFDM. Uno es la reduccin de la amplitud de la seal (se
produce un desplazamiento de las funciones sinc y no se vuelven a muestrear en el pico)
y el otro es la introduccin de ICI proveniente del resto de portadoras. Este ltimo
efecto est causado por la prdida de la ortogonalidad entre los subcanales. Pollet [17]
evala analticamente la degradacin de BER causada por la presencia de offset de
frecuencia de la portadora y ruido de fase de la portadora para un canal AWGN. Se
encuentra que un sistema multiportadora es mucho ms sensible que uno de portadora
nica. Denota el offset relativo de frecuencia, normalizado por el espaciado entre
subportadoras, como
N W
F
f

=
, donde F es el offset de frecuencia, W el ancho de
banda y N el nmero de subportadoras.

La degradacin D de la SNR (en dB) se puede aproximar por

0
2
0
2
) (
10 ln 3
10
) (
10 ln 3
10
) (
N
E
W
F N
N
E
f dB D
s s

= [4.3]

Notar que la degradacin (en dB) aumenta con el cuadrado del nmero de
subportadoras, si F y W estn fijados.

Sincronizacin


111

Figura 4.1. Efectos de un offset de frecuencia F : reduccin de la amplitud de la seal
) (o e interferencia entre portadoras ) ( .

En la investigacin realizada por Moose [19] estudia la relacin seal-
interferencia (SIR) en un canal con desvanecimiento y dispersivo. La SIR se define
como la relacin entre la potencia de la seal til y la potencia de la seal de
interferencia (ICI con ruido aditivo). l supone que todas las atenuaciones del canal
k
h tienen la misma potencia, } {
2
k
h E . Una cota superior de la degradacin es

)
sin
sin 5947 . 0 1
( log 10 ) (
2
2
0
10
f c
f
N
E
dB D
s


[4.4]

donde sinc ) ( ) (sin x x x = . En la figura 4.2 la degradacin se representa como
una funcin del offset de frecuencia normalizado f , i.e. relacionada con el espaciado
entre subportadoras.



Offset de frecuencia relativo

Figura 4.2. Degradacin de la SNR debido al offset de frecuencia (normalizado con
respecto al espaciado entre subportadoras). La expresin analtica para AWGN (rayado)
y canales con desvanecimiento (lnea continua).
Frecuencia
Amplitud
F
D
e
g
r
a
d
a
c
i

n

D

e
n

d
B

Sincronizacin


112

Las conclusiones sobre los requerimientos de sincronizacin de un sistema
OFDM [20] son que para evitar una degradacin severa, la precisin de la frecuencia de
sincronizacin debera ser mejor que el 2%.

4.3.2 Estimadores de frecuencia

Se sugieren varios esquemas para la sincronizacin de la portadora. Al igual que
con la sincronizacin de smbolo, se pueden dividir en dos categoras: los que se basan
en seales piloto o los que se basan en el prefijo cclico.

A continuacin se presenta una breve explicacin de algunos de ellos.

Los algoritmos basados en pilotos [21] usan algunas de las subportadoras para la
transmisin de las seales piloto (normalmente estas son secuencias pseudo-ruidosas
(PN)). Usando estos smbolos conocidos se pueden estimar las rotaciones de fase
causadas por el offset de frecuencia. Si asumimos que el offset de frecuencia es menor
que la mitad del espaciado entre subportadoras, hay una correspondencia unvoca entre
las rotaciones de fase y el offset de frecuencia. Para asegurar esto, se debe aplicar un
algoritmo de adquisicin. Este algoritmo se puede construir formando una funcin con
la forma de la funcin sinc y con un pico para
0 =

f f
. Se ha encontrado que
evaluando esta funcin en puntos separados por 0.1/T, la adquisicin se puede obtener
maximizando esta funcin. Este algoritmo de adquisicin se ha comprobado, mediante
simulaciones por ordenador, que funciona bien tanto para canales AWGN como para
canales con desvanecimiento.

Una tcnica relacionada es el uso del prefijo cclico, el cual se puede ver tambin
como pilotos. La redundancia del prefijo cclico se puede usar de varias formas: por
ejemplo, creando una funcin que tenga un pico en offset cero y encontrando el valor
donde se maximiza [22,12] o haciendo una estimacin de mxima probabilidad [22, 24,
19, 14]. Si suponemos que el prefijo cclico tiene el mismo tamao que el smbolo
OFDM (i.e. el smbolo til se transmite dos veces), se podra hacer un promediado que
eliminara la dependencia con los datos o usar una direccin de decisin. Tambin
podemos encontrar la funcin de probabilidad para los offsets de tiempo y frecuencia si
asumimos un canal no dispersivo y considerando los smbolos de datos transmitidos
k
x
incorrelados.

Maximizando esta funcin, se puede obtener una estimacin simultnea de los
offsets en tiempo y frecuencia. Si el error de frecuencia vara despacio comparado con
la tasa de smbolo OFDM, se puede usar un PLL (phase-locked loop) [24] para reducir
errores adicionales.

Es interesante hacer notar la relacin entre la sincronizacin de tiempo y
frecuencia. El problema de la sincronizacin de frecuencia se puede reducir
disminuyendo el nmero de subportadoras, lo cual aumentar el espaciado entre
portadoras. Esto, sin embargo, aumentar las demandas de la sincronizacin de tiempo,
ya que la longitud del smbolo se hace menor, por lo tanto tendremos un error de
temporizacin relativo mayor. Todo esto pone de manifiesto que las sincronizaciones de
tiempo y frecuencia estn estrechamente relacionadas.


113


Captulo 5

Interfaz grfico

En este captulo se explica el diseo y programacin del entorno grfico que se
ha creado para recibir los parmetros del modulador/demodulador COFDM y mostrar
los resultados y las grficas que se obtienen tras la simulacin.

Dado que el modem se ha programado por completo en MATLAB, se ha elegido
este programa tambin para el diseo del interfaz grfico por simplicidad, aunque se
podra haber elegido otro lenguaje de programacin visual como VisualC (C++) o
VisualBasic. El interfaz grfico se utilizar para realizar diversas simulaciones del
modem y obtener resultados variando determinados parmetros.

5.1 Interfaz Grfico de Usuario de MATLAB (GUI)

En MATLAB los interfaces grficos se llaman GUIs (Grafical User Interface),
estn formados por objetos grficos (componentes) tales como botones, campos de
texto, mens, etc. Si la GUI est bien diseada debera ser muy intuitivo y obvio para el
usuario el modo en que se usan los componentes de la misma.

Cuando se proporciona un interfaz entre el usuario y el cdigo de programacin
de una aplicacin, se permite al usuario operar con esa aplicacin sin conocer los
comandos que se requieren para llevar a cabo una operacin. Por esta razn, las
aplicaciones que proporcionan GUIs son ms fciles de aprender y usar que las que se
ejecutan desde la lnea de comandos.

MATLAB implementa las GUIs como ventanas figura que contienen varios
objetos o componentes (uicontrol: botones, listas desplegables, cuadros de texto). Se
debe programar cada objeto para que lleve a cabo una accin determinada cuando un
usuario activa el componente. Adems, debemos ser capaces de salvar y ejecutar la
GUI. Todas estas tareas vienen simplificadas por GUIDE (Grafical User Interface
Development Environment) el entorno de desarrollo de interfaces grficos de
MATLAB.

5.1.1 Entorno de desarrollo de la GUI

Crear una GUI implica dos tareas bsicas:

Disponer (laying out) los componentes de la GUI en el entorno.
Interfaz grfico


114
Programar los componentes de la GUI.

GUIDE es bsicamente un conjunto de herramientas de layout. Sin embargo,
GUIDE tambin genera un fichero-M (.m de MATLAB) que contiene el cdigo que se
encarga de la inicializacin y el lanzamiento de la GUI. Este fichero-M proporciona un
marco de trabajo para la implementacin de las llamadas o callbacks que son las
funciones que ejecuta cuando el usuario activa los componentes de la GUI.

5.1.2 Ficheros generados por el GUIDE

Es posible escribir un fichero-M que contenga todos los comandos para disponer
grficamente los componentes de la GUI pero es mucho ms fcil usar GUIDE para
disponer los componentes (layout) de forma interactiva. Cuando se salva o ejecuta la
GUI, GUIDE automticamente genera dos ficheros:

Un fichero-FIG (fichero con extensin .fig), que contiene una descripcin
completa de la figura o entorno grfico de la GUI y todos sus hijos (llamados
children): uicontrol and axes, as como los valores de las propiedades de todos
los objetos. Se pueden hacer cambios en el fichero-FIG editando la GUI en el
editor de layout (Layout Editor). Este editor no es ms que una ventana donde a
la izquierda aparecen una serie de controles, que se pueden seleccionar haciendo
doble clic sobre ellos. Esto hace que aparezca el componente sobre la cuadrcula.
Este objeto se puede cambiar de tamao y se puede posicionar donde se desee.
















Un fichero-M, fichero con extensin .m, que contiene las funciones que ejecutan
y controlan la GUI y las llamadas o callbacks.

5.1.3 Caractersticas del fichero-M

GUIDE simplifica el proceso de crear GUIs generando automticamente el
fichero-M de la GUI a partir del layout. GUIDE genera llamadas para cada componente
de la GUI. Inicialmente, GUIDE genera solamente una lnea de definicin de la funcin
para cada llamada o callback. Se puede aadir cdigo a la misma para que lleve a cabo
la operacin deseada.

Interfaz grfico


115
El fichero-M contiene otras dos funciones donde posiblemente sea necesario
aadir cdigo:

Funcin de apertura (opening function) que lleva a cabo tareas antes de que la
GUI se haga visible al usuario, tales como crear datos para la GUI. GUIDE
nombra esta funcin my_gui_OpeningFcn, donde my_gui es el nombre de la
GUI.

Funcin de salida (output function) que saca variables a la lnea de comandos si
fuera necesario. GUIDE nombra esta funcin my_gui_OutputFcn, donde
my_gui es el nombre de la GUI.

5.1.4 Creacin de la GUI

Para crear un interfaz grfico lo primero que se debe hacer es disearlo. Es decir,
antes de comenzar, debemos tener una estructura dibujada en papel que muestre la
apariencia que deseamos para nuestra GUI.

Una vez diseada la GUI, debemos editarla, y para esto debemos recurrir al
editor de layout. Lo ms sencillo a la hora de editar una GUI es usar el GUIDE, por lo
que antes de comenzar debemos llamarlo desde la lnea de comandos de MATLAB:

>>guide

Al hacer esto nos aparece la siguiente ventana (GUIDE Quick Start) que nos
permite elegir entre abrir una nueva GUI o por el contrario, seleccionar una que haya
sido creada con anterioridad.














Adems tenemos la posibilidad de elegir plantillas (templates) de GUIs que
incluyen una serie de componentes, por lo que pueden ser de utilidad en determinados
casos. Para la creacin de la GUI de este proyecto se elige Blank GUI (Default), para
que nos aparezca un interfaz en blanco donde podamos colocar todos los componentes
que deseemos.




Interfaz grfico


116
















Esto nos permite ya seleccionar los objetos de la GUI de la paleta de
componentes que aparece a la izquierda de la ventana y posicionarlos sobre la
cuadrcula. Como vemos, se puede cambiar el tamao de la cuadrcula, que ser el
tamao real del entorno grfico, mediante el ratn o usando el property inspector del
men view. Este inspector de propiedades nos servir tambin para modificar y
establecer las propiedades de todos los objetos o componentes que forman la GUI.

Una vez colocados los componentes sobre la GUI, estos se pueden alinear e
incluso se puede programar el modo en que el usuario los puede seleccionar cuando se
use el tabulador.

La GUI que se ha creado para este proyecto se muestra a continuacin y
contiene los siguientes componentes: mens desplegables, texto esttico, texto editable,
botones radio, botones de pulsado, marcos, listas y ejes.




















Interfaz grfico


117
5.1.4.1 Programacin de la GUI

Para llevar a cabo la programacin de la GUI se har uso del llamado inspector
de propiedades o property inspector. Este inspector se puede seleccionar, o bien, en la
barra de herramientas que aparece en la parte superior de la ventana figura o bien,
seleccionndolo en el men view. El property inspector aparece al hacer click con el
botn derecho sobre cualquier componente y nos permitir modificar las propiedades
del mismo. Las ms importantes son String, Callback y Tag.

La propiedad String contendr los nombres que aparecen en los componentes de
la GUI. En caso de mens o listas desplegables, contendr varios nombres o valores
numricos, uno para cada opcin que se presente. Internamente String no es ms que un
vector con un tamao igual al nmero de cadenas o valores enteros que se introduzcan
por lo que se podr acceder a estos campos en el fichero-M.














La propiedad callback aparece por defecto como %automatic y ser la funcin
a la que se llama en el fichero-M de la GUI cuando un usuario activa un componente.
GUIDE usa la propiedad Tag del componente para asociar el componente con la
funcin. Para que la programacin de esta funcin sea ms fcil e intuitiva, debemos
cambiar la propiedad Tag del objeto, ya que por defecto aparecen nombres genricos,
como el tipo de componente y un nmero. En nuestro caso, se han cambiado los
nombres a ListaBDT, ListaMuestreo, TextoTiempo Esto permite que cuando se
salve o ejecute la GUI, GUIDE establezca la propiedad de los distintos componentes a
ListaBDT_callback, ListaMuestreo_callback, TextoTiempo_callback...

Ya tan solo queda programar las distintas funciones de la GUI. Para ello,
debemos acceder al fichero-M, que se genera automticamente cuando se salva el
layout, o se ejecuta. Podemos acceder al mismo desde el icono de MATLAB de la barra
de herramientas superior, o desde la lnea de comandos si la GUI ya ha sido salvada
anteriormente.

Una vez obtenido el fichero-M, comprobamos que aparece una gran cantidad de
cdigo con numerosos comentarios que se genera automticamente a partir del layout.
Cabe destacar que las funciones de creacin de los componentes que aparecen no se
modificarn, tan slo las propiedades de estos componentes. Podemos acceder a las
distintas funciones que aparecen en el fichero desde el icono con forma de f, que
Interfaz grfico


118
aparece en la barra de herramientas superior y haciendo click sobre cualquiera de estas
funciones, accedemos directamente a la lnea de cdigo donde se encuentra la funcin.














Lo ms importante a tener en cuenta a la hora de programar las llamadas de la
GUI son los parmetros de entrada que contienen la mayora de las funciones. Estos
parmetros (hObject, eventdata, handles) sern las referencias o manejadores de los
distintos componentes y servirn para acceder a las distintas propiedades de los mismos.

hObject: referencia o manejador del componente.
eventdata: reservado.
handles: estructura con los manejadores o referencias y los datos de usuario.

Mediante las funciones set o get y accediendo a los campos de la estructura
handles estableceremos propiedades o tomaremos valores e inicializaremos los
distintos componentes. Un ejemplo de esto es el siguiente:

%En este ejemplo se establece que el cuadro de texto donde se introduce la
%imagen a transmitir sea de color blanco mientras que el cuadro de texto donde
%se introduce el nmero de tramas sea del color del resto de la ventana, color
%por defecto. Adems se habilita el cuadro de texto de la imagen y se
%deshabilita el cuadro de texto de las tramas de datos aleatorias.

set(handles.TextoTramas,'BackgroundColor',get(0,'defaultUicontrolBackgroundCol
or'));
set(handles.TextoImagen,'BackgroundColor','white');

set(handles.TextoImagen,'Enable','on');
set(handles.TextoTramas,'Enable','off');

El interfaz grfico que se ha creado para este proyecto pretende tomar valores
que introduzca el usuario y llamar a la funcin principal_ del modem programado
con estos valores como argumentos de entrada. Una vez obtenidos los resultados los
imprimir en los cuadros correspondientes y mostrar las distintas grficas en los
cuadros de ejes.

Para hacernos una idea cmo se programa todo esto en MATLAB se presenta a
continuacin, la parte de cdigo que realiza la toma de parmetros introducidos en el
interfaz y la llamada al modem COFDM.

% --- Executes on button press in BotonSimular.
function BotonSimular_Callback(hObject, eventdata, handles)
Interfaz grfico


119
% hObject handle to BotonSimular (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Se toman los valores introducidos por el usuario
%y para todos se comprueba que el valor del
%parametro es aceptable
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

imag = get(handles.RadioImagen,'Value');

imagen = get(handles.TextoImagen,'String');

NumTramas = str2double(get(handles.TextoTramas,'String'));

contents = get(handles.ListaBDT,'String');

BDT = str2double(contents{get(handles.ListaBDT,'Value')});

contents = get(handles.ListaMuestreo,'String');
AUDIOfrec = str2double(contents{get(handles.ListaMuestreo,'Value')});

val = get(handles.ListaRS, 'Value');
RSkL = [ 188 3 ];
RSnL = [ 204 7 ];
RSk = RSkL(val);
RSn = RSnL(val);

val = get(handles.ListaCC,'Value');
CCkL = [ 1 2 3 5 7 ];
CCnL = [ 2 3 4 6 8 ];
CCk = CCkL(val);
CCn = CCnL(val);

contents = get(handles.ListaGuarda,'String');
GUAint = str2num(contents{get(handles.ListaGuarda,'Value')});

contents = get(handles.ListaQAM,'String');
QAMm = str2num(contents{get(handles.ListaQAM,'Value')});

ESPbanda = str2double(get(handles.TextoBandas,'String'));

ESPginf = str2double(get(handles.TextoGInf,'String'));

ESPgsup = str2double(get(handles.TextoGSup,'String'));


set(handles.BotonSimular,'Enable','off');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Llamar a la funcion principal_ del modem
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

[ Tiempo TasaNeta BER SER esImagen DatosTX DatosRX EspectroTX EspectroRX
ConstelacionTX ConstelacionRX ] =
principal_(imag,imagen,NumTramas,RSn,RSk,CCk,CCn,QAMm,ESPbanda,ESPginf,ESPgsup
,GUAint,AUDIOfrec);
%%%%%%%%%%%%%%%%%%%%%%%%%%

set(handles.BotonSimular,'Enable','on');

%%%%%%%%%%%%%%%%%%%%%%%%%%
%Representacin de resultados
%%%%%%%%%%%%%%%%%%%%%%%%%%

set(handles.TextoTiempo,'String',num2str(Tiempo));
set(handles.TextoTasa,'String',num2str(TasaNeta));
Interfaz grfico


120
set(handles.TextoBER,'String',num2str(BER));
set(handles.TextoSER,'String',num2str(SER));

handles.esImagen = esImagen;
handles.DatosTX = DatosTX;
handles.DatosRX = DatosRX;
handles.EspectroTX = EspectroTX;
handles.EspectroRX = EspectroRX;
handles.ConstelacionTX = ConstelacionTX;
handles.ConstelacionRX = ConstelacionRX;

handles.AUDIOfrec = AUDIOfrec;

%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Se habilitan los botones de representacin grfica
%%%%%%%%%%%%%%%%%%%%%%%%%%%

set(handles.BotonDatos,'Enable','on');
set(handles.BotonEspectro,'Enable','on');
set(handles.BotonConstelacion,'Enable','on');


A continuacin se presentan diversos aspectos que se han tenido en cuenta a la
hora de la programacin del interfaz grfico pero no se detallar el cdigo, ya que este
puede ser consultado en el apndice C. Estos aspectos son los siguientes.

1. Se permite que el usuario seleccione la transmisin de una secuencia aleatoria de
datos o una imagen. Para esto se han programado los botones radio de forma que
esta seleccin sea excluyente. Adems, esta seleccin deshabilita o habilita los
cuadros editables donde se escribe la imagen o el nmero de tramas aleatorias a
transmitir. En el caso de que se seleccione la transmisin de una imagen, se
fuerza que el cdigo Reed-Solomon que se utilice sea el (204,188), ya que la
imagen tomar valores de 0 a 255 y son los mismos valores que permite este
cdigo
8
.

2. Se han proporcionado listas desplegables con los valores de los distintos cdigos
Reed-Solomon, las tasas de cdigo convolucional, los intervalos de guarda, los
bytes de datos por trama, los bits/smbolo de la QAM y las frecuencias de
muestreo que se permiten. Y se ha proporcionado libertad para que el usuario
introduzca el nmero de bandas o subportadoras que intervendrn en la
modulacin.

3. Se han deshabilitado los cuadros de texto que mostrarn los resultados de la
simulacin y se les ha cambiado el color (pasando de blanco al color gris por
defecto) para que queden del color del resto de la ventana y as sea ms intuitivo
para el usuario el que no se pueda introducir valores en dichos campos.

4. Se han programado funciones que comprueban que los valores de los parmetros
introducidos sean correctos, no permitindose nmeros decimales o caracteres.

5. Se han introducido dos tipos de ejes, los horizontales y los verticales. Los
horizontales se usarn para mostrar las tramas de datos y los espectros de
frecuencia (siempre el superior mostrar lo que se transmite y el inferior lo que

8
Recordemos que el bloque Galois toma valores entre 0 y ) 1 2 (
RSm

Interfaz grfico


121
se recibe). Los ejes horizontales tienen forma ms cuadrada y se usarn para
representar las imgenes y las constelacin (el de la izquierda muestra la
transmitida y el de la derecha la recibida).


6. Para visualizar las distintas grficas se han aadido tres botones, el primero para
ver las tramas o imgenes (segn lo que se elija), el segundo para mostrar los
espectros, y el tercero para mostrar las constelaciones.

7. Se han programado los botones simular y salir. El botn simular ser el que
llame a la rutina principal del modulador/demodulador y una vez pulsado,
deshabilita el resto de botones. El botn salir cierra la ventana del interfaz
grfico.

Como ya se ha comentado, el cdigo completo de la programacin de la GUI se
muestra en el apndice C. Para la programacin de la misma se ha hecho uso de la
ayuda de MATLAB para la creacin de interfaces grficos y gracias a esto, se han
podido realizar todas las modificaciones de las distintas propiedades de los
componentes y se han llevado a cabo todas las operaciones explicadas anteriormente.













Interfaz grfico


122
5.2 Resultados de las pruebas realizadas:

Se han realizado diversas pruebas prcticas del sistema implementado
modificndose ciertos parmetros de la comunicacin (y dejndose otros fijos) para
comprobar su influencia en la robustez de la modulacin COFDM.

A continuacin se presentan una serie de tablas que muestran los resultados
obtenidos para el siguiente caso de transmisin/recepcin para el que se han dejado fijos
ciertos parmetros de la modulacin COFDM y se ido variando el intervalo de guarda y
la tasa del cdigo convolucional:

Tramas de datos aleatorias = 4
Bytes de datos por trama = 100
Modulacin 64-QAM
Frecuencia de muestreo = 44100 Hz
Bandas tiles = 100
Bandas de guarda inferior = 10
Bandas de guarda superior = 20
Cdigo Reed-Solomon (204,188)


TASA NETA DE TRANSMISIN
Rb (bps)
CDIGO REED-SOLOMON (204,188)
INTERVALO DE GUARDA
TASA DEL
CDIGO
CONVOLUCIONAL 1/4 1/8 1/16 1/32
1/2 23901.4 26000.15 27194.09 27833.15
2/3 27072 29373.95 30678.26 31374.83
3/4 31212.4 33753.89 35186.41 35949.26
5/6 31212.4 33753.89 35186.41 35949.26
7/8 31212.4 33753.89 35186.41 35949.26

Se comprueba que la tasa neta de transmisin, es decir, la tasa binaria que se
obtiene sin contar los bits que se meten de relleno como datos tiles, va aumentando y
llega a valores de hasta 36 Mbps conforme se disminuye la duracin del intervalo de
guarda. Esto es lgico ya que un intervalo de guarda menor implica menos datos
redundantes.

Cabe destacar en esta tabla que a partir de la tasa de cdigo convolucional 3/4
las velocidades binarias netas
9
no varan al varar la tasa de cdigo. Esto ocurre as
porque no se ha tenido en cuenta para el clculo de la misma los datos de padding que
se introducen a lo largo del transmisor. Esto implica que al realizarse el ajuste de los
bloques, aunque unas tasas metan ms relleno que otras los datos tiles siguen siendo
los mismos en todos los casos. Por lo tanto, si contsemos el padding como datos la tasa
neta variara segn el tipo de cdigo convolucional empleado.

9
bitDatos = BloqueRSTrama * RSk * RSm * NumTramas;
tasaNeta = bitDatos/(length(totaltramas)/AUDIOfrec)


Interfaz grfico


123

La siguiente tabla muestra la tasa de error de smbolo Reed-Solomon del modem
COFDM donde se ha tenido en cuenta la proteccin que aade al sistema la codificacin
para el control de errores.


Esta tabla muestra que la modulacin es muy robusta incluso al cambiar el
cdigo Reed-Solomon empleado. Se ha comentado con anterioridad que el cdigo RS
(204, 188) proporciona mucha proteccin ya que puede corregir hasta 8 errores, en
cambio, el cdigo RS (7,3) slo puede corregir hasta 3 errores en cada bloque. En
pruebas realizadas con este cdigo que es menos potente se muestra que slo se
producen errores cuando se usan tramas muy largas y constelaciones de muchos puntos
(256-QAM).

TASA DE ERROR DE SMBOLO (CON CODIFICACIN)
SER
CDIGO REED-SOLOMON (204,188)
INTERVALO DE GUARDA
TASA DEL
CDIGO
CONVOLUCIONAL
1/4 1/8 1/16 1/32
1/2 0 0 0 0
2/3 0 0 0 0
3/4 0 0 0 0
5/6 0 0 0 0
7/8 0 0 0 0

Este hecho se muestra tambin en las siguientes figuras. En estas figuras se
representan los datos transmitidos
10
, el espectro COFDM de los mismos y la
constelacin. Tanto la 16-QAM como la 64-QAM no produjeron errores en la
comunicacin.


10
El programa se modific finalmente para que apareciesen las tramas transmitidas y recibidas en lugar
del valor de los datos de estas tramas.
Interfaz grfico


124




A continuacin se presenta un ejemplo de tranmsin de una imagen de 6,4 KB.
Se puede apreciar a simple vista, que usndose una modulacin 16-QAM los smbolos
estn lo suficientemente espaciados como para que no se produzcan fallos en la
comunicacin.































En cambio, cuando se usa la modulacin 256-QAM los errores que se producen
son apreciables incluso a simple vista como muestra la imagen recibida.
















Interfaz grfico


125


















Para comprobar la diferencia de usar un cdigo Reed-Solomon (204,188) o uno
(7,3), se han representado 7 tramas de 100 bytes. En ambos casos se us el mismo tipo
de modulacin 16-QAM y no se obtuvieron errores.

Las siguientes figuras muestran que las tramas del cdigo Reed-Solomon
(204,188) presentan muchos picos provocados por el relleno de ceros, ya que al tomarse
los datos en bloques de mucho mayor tamao el padding que se introduce tambin es
mucho mayor. Este hecho sera conveniente solucionarlo y para ello se podran cambiar
los datos de relleno que ahora son ceros por valores aleatorios para que se aprovechara
ms el rango dinmico de transmisin. La figura muestra que al normalizarse la seal
teniendo en cuenta los picos el rango real que ocupa es muy reducido.

Cdigo RS (7,3) Cdigo RS (204,188)


A continuacin se muestra el espectro de la seal COFDM cuando se cambia el
nmero de bandas tiles que se utilizan para la transmisin de la misma. Se han tomado
las mismas bandas de guarda en los tres casos:

Nmero de bandas de guarda inferior = 10
Nmero de bandas de guarda superior = 20

Interfaz grfico


126
Estas bandas son las elegidas que aparezcan por defecto en la GUI, debido a que
se ha comprobado que es una eleccin ptima dadas las caractersticas del canal.
Recordemos que en el captulo 2 se comprob que el canal tiene un pico negativo a
frecuencias muy bajas y decae abruptamente un poco antes de los 20 KHz
aproximadamente. Es por esto, que resulta conveniente no transmitir informacin til
por estas bandas.

En las siguientes figuras se pueden apreciar bien tanto las bandas tiles como las
de guarda, que en el caso de usarse solamente 10 bandas tiles ocupan la mayor parte
del espectro. As mismo se comprueba que el nmero de bandas tambin afecta al
relleno, por lo que vemos que al aumentar el nmero de bandas, los picos debidos al
padding casi desaparecen, pero el rango dinmico que ocupa la seal es menor.


Caso: 10 bandas


Caso: 100 bandas

Interfaz grfico


127
Caso: 1000 bandas

















128


Captulo 6

Conclusiones

Este proyecto ha tratado de forma general todos los aspectos de la modulacin
COFDM profundizando solo en aquellos que son relevantes a la hora de realizar una
implementacin prctica de la misma. La modulacin COFDM es una modulacin
compleja por lo que es objeto de numerosos estudios ms especficos. Hay estudios que
basan su anlisis tan slo en el prefijo o intervalo de guarda, otros que tratan en
profundidad la compleja sincronizacin de estos sistemas, otros simplemente estudian el
modulador/demodulador bsico OFDM, obtenindose en todos los casos conclusiones
que puedan mejorar las caractersticas de esta modulacin.

Este proyecto ha pretendido dejar claro las ventajas de COFDM mediante la
implementacin prctica o simulacin de un sistema de transmisin de datos. Las
simulaciones realizadas han demostrado la robustez de la modulacin y mediante la
transmisin y recepcin de ficheros que contienen imgenes, se han podido visualizar
las repercusiones que tienen los errores de transmisin en la representacin de las
mismas.

Adems de todo esto, destaco el importante valor de ver en la prctica conceptos
estudiados tericamente en transmisin de datos como son: la constelacin de la
modulacin QAM, la codificacin para el control de errores o la representacin
frecuencial del espectro cuando se usa el ancho de banda de un canal real.

6.1 Posibles mejoras o lneas de continuacin

En primer lugar, el canal de comunicaciones que se usa no es el ms apropiado
para probar esta modulacin ya que se trata de un canal prcticamente ideal y la
modulacin COFDM est preparada para trabajar en entornos muy hostiles donde se
producen desvanecimientos por multitrayecto por lo que la correccin de errores es muy
importante. Por lo tanto, opino que se debera usar otro sistema de transmisin o bien,
en caso de usar el mismo, se deberan simular estos desvanecimientos para que el
estudio pueda adecuarse ms a los sistemas reales que usan esta modulacin.

Por otro lado la utilizacin de MATLAB para programar el
modulador/demodulador hace que la transmisin/recepcin sea muy lenta por lo que
este programa no es adecuado para que el sistema funcione en tiempo real.

Adems, se pueden realizar mejoras al modem diseado para hacerlo ms
parecido utilizados en la realidad en sistemas de radiodifusin digital. Es decir, se
Conclusiones


129
podran incluir bloques de entrelazado y aleatorizadores de energa que redujesen el
problema de la PAR. Este problema se podra solucionar tambin, como ya se ha
comentado, cambiando el padding o relleno con ceros que se va introduciendo en el
modulador, por un relleno de datos aleatorios.

Otra posible mejora sera cambiar el tipo de la decodificacin de Viterbi, y usar
la decodificacin tipo soft en lugar de unquant. Las ventajas de la decodificacin
soft ya se han comentado pero usar este tipo de codificacin implicara una estimacin
del ruido en cada banda.

Para finalizar, tambin sera posible modificar el modulador para que no se use
la misma modulacin QAM en todas las bandas, sino que cada una de ellas pueda usar
una distinta, dependiendo del ruido de cada banda.



































130

Apndice A

Cdigos lineales de bloques: cdigos
Reed-Solomon

Codificacin lineal por bloques

La codificacin lineal por bloques incluye los siguientes tipos de cdigos:

Cdigos lineales de bloques



Cdigos cclicos



Cdigos BCH


Cdigos Hamming Cdigos Reed-Solomon

Cuando se codifica un mensaje, se toman k bits de datos y se le agregan r bits
redundantes de manera que se crean nuevos bloques de datos o palabras de cdigo de
longitud n ( r k n + = ). Si suponemos 3 = k , 3 = r , entonces a este cdigo se le llama
cdigo ( n , k )=(6,3).

Llamemos los datos originales o bits del mensaje
1
m
2
m
3
m . Los bits
redundantes se construyen usando relaciones entre los bits de mensaje.

Por ejemplo:

m1+m3 m1+m2 m2+m3 m1 m2 m3
0 0 0 0 0 0
1 0 1 0 0 1
0 1 1 0 1 0
1 1 0 0 1 1
1 1 0 1 0 0
0 1 1 1 0 1
1 0 1 1 1 0
Cdigos lineales de bloques: cdigos Reed-Solomon


131
0 0 0 1 1 1

Donde la suma es mdulo 2. Se observa que se tienen
k
2 (8) combinaciones de
las
n
2 (64) posibles. Cuando el mensaje forma parte de la palabra cdigo, se dice que
este es sistemtico. Se quiere que las combinaciones enviadas estn lo mas alejadas
posible para disminuir la probabilidad de error, por otra parte hay que agregar pocos bits
adicionales para que no crezca indefinidamente el ancho de banda.

Se puede pensar en una matriz generadora [G], a partir de la cual pueda
generarse el mensaje codificado.

[m][G] = [C]
donde la matriz
[G] =
p
11
P
12
. p
1r
| 1 0 0 . . 0
p
21
P
22
. p
2r
| 0 1 0 . . 0
. . . . . . . . . . .
p
k1
p
k2
. p
kr
| 0 0 0 . . 1
I------------------- P-----------| ----------------------- Ik ---------------------|
El proceso de codificar un mensaje con un cdigo lineal de bloque ( n , k ) viene
determinado por una matriz generadora n k , [G]. Especficamente, el vector mensaje
[m] k 1 se codifica con el vector palabra de cdigo [C] n 1 . Si G tiene la forma [Ik
P] o [P Ik], P es una matriz cualquiera e Ik es la matriz identidad k k , entonces se dice
que [G] est en forma estndar.

La primera parte de la matriz [G] la llamaremos porcin de arreglo de paridad, y la
ultima parte es la matriz identidad.

Obsrvese que para generar los cdigos solo hay que almacenar la porcin de paridad
([P]), de la matriz [G]. En el receptor se tendra una matriz llamada [H] (matriz de
chequeo de paridad) que permitira decodificar los vectores recibidos, y cuya traspuesta
sera:

[H
T
] =








Cdigos lineales de bloques: cdigos Reed-Solomon


132

1 0 . 0
0 1 . 0
. . . .
0 0 . 1
p
11
p
12
. p
1r

p
22
. p
2r

. . . .
p
k2
p
kr


Si se multiplica el mensaje codificado (sin errores) por esta matriz, el resultado ser
nulo.

[C] [H
T
] = [m][G] [H
T
] = 0

Si esto ocurre se tiene la garanta que el cdigo que llego es vlido. Si, en
cambio, el vector [C] se corrompe con un vector [e], la seal recibida ser:

[r] = [C]+ [e]

Por lo tanto, si en el receptor multiplicamos por la matriz [H
T
] obtendremos:

[S] = [r] [H
T
] = ( [C]+ [e] ) [H
T
] = [C] [H
T
]+ [e] [H
T
] = [e] [H
T
]

A [S] se le llama el sndrome. Si [r] pertenece al conjunto de palabras vlidas,
[S]=0. Si [r] tiene un error, [S] dar una pista sobre donde est dicho error. El sndrome
sobre [r] es igual al sndrome sobre [e]. Tiene que haber una correspondencia uno a uno
entre los patrones de error y el sndrome.

Por lo tanto, decodificar un cdigo lineal de bloque ( n , k ) requiere una matriz
de chequeo de paridad [H], n k n ) ( . Esta matriz satisface [G] [H
T
] = 0 , donde [H
T
]
denota la matriz traspuesta de [H], [G] es la matriz generadora de cdigo y esta matriz
cero es ) ( k n k . Si [G] = [Ik P] entonces H = [-P
T
In-k].

Fortaleza del cdigo

Definiciones:

Peso Hamming de un vector U = w(U) =Numero de elementos no nulos de U.
Distancia Hamming entre dos vectores U y V = d(U,V)= Numero de elementos
en los cuales difieren .
Cdigos lineales de bloques: cdigos Reed-Solomon


133
w(U+V) = d(U,V)
w(V) = d(V,0)

La mnima distancia de un cdigo define su fortaleza frente al ruido. Dado que la
suma de dos vectores de un subespacio dar otro elemento del subespacio.

d( U,V) = w(U+V) = w(Z)

Solo necesitamos ver el peso de cada vector y se elige el menor. Esto ser la
mnima distancia, dmin.

Qu hace el receptor?

U. r1. . . . .V (Aqu se decide por U)
U. . r2. . . .V (Aqu tambin se decide por U)

Sin embargo, si transmito V y se producen 3 errores, se convierte en U.

La distancia mnima define la capacidad de detectar y corregir errores. En
general un cdigo ( n , k ) es capaz de corregir 2r patrones de error o t errores ( t =
capacidad de correccin de un cdigo).

Cdigos cclicos

Son un tipo de cdigos lineales ms fciles de implementar. Un cdigo lineal es
llamado cclico si cumple:

Linealidad: La suma de 2 palabras cdigos es otra palabra cdigo
Desplazamiento cclico: Cualquier desplazamiento cclico de una palabra cdigo
es otra palabra cdigo.

Las componentes de un vector de cdigo C
0
, C
1
, C
2
, ... ,C
n-1
, pueden ser tratadas
como un polinomio:

C(X) = C
0
X
0
+C
1
X
1
+C
2
X
2
+ ... +C
n-1
X
n-1


Si C
n-1
es no nulo, se dice que el grado de C(X) es n-1. Si C(X) representa una
palabra de un cdigo cclico, el desplazamiento cclico del mismo i veces C
(i)
(X), se
puede representar como:

C
(i)
(X) = X
i
C(X) mod (X
n
+1)

O lo que es lo mismo, C
(i)
(X) es el residuo que resulta de dividir X
i
C(X) por (X
n
+1).

Supongamos:

C(X) = C
0
X
0
+C
1
X
1
+C
2
X
2
+ ... +C
n-1
X
n-1

XC(X) = C
0
X+C
1
X
2
+C
2
X
3
+ ... +C
n-1
X
n

Cdigos lineales de bloques: cdigos Reed-Solomon


134

Ahora sumamos 2 veces C
n-1
(ojo 1+1=0)

XC(X) = C
n-1
+C
0
X+C
1
X
2
+C
2
X
3
+ ... +C
n-2
X
n-1
+C
n-1
(X
n
+1) =
XC(X) = C
(1)
(X)+ C
n-1
(X
n
+1)
C
(1)
(X) = XC(X)mod(X
n
+1)

Por extensin se llega a:

C
(i)
(X)= X
i
C(X)mod(X
n
+1)

El termino (X
n
+1) juega un papel clave en la generacin de cdigos cclicos.

Para generar un cdigo cclico se puede usar un polinomio generador en forma parecida
a como en cdigos lineales por bloques usbamos una matriz generadora.

g(X) = Polinomio de grado ( k n )
m(X) = Polinomio mensaje de grado ( 1 k )
C(X) = Cdigo resultante
C(X) = (b0, b1, b2, ... b n-k-1 ,m0, m1, m2, ... m k-1) = b(X)+ X
n-k
m(X)
b(X) es el residuo que queda despus de dividir X
n-k
m(X) entre g(X))

Procedimiento:

Multiplicar X
n-k
m(X)
Dividir X
n-k
m(X)/g(X)
Tomar el residuo b(X)
Sumar b(X)+ X
n-k
m(X) y este ser el cdigo.

Cdigos BCH (Bose-Chaudhuri-Hocquenghem)

Los ms comunes son los llamados BCH primitivos los cuales tienen:
Longitud del bloque: 1 2 =
m
n ( m mayor o igual a 3)
Numero de bits del mensaje: mt n k
Distancia mnima 1 2 + t

Cada cdigo BCH es un cdigo corrector de t errores.

Cdigos Reed-Solomon

Son cdigos cclicos no binarios. Un cdigo RS( k n, ) expande un bloque de k
smbolos a n smbolos agregando k n smbolos redundantes.

Estos cdigos corrigen cualquier combinacin de t o menos errores y necesitan no ms
de t 2 bits de paridad. Los parmetros son t c k n 2 = = y 1 2 + = t d siendo d la
distancia mnima entre cualesquiera palabras de cdigo (distancia de Hamming), es
decir, el nmero mnimo de cambios de bits necesario para convertir una palabra de
cdigo en otra.



135


Apndice B

Cdigos Convolucionales


Se pueden ver como una convolucin en tiempo discreto entre la palabra de
informacin y la respuesta impulsiva del codificador.

Se diferencian de los cdigos de bloque en su forma estructural y las
propiedades para corregir errores. Los cdigos de bloque suelen tener limitada la
capacidad de correccin de errores alrededor de 1 o 2 smbolos errneos por palabra de
cdigo. Estos cdigos son buenos para utilizar en canales con baja probabilidad de
error. Los cdigos convolucionales son adecuados para usar sobre canales con mucho
ruido (alta probabilidad de error).

Los cdigos convolucionales son cdigos lineales, donde la suma de dos
palabras de cdigo cualesquiera tambin es una palabra de cdigo. Y al contrario que
los cdigos lineales se prefieren los cdigos no sistemticos. La probabilidad de error
que se puede conseguir con estos cdigos (al igual que con los de bloques) es similar a
la de los cdigos de formas de onda pero en cuanto a ancho de banda son mejores.

El sistema tiene memoria: la codificacin actual depende de los datos que se
envan ahora y que se enviaron en el pasado. Un cdigo convolucional queda
especificado por tres parmetros (n,k,m):

n es el nmero de bits de la palabra codificada
k es el nmero de bits de la palabra de datos
m es la memoria del cdigo o longitud restringida

Ejemplos
- Cdigo (2,1,3)

La palabra codificada tiene 2 bits de longitud
La entrada son bloques de 1 bit
La salida depende de los dos bloques anteriores y del actual

- Cdigo (4,2,3)

La palabra codificada tiene 4 bits de longitud
La entrada son bloques de 2 bits
La salida depende de los bloques anteriores y del actual

Cdigos convolucionales


136
Proceso de codificacin

El proceso de codificacin de estos cdigos se realiza utilizando un dispositivo
lgico en el codificador.

Ejemplo: Codificador convolucional (4,3,5)

La palabra codificada se obtendra como el resultado de realizar una serie de
operaciones lgicas entre determinados bits que estn almacenados en los registros
intermedios.

Ejemplo: Codificador convolucional (2,1,3)



El conmutador con las dos entradas hace el papel de un registro de
desplazamiento de dos estados. El cdigo convolucional es generado introduciendo un
bit de datos y dando una revolucin completa al conmutador. Inicialmente se supone
que los registros intermedios contienen ceros.

En este ejemplo la palabra codificada se obtiene como resultado de sumas mdulo-2
entre los bits indicados que estn almacenados en los registros intermedios.

Las secuencias de salida para el cdigo anteriormente descrito:

Entrada
(S3,S2,S1)
Salida
(O1,O2)
000 00
001 11
Cdigos convolucionales


137
010 01
011 10
100 10
101 01
110 11
111 00

Como ejemplo del funcionamiento de este codificador, supongamos que se
quiere enviar la secuencia de bits 0101 (donde los bits ms a la derecha son los ms
antiguos).

El proceso de codificacin es el siguiente:

Se introduce el primer bit de la secuencia en el codificador:



Se introduce el segundo bit de la secuencia en el codificador:



Se introduce el tercer bit de la secuencia en el codificador:



Se introduce el cuarto bit de la secuencia en el codificador:


Cdigos convolucionales


138

Al final del proceso de codificacin obtenemos que la secuencia codificada es 01
01 01 11.

Sigamos con la exposicin del proceso de codificacin. Debido a la memoria del
cdigo es necesario de disponer de medios adecuados para determinar la salida asociada
a una determinada entrada.

Hay tres mtodos grficos:

Diagrama rbol o rbol del cdigo: representacin mediante un rbol binario
de las distintas posibilidades.
Diagrama de estados: es la forma menos utilizada.
Diagrama de Trellis o enrejado: es la forma ms utilizada porque es la que
permite realizar la decodificacin de la forma ms sencilla.

Para el ejemplo del codificador (2,1,3) anteriormente especificado tenemos el
siguiente rbol del cdigo:
Cdigos convolucionales


139


La profundidad del rbol es ) 1 ( 2 m , y el nmero de estados es k m ) 1 ( 2
La interpretacin del rbol del cdigo es la siguiente:
Cdigos convolucionales


140

Hay dos ramas en cada nodo.
La rama superior corresponde a una entrada de un 0.
La rama inferior corresponde a la entrada de un 1.
En la parte exterior de cada rama se muestra el valor de salida.
El nmero de ramas se va multiplicando por dos con cada nueva entrada.

A partir del segundo nivel el rbol se vuelve repetitivo. En realidad, solo hay
cuatro tipos de nodos: A,B,C,D. Estos tipos de nodos en realidad son estados del
codificador. A partir de estos nodos, se producen los mismos bits de salida y el mismo
estado. Por ejemplo, de cualquier nodo etiquetado como C se producen el mismo par de
ramas de salida: Salida 10 y estado A Y Salida 01 y estado B

A partir de la identificacin de los estados del codificador se puede incorporar
esta informacin en el DIAGRAMA DE TRELLIS.

El diagrama de Trellis es un diagrama en forma de red. Cada lnea horizontal se
corresponde con uno de los estados del codificador. Cada lnea vertical se
correspondera con uno de los niveles del rbol del cdigo.

Partimos del estado inicial del codificador en el primer nivel del rbol. A partir
de aqu se trazan dos lneas desde este estado. Una para el caso de que la siguiente
entrada fuera un 0 y otra para el caso de que fuera un 1. Estas lneas irn hasta el
siguiente nivel del rbol al estado en el que queda el codificador despus de haber
codificado las correspondientes entradas. Encima de cada una de estas lneas
escribiremos la salida del codificador para esa codificacin.

Para cada nivel del rbol hacemos lo mismo desde todos los estados en los que el
codificador se puede encontrar.

Segn todo esto, el diagrama de Trellis para el codificador (2,1,3) de nuestro
ejemplo ser:


Vamos a seguir en el diagrama de Trellis que acabamos de construir la
codificacin de la secuencia de bits 0101.
Cdigos convolucionales


141


Proceso de decodificacin

El proceso de decodificacin consiste en buscar un camino en el diagrama de
Trellis (o en el rbol del cdigo) que nos d la secuencia de bits ms probable (si no hay
errores obtendremos la secuencia exacta).

El codificador convolucional aade una estructura a la secuencia de bits. Incluso
aunque la entrada sea totalmente aleatoria, se fuerza a que la salida siga unas
determinadas secuencias. Esta restriccin es la que da la capacidad correctora a los
cdigos convolucionales.

El procedimiento de decodificacin es equivalente a comparar la secuencia
recibida con todas las posibles secuencias que pueden obtenerse con el correspondiente
codificador y seleccionando la secuencia que est ms prxima a la secuencia recibida.
Para realizar la decodificacin se utiliza un algoritmo denominado Algoritmo de
Viterbi.

El fundamento de este algoritmo est en que no se almacenan todas las
secuencias a las que da lugar el codificador. Se basa en el principio de optimalidad: el
mejor camino (menor distancia de Hamming) a travs del diagrama de Trellis que pasa
por un determinado nodo, necesariamente incluye el mejor camino desde el principio
del diagrama de Trellis hasta este nodo.

El principio anterior implica que para cada uno de los nodos del diagrama de
Trellis slo es necesario guardar el mejor camino (secuencia) hasta ese nodo. De esta
forma, como mucho se tendrn tantos caminos como estados diferentes (el nmero de
estados es k m ) 1 ( 2 ).




Cdigos convolucionales


142

Descripcin del Algoritmo de Viterbi:

Paso 1: en el nivel j, calcular la distancia de Hamming de cada camino entrante
en cada nodo (estado) desde el nodo del nivel j-1 hasta el nodo del nivel j a travs del
camino superviviente.

Paso 2: para cada nodo (estado) del diagrama de Trellis en el nivel j, descartar
todos los caminos que entran en el nodo, excepto el de distancia mnima.Cuando a un
nodo llegan dos caminos con la misma distancia se toma el superior.

Paso 3: pasar al nivel j+1 y repetir los pasos 1 y 2.
Estos pasos se aplican para j mayor o igual que 2. Hasta ese valor se expanden los
caminos.






































143

Apndice C

Codigo MATLAB del interfaz grfico

A continuacin se presenta el cdigo MATLAB completo del archivo demoCOFDM.m
para aquellos que estn interesados en conocer detalles concretos o deseen ejecutarlo:

function varargout = demoCOFDM(varargin)
% DEMOCOFDM M-file for demoCOFDM.fig
% DEMOCOFDM, by itself, creates a new DEMOCOFDM or raises the existing
% singleton*.
%
% H = DEMOCOFDM returns the handle to a new DEMOCOFDM or the handle to
% the existing singleton*.
%
% DEMOCOFDM('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in DEMOCOFDM.M with the given input arguments.
%
% DEMOCOFDM('Property','Value',...) creates a new DEMOCOFDM or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before demoCOFDM_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to demoCOFDM_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help demoCOFDM
% Last Modified by GUIDE v2.5 09-Sep-2003 23:13:33
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(gui_Name, mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @demoCOFDM_OpeningFcn, ...
'gui_OutputFcn', @demoCOFDM_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin & isstr(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before demoCOFDM is made visible.
function demoCOFDM_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
Cdigo MATLAB del interfaz grfico


144
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to demoCOFDM (see VARARGIN)

% Choose default command line output for demoCOFDM
handles.output = hObject;

set(handles.BotonDatos,'Enable','off');
set(handles.BotonEspectro,'Enable','off');
set(handles.BotonConstelacion,'Enable','off');

set(handles.TextoTiempo,'BackgroundColor',get(0,'defaultUicontrolBackgroundCol
or'));
set(handles.TextoSER,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'
));
set(handles.TextoBER,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'
));
set(handles.TextoTasa,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor
'));

set(handles.TextoTiempo,'Enable','inactive');
set(handles.TextoTasa,'Enable','inactive');
set(handles.TextoBER,'Enable','inactive');
set(handles.TextoSER,'Enable','inactive');

set(handles.EjeH1,'Visible','on');
set(handles.EjeH2,'Visible','on');
set(handles.EjeV1,'Visible','off');
set(handles.EjeV2,'Visible','off');

ActivaSecuencia(handles);

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes demoCOFDM wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = demoCOFDM_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in BotonSimular.
function BotonSimular_Callback(hObject, eventdata, handles)
% hObject handle to BotonSimular (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)


imag = get(handles.RadioImagen,'Value');
MensajeDepuracion(handles, ['imag = ' num2str(imag)]);

imagen = get(handles.TextoImagen,'String');
MensajeDepuracion(handles, ['imagen = "' imagen '"']);

NumTramas = str2double(get(handles.TextoTramas,'String'));
MensajeDepuracion(handles, ['NumTramas = ' num2str(NumTramas)]);

contents = get(handles.ListaBDT,'String');
BDT = str2double(contents{get(handles.ListaBDT,'Value')});
Cdigo MATLAB del interfaz grfico


145
MensajeDepuracion(handles, ['BDT = ' num2str(BDT)]);

contents = get(handles.ListaMuestreo,'String');
AUDIOfrec = str2double(contents{get(handles.ListaMuestreo,'Value')});
MensajeDepuracion(handles, ['AUDIOfrec = ' num2str(AUDIOfrec)]);

val = get(handles.ListaRS, 'Value');
RSkL = [ 188 3 ];
RSnL = [ 204 7 ];
RSk = RSkL(val);
RSn = RSnL(val);
MensajeDepuracion(handles, ['RS = ' num2str(RSn) ',' num2str(RSk)]);

val = get(handles.ListaCC,'Value');
CCkL = [ 1 2 3 5 7 ];
CCnL = [ 2 3 4 6 8 ];
CCk = CCkL(val);
CCn = CCnL(val);
MensajeDepuracion(handles, ['CC = ' num2str(CCn) ',' num2str(CCk)]);

contents = get(handles.ListaGuarda,'String');
GUAint = str2num(contents{get(handles.ListaGuarda,'Value')});
MensajeDepuracion(handles, ['GUAint = ' num2str(GUAint)]);

contents = get(handles.ListaQAM,'String');
QAMm = str2num(contents{get(handles.ListaQAM,'Value')});
MensajeDepuracion(handles, ['QAMm = ' num2str(QAMm)]);

ESPbanda = str2double(get(handles.TextoBandas,'String'));
MensajeDepuracion(handles, ['ESPBanda = ' num2str(ESPbanda)]);

ESPginf = str2double(get(handles.TextoGInf,'String'));
MensajeDepuracion(handles, ['ESPGinf = ' num2str(ESPginf)]);

ESPgsup = str2double(get(handles.TextoGSup,'String'));
MensajeDepuracion(handles, ['ESPGsup = ' num2str(ESPgsup)]);


set(handles.BotonSimular,'Enable','off');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Llamar al simulador
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%imag=0;
%imagen = 'vente.gif';
%NumTramas=1;
%RSk=188;
%RSn=204;
%CCk=7;
%CCn=8;
%QAMm=6;
%ESPbanda=100;
%ESPginf=1;
%ESPgsup=21;
%GUAint=1/32;
%AUDIOfrec = 48000;
[ Tiempo TasaNeta BER SER esImagen DatosTX DatosRX EspectroTX EspectroRX
ConstelacionTX ConstelacionRX ] =
principal_(imag,imagen,NumTramas,RSn,RSk,CCk,CCn,QAMm,ESPbanda,ESPginf,ESPgsup
,GUAint,AUDIOfrec);
%%%%%%%%%%%%%%%%%%%%%%%%%%
set(handles.BotonSimular,'Enable','on');


set(handles.TextoTiempo,'String',num2str(Tiempo));
set(handles.TextoTasa,'String',num2str(TasaNeta));
set(handles.TextoBER,'String',num2str(BER));
set(handles.TextoSER,'String',num2str(SER));

Cdigo MATLAB del interfaz grfico


146
handles.esImagen = esImagen;
handles.DatosTX = DatosTX;
handles.DatosRX = DatosRX;
handles.EspectroTX = EspectroTX;
handles.EspectroRX = EspectroRX;
handles.ConstelacionTX = ConstelacionTX;
handles.ConstelacionRX = ConstelacionRX;

%
handles.AUDIOfrec = AUDIOfrec;

set(handles.BotonDatos,'Enable','on');
set(handles.BotonEspectro,'Enable','on');
set(handles.BotonConstelacion,'Enable','on');


%Pinta los datos
BotonDatos_Callback(hObject, eventdata, handles);

% Update handles structure
guidata(hObject, handles);

% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)


% --- Executes on button press in BotonSalir.
function BotonSalir_Callback(hObject, eventdata, handles)
% hObject handle to BotonSalir (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

close(demoCOFDM);


% --- Executes on button press in RadioSecuencia.
function RadioSecuencia_Callback(hObject, eventdata, handles)
% hObject handle to RadioSecuencia (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

ActivaSecuencia(handles);

% Hint: get(hObject,'Value') returns toggle state of RadioSecuencia


% --- Executes on button press in RadioImagen.
function RadioImagen_Callback(hObject, eventdata, handles)
% hObject handle to RadioImagen (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of RadioImagen

ActivaImagen(handles);

% --- Executes during object creation, after setting all properties.
function TextoImagen_CreateFcn(hObject, eventdata, handles)
% hObject handle to TextoImagen (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
Cdigo MATLAB del interfaz grfico


147
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end



function TextoImagen_Callback(hObject, eventdata, handles)
% hObject handle to TextoImagen (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of TextoImagen as text
%str2double(get(hObject,'String')) returns contents of TextoImagen as a double


% --- Executes during object creation, after setting all properties.
function TextoTram_CreateFcn(hObject, eventdata, handles)
% hObject handle to TextoTramas (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject, 'BackgroundColor','white');
else
set(hObject, 'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end



function TextoTram_Callback(hObject, eventdata, handles)
% hObject handle to TextoTramas (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of TextoTramas as text
%str2double(get(hObject,'String')) returns contents of TextoTramas as a double


% --- Executes during object creation, after setting all properties.
function edit3_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject, 'BackgroundColor','white');
else
set(hObject, 'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end



function edit3_Callback(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit3 as text
% str2double(get(hObject,'String')) returns contents of edit3 as a double


% --- Executes during object creation, after setting all properties.
function ListaMuestreo_CreateFcn(hObject, eventdata, handles)
Cdigo MATLAB del interfaz grfico


148
% hObject handle to ListaMuestreo (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject, 'BackgroundColor','white');
else
set(hObject, 'BackgroundColor'get(0, 'defaultUicontrolBackgroundColor'));
end


% --- Executes on selection change in ListaMuestreo.
function ListaMuestreo_Callback(hObject, eventdata, handles)
% hObject handle to ListaMuestreo (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns ListaMuestreo contents as
%cell array
% contents{get(hObject,'Value')} returns selected item from ListaMuestreo



% --- Executes during object creation, after setting all properties.
function ListaRS_CreateFcn(hObject, eventdata, handles)
% hObject handle to ListaRS (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject, 'BackgroundColor','white');
else
set(hObject, 'BackgroundColor'get(0, 'defaultUicontrolBackgroundColor'));
end


% --- Executes on selection change in ListaRS.
function ListaRS_Callback(hObject, eventdata, handles)
% hObject handle to ListaRS (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns ListaRS contents as cell
%array
% contents{get(hObject,'Value')} returns selected item from ListaRS


% --- Executes during object creation, after setting all properties.
function ListaCC_CreateFcn(hObject, eventdata, handles)
% hObject handle to ListaCC (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject, 'BackgroundColor','white');
else
set(hObject, 'BackgroundColor'get(0, 'defaultUicontrolBackgroundColor'));
end


% --- Executes on selection change in ListaCC.
function ListaCC_Callback(hObject, eventdata, handles)
Cdigo MATLAB del interfaz grfico


149
% hObject handle to ListaCC (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns ListaCC contents as cell
%array
% contents{get(hObject,'Value')} returns selected item from ListaCC


% --- Executes during object creation, after setting all properties.
function ListaGuarda_CreateFcn(hObject, eventdata, handles)
% hObject handle to ListaGuarda (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject, 'BackgroundColor','white');
else
set(hObject, 'BackgroundColor'get(0, 'defaultUicontrolBackgroundColor'));
end


% --- Executes on selection change in ListaGuarda.
function ListaGuarda_Callback(hObject, eventdata, handles)
% hObject handle to ListaGuarda (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns ListaGuarda contents as cell
array
% contents{get(hObject,'Value')} returns selected item from ListaGuarda


% --- Executes during object creation, after setting all properties.
function ListaBDT_CreateFcn(hObject, eventdata, handles)
% hObject handle to ListaBDT (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject, 'BackgroundColor','white');
else
set(hObject, 'BackgroundColor'get(0, 'defaultUicontrolBackgroundColor'));
end


% --- Executes on selection change in ListaBDT.
function ListaBDT_Callback(hObject, eventdata, handles)
% hObject handle to ListaBDT (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns ListaBDT contents as cell
array
% contents{get(hObject,'Value')} returns selected item from ListaBDT


% --- Executes during object creation, after setting all properties.
function TextoBandas_CreateFcn(hObject, eventdata, handles)
% hObject handle to TextoBandas (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
Cdigo MATLAB del interfaz grfico


150
% See ISPC and COMPUTER.
if ispc
set(hObject, 'BackgroundColor','white');
else
set(hObject, 'BackgroundColor'get(0, 'defaultUicontrolBackgroundColor'));
end



function TextoBandas_Callback(hObject, eventdata, handles)
% hObject handle to TextoBandas (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

CompruebaEntero(handles, handles.TextoBandas);

% Hints: get(hObject,'String') returns contents of TextoBandas as text
%str2double(get(hObject,'String')) returns contents of TextoBandas as a double


% --- Executes during object creation, after setting all properties.
function TextoGInf_CreateFcn(hObject, eventdata, handles)
% hObject handle to TextoGInf (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject, 'BackgroundColor','white');
else
set(hObject, 'BackgroundColor'get(0, 'defaultUicontrolBackgroundColor'));
end



function TextoGInf_Callback(hObject, eventdata, handles)
% hObject handle to TextoGInf (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of TextoGInf as text
% str2double(get(hObject,'String')) returns contents of TextoGInf as a double

CompruebaEntero(handles, handles.TextoGInf);


% --- Executes during object creation, after setting all properties.
function TextoGSup_CreateFcn(hObject, eventdata, handles)
% hObject handle to TextoGSup (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor'get(0, 'defaultUicontrolBackgroundColor'));
end



function TextoGSup_Callback(hObject, eventdata, handles)
% hObject handle to TextoGSup (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

Cdigo MATLAB del interfaz grfico


151
% Hints: get(hObject,'String') returns contents of TextoGSup as text
% str2double(get(hObject,'String')) returns contents of TextoGSup as a double

CompruebaEntero(handles, handles.TextoGSup);


% --- Executes on button press in BotonDatos.
function BotonDatos_Callback(hObject, eventdata, handles)
% hObject handle to BotonDatos (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

LimpiaPlots(handles);

if handles.esImagen,
set(handles.EjeH1,'Visible','off');
set(handles.EjeH2,'Visible','off');
set(handles.EjeV1,'Visible','on');
set(handles.EjeV2,'Visible','on');

subplot(handles.EjeV1),imagesc(handles.DatosTX,[0 255]),colormap(gray);
subplot(handles.EjeV2),imagesc(handles.DatosRX,[0 255]),colormap(gray);
else
set(handles.EjeH1,'Visible','on');
set(handles.EjeH2,'Visible','on');
set(handles.EjeV1,'Visible','off');
set(handles.EjeV2,'Visible','off');

subplot(handles.EjeH1),plot(handles.DatosTX,'b'),title('TRAMAS DE DATOS
TRANSMITIDAS'),xlabel('Indice Temporal n'),ylabel('Valor');
subplot(handles.EjeH2),plot(handles.DatosRX,'r'),title('TRAMAS DE DATOS
RECIBIDAS'),xlabel('Indice Temporal n'),ylabel('Valor');
end

% --- Executes on button press in BotonEspectro.
function BotonEspectro_Callback(hObject, eventdata, handles)
% hObject handle to BotonEspectro (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

set(handles.EjeH1,'Visible','on');
set(handles.EjeH2,'Visible','on');
set(handles.EjeV1,'Visible','off');
set(handles.EjeV2,'Visible','off');


LimpiaPlots(handles);

f = 0:handles.AUDIOfrec/(length(handles.EspectroTX)-1)/2:handles.AUDIOfrec/2;

subplot(handles.EjeH1),plot(f,handles.EspectroTX,'b'),title('ESPECTRO
TRANSMITIDO'),xlabel('Frecuencia (Hz)'),ylabel('Magnitud (dB)');
subplot(handles.EjeH2),plot(f,handles.EspectroRX,'r'),title('ESPECTRO
RECIBIDO'),xlabel('Frecuencia (Hz)'),ylabel('Magnitud (dB)');

% --- Executes on button press in BotonConstelacion.
function BotonConstelacion_Callback(hObject, eventdata, handles)
% hObject handle to BotonConstelacion (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

set(handles.EjeH1,'Visible','off');
set(handles.EjeH2,'Visible','off');
set(handles.EjeV1,'Visible','on');
set(handles.EjeV2,'Visible','on');

LimpiaPlots(handles);

Cdigo MATLAB del interfaz grfico


152
subplot(handles.EjeV1),plot(handles.ConstelacionTX,'.b'),title('CONSTELACION
TRANSMITIDA'),xlabel('Eje fase I'),ylabel('Eje cuadratura Q');
axis square;
axis equal;
grid on;

subplot(handles.EjeV2),plot(handles.ConstelacionRX,'.r'),title('CONSTELACION
RECIBIDA'),xlabel('Eje fase I'),ylabel('Eje cuadratura Q');
axis square;
axis equal;
grid on;


% --- Executes during object creation, after setting all properties.
function edit7_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit7 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end



function edit7_Callback(hObject, eventdata, handles)
% hObject handle to edit7 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit7 as text
% str2double(get(hObject,'String')) returns contents of edit7 as a double


% --- Executes during object creation, after setting all properties.
function TextoTiempo_CreateFcn(hObject, eventdata, handles)
% hObject handle to TextoTiempo (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end




function TextoTiempo_Callback(hObject, eventdata, handles)
% hObject handle to TextoTiempo (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,String) returns contents of TextoTiempo as text
%str2double(get(hObject,String)) returns contents of TextoTiempo as a double


% --- Executes during object creation, after setting all properties.
function TextoSER_CreateFcn(hObject, eventdata, handles)
% hObject handle to TextoSER (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
Cdigo MATLAB del interfaz grfico


153
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end



function TextoSER_Callback(hObject, eventdata, handles)
% hObject handle to TextoSER (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of TextoSER as text
% str2double(get(hObject,'String')) returns contents of TextoSER as a double


% --- Executes during object creation, after setting all properties.
function TextoBER_CreateFcn(hObject, eventdata, handles)
% hObject handle to TextoBER (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end



function TextoBER_Callback(hObject, eventdata, handles)
% hObject handle to TextoBER (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of TextoBER as text
% str2double(get(hObject,'String')) returns contents of TextoBER as a double


% --- Executes during object creation, after setting all properties.
function ListaQAM_CreateFcn(hObject, eventdata, handles)
% hObject handle to ListaQAM (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end


% --- Executes on selection change in ListaQAM.
function ListaQAM_Callback(hObject, eventdata, handles)
% hObject handle to ListaQAM (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

Cdigo MATLAB del interfaz grfico


154
% Hints: contents = get(hObject,'String') returns ListaQAM contents as cell
%array
% contents{get(hObject,'Value')} returns selected item from ListaQAM


% --- Executes during object creation, after setting all properties.
function TextoTramas_CreateFcn(hObject, eventdata, handles)
% hObject handle to TextoTramas (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end



function TextoTramas_Callback(hObject, eventdata, handles)
% hObject handle to TextoTramas (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of TextoTramas as text
%str2double(get(hObject,'String')) returns contents of TextoTramas as a double

CompruebaEntero(handles, handles.TextoTramas);


% --- If Enable == 'on', executes on mouse press in 5 pixel border.
% --- Otherwise, executes on mouse press in 5 pixel border or over
%RadioSecuencia.
function RadioSecuencia_ButtonDownFcn(hObject, eventdata, handles)
% hObject handle to RadioSecuencia (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
disp('Radio');

function ActivaSecuencia(handles)

set(handles.TextoTramas,'BackgroundColor','white');
set(handles.TextoImagen,'BackgroundColor',get(0,'defaultUicontrolBackgroundCol
or'));

set(handles.TextoTramas,'Enable','on');
set(handles.TextoImagen,'Enable','off');
'
set(handles.RadioSecuencia,'Value',1);
set(handles.RadioImagen,'Value',0);

function ActivaImagen(handles)

set(handles.TextoTramas,'BackgroundColor',get(0,'defaultUicontrolBackgroundCol
or'));
set(handles.TextoImagen,'BackgroundColor','white');

set(handles.TextoImagen,'Enable','on');
set(handles.TextoTramas,'Enable','off');

set(handles.RadioSecuencia,'Value',0);
set(handles.RadioImagen,'Value',1);

function MensajeDepuracion(handles, mensaje)

%mensaje = [ get(handles.Mensajes,'String') mensaje 13 ];
Cdigo MATLAB del interfaz grfico


155
%set(handles.Mensajes,'String',mensaje);


% --- Executes during object creation, after setting all properties.
function edit11_CreateFcn(hObject, eventdata, handles)
% hObject handle to TextoTiempo (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end


function edit11_Callback(hObject, eventdata, handles)
% hObject handle to TextoTiempo (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of TextoTiempo as text
%str2double(get(hObject,'String')) returns contents of TextoTiempo as a double


% --- Executes during object creation, after setting all properties.
function TextoTasa_CreateFcn(hObject, eventdata, handles)
% hObject handle to TextoTasa (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end



function TextoTasa_Callback(hObject, eventdata, handles)
% hObject handle to TextoTasa (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of TextoTasa as text
% str2double(get(hObject,'String')) returns contents of TextoTasa as a double


% --- Executes during object creation, after setting all properties.
function edit13_CreateFcn(hObject, eventdata, handles)
% hObject handle to TextoBER (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end


function edit13_Callback(hObject, eventdata, handles)
Cdigo MATLAB del interfaz grfico


156
% hObject handle to TextoBER (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of TextoBER as text
% str2double(get(hObject,'String')) returns contents of TextoBER as a double


% --- Executes during object creation, after setting all properties.
function edit14_CreateFcn(hObject, eventdata, handles)
% hObject handle to TextoSER (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end


function edit14_Callback(hObject, eventdata, handles)
% hObject handle to TextoSER (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of TextoSER as text
% str2double(get(hObject,'String')) returns contents of TextoSER as a double


function CompruebaNumero(texto)

val = str2double(get(texto,'String'));
if isnan(val),
set(texto,'String','');
errordlg('Los parametros tienen que ser numeros','');
end

function CompruebaEntero(handles, texto)

val = str2double(get(texto,'String'));
if isnan(val),
set(texto,'String','');
errordlg('Los parametros tienen que ser numeros');
return;
end

MensajeDepuracion(handles, ['val = ' num2str(val)]);

if floor(val) ~= ceil(val),
set(texto,'String','');
errordlg('Los parametros tienen que ser enteros');
end

function LimpiaPlots(handles)

handlePlot=get(handles.EjeH1,'Children');
if length(handlePlot)==1,
delete(handlePlot(1));
end
handlePlot=get(handles.EjeH2,'Children');
if length(handlePlot)==1,
delete(handlePlot(1));
end
handlePlot=get(handles.EjeV1,'Children');
if length(handlePlot)==1,
Cdigo MATLAB del interfaz grfico


157
delete(handlePlot(1));
end
handlePlot=get(handles.EjeV2,'Children');
if length(handlePlot)==1,
delete(handlePlot(1));
end






















158


Referencias

[1] Timing Synchronization of the WIND-FLEX OFDM prototype.
http://www.vtt.fi/ele/research/els/projects/windflexdocs/ist2002_synch_mpl.p
df

[2] The suitability of OFDM as a modulation technique for wireless
telecommunications, with a CDMA comparison.
http://www.skydsp.com/resources/OFDM_thesis_lawrey.PDF

[3] Sistemas de difusin.
http://wgpi.tsc.uvigo.es/libro/difusion/difusion.htm

[4] Cuaderno Tcnico n 6. Parte 1: Introduccin al COFDM.
http://www.canal9-mendoza.com.ar/CuadernoT6_1.htm

[5] Explaining some of the magic of COFDM.
http://www.bbc.co.uk/rd/pubs/papers/paper_15/paper_15.html

[6] Codificacin por bloques.
http://prof.usb.ve/tperez/docencia/3413/contenido/codifico/codifico.htm

[7] Seccion 2.Cdigos convolucionales.
http://trabajospracticos.4mg.com/cod/secc2.htm

[8] Design and implementation of OFDM signaling.
http://cegt201.bradley.edu/projects/proj2001/ofdmabsh/Research_Proj_Descr
iption.pdf

[9] Apuntes de Sistemas de Radiodifusin Digital.
http://www.grc.ssr.upm.es/docencia/RDCM/normativa/normativa_rdcm03.pd
f

[10] J. Proakis. Digital communications. Prentice-Hall, 3 edicin, 1995.

[11] W.D. Warner y C. Leung. OFDM/FM frame syncronization for mobile radio
data communication. Agosto 1993.

[12] P.J. Tourtier, R. Monnier y P. Lpez. Multicarrier modem for digital HDTV
terrestrial broadcasting. Diciembre 1993.

[13] J.-J. Van de Beek, M. Sandell y P.O. Brjesson. ML estimation of timing and
frequency offset in multicarrier systems. Research Report 1996-99, Division
of Signal Processing. Lulea University of Technology, 1996.

Referencias


159
[14] J.-J. Van de Beek, M. Sandell y P.O. Brjesson. Timing and frequency
synchronization in OFDM systems using the cyclic prefix. Diciembre 1995.

[15] J.-J. Van de Beek, M. Sandell, M. Isaksson y P.O. Brjesson. Low complex
frame synchronization in OFDM systems. Noviembre 1995.

[16] T. Pollet y M. Moeneclaey. Synchronizability of OFDM signals. Noviembre
1995.

[17] T. Pollet, M. Van Bladel y M. Moeneclaey. BER sensitivity of OFDM
systems to carrier frequency offset and Wiener phase noise. Febrero-Abril
1995.

[18] T. Pollet, P. Spruyt y M. Moeneclaey. The BER performance of OFDM
systems using non-synchronized sampling. Noviembre 1995.

[19] P. Moose. A technique for orthogonal frequency-division multiplexing
frequency offset correction. Octubre 1994.

[20] L. Wei y C. Schlegel. Synchronization requirements for multi-user OFDM on
satellite mobile and two-path Rayleigh-fading channels. Febrero-Abril 1995.

[21] F. Classen y H. Meyr. Frequency synchronization algorithms for OFDM
systems suitable for communication over frequency-selective fading channels.
Junio 1994.

[22] F. Daffara y O. Adami. A new frequency detector for orthogonal multicarrier
transmission techniques. Julio 1995.

[23] F. Daffara y A. Chouly. Maximum-likelihood frequency detectors for
orthogonal multicarrier systmes. Mayo 1993.

[24] K. W. Kang, J. Ann y H. S. Lee. Decision-directed maximum-likelihood
estimation of OFDM frame synchronization offset. Diciembre 1994.