Está en la página 1de 117

Proyecto Fin de Carrera

Ttulo: Simulador de un sistema de Transmisin, Recepcin y ecualizacin de DVB-T en Simulink.


Autor: Isaac Castro Mateos. Director: Dr. Jos Ramn Crquides Bueno.

1.- Introduccin _______________________________________________________ 5 2.- Introduccin al sistema DVB-T y a la modulacin OFDM __________________ 7
2.1.- Sistema DVB-T________________________________________________________ 7 2.2.- Modulacin OFDM ____________________________________________________ 9 2.3- Generador de seales DVB-T ___________________________________________ 11
2.3.1.-Generacin de datos sin portadoras ____________________________________________12 2.3.1.1.- Codificacin de bloque y entrelazado convolucional___________________________12 2.3.1.2.- Codificacin interna ____________________________________________________15 2.3.1.2.1.- Entrelazador de bits ________________________________________________18 2.3.1.2.2.- Entrelazador de smbolos ____________________________________________19 2.3.2.- Modulacin OFDM en Televisin digital Terrestre _______________________________21 2.3.2.1.- Portadoras Pilotos _____________________________________________________22 2.3.2.2.- Portadoras TPS________________________________________________________23

3.- Bloques de Simulink________________________________________________ 24


3.1.- Generador de datos tiles ______________________________________________ 26
3.1.1.- Generador de datos para una seal DVB-T____________________________________26 3.1.1.1.- Generador de datos_____________________________________________________27 3.1.1.2.- Codificador Reed Salomon ______________________________________________28 3.1.1.3.- Entrelazador Convolucional______________________________________________28 3.1.1.3.1.- Entrelazador Convolucional __________________________________________28 3.1.1.3.2.- Convertidor de Bytes a bits___________________________________________29 3.1.1.4.- Aade cdigo convolucional de k/n = .____________________________________30 3.1.1.5.- Entrelazador interno ____________________________________________________31 3.1.1.5.1.- Unbuffer _________________________________________________________31 3.1.1.5.2.- Buffer ___________________________________________________________31 3.1.1.5.3.- Entrelazador de bits ________________________________________________31 3.1.1.5.4.- Buffer ___________________________________________________________32 3.1.1.5.5.- Entrelazador de smbolos ____________________________________________33 3.1.1.5.5.1.- Entrelazador para smbolos pares __________________________________33 3.1.1.5.5.2.- Seal de control ________________________________________________34 3.1.1.5.5.2.1.- Generador de pulso _________________________________________34 3.1.1.5.5.2.2.- Sumatorio _________________________________________________35 3.1.1.5.5.2.3.- DSP constant ______________________________________________35 3.1.1.5.5.3 Entrelazador para smbolos impares. _________________________________36 3.1.1.5.5.4 Switch ________________________________________________________36 3.1.1.6.- Convertidor de bits a smbolos de 64-QAM _________________________________37 3.1.2.- Modulador 64-QAM _______________________________________________________38

3.2.- Generador de pilotos: _________________________________________________ 39


3.2.1.- Bloque PN Sequence Generator ______________________________________________40 3.2.2.- Constante de un medio a sumar para modular las portadoras pilotos __________________40 3.2.3.- Sum ____________________________________________________________________41 3.2.4.- Constante a multiplicar para modular las portadoras pilotos_________________________41

3.3.- Seleccionador de ndices para pilotos_____________________________________ 42


3.3.1.- Vector para ordenar los smbolos _____________________________________________42 3.3.2.- Seleccionador de vectores _________________________________________________42 3.3.3.- Seal de control ___________________________________________________________43

3.4.- Concatena datos, pilotos y portadoras TPS________________________________ 44 3.5.- Coloca en orden los datos, las portadoras TPS y las portadoras pilotos. ________ 45 3.6.- TPS ________________________________________________________________ 46
3.6.1.- Bernoulli Binary Generator __________________________________________________46 3.6.2.- Constante de un medio _____________________________________________________47 3.6.3.- Sum ____________________________________________________________________47 3.6.4.- Constante a multiplicar para modular las portadoras TPS___________________________47

2 3.7.- Modulacin OFDM ___________________________________________________ 48


3.7.1.- Aadimos hasta 8192 ______________________________________________________48 3.7.2.- Cambia el orden de los datos_________________________________________________49 3.7.3.- IFFT____________________________________________________________________49 3.7.4.- Aadimos hasta 10240 _____________________________________________________50 3.7.5.- Cambia el orden de los datos_________________________________________________50

3.8.- Seal a Transportar___________________________________________________ 51 3.9- Pruebas realizadas para comprobar el funcionamiento ______________________ 52
3.9.1.- Comprobacin del tamao de los vectores ______________________________________52 3.9.2.- Comprobacin de que si aadimos las portadoras pilotos y luego las extraemos obtenemos estas mismas ___________________________________________________________________53 3.9.3.- Comprobacin de que si aadimos las portadoras TPS y luego las extraemos obtenemos estas mismas _______________________________________________________________________55 3.9.4.- Comprobacin de que los valores de las portadoras TPS y pilotos estn en el lugar correcto56 3.9.5.- Comprobacin de las constelaciones ___________________________________________57

4.- Canal y receptor para seales DVB-T __________________________________ 60 5.- Funcionamiento bsico del receptor ___________________________________ 61 6- Bloques de Simulink ________________________________________________ 63
6.1.- Informacin _________________________________________________________ 65 6.2.- Canal _______________________________________________________________ 66
6.2.1.- Atenuacin del canal i ______________________________________________________66 6.2.2.- Camino i ________________________________________________________________67 6.2.3.- Suma los tres caminos ______________________________________________________67 6.2.4.- Adiccin de ruido blanco Gaussiano ___________________________________________67

6.3.- Demodulador de OFDM _______________________________________________ 68


6.3.1.- Almacena 10240 muestras___________________________________________________68 6.3.2.- Quita el prefijo cclico ______________________________________________________69 6.3.3.- FFT ____________________________________________________________________69 6.3.4.- Convierte a trama _________________________________________________________69 6.3.5.- Quita muestras hasta 6817___________________________________________________70

6.4.- Estimador de canal usando pilotos_______________________________________ 71


6.4.1.- Selecciona portadoras pilotos ________________________________________________73 6.4.2.- Seleccionador de ndices para pilotos __________________________________________73 6.4.3.- Generador de pilotos _______________________________________________________73 6.4.4.- Retraso de cuatro tramas ____________________________________________________73 6.4.5.- Estima el canal en las portadoras pilotos________________________________________74 6.4.6.- Acumulamos cuatro smbolos ________________________________________________74 6.4.7.- Ordena las portadoras pilotos ________________________________________________75 6.4.8.- Divide por la mitad ________________________________________________________75 6.4.9.- Sum ____________________________________________________________________75 6.4.10.- Retraso de una trama ______________________________________________________76 6.4.11.- Interpolador Complejo_____________________________________________________77 6.4.11.1.- Dividimos la seal en parte real e imaginaria _______________________________77 6.4.11.2.- Interpolacin Real ____________________________________________________78 6.4.11.3.- Interpolacin imaginaria _______________________________________________78 6.4.11.4.- Unimos para crear una seal compleja_____________________________________78

6.5.- Retraso de tres tramas_________________________________________________ 79 6.6.- Retraso de cinco tramas _______________________________________________ 80 6.7.- Retraso de ocho tramas ________________________________________________ 81 6.8.- Dividimos por la estima del canal________________________________________ 82 6.9.- Eliminador de ruido___________________________________________________ 83

3
6.9.1.- Seleccionador de datos _____________________________________________________83 6.9.1.1.- ndices de datos de los smbolos __________________________________________84 6.9.1.2.- Seleccionador de smbolo _______________________________________________84 6.9.1.3.- Seal de control _______________________________________________________84 6.9.2.- Elimina las portadoras ______________________________________________________85 6.9.3.- Eliminador de ruido________________________________________________________85 6.9.3.1.- Demodulador _________________________________________________________86 6.9.3.1.1.- Unbuffer _________________________________________________________86 6.9.3.1.2.- Valores de la constelacin ___________________________________________86 6.9.3.1.3.- Restador _________________________________________________________86 6.9.3.1.4.- Modulo __________________________________________________________87 6.9.3.1.5.- Escoge mnimo ____________________________________________________87 6.9.3.1.6.- Restador _________________________________________________________87 6.9.3.1.7.- Constante ________________________________________________________87 6.9.3.1.8.- Almacena 6048 muestras ____________________________________________88 6.9.3.1.9.- Convertidor de smbolos a bits ________________________________________88 6.9.3.2.- Desentrelazador interno _________________________________________________89 6.9.3.2.1.- Desentrelazador de smbolo __________________________________________90 6.9.3.2.1.1.- Desentrelazador para smbolos pares _______________________________90 6.9.3.2.1.2.- Seal de control ________________________________________________91 6.9.3.2.1.2.1.- Generador de pulso _________________________________________91 6.9.3.2.1.2.2.- Sumatorio _________________________________________________92 6.9.3.2.1.2.3.- DSP constant ______________________________________________92 6.9.3.2.1.3 Entrelazador para smbolos impares. _________________________________93 6.9.3.2.1.4.-Escoge entre smbolos ___________________________________________93 6.9.3.2.2.- Buffer ___________________________________________________________94 6.9.3.2.3.- Desentrelazador de bits______________________________________________94 6.9.3.2.4.- Retraso __________________________________________________________95 6.9.3.2.5.- Buffer ___________________________________________________________95 6.9.3.3.- Decodificador de Viterbi ________________________________________________96 6.9.3.4.- Desentrelazador convolucional ___________________________________________96 6.9.3.4.1.- Convertidor de bits a bytes ___________________________________________96 6.9.3.4.2.- Retraso __________________________________________________________97 6.9.3.4.3.- Desentrelazador convolucional________________________________________97 6.9.3.5.- Decodificador de bloque Reed-Salomon ____________________________________97

6.10.- Constelacin no Ecualizada y Ecualizada ________________________________ 98 6.11.- Calculador del error entre la seal que se transmiti y la recibida ___________ 99 6.12.- Muestra la Ber, el nmero total de bits errneos y el nmero total de bits ____ 100 6.13.- Pruebas realizadas para comprobar el funcionamiento____________________ 101
3.3.1.- Comprobacin de que el ecualizador funciona __________________________________101 6.13.2.- Comprobacin de que el eliminador de ruido funciona___________________________103 6.13.3.- Comprobacin de que el sistema completo funciona ____________________________104 6.13.3.1.- Comprobacin de que dat y datos son iguales __________________________104 6.13.3.2.- Clculo del error de los datos en las tramas finales e iniciales. _________________105

7.- Conclusiones y lneas de trabajo futuras ______________________________ 107


7.1.- Conclusiones ________________________________________________________ 107 7.2.- Futuras lneas de trabajo______________________________________________ 108

8.- Bibliografa______________________________________________________ 109 Anexo A ___________________________________________________________ 110


Generador_dvbt_fun _____________________________________________________ 110 Tablas _________________________________________________________________ 112 Interpolador ____________________________________________________________ 116

1.- Introduccin
La llegada de la televisin digital supone un cambio tan radical como el que supuso el paso del blanco y negro al color. No solo se trata de conseguir imgenes mejores, sino que tambin ha abierto las puertas a la introduccin de servicios hasta ahora inimaginables, como la recepcin mvil de televisin, la interactividad, la televisin a la carta o los servicios multimedia tan de moda hoy en da con la explosin de Internet. El principal problema de la televisin analgica es que no saca partido al hecho de que en la mayora de los casos, las seales de vdeo varan muy poco al pasar de un elemento de imagen (pxel) a los contiguos, o por lo menos existe una dependencia entre ellos. Al igual que entre las imgenes sucesivas. En pocas palabras, se derrocha espectro electromagntico. Adems al crecer el nmero de estaciones transmisoras, la interferencia pasa a convertirse en un grave problema. Los canales radioelctricos de la televisin digital ocupan la misma anchura de banda (8MHz) que los canales utilizados por la televisin analgica pero, debido a la utilizacin de tcnicas de compresin de las seales de imagen y sonido (MPEG), tienen capacidad para un nmero variable de programas de televisin en funcin de la velocidad de transmisin, pudiendo oscilar entre un nico programa de televisin de alta definicin (gran calidad de imagen y sonido) a cinco programas con calidad tcnica similar a la actual (norma de emisin G con sistema de color PAL), o incluso ms programas con calidad similar al vdeo. Existen varios grupos y foros que se encargan de la puesta en funcionamiento de la Televisin Digital. - Proyecto Europeo DVB (Digital Video Broadcasting), que establece las normas para difusin digital que se aplican a todas las formas de difusin (satlite, cable terrestre y otras). - Foro DIGITAG (DIGital Terrestrial Action Group), que se encarga de unificar criterios de requisitos de servicio , de funcionalidades del receptor , de aspectos regulatorios con todas las matizaciones propias de cada pas y de fomentar la rpida introduccin de televisin digital . - Proyecto VALIDATE (Verification And Launch of Integrated Digital Advanced Television in Europe), que es el grupo de trabajo que valida todas las experiencias de televisin digital, en cuanto a la compatibilidad de los distintos receptores. - Proyecto MOTIVATE, que analiza la posibilidad de recepcin mvil de la televisin digital - Proyecto VIDITER (Video Digital TERrestre), constituye el primer proyecto espaol en televisin digital terrenal, y cuyo objetivo es desarrollar una red de televisin digital terrenal y evaluar el comportamiento de este nuevo sistema, con experiencias reales de emisin.

- dTTb (digital Terrestrial Television broadcasting). El siguiente proyecto implementa un transmisor y receptor para DVB-T (Digital Video Broadcasting-Terrestrial, en castellano Difusin de Video Digital-Terrestre), que es el estndar europeo para DVB, usando el lenguaje de programacin MATLAB y ms concretamente su herramienta de simulacin en tiempo real, SIMULINK. Para comprobar la efectividad a la hora de recuperar los datos se implementar tambin un canal que tendr ruido AWGN (Additive White Gaussian Noise o Ruido Gaussiano Blanco aditivo en espaol), y adems dispersin por multicamino. El receptor deber ser capaz de mantener la BER (Bit Error Rate) en unas cotas aceptables, para ello, se implementarn una serie de bloques, los cuales realizaran los algoritmos detallados en el estndar ETSI EN 300 744 V.1.4.1, que describen la correccin del error. Y por otro lado, habr que desarrollar, tambin, un ecualizador que elimine la dispersin de multicamino. A la luz de esto, se dividir el proyecto en dos partes, Generador de seales DVB-T y Receptor DVB-T que incluir el canal. Asimismo, la memoria se compondr de los siguientes apartados: - Tras la Introduccin, se detallar el Generador de datos de forma terica, haciendo hincapi en el estndar mencionado antes. - En el tema tercero se detallar el modelo de SIMULINK del anterior. - El cuarto captulo ser una explicacin terica del por que del ecualizador y eliminador de ruido. - El quinto tema desarrollar tericamente el receptor DVB-T. El sexto tema consistir en el desarrollo en SIMULINK del receptor DVB-T. - En el sptimo tema se explicarn las conclusiones y las futuras lneas de investigacin de este sistema. - Por ltimo, se incluir una bibliografa y un Anexo con las funciones en MATLAB.

2.- Introduccin al sistema DVB-T y a la modulacin OFDM


En este tema se presentar al sistema DVB-T y a la modulacin usada en el mismo. Tras lo cul se vern los algoritmos que la ETSI (European Telecommunications Standards Institute) ha desarrollado para este sistema.

2.1.- Sistema DVB-T


El sistema DVB-T (Digital Video Broadcasting Terrestrial, en castellano Difusin de Video Digital - Terrestre) es el estndar para la transmisin de televisin digital terrestre creado por la organizacin europea DVB. Este sistema transmite audio, video y otros datos a travs de un flujo MPEG. Dicho Flujo de transportes (TS), obtenido mediante el proceso denominado Codificacin de Fuente es una adaptacin del estndar MPEG-2 segn ISO/IEC 13818-1, que se estructura multiplexando varios programas y aadiendo la Informacin del Servicio (SI) correspondiente, segn ETS 300 468. En este documento se describe la secuencia de operaciones denominada Codificacin de Cana, mediante la cual se aade suficiente redundancia y proteccin a la seal para hacerla ms robusta con vista a poder corregir los errores Forward Error Correction (FEC) en el receptor. Tambin se describe el Esquema de Modulacin usado en la transmisin, que es del tipo modulacin multiportadora OFDM, como se ha dicho anteriormente. El resultado, combinando el potente mtodo de codificacin para correccin de errores y la modulacin multiportadora, es una transmisin de tipo COFDM (Coded Orthogonal Frequency Division Multiplex). Un aspecto a destacar de la tcnica OFDM es que permite la operacin, tanto en reas pequeas como en grandes, de Redes de Frecuencia nica (Single Frequency Networks-SFN). Esto significa que mediante este sistema es posible la recepcin cuando se radian idnticos programas desde diferentes transmisores que operan en la misma frecuencia. En estas condiciones se obtiene la mxima eficiencia del espectro, lo cual adquiere especial relevancia cuando se usa en las bandas de UHF asignadas para TV.

Fig. 1 Diagrama de bloques de un transmisor y receptor DVB-T

El sistema DVB-T permite transmisiones jerrquicas. En este caso hay 2 flujos de transporte, uno de ellos denominado de alta prioridad (HP) que tiene baja velocidad y por tanto menor calidad de imagen, modula las portadoras con un esquema de modulacin muy robusto frente al ruido (QPSK) mientras que el segundo flujo de transporte, denominado de baja prioridad (LP) complementa al anterior en cuando a velocidad uy calidad de imagen y combina su informacin con el anterior de forma que las portadoras son moduladas finalmente con un esquema ms exigente en cuanto a relacin seal/ruido. En el caso de que este ltimo utilice 54 bits por cada 2 bits del de alta prioridad, se alcanzara una constelacin total para la seal emitida de 64 QAM- En la zona del rea de cobertura donde se reciba la seal con buena relacin S/N, la imagen recuperada, de alta calidad, corresponder a la combinacin de los dos flujos (alta y baja prioridad) mientras que en caso contrario la calidad de imagen recibida ser peor, correspondiendo slo al flujo de alta prioridad.

2.2.- Modulacin OFDM


La idea bsica de la modulacin OFDM es dividir el espectro disponible en muchos subcanales. Haciendo los anchos de banda de estos muy estrechos, se consigue as que al decaer la seal lo haga de una forma lo ms parecida a una lnea recta pero suave en ese subcanal, lo cul ayuda a que la igualacin sea ms sencilla. Adems, para obtener una alta eficiencia espectral se solapan los canales adyacentes y se hacen ortogonales. Esto se consigue haciendo que los canales tengan un cero en la frecuencia en la que los canales adyacentesa ellos tienen un maximo (figura 2.2). Esto conlleva a otra ventaja, y es que podemos eliminar la interferencia intersimblica o ISI. Para conseguir que desaparezca el ISI, se aplicar el criterio de Nyquist que dice que para eliminar la ISI, es necesario que se cumpla:

Donde P(w) es el espectro de cada smbolo, T es su periodo y W = 2/T. Que quiere decir, en este caso, que la suma de las amplitudes de los distintos subcanales debe ser constante en todo momento frecuencial.

Fig. 2.2: Seal con mltiples portadoras Por otro lado, se aade un prefijo cclico al principio de cada smbolo, en el que se repite la informacin del final de este smbolo. Gracias a esto podemos realizar bien la ortogonalidad entre seales, debido a que, al incluir el final de la informacin, el resultado es parecido a una convolucin cclica, y, por tanto, nos dar seales ortogonales, siempre que la duracin del prefijo sea mayor que la respuesta impulsiva del canal. Adems, este prefijo elimina la interferencia entre canales o ICI, ya que se simula un canal rectangular perfecto, en tiempo, puesto que la informacin que no pertenece al rectngulo cae en el prefijo que no importa que se degrade (figura 2.3).

10 El problema que deriva del uso del prefijo cclico es que la relacin seal a ruido (SNR) empeora en funcin del tamao de este. Notar que la diferencia entre ISI e ICI es que la ISI se produce entre los subcanales de un mismo smbolo y la ICI es entre los distintos smbolos a lo largo del tiempo.

Fig. 2.3 Ejemplo de seal OFDM en tiempo El gran problema de la modulacin OFDM era la cantidad de osciladores necesarios para obtener los distintos canales. Para arreglar esto se decidi usar la transformada inversa de Fourier, ya que sta utiliza exponenciales con los que se puede obtener valores concretos de frecuencia. Un esquema tpico de la modulacin OFDM es el dado en la Figura 2.4 en el que se ve la adiccin del cdigo cclico como CP y la extraccin como otro CP pero tachado.

Fig. 2.4 Esquema de modulacin y demodulacin discreta de OFDM Un estudio ms completo sobre OFDM tanto su versin discreta, que es la ms usada, como de su continua, que es donde se parti este tipo de modulacin, puede verse en las referencias [1] y [2] de la bibliografa.

11

2.3- Generador de seales DVB-T


Para realizar la generacin de seales DVB-T se llevan a cabo varias etapas; la primera es la generacin de los datos, luego se aade un cdigo de bloque, se realizan entrelazados, se aade un cdigo convolucional y tras eso se aaden las portadoras TPS (Tranmission Parameter Signalling, es decir, Sealizacin de los parmetros de transmisin) y las portadoras pilotos. Por ltimo, se modula la seal resultante en OFDM (Orthogonal Frequency Division Multiplexing, es decir, Multiplexacin por Divisin de Frecuencia Ortogonal) y se enva por el canal. Se relatarn las partes ms importantes de cada uno de los siguientes campos.

Fig. 2.5 Esquema del generador de seales

12

2.3.1.-Generacin de datos sin portadoras


En este apartado se vern los distintos algoritmos que se llevan a cabo en las seales DVB-T para la generacin de datos antes de que se le aadan las portadoras TPS y pilotos. Se parte de los datos codificados en MPEG-2 y se le irn aadiendo las sucesivas cabeceras a las tramas., Para ayudar al lector se har una referencia al orden aplicado: - Estas capas comienzan con un cdigo de bloque, es decir, se aaden 16 bytes que ayudan a la correccin de errores (vease [4] y Digital Signal Processing de Proakis y Monolakis). - Lo siguiente pero en el mismo subapartado 2.3.1.1, se detallar el entrelazado que no es ms que cambiar el orden de los datos, para que a la hora de producirse un error este quede separado, y por tanto, el codigo de bloque acte, con bytes separados. - El siguiente subapartado se ver la codificacin interna, que se compone en la adiccin de un cdigo convolucional, que aplica una proteccin robusta al sistema, para su mejor comprensin vease [4] y [10] Digital Transmission Engineering por John B. Anderson.

2.3.1.1.- Codificacin de bloque y entrelazado convolucional


El primer paso, es la adiccin de un cdigo de bloque mediante cdigo Reed Salomon, que usa un cdigo de la forma k/n = 188/204 y tiene una distancia de correccin de t=8, es decir, es capaz de corregir hasta 8 bytes y detectar 16 bytes. El Cdigo Generador usado es: g(x) = (x+0)(x+1)(x+2)...(x+15), donde = 02HEX. Y el polinomio generador es: p(x) = x8 + x4 + x3 + x2 + 1. La versin de Reed Salomon es una versin reducida de la original RS k/n = 239/255. La forma acortada se realiza aadiendo primeramente 51 bytes nulos delante de los 188 bytes de informacin, con lo que se complementan los 239 bytes. Tras eso se pasan por el codificador RS(255,239) que aade los 16 bytes del cdigo de bloque y tras esto se eliminan los 51 octetos nulos. Tras esta adiccin del cdigo de bloque, se produce un entrelazado de los datos. Todos los entrelazados que se llevan a cabo en esta generacin, se deben a lo siguiente: los errores no se producen de forma aislada, sino que cuando hay un error suelen aparecer varios datos seguidos en mal estado. Esto podra provocar que el cdigo, ya sea de bloque o convolucional, no sea

13 capaz de corregirlo, para ello, se entrelazan los datos, de forma que al reordenarse los bits errneos se separan, permitiendo que los errores afecten a distintas partes del mensaje y los cdigos sean ms efectivos. El primer entrelazado es el entrelazado convolucional que tiene una profundidad de I = 12, es decir, son 12 ramas cclicamente conectadas al flujo de entrada, para producir desplazamientos de hasta 12. El resultado del entrelazado es que cada byte queda desplazado en el tiempo una posicin jx17, por lo que los bytes de un paquete quedarn repartidos entre son paquetes consecutivos. Siendo j = 1 a 12, dado por cada una de las ramas que producen desplazamientos, y M=17, dado para que se cumpla que el mximo desplazamiento no sobrepase 204 que es el nmero mximo de datos. M=17=204/I.

Fig. 2.6 Diagrama de entrelazado y desentrelazado del modelo convolucional Los conmutadores de entrada y salida, que avazan un paso por cada byte de datos, obviamente deben estar sincronizados. Los bytes SYNC invertidos y no invertidos (que se pueden ver en las tramas de la Fig. 2.7). Por ltimo, un esquema de tramas es :

Fig. 2.7 Trama de MPEG-2

Fig. 2.8 Paquetes transportados aleatorizados.

14

Fig. 2.9 Paquetes con los bytes de paridad de Reed-Salomon

Fig.2.10 Estructura de datos tras entrelazado de profundidad I = 12bytes

15

2.3.1.2.- Codificacin interna


Esta parte se divide tambin en dos: una codificacin convolucional y luego un entrelazado de smbolo y otro de bit. El sistema se basa en un sistema de k=1/2 con 64 estados que, a su vez, se basa en dos generadores de polinomios G1 = 171oct para X y G2 = 133oct para Y.

Tabla 1 Tasa de Cdigo y esquema de perforado

Fig. 2.11 Esquema del cdigo convolucional de tasa Lo siguiente es el entrelazado interno, que se compone de un primer proceso de entrelazado relativo al bit, que va seguido de un entrelazado de smbolo. Ambos, el relativo al bit y el entrelazado de smbolos, estn basados en bloques. En la figura 2.12 se muestra el esquema de principio para el caso no jerrquico y esquema de modulacin con constelacin.

16

Fig. 2.12 Entrelazado interno y mapeado para modo no jerrquico con constelacin 64-QAM En el caso de modos no jerrquicos (figura 2.12), el nico flujo de transporte de entrada, compuesto por bits xi, se demultiplexa en v subflujos, siendo v el nmero de bits por smbolo, resultando en cada va los bits bij.

Fig. 2.13 Entrelazado interno y mapeado para modo jerrquico con constelacin 64-QAM En cambio, en el caso de modos jerrquicos (figura 2.13) el flujo de transporte de entrada de alta prioridad, compuesto por los bits xi, se demultiplexan en 2 sub-flujos, al mismo tiempo que el de baja prioridad, bits xi, lo hace en v-2 subflujos. Los subflujos de las distintas vas llevan los bits bij. El esquema de demultiplexado de los bits xi (xi y xi en el caso jerrquico) en los resultantes dij, para el caso 64-QAM, es el siguiente:

17 Transmisin no jerrquica Tansmisin Jerrquica

Despus del demultiplexado, cada sub-flujo se procesa por separado en un entrelazador de bits. Hay por tanto v entrelazadores de bits (hasta 6, ya que el mximo es 64 smbolos) que se numeran desde I0 a I5. Los entrelazadores I0 a I1 se usan para QPSK, I0 a I3 para 16-QAM, I0 a I5 para 64-QAM.

18

2.3.1.2.1.- Entrelazador de bits


El entrelazado de bits se realiza por bloques y slo acta sobre los datos tiles. El tamao de estos bloques es de 126 bits segn el estndar para todos los entrelazadores, aunque la secuencia de entrelazado es diferente de unos a otros. El tamao implica que el proceso se repite un nmero exacto de veces por cada smbolo OFDM, tanto usando 2k como 8k. Estndar 2k 1512 vx1512 v 1512/126=12 estndar 8k 6048 vx6048 v 6048/126=48

N de portadoras activas para datos Bits totales por smbolo OFDM N de entrelazadotes de bits: Repeticin de entrelazado (n de veces por smbolo OFDM):

Por tanto, los bloques de bits de entrada a cada entrelazador estn compuestos por: B(e) = (be0 be1 be125) donde e va de 0 a v-1.

Los bloques de bits de salida de cada entrelazador se componen por: A(e) = (ae0 ae1 ae125) La relacin entre los bits de ambos bloques, de entrada y salida, es: Ae,w = be,He(w) donde w va desde 0 a 125.

Y siendo He(w) una funcin de permutacin, que es diferente de unos entrelazadores a otros: Entrelazador Entrelazador Entrelazador Entrelazador Entrelazador Entrelazador I0: I1: I2: I3: I4: I5: H0(w) H1(w) H2(w) H3(w) H4(w) H5(w) = = = = = = w. (w (w (w (w (w

+ + + + +

63) mod 126. 105) mod 126. 42) mod 126. 21) mod126. 84) mod126.

Las salidas de los v entrelazadores se agrupan para formar palabras (yw) de v bits, de manera que se toma cada vez un nico bit de la salida de cada entrelazador, correspondiendo el bit ms significativo a la salida de I0, es decir: yw = (a0,w a1,w av-1,w).

19

2.3.1.2.2.- Entrelazador de smbolos


Se realiza sobre las palabras anteriores yw conteniendo cada una de ellas v bits, de forma que a la salida del entrelazador queden agrupadas en bloques cuyo tamao est calculado para que los datos se puedan distribuir directamente entre las 1512 (modo 2k) 6048 (modo 8k) portadoras activas que tiene cada smbolo OFDM. As, agrupamos las palabras yw para formar unos vectore Y: - Estndar 2k: 12 conjuntos de 126 palabras -> Y = (y0 y1 y1511). - Estndar 8k: 48 conjuntos de 126 palabras Y = (y0 y1 y6047). As, tenemos que los vectores son Nmax = 1511 para 2k y Nmax = 6047 para 8k. Los vectores Y son los vectores a la entrada del entrelazador; a su salida son Y. Y = (y0 y1 yNmax). Donde yH(q) = yq yq = yH(q) con q=0 a Nmax-1 con q = 0 a Nomax -1 Para smbolos pares. Para smbolos impares.

El algoritmo de las permutaciones de H(q) es definido de la siguiente manera: i = 0,1: i = 2: 2<i<Mmax Ri[Nr-2, Nr-3, , 1, 0] = 0,0, , 0, 0. Ri[Nr-2, Nr-3, , 1, 0] = 0,0, , 0, 1. { Ri[Nr-3, Nr-4, , 1, 0] = Ri-1[Nr-2, Nr-3, , 2, 1]} En el modo 2k Ri[9] = Ri-1[0]+ Ri-1[3]. En el modo 8k Ri[11] = Ri-1[0]+ Ri-1[1]+ Ri-1[4]+ Ri-1[6]. Nr = log2(Mmax), siendo Mmax = 8192 en 8k y Mmax = 2048 en 2k.

Fig. 2.14 Algoritmo de H(q) para 2k

20

Fig. 2.15 Algoritmo de H(q) para 8k Ri son vectores derivados de los Ri mediante las permutaciones de bits que recogen las siguientes tablas:

Tabla 2 Permutaciones de Ri en 2k

Tabla 3 Permutaciones de Ri en 8k Por ltimo, se realiza el mapeado de los 6048 smbolos en 8k o 1512 en modo 2k, por tanto, se necesitarn v*N bits, siendo N el nmero de smbolos segn 2k u 8k. Los bits se repartirn en dos seales I y Q de la siguiente manera:

Tabla 4 Distribucin de los bits en las seales I y Q En el caso de modos jerrquicos, los bits de alta prioridad son los y0,q y1,q, siendo los restantes los de baja prioridad. Con la distribucin de bits anterior, entre las seales I y Q, en caso de que la constelacin se descodifique como QPSK (un solo punto de la constelacin identificado en cada cuadrante) solo se recuperarn los bits de alta prioridad y0,q y1,q,. La recuperacin de todos los bits exigir la correcta identificacin de la constelacin completa.

21

2.3.2.- Modulacin OFDM en Televisin digital Terrestre


Existen dos modos en la modulacin OFDM: modo 2k y 8k. Cada uno de ellos puede estar a tres frecuencias distintas: 6Mhz, 7Mhz y 8Mhz. Por otro lado, la seal se divide en tramas cada una de 68 smbolos. En el presente trabajo se utilizar el modo 8k a 8Mhz por ser el ms usado. En la versin a 8k se tienen 8192 canales por smbolo, de los cules slo se usan 6817 para que el sistema se pueda ecualizar correctamente. De estos canales, 6048 son para datos, 701 para portadoras pilotos y 68 para portadoras TPS. Los 8Mhz indican la separacin entre los canales que, para este tipo, es de 7.61Mhz. Para este tipo de modo tenemos los siguientes parmetros segn el estndar:

Parmetros en modo 8k Nmero de canales K 6 817 Valor del canal Kmin 0 Valor del canal Kmax 6 816 Intervalo de guarda (I/TU) 1/4 1/8 1/16 1/32 Duracin (TU) 896 us Duracin del intervalo (I (us)) 224 112 56 28 Duracin del smbolo (Ts(us) = TU + I) 1120 1008 952 924 Espaciado entre canales 1/TU 1 116 Hz Espacio entre los canales Kmin y 7,61 MHz Kmax (K-1)/TU Adems, existen varias formas de modular los datos que se envan en los smbolos: QPSK, 16-QAM y 64-QAM, pudiendo ser estas dos ltimas uniformes y no uniformes. Para distinguirlas se le dan un valor a cada tipo y se envan en las portadoras TPS, que se explicarn posteriormente.

22

2.3.2.1.- Portadoras Pilotos


Dentro de una seal modulada en OFDM hay ciertos canales cuyo valor no son datos sino valores conocidos. Estas portadoras son denominadas pilotos, y se usan entre otras cosas para la estimacin del canal por el que viaja la seal. Los valores de esta seal se obtienen mediante un circuito pseudoaleatorio, como el mostrado en la figura 2.16.

Fig. 2.16 Circuito para la generacin de las portadoras pilotos

La secuencia obtenida por este circuito se modula mediante el siguiente algoritmo Re{cm,l,k} = 4/3x2(1/2 - Wk) e Im{cm,l,k} = 0, donde: m: indica el ndice de la trama. Est comprendido entre 0 e infinito. k: es el ndice en frecuencia del canal. l: es el ndice temporal del smbolo. Est comprendido entre 0 y 67.

El ndice k tiene un intervalo distinto segn el smbolo que sea, y si la portadora piloto es contina o dispersa. As, la posicin de las dispersas es distinta durante cuatro smbolos consecutivos y luego se va repitiendo. k = Kmin + 3xb + 12xp, donde b = 0,1,2 3. p es un valor entero que hace que k sea mayor que cero pero menor de 6817. En el modo 8k existen 177 portadoras pilotos continuas, siendo las posiciones que ocupan, segn el estndar, las siguientes: Posiciones de las portadoras pilotos continuas:
0 48 54 87 141 156 192 201 255 279 282 333 432 450 483 525 531 618 636 714 759 765 780 804 873 888 918 939 942 969 984 1050 1101 1107 1110 1137 1140 1146 1206 1269 1323 1377 1491 1683 1704 1752 1758 1791 1845 1860 1896 1905 1959 1983 1986 2037 2136 2154 2187 2229 2235 2322 2340 2418 2463 2469 2484 2508 2577 2592 2622 2643 2646 2673 2688 2754 2805 2811 2814 2841 2844 2850 2910 2973 3027 3081 3195 3387 3408 3456 3462 3495 3549 3564 3600 3609 3663 3687 3690 3741 3840 3858 3891 3933 3939 4026 4044 4122 4167 4173 4188 4212 4281 4296 4326 4347 4350 4377 4392 4458 4509 4515 4518 4545 4548 4554 4614 4677 4731 4785 4899 5091 5112 5160 5166 5199 5253 5268 5304 5313 5367 5391 5394 5445 5544 5562 5595 5637 5643 5730 5748 5826 5871 5877 5892 5916 5985 6000 6030 6051 6054 6081 6096 6162 6213 6219 6222 6249 6252 6258 6318 6381 6435 6489 6603 6795 6816

23

2.3.2.2.- Portadoras TPS


Este tipo de portadoras se usan para aspectos de sealizacin (TPS viene del ingls Tranmission Parameter Signalling, es decir, Parmetros de transmisin de sealizacin) y proporcionan, entre otras, informaciones sobre: Jerarqua. Modo de transmisin. Cdigos internos. Valor de en la modulacin de datos. Nmero de tramas en una supertrama.

Requiere una modulacin del tipo: Re{cm,l,k} = 2(1/2 - Wk) e Im{cm,l,k} = 0, donde m,k,l representan los mismos parmetros que en la modulacin de las portadoras pilotos. Debido a que el trabajo se basa en la estimacin de canales, las portadoras TPS no sern usadas y a la hora de crearlas se harn de manera aleatoria, aunque respetando sus posiciones, mostradas en el siguiente cuadro: Posiciones de las portadoras TPS en modo 8k
34 50 209 346 413 569 595 1913 2050 2117 2273 2299 3458 3617 3754 3821 3977 5146 5162 5321 5458 5525 6799 688 790 901 1073 1219 1262 1286 1469 1594 1687 1738 1754 2392 2494 2605 2777 2923 2966 2990 3173 3298 3391 3442 4003 4096 4198 4309 4481 4627 4670 4694 4877 5002 5095 5681 5707 5800 5902 6013 6185 6331 6374 6398 6581 6706

24

3.- Bloques de Simulink


A continuacin se estudiarn los distintos bloques de SIMULINK. Para ello, en primer lugar se va a explicar y dibujar el modelo completo (figura 3.1) y posteriormente se desarrollarn cada una de las partes. El Generador de datos consta como se coment de diversas partes, pero que en general se pueden simplificar en dos. La primera parte, es la adiccin de informacin para la correccin de errores en el receptor, esto se hace en el bloque Generador de datos tiles, el cul se subdivide en varios y a su vez, varias veces. Y dnde se realizan las operaciones mencionadas antes, entrelazado, adiccin de cdigo de bloques etc. La segunda parte es la adiccin de informacin, para la correccin de la dispersin por multicamino. Esto es, aadir las portadoras pilotos, para lo cul, se usan cuatro bloques, uno que las genera Generador de portadoras pilotos, y otros tres que los ordenan Seleccionador de ndice para pilotos, Concatena datos, pilotos y portadoras TPS y Coloca en orden los datos, las portadoras TPS y las portadoras pilotos. Y tambin la modulacin OFDM, que es muy robusta frente a esta clase de dispersin. Por ltimo, aadir, que la adiccin de portadoras TPS para el objetivo de este proyecto, no es necesario, se aadir para completar la seal que es descrita en el estndar mencionado antes.

25

Fig. 3.1 Esquema del Generador de Seales OFDM

26

3.1.- Generador de datos tiles


Para realizar este apartado, se generar una seal aleatoria, usando el bloque Random Integer Generador, tras eso se aplicarn los algoritmos que vienen en el estndar de DVB-T y luego se modulara a 64-QAM usando el bloque General QAM Modulator.

Fig. 3.2 Bloques del generador de datos tiles

3.1.1.- Generador de datos para una seal DVB-T


Este bloque se encarga de la generacin de la seal de datos de un sistema DVB-T. Para ello, primero se genera la seal de datos mediante el bloque Random integer y, posteriormente, se van aplicando distintos mecanismos para la correccin de errores.

Fig. 3.3 Generador de datos para una seal en un sistema DVB-T.

27

3.1.1.1.- Generador de datos


Este bloque (Random integer generator) se encarga de generar los datos que queremos enviar y que hay que modular en OFDM. Los parmetros utilizados por este bloque son:

M-ary number: Nmero de muestras que genera en cada muestreo que, como vamos a generar, en principio bytes, que luego habr que descomponer a bits, se necesitaran 256 (2^8). Initial seed: Las seales generadas por el generador aleatorio de enteros necesitan un valor con el cul, mediante distintas ecuaciones, generar los datos. Al no existir una manera de hacer nmeros aleatorios de verdad, este valor inicial es la initial seed, y, por tanto, no hay un valor predeterminado. Sample per frames: Para obtener el periodo de muestreo se tiene en primer lugar que escoger la duracin del intervalo de guardia. Se tomar el mayor, lo que proporciona una mejor proteccin contra ISI e ICI. Como el intervalo de guardia mayor segn el estndar de la ETSI 300 744 V1.4.1 es de un cuarto de la duracin del smbolo sin proteccin y, segn este estndar, la duracin de un smbolo sin proteccin en una modulacin OFDM 8k y a 8MHz es de 896 microsegundos, entonces la duracin total del smbolo es de 896*(1 + 1/4) = 1120 microsegundos. Ahora habr que dividirlo por el nmero de datos que se enven, es decir, 188 segn el estndar, pero como adems, necesitamos almacenar 48 grupos de 126 palabras de 6 bits en un buffer, y cada vez que emite el sistema se llenan 2176 bits. Esto nos lleva a 1120e-6/188*(126*6*48/2176). Frame-based outputs: Para la generacin de una seal OFDM debemos medirla en tramas, por eso se marca la casilla. Samples frame: El nmero de muestras que se envan en cada trama debe ser el que el estndar diga. En este caso es de 188, como se indic antes. Output data type: No hace falta precisin, por eso se usar uint8.

28

3.1.1.2.- Codificador Reed Salomon


Este bloque Integer input RS se encarga de aadir un cdigo de bloque segn el algoritmo Reed Salomon (vase apartado 2.3.1.1). Los parmetros usados son: - Codeword length: El valor, que viene dado por el estndar, es de 204. - Message length: El valor de este apartado tambin lo da el estndar; es 188.

3.1.1.3.- Entrelazador Convolucional


Este bloque realiza el entrelazado de los bytes, para mejorar su recuperacin contra errores.

Fig. 3.4 Entrelazador Convolucional

3.1.1.3.1.- Entrelazador Convolucional


Este bloque (convolutional interleaver) se encarga de la funcin mencionada. Los parmetros que utiliza son los siguientes: Rows of shift register: Este valor nos lo da el estndar, 17, y nos indica el nmero de registros, los cuales van a ser desplazados un nmero de veces el parmetro que viene a continuacin. Register length step: Este valor tambin nos lo da el estndar, 12. Initial condition: Como no se indica nada, se usar el valor por referencia, 0.

29

3.1.1.3.2.- Convertidor de Bytes a bits


Este bloque se encarga de pasar los bytes, dados por nmeros de 0 a 255, a bits. Los parmetros usados son: - Number of bits per integer: Como queremos pasar de bytes a bits, el nmero es 8. - Output data type: El tipo de salida debe ser boolean, puesto que estamos pasando a bits.

30

3.1.1.4.- Aade cdigo convolucional de k/n = .


En este bloque se aade un cdigo convolucional. Segn el estndar, hay que usar un cdigo especifico, pero con varias posibilidades en cuanto a los bits que se aaden; se ha escogido un cdigo k/n =3/4. Los parmetros que se han usado son: - Trellis structure: Aqu hay que colocar poly2trellis(7, [171 133]), que es la funcin que se aplica para poder ejecutar ms tarde el Viterbi. El 7 nos indica la profundidad del cdigo. El 171 y el 133, son los vectores de conexiones, es decir, si tomamos de ejemplo el 171, el nmero se pasa de octal a bits, consiguiendo 001111001. Como la profundidad es 7, se quitan los dos primeros bits, as se consigue 1111001. Los 1 indican los registros (que guardan bits del vector de entrada de un paso anterior) que se van conectar y los 0 los que no influyen. - Operation mode: Continuous, ya que no hay que truncar nada. - Puncture code: Hay que activar esta casilla para poder aadir el puncture vector, que se usa para indicar que k/n = . - Puncture vector: En el estndar nos indican que para tener un cdigo , debemos poner [1 1 0 1 1 0]'.

31

3.1.1.5.- Entrelazador interno


Al igual que el otro entrelazador, la idea es separar los bits para que a la hora de corregirlos, sea ms fcil, ya que los errores se producen a rfagas y si luego se ordenan, estos errores se dispersan y el cdigo de bloque o convolucional puede corregirlos.

Fig. 3.5 Entrelazador interno

3.1.1.5.1.- Unbuffer
Este bloque se coloca para pasar las muestras de una en una ya que el buffer no almacena un nmero de veces entero el tamao del vector de datos que le llegan.

3.1.1.5.2.- Buffer
Este bloque se usa para almacenar los 756 bits necesarios para hacer el entrelazado de bits, ya que este se realiza en bloques de 756 (6*126 palabras). - Output buffer size: Como se ha dicho, es 756. - Buffer overloap: Queremos que las muestras salgan por bloques tal cual, no que se repitan; por tanto, el valor es 0. - Initial conditions: Se pondr 0, ya que se est dando este valor a todas las condiciones iniciales.

3.1.1.5.3.- Entrelazador de bits


Este bloque, General block interleaver, se encarga de entrelazar los 756 bits segn un algoritmo dado por el estndar (apartado 2.3.1.2). El programa que saca las posiciones puede verse en el Anexo A. El parmetro a poner es: - Elements: Se colocan aqu las posiciones para el entrelazado.

32

3.1.1.5.4.- Buffer
Este bloque se usa para almacenar las 6048 palabras.Estas tienen 6 bits cada una para poder ser moduladas a 64-QAM (2^6 = 64). - Output buffer size: Se necesitan 6048*6. Como el buffer anterior es 756 bits, se puede poner como 48*756 que es lo mismo. - Buffer overloap: Queremos que las muestras salgan por bloques tal cual, no que se repitan, por tanto, el valor es 0. - Initial conditions: Se pondr 0, ya que se est dando este valor a todas las condiciones iniciales.

33

3.1.1.5.5.- Entrelazador de smbolos


En este se produce el entrelazado de smbolo segn el algoritmo propuesto por el estndar (Vase anexo A, para ver el programa).

Fig 3.6 Entrelazador de smbolos

3.1.1.5.5.1.- Entrelazador para smbolos pares


Este bloque (General block interleaver) entrelaza segn un algoritmo dado por el estndar (Vase apartado 2.3.1.2). El parmetro a poner es: - Elements: Se colocan aqu las posiciones para el entrelazado.

34

3.1.1.5.5.2.- Seal de control


Genera una seal de control, la cul varia entre +/- 1 cada trama de 36288 bits.

Fig. 3.7 Seal de Control

3.1.1.5.5.2.1.- Generador de pulso


Se encarga de generar un pulso de amplitud 2 y que vara cada trama. Valores usados: - Pulse type: Se puede poner basado en tiempo y muestras. En este caso se usar basado en muestras. - Time: Se puede incluir una seal externa que indique tiempo en cada momento o usar el tiempo de la simulacin, que ser lo adecuado. - Amplitude: Pondremos valor dos para poder obtener la seal de +1 y -1 al restarle uno. - Period: Aqu no importa tanto el valor que se ponga, mientras se consiga que la parte del pulso de valor 0 y de valor 2 duren lo mismo. Para facilitar la labor se pondr valor 2. - Pulse width: Como el periodo es 2 y queremos que el pulso y la parte que va a 0 valgan lo mismo, el valor ser la mitad, es decir, 1. - Phase delay: Como nos interesa que empiece en el pulso, el valor ser 0. -Sample time: Como se est usando el tiempo de simulacin se puede usar el valor por defecto -1.

35

3.1.1.5.5.2.2.- Sumatorio
Este bloque Sum, se usa para restarle uno al pulso y as obtener la seal adecuada. Los parmetros que se utilizan en este bloque son: List of sign: Aqu deben ir los signos que queremos usar, en este caso -+, puesto que queremos restarle uno.

El resto de parmetros no requieren nombrarse.

3.1.1.5.5.2.3.- DSP constant


Este bloque se usa para implementar una constante de valor 1. Los parmetros que se utilizan: - Constant value: Aqu se coloca el valor de la constante, es decir, 1. - Sample mode: Se pondr discreto, ya que el modelo no es continuo. - Output: Ponemos sampled based. - Sample time: El tiempo de muestreo se puede poner inf, que suelta una muestra constantemente, -1 que la suelta cada paso mnimo, o el tiempo esperado.

36

3.1.1.5.5.3 Entrelazador para smbolos impares.


Este bloque (General block deinterleaver), realiza la funcin inversa al entrelazador par, ya que as est recogido en el estndar. Usa los mismos valores que el par (Vase apartado 2.3.1.2). El parmetro a poner es: - Elements: Se colocan aqu las posiciones para el entrelazado.

3.1.1.5.5.4 Switch
Este bloque se usa para escoger entre smbolo par o impar usando la seal de control. Los parmetros que se utilizan son: - Criteria for passing first input: Como se tiene una seal que varia entre -1 y 1, se puede poner u>threshold o u2>=threshold. - Threshold: El umbral se colocar a 0, que est entre -1 y +1. - Sample time: Se dejara el -1 que est por defecto.

37

3.1.1.6.- Convertidor de bits a smbolos de 64QAM


Este bloque se encarga de pasar los bits, a nmero de 0 a 63. Los parmetros usados son: - Number of bits per integer: Como queremos pasar de bits a palabras de 64 valores distintos, el nmero es 6. - Output data type: Puede haber varios tipos de salida. Se retomar uint8 por ser el primero que cumple los requisitos.

38

3.1.2.- Modulador 64-QAM


Este bloque (General QAM Modulator), se encarga de realizar la modulacin 64-QAM, que hemos escogido entre las posibles, para modular los datos. Los parmetros utilizados en este bloque son:

Signal Constellation: Aqu irn las posiciones de una constelacin 64-QAM, con codificacin de gray. Output data type: Como los datos pueden ser flotantes y de gran longitud, se usar double.

39

3.2.- Generador de pilotos:


Para este bloque, en primer lugar hay que generar una secuencia pseudo aleatoria. Para ello, se usa el bloque PN sequence Generador, y luego se realiza la frmula que viene en el estndar 8/3 * (0.5 - Wk), donde Wk es la secuencia pseudo aleatoria en el carril de frecuencia k.

Fig. 3.8 Bloques del Generador de pilotos

40

3.2.1.- Bloque PN Sequence Generator


En este bloque hay que especificar diversos parmetros: Generator Polynomial: Es el polinomio con el cual se van a generar los unos y ceros. En el estndar viene dado por X11 + X2 + 1, que traducido a los comandos matlab son las posiciones de los 1s [11 2 0]. Initial States: Es el valor con el que comienzan los distintos mdulos del bloque PN Sequence Generador. El estndar aclara que estos deben estar a '1'. Output mask source: En donde hay que especificar si quieres que el bloque genere la seal (Dialog parameter) o si modular una seal entrante (input port). En el caso que se est tratando, se usar la primera forma por indicarlo as el estndar. Output mask vector: Es el retraso que ocasiona el bloque. Por no estar indicado en el estndar lo supondremos igual a 0. Sample time: El tiempo de muestreo ser puesto a -1 porque no nos interesa. Frame-based outputs: Se debe pulsar este botn en el caso de que la salida est basada en tramas como lo est en este caso. Samples per Trama: Aqu se debe poner el nmero de muestras que va a tener el vector que salga. Dado que vamos a unir tanto los datos, como las pilotos y las TPS entonces el nmero de muestras ser la suma de los dos tipos de pilotos, que usando el programa calculapilot (vase Anexo A), es 701. Output data type: Aqu se especifica el tipo de datos que va a tener el vector, como se ha dicho anteriormente son unos y ceros, por tanto, se escoger el tipo boolean.

3.2.2.- Constante de un medio a sumar para modular las portadoras pilotos


Este bloque (Constant) se usa para realizar la resta que se produce en la frmula del estndar puesta al comienzo del apartado 3.2. Los parmetros utilizados por este bloque son: Constant value: Aqu debemos poner 1/2, puesto que es el valor necesario para llevar acabo la modulacin de las portadoras pilotos.

El resto de parmetros se dejan tal cual.

41

3.2.3.- Sum
Este bloque (Sum) se usa para realizar la resta que se produce en la frmula del estndar puesta al comienzo del apartado 3.2 y tambin en el apartado 2.3.2.1. Los parmetros que se utilizan en este bloque son: List of sign: Aqu deben ir los signos que queremos usar, en este caso -+, puesto que hay que a implementar es 8/3 * (0.5 - Wk).

Como en el caso anterior, el resto de parmetros no requieren nombrarse.

3.2.4.- Constante a multiplicar para modular las portadoras pilotos


Este es un bloque (Gain) y se utiliza para la realizacin de la frmula del estndar puesta al comienzo del apartado 3.2 y tambin en el apartado 2.3.2.1. Los parmetros utilizados por este bloque son: Gain: Segn lo propuesto en los apartados indicados el valor debe ser de 2.

El resto de parmetros no tienen relevancia.

42

3.3.- Seleccionador de ndices para pilotos


En este apartado, se va a generar un subsistema que escoja, en cada intervalo de tiempo de smbolo (en nuestro caso 1120 microsegundos), un vector con las posiciones que deben ocupar, tanto las portadoras como los datos. Para ello, se usarn los siguientes bloques y dos programas, calculapilot, que escoger los lugares de las portadoras pilotos y generador_dvbt_fun que se encarga de calcular las posiciones (vase Anexo A).

Fig. 3.9 Bloques del seleccionador de ndices para pilotos

3.3.1.- Vector para ordenar los smbolos


Hay cuatro bloques (constant), cada uno de ellos con un vector que indica la posicin de los datos y portadoras tanto TPS como pilotos. Los parmetros utilizados por este bloque son: Constant value: Este valor es el correspondiente al vector de posiciones.

El resto de parmetros son irrelevantes.

3.3.2.- Seleccionador de vectores


Selecciona en cada intervalo de tiempo de smbolo uno de los bloques Constant. Para que este bloque funcione necesita una seal que le indique como y cundo cambiar de entrada. Esta seal ser generada desde el exterior del bloque y se unir por el puerto correspondiente. Los parmetros utilizados son: Number of inputs: Se pondr el nmero de estradas que es 4.

El resto de parmetros no son importantes.

43

3.3.3.- Seal de control


Crea una funcin peridica que es constante durante un determinado intervalo y luego se incrementa o decrementa. Esta seal peridica ser la que se encargar de indicar al multiport switch cuando escoger un bloque constant u otro. Los parmetros utilizados por este bloque son: Vector of output values: Este campo indica los valores que ir tomando la funcin en cada intervalo de tiempo; se quiere que vaya incrementndose de forma que se indiquen consecutivamente los distintos bloques constant, por tanto, el valor en este campo ser [0 1 2 3]. Sample time: En este campo ir el tiempo que se mantiene constante la seal. Utilizaremos 1120 microsegundos que, como se dijo anteriormente, es la duracin de un smbolo.

El resto de campos no se modifican.

44

3.4.- Concatena datos, pilotos y portadoras TPS


Este bloque, matrix concatenation, se encarga de poner los datos primeros, seguidos de las portadoras pilotos y despus las portadoras TPS, todo en un vector. Los parmetros importantes son: - Number of inputs: El nmero de entradas que tiene el bloque, que ser 3. - Mode: Da igual cul de las dos se escoja. - Concatenate dimension: Es decir, el nmero de dimensiones que queremos que queden, en este caso, ya que queremos un vector ser 1.

45

3.5.- Coloca en orden los datos, portadoras TPS y las portadoras pilotos.

las

Este bloque Selector se encarga de unir en el orden correcto las portadoras piloto, portadoras TPS y los datos. Los parmetros usados son: Number of input dimensions: Su valor ser 1, ya que queremos que la salida sea un vector con la unin de todos los datos. Index mode: Se pueden utilizar ambos valores, zero-based y onebased, teniendo en cuenta que si seleccionamos el primero empezamos a contar desde cero los vectores y si seleccionamos el segundo desde uno. Index Option: Aqu debemos seleccionar Index vector(port), ya que de esta manera el ndice lo obtiene del puerto Idx. Input port size: Aqu ir el tamao del vector de entrada que es 6817. Sample time: Tendr valor -1, porque sino podra eliminar muestras.

46

3.6.- TPS
Este subsistema se utiliza para generar las seales TPS, mediante un generador de ceros y unos (bloque Bernouilli Binary Generator). Posteriormente las modula como se indica en el estndar de la ETSI: 2*(1/2 Wk, donde Wk es la seal creada por el generador de Bernoulli para cada canal k en la frecuencia.

Fig. 3.10 Bloques de la adiccin de portadoras TPS

3.6.1.- Bernoulli Binary Generator


Genera una seal de unos y ceros con una probabilidad de que se genere un cero que hay que especificar. Los parmetros usados son: Probability of zero: Dado que no nos interesa ninguna en particular se usar el valor 0.5. Inicial seed: Se dejar la que viene de referencia. Sample time: Queremos que en cada smbolo de OFDM de 6817 muestras que dura 1120 microsegundos vayan 68 muestras, por tanto el tiempo de muestro ser 1120/6817*10^-6. Frame-based output: Se seleccionar ya que, como se explic anteriormente, hay que especificar el nmero de tramas. Samples per frame: Segn el estndar se deben enviar 68 TPS por smbolo, luego el nmero ser 68. Output data type: Es indiferente el utilizado.

47

3.6.2.- Constante de un medio


Este bloque (Constant) se usa para realizar la resta que se produce en la frmula del estndar puesta al comienzo del apartado 3.6 y tambin en el apartado 2.3.2.2. Los parmetros utilizados son: Constant value: Aqu debemos poner 1/2, puesto que es el valor necesario para llevar acabo la modulacin de las portadoras TPS.

El resto de parmetros se dejan tal cual.

3.6.3.- Sum
Este bloque (Sum) se usa para realizar la resta que se produce en la frmula del estndar, puesta al comienzo del apartado 3.6 y tambin en el apartado 2.3.2.2. Los parmetros que se utilizan en este bloque son: List of sign: Aqu deben ir los signos que queremos usar, en este caso -+, puesto que lo que hay que a implementar es 2* (0.5 Wk).

Como en el caso anterior, el resto de parmetros no requieren nombrarse.

3.6.4.- Constante a multiplicar para modular las portadoras TPS


Este es un bloque (Gain) y se utiliza para la realizacin de la frmula del estndar puesta al comienzo del apartado 3.6 y tambin en el apartado 2.3.2.2. Los parmetros utilizados por este bloque son: Gain: Segn lo propuesto en los apartados indicados el valor debe ser de 2.

El resto de parmetros no tienen relevancia.

48

3.7.- Modulacin OFDM


En este bloque se realizar la modulacin OFDM. Para ello, ampliaremos el tamao del vector con los datos, portadoras pilotos y portadoras TPS a 8192 (tamao real de seales vese introduccin del apartado 2.3.2), rellenando con ceros en el centro del vector. Posteriormente se har una antitransformada de Fourier Discreta (IDFT), usando el bloque IFFT por las razones explicadas en la introduccin del primer apartado. Por ltimo se aadir el prefijo cclico.

Fig. 3.11 Bloques del Modulador de OFDM

3.7.1.- Aadimos hasta 8192


Este bloque (PAD) se encarga de la adiccin de ceros hasta 8192, que es la siguiente potencia de dos. Los parmetros utilizados por este bloque son: Pad Over: Hay que escoger entre filas y columnas; en este caso, sern columnas. Pad value Source: Indica si el valor se le pasa por el puerto o se introduce en los parmetros. Como lo conocemos, pondremos Specify via dialog. Pad Value: Valor a aadir. Pondremos 0. Column size: Ser el tamao que queremos que tenga la seal a la salida de este bloque. Como se ha dicho, es 8192.

El resto de parmetros no se modifican.

49

3.7.2.- Cambia el orden de los datos


Es un bloque Selector usado para ordenar las muestras antes de realizar la antitransformada de fourier discreta (IDFT). Los parmetros utilizados por este bloque son: Number of input dimensions: El nmero de dimensiones entrada es uno, puesto que es un vector. a la

Index mode: Aqu se puede poner cualquiera de los dos, pero teniendo en cuenta que si seleccionamos zero-based se empieza a contar los vectores desde cero y, con one-based, desde uno. Index option: Se escoger Index vector(dialog), puesto que se conoce el orden de los datos. Index: Aqu se debe indicar el reordenamiento de los datos; como se quiere que los ceros estn en el centro del vector y que los datos antes del zero-padding se dividan por la mitad y se cambien de orden, el vector ser: [3409:6817 6818:8192 1:3408]. Input port size: Es el tamao del vector de entrada que como sabemos es 8192.

3.7.3.- IFFT
Este bloque realiza la transformada inversa de Fourier discreta. Slo se va a modificar los parmetros en Fixed-point y dentro de este fixed-point data type. Product output: Se cambia a same as input. Accumulator: Se cambia a same as product output. Output: Se cambia a same as input.

El resto de parmetros se dejan como estaban.

50

3.7.4.- Aadimos hasta 10240


Este bloque (PAD) se encarga de la adiccin de ceros hasta 10240. Este nmero se obtiene porque hay que aadir un prefijo cclico, y ste tiene un cuarto de la longitud de los datos, por tanto, 8192*5/4 = 10240. Los parmetros utilizados son: Pad Over: Hay que escoger entre filas y columnas en este caso, sern columnas. Pad value Source: Indica si el valor se le pasa por el puerto o se introduce en los parmetros. Como lo conocemos pondremos Specify via dialog. Pad Value: Valor a aadir pondremos 0. Column size: Ser el tamao que queremos que tenga la seal a la salida de este bloque, como se ha dicho es 10240.

El resto de parmetros no se modifican.

3.7.5.- Cambia el orden de los datos


Es un bloque Selector usado para ordenar las muestras antes de enviarlas, ya que el prefijo cclico no son ceros, sino una copia del ltimo cuarto de longitud de los datos y, adems, va al principio de estos y no despus. Los parmetros utilizados por este bloque son: Number of input dimensions: El nmero de dimensiones entrada es uno, puesto que es un vector. a la

Index mode: Aqu podemos poner cualquiera de los dos, pero teniendo en cuenta que si seleccionamos zero-based empezamos a contar los vectores desde cero y, con one-based, desde uno. Index option: Se escoger Index vector(dialog), puesto que se conoce el orden de los datos. Index: Aqu se debe indicar el reordenamiento de los datos. Como se quiere que los ceros desaparezcan y que el final de los datos se copie al comienzo de estos, el vector ser: [6145:8192 1:8192]. Input port size: Es el tamao del vector de entrada que como sabemos es 10240.

51

3.8.- Seal a Transportar


Aqu se almacena la seal, que se llamar informacin, el bloque es To workspace, y contiene los siguientes parmetros: Variable name: Aqu se pone el nombre de la variable. Como se ha dicho antes se llamar informacin. Limit data points to last: Como no se conoce el lmite de los datos, se pondr infinito (inf). Sample time: Se pretende que conforme los datos llegan a este bloque se vayan almacenando en la variable informacin, esto se consigue con valor -1. Save format: Interesa una matriz que es ms cmoda a la hora de trabajar, por tanto el tipo ser Array.

El resto de los parmetros no tienen relevancia.

52

3.9- Pruebas realizadas para comprobar el funcionamiento


En este apartado se explicarn las distintas pruebas que se han realizado para verificar que el sistema genera una seal DVB-T correcta.

3.9.1.- Comprobacin vectores

del

tamao

de

los

Lo principal, es comprobar que el tamao de los vectores posicin, que se obtienen con la funcin calculapilot, tienen longitud 701, que es la que el estndar dice. Adems habr que comprobar que cumplen con la separacin de 12 y que tienen intercalados las pilotos continuas. Para ello, se pondrn las posiciones de las diez primeras pilotos continuas y como el programa ejecuta las mismas rdenes, si en las primeras posiciones estn bien, en el resto tambin. Por otro lado, habr que comprobar que la diferencia entre los distintos smbolos sea de 3. Pilotos continuas Posicion1 1 49 55 88 142 157 202 256 280. 1 13 25 37 49 55 61 85 88 97 109 121 133 145 157 169 181 193. 1 4 16 28 40 49 55 64 76 88 100 112 136 142 148 157 160 172. 1 7 19 31 43 49 55 79 88 91 103 115 127 142 151 157 163 175. 1 10 22 34 46 49 55 70 82 88 94 106 118 142 154 157 166 178. 193 73 142 52 124 67 139 58 130

Posicion2

Posicion3

Posicion4

53

3.9.2.- Comprobacin de que si aadimos las portadoras pilotos y luego las extraemos obtenemos estas mismas
Para este apartado necesitaremos construir un modelo (figura 3.12), en el cul al Generador de seales DVB-T se le aade un bloque selector, que extrae las portadoras pilotos, colocndose tras la modulacin OFDM de la seal. Por ello, se usar antes un demodulador de OFDM (este bloque se explicar ms adelante), as podemos verificar que la modulacin y demodulacin no afectan. Se calcula el mximo de la diferencia de las distintas salidas. Esto se consigue, usando la orden max de matlab, para encontrar el mximo. Y la diferencia se obtiene restando los vectores de las portadoras pilotos extradas tras la modulacin y las portadoras pilotos originales. max(pilotos_tras_modulacion-pilotos) = -1.9984e-015 +3.3307e-016i. El error cometido tras modular y luego demodular es muy pequeo y por tanto, no se le debe dar importancia. El mdulo de este valor es: 2.0260e-015. Adems con esta prueba comprobamos que las portadoras TPS no se hayan mezclado con las portadoras pilotos.

54

Fig. 3.12 Bloques para comprobar que las portadoras pilotos estn bien colocadas

55

3.9.3.- Comprobacin de que si aadimos las portadoras TPS y luego las extraemos obtenemos estas mismas
El modelo usado ser el mismo que en la prueba anterior (figura 3.13) pero ahora no necesitaremos el bloque de ndice para pilotos y el selector tendr las posiciones de las TPS.

Fig. 3.13 Bloques para comprobar las posiciones de las portadoras TPS Por otro lado, habr que aadir un bloque en adiccion de TPS para poder ver las TPS reales. Volvemos a realizar la misma operacin de antes, para ver que los resultados son coherentes. max(TPS_tras_modulacion - TPS) = -4.4409e-016 -1.5821e-015i. Como se ve, de nuevo se produce un error al modular y luego demodular, pero que es despreciable, en este casi el modulo es: 1.6432e-015.

56

3.9.4.- Comprobacin de que los valores de las portadoras TPS y pilotos estn en el lugar correcto
Para ello, se usa el generador de de seales DVB-T (figura 3.1) y se aade un bloque antes de modular la seal, para ver la informacin. Por otro lado le damos el valor -1 a todas las portadoras pilotos y -2 a las portadoras TPS y se comprueba que las primeras posiciones, nicamente, sean correctas, ya que si lo son, como se ha comprobado antes que los vectores dan las posiciones correctas, entonces todas sern correctas. Las posiciones se comprueban ahora buscando las posiciones que sean de valor -1 y -2. As, si se comprueba en las 200 primeras muestras para -1 y 600 para -2, los vectores que salen sern: find(senal_antes_de_modularse(1:200) == -1) = 1 13 25 37 49 55 61 73 85 88 97 109 121 133 142 145 157 169 181 193. find(senal_antes_de_modularse(1:600) == -2) = 35 596. 51 210 347 414 570

Ambas posiciones se corresponden con las deseadas, como se puede comprobar en la tabla de la primera prueba para las pilotos y con las diez primeras posiciones de las portadoras TPS que se ponen a continuacin. Posiciones TPS: 35 51 210 347 414 570 596 689 791 902.

57

3.9.5.- Comprobacin de las constelaciones


En esta prueba se comprueba que las constelaciones sean 64-QAM, en los distintos puntos clave del sistema. Para ello, se usar el mismo sistema que en la primera prueba, cambiando los bloques que almacenan la seal por otros que dibujan la constelacin.

Fig. 2.28 Bloques para comprobar las constelaciones Tras ejecutar el programa se ve como las constelaciones son muy parecidas, salvo algunos smbolos que salen nuevos, debido a la adiccin de nuevas portadoras, pero esto no altera los datos.

58

Fig. 2.29 Constelacin de los datos

Fig. 2.30 Constelacin antes de ordenar datos y portadoras

59

Fig. 2.31 Constelacin una vez los datos estn ordenados

Fig. 2.32 Constelacin tras modular y demodulada

60

4.- Canal y receptor para seales DVB-T


Un modelo tpico de canal, es aquel que contiene ruido y distorsin de multicamino, es decir, que produce la suma de la misma seal enviada varias veces, escalada y retrasada. Esto es as, porque en el ambiente hay interferencias que producen el ruido como antenas de radio, el mismo sol etc. Y por otro lado, tambin hay edificios, montaas y otros objetos de gran tamao que reflejan la seal provocando la distorsin de multicaminos. Para poder, obtener de nuevo los datos y as ver las imgenes con una buena calidad en los televisores, se llevan a cabo dos mtodos de correccin: - Uno que elimina los errores, el cul consiste en el uso de los cdigo de bloques y convolucional que el generador incluye (vease [4] y Digital Signal Processing de Proakis y Monolakis), adems de los entrelazados. , - El otro debe eliminar el efecto nocivo del multicamino, y esto se consigue usando un ecualizador. En general, los ecualizadores son elementos que permiten modificar la curva de respuesta en frecuencia de un sistema. Cuando se trata de audio se usan filtros para realzar esta modificacin. En el caso de seales de DVB-T se usar un estimador de canal, cuyo proceso ser detallado en el tema siguiente. Aun as [9] da una explicacin detallada, con simulaciones del proceso, que estn fuera del alcance del proyecto.

61

5.- Funcionamiento bsico del receptor


El Receptor como se explic antes se compone de dos sistemas, la eliminacin de los multicaminos y la eliminacin del ruido. Para ello, se llevar a cabo la ecualizacin de la seal. En este proyecto, se har lo siguiente, se estimar el canal y se dividir por l, la seal recibida en frecuencia. El primer paso, en el receptor, es la demodulacin de la seal y por consiguiente su paso a frecuencia, ya que se realiza la DFT. Lo siguiente es estimar el canal. Para ello, se extraern las portadoras pilotos del canal. Como se conoce el algoritmo que las gener, podemos volver a calcularlas, as dividiendo las extradas por estas nuevas generadas, se obtienen 701 muestras del canal (nmero de portadoras pilotos que hay por smbolo, vase apartado 2.3.2.1). Ahora bien, como se dijo en el apartado 2.3.2.1, existen portadoras pilotos continuas, que estn siempre en la misma posicin sin importar el smbolo. Y portadoras pilotos dispersas, que repiten posicin cada 4 smbolos. As, podemos acumular 4 smbolos consecutivos y obtener una estima de canal cada 3 muestras, nmero que sale, tomando los datos del estndar (177 portadoras continuas, 524 portadoras dispersas, as 524*4+177 = 2273, teniendo en cuenta que la primera y ltima muestra estn incluidas, habr que interpolar (6817-1)/(2273-1) = 3). La interpolacin se llevara a cabo usando un bloque Embedded, el cul implementar un interpolador cuadrtico, desarrollado en el Anexo A. Para estudiar otros tipos de interpoladores lase [9]. Adems, para obtener una estima de canal mejor, se ir haciendo una media con los dems valores del canal (para ms informacin del algoritmo usado vase apartado 6.4). El otro aspecto clave es la eliminacin del ruido. Este se compone de los pasos a la inversa que se detallaron en un apartado anterior (Vese apartado 2.3.1). En primer lugar se llevara a cabo el demapeo. Como en el estndar no viene un mtodo concreto, se usar un demapeador basado en la distancia mnima; se explicar ms adelante (Ver apartado 6.9.3.1). Tras eso se realizar el desentrelazado interno, que es exactamente el inverso del anterior explicado en el apartado 2.3.1.2. El tercer paso, ser aplicar el algoritmo de Viterbi para eliminar la redundancia que se le aplic en nuestro caso k/n = , se usar basado en cdigo duro ya que entran bits al sistema. El cuarto paso, el desentralazado externo, es segn el estndar el siguiente:

62 En primer lugar se toma los ndices, al revs, es decir, j = 0 se corresponde con el mximo retardo. La sincronizacin se obtiene rutando el primer byte SYNC reconocido (invertido o no) hacia la rama 0 (Vase el apartado 2.3.1.1 para ms informacin sobre el entrelazado). As, cada byte se retarda (11-j)x17 posiciones, con lo que el retardo total entre emisin y recepcin es de (j+11-j)x17 = 187, valor que por ser idntico para todos los bytes, permite recuperar en la recepcin el orden original. El ltimo paso, es la eliminacin del cdigo de bloque Reed Salomon y la recuperacin de los 188 bytes de informacin.

63

6- Bloques de Simulink
A continuacin se va a detallar el modelo explicado anteriormente, mediante el programa SIMULINK. En primer lugar se va a explicar y dibujar el modelo completo (Figura 6.1), y tras eso se va a detallar los distintos subsistemas que componen al mismo. En este modelo, se va han realizar tres operaciones, principalmente, la simulacin del canal, la ecualizacin de la seal y la eliminacin del ruido. En primer lugar, se generara un canal que aada ruido AWGN y dispersin por multicamino, para ver que de verdad el receptor funciona. Para la ecualizacin de la seal se usar el bloque estimador de canal, que va obteniendo una estima de canal que va mejorando cada cuatro smbolos que le llegan, notar que antes de poder ecualizar debemos demodular la seal. Para la eliminacin del ruido se usa el bloque Eliminador de ruido, el cul realiza dos funciones a su vez, eliminar las portadoras y tras eso, la operacin contraria al bloque Generador de datos tiles (Apartado 3.1).

64

Fig. 6.1 Bloques del receptor DVB-T y el canal

65

6.1.- Informacin
Este bloque se llama signal from workspace y nos permite usar la seal de informacin generada por el generador de seales OFDM de la seccin anterior. Utiliza los siguientes parmetros: Signal: Se debe escribir aqu el nombre de la seal que queremos utilizar que, en este programa, sera informacin. Sample time: Aqu se debe poner cada cuanto tiempo debe tomarse una muestra, o lo que es lo mismo, cada cuanto tiempo llega una muestra al sistema. Como la duracin de un smbolo es de 1120 us, como se vio en el apartado 2.1, y adems hay 10240 muestras tras la modulacin, como se vio en el mismo apartado, entonces el valor ser 1120/10240*10^-6. Samples per frame: Se debe indicar el nmero de muestras por cada trama, es decir, cuantas muestras enva a la vez. Como interesa hacerlo realista se pondr el valor a 1 y en el demodulador se incluir un buffer. From output after final data value by: Es decir, si en la simulacin se utiliza todo el contenido de la seal informacin, que es lo que debe enviar para no dar error, nos interesa que lo ponga todo a 0 (setting to zero), ya que lo que nos llegara sera ruido en la realidad, y esto no se contempla.

66

6.2.- Canal
Este subsistema.sirve para simular el funcionamiento de un canal, en el que se produce interferencia pormultitrayecto y en el que hay un ruido blanco y Gaussiano.

Fig. 6.2 Bloques del canal El subsistema se compone nicamente de tres bloques distintos que se repiten.

6.2.1.- Atenuacin del canal i


Este bloque (Gain) nos indica el cociente de amplitud de seal entre la original y la del canal i. Los parmetros utilizados por este bloque son: Gain: Es el valor de este cociente. Realmente, no hay un valor predeterminado. Para poner un caso extremo, se han escogido 3 caminos, los cules tienen una ganancia muy elevada, siempre mayor de 0.5 Sample time: El tiempo de muestreo se deja a -1.Ya que el bloque anterior informacin muestrea, y por tanto, al bloque gain le llegan los datos muestreados, se podra poner al mismo valor que el que est en bloque informacin.

El resto de parmetros se dejan los que estn por defecto.

67

6.2.2.- Camino i
Con este bloque (delay) se indica el retraso de la seal, es decir, nos dice el nmero de muestras de la seal original que tienen que llegar antes de que llegue la primera por este camino. Los parmetros que se utilizan son: Delay Units: Aqu debemos indicar si el retraso se hace por tramas o por muestras. Como la seal va llegando por muestrasm el retardo ser por muestras (Samples). Delay(Samples): Aqu hay que indicar el nmero de muestras que se retrasan. Como no tenemos un valor predeterminado,se tomaran unos aleatorios. Initial conditions: No queremos que haya condiciones iniciales, por tanto vale 0.

Dejar el resto de parmetros como aparecen.

6.2.3.- Suma los tres caminos


Este bloque (sum) suma los caminos para crear una nica seal. List of sign: Habr tantos + como caminos haya.

El resto de parmetros se dejan los que estn por defecto.

6.2.4.- Adiccin de ruido blanco Gaussiano


En este bloque (AWGN channel) se aade el ruido del canal. Los parmetros usados son: Initial seed: Se dejara el valor que este.

Mode: Se pondr el valor de Signal to Noise Ratio, es decir, se usar la SNR para saber el valor de la potencia de ruido. SNR: Un valor adecuado es entorno a los 20db; se usar 18.5. Input signal power (watts): La potencia de entrada es 1/10240.

68

6.3.- Demodulador de OFDM


Este subsistema se encarga de demodular la seal por smbolos, por tanto, en primer lugar tendr un buffer para almacenar 10240 muestras que forman una trama y ,tras eso, hacer la demodulacin.

Fig. 6.3 Bloques del demodulador

6.3.1.- Almacena 10240 muestras


Este bloque (buffer) almacena 10240 muestras porque este es el nmero de muestras que tiene una trama y que necesitamos para poder demodular. Este bloque tiene los siguientes parmetros: Output buffer size (per channel): Aqu debe ir el nmero de muestras que el buffer debe almacenar antes de soltar las muestras seguidas, es decir, 10240. Buffer overlap: Este parmetro sirve slo cuando la salida no enva las muestras una detrs de otra, sino que crea una matriz y enva las columnas una a una, y nos indica el nmero de elementos de esa columna que se repiten en la siguiente; as, en nuestro caso, el valor es 0. Inicial conditions: Como queremos que las muestras que entren sean las primeras, este valor ser 0.

69

6.3.2.- Quita el prefijo cclico


Es un bloque Selectorque es usado para eliminar el prefijo cclico, ya que no nos hace falta. Los parmetros utilizados por este bloque son: Number of input dimensions: El nmero de dimensiones entrada es uno, puesto que es un vector. a la

Index mode: Aqu se puede poner cualquiera de los dos, pero teniendo en cuenta que si se selecciona zero-based se empieza a contar los vectores desde cero y, con one-based, desde uno. Index option: Se escoger Index vector(dialog), puesto que se conoce el orden de los datos. Index: Aqu se indica el orden de los datos; como se quiere que desaparezca el prefijo cclico, el vector ser: [2049:10240]. Input port size: Es el tamao del vector de entrada que como se sabe es 10240.

6.3.3.- FFT
Este bloque realiza la transformada de Fourier discreta. Slo se van a modificar los parmetros en Fixed-point y, dentro de este fixed-point, data type. Los parmetros que se utilizan son: Product output: Cambiamos a same as input. Accumulator: Cambiamos a same as product output. Output: Cambiamos a same as input.

El resto de parmetros se dejan con los valores que les da Matlab.

6.3.4.- Convierte a trama


Este bloque (Frame convertion) tiene como funcin la de transformar las muestras en una trama, que es lo que nos interesa, para luego poder retrasar. El parmetro utilizado por este bloque son: Output signal: Aqu se debe poner frame based, puesto que quiere transformar en una trama.

70

6.3.5.- Quita muestras hasta 6817


Es un bloque Selector. Se usa para ordenar las muestras, y eliminar los ceros que se aadieron en la modulacin OFDM. Este bloque utiliza los parmetros siguientes: Number of input dimensions: El nmero de dimensiones entrada es uno, ya que es un vector. a la

Index mode: Podemos utilizar tanto zero-based como one-based, teniendo en cuenta que seleccionando el primero, empezamos a contar desde 0 los vectores y, con one-based, desde 1. Index option: Se escoger Index vector(dialog), porque se conoce el orden de los datos. Index: Aqu se debe indicar el reordenamiento de los datos. Como los ceros estn en el centro del vector, y los datos en la modulacin OFDM se cambiaron el orden a la mitad, el vector ser: [4784:8191 0:3408]. Input port size: Es el tamao del vector de entrada que como sabemos es 8192.

71

6.4.- Estimador de canal usando pilotos


En este subsistema se estimar el canal mediante los siguientes pasos: De la seal demodulada se toma nicamente las portadoras pilotos, ahora se genera la misma seal que se envi en estas portadoras y se divide ambas para obtener una estima del canal en esas muestras. Debido a que las portadoras pilotos dispersas tienen posiciones distintas en cuatro smbolos consecutivos, acumulamos estos 4, con idea de tener el mximo nmero de muestras distintas para estimar el canal, y slo tomamos las portadoras pilotos continuas de uno de los smbolos. Tras esto, se tiene una muestra de la estima del canal cada 3 muestras. Para hacer una mejor aproximacin, vamos calculando la media de las estimas de forma iterativa, es decir, si llamamos Hi a la estima i-sima del canal en las posiciones de las portadoras pilotos y Hi a la estima i-sima tras realizar la media, la relacin entre ambas es: H1 = H1. H2 = (H1 + H2)/2. H3 = (H3 + H2)/2 = (H1 + H2 + 2*H3)/4. . . . Hi = (Hi + Hi-1)/2 = (H1 + Sum(2^(j-2)*Hj)) /2^(i-1) con j = 2i. Por facilidad a la hora de hacer el sistema se cambiar este resultado, obtenindose H1 = H1/2. Por ltimo, nos queda determinar el valor del canal en las posiciones que no son pilotos, para ello, realizamos una interpolacin lineal.

72

Fig. 6.4 Bloques del estimador de canal

73

6.4.1.- Selecciona portadoras pilotos


Es un bloque Selectorque se usa para seleccionar las posiciones de las portadoras pilotos. Estas posiciones dependen del smbolo que llegue. Los parmetros utilizados por este bloque son: Number of input dimensions: El nmero de dimensiones entrada es uno, ya que es un vector. a la

Index mode: Podemos utilizar tanto zero-based como one-based, teniendo en cuenta que seleccionando el primero, empezamos a contar los vectores desde 0 y, con one-based, desde 1. Index option: Se escoger Index vector(port), porque hay cuatro smbolos distintos en cuanto a posiciones de las portadoras pilotos. Input port size: Es el tamao del vector de entrada que se corresponde con el de portadoras OFDM total 6817. Sample time: Como el ndice y la seal llegan de una manera continua, si se muestrea se pierde informacin, por lo que el valor ser -1.

6.4.2.- Seleccionador de ndices para pilotos


Este subsistema es idntico al explicado en el apartado 3.3.

6.4.3.- Generador de pilotos


Este subsistema fue explicado en el apartado 3.2.

6.4.4.- Retraso de cuatro tramas


Este bloque (Delay), nos sirve para retrasar cuatro tramas ya que, como se ha dicho en el apartado anterior, para realizar la estimacin del canal necesitamos usar cuatro smbolos seguidos, y como los primero cuatro no contienen informacin pero ocupan espacio hay que retrasar la informacin que envia el Generador de pilotos apartado 3.2. Los parmetros que se utilizan son: Delay Units: Hay que escoger entre retrasar por tramas o por muestras. Como se ha dicho ser una trama entera, por tanto seleccionamos Frames. Delay(Samples): Aqu hay que indicar el nmero de tramas que se retrasan y, como se ha dicho, este valor debe ser 4. Initial conditions: No se requieren condiciones iniciales; valor 0.

Dejar el resto de parmetros como aparecen.

74

6.4.5.- Estima el canal en las portadoras pilotos


Este bloque (product) realiza la divisin entre las portadoras pilotos que han pasado por el canal y las que acaban de ser generadas, obtenindose as una estima del canal en las posiciones de las portadoras pilotos. Los parmetros utilizados por este bloque son: Number of inputs: Aqu se debe marcar las operaciones que se quiere hacer a las seales que en este caso ser */.

El resto de parmetros se dejan al valor de referencia.

6.4.6.- Acumulamos cuatro smbolos


Este bloque (buffer) almacena cuatro smbolos, porque cada cuatro smbolos las posiciones de las portadoras pilotos se repiten, por tanto, se puede obtener posiciones distintas del canal si se mezclan estos cuatro smbolos y as conseguir un canal estimado ms cercano al real. Los parmetros que se utilizan son: Output buffer size (per channel): Aqu debe ir el nmero de muestras que el buffer debe almacenar antes de soltar las muestras seguidas. Como se quieren cuatro smbolos, y cada smbolo tiene 701 muestras (que es el nmero de portadoras pilotos, vase la introduccin del apartado 2.1), entonces cuatro smbolos sern 2804 muestras. Buffer overlap: Este parmetro sirve slo cuando la salida no enva las muestras una detrs de otra, sino que crea una matriz y enva las columnas una a una. As este parmetro indica el nmero de elementos de esa columna que se repiten en la siguiente. En nuestro caso el valor es 0. Initial conditions: Como se explica en el apartado 3.1.4 a la hora de realizar el algoritmo explicado se usar H1 = H1/2 en vez de H1 = H1 por facilidad, as para que el sistema no resulte muy modificado se usar el valor 2, para que en media con 0 de 1.

75

6.4.7.- Ordena las portadoras pilotos


Es un bloque Selector usado para ordenar las muestras, ya que los cuatro smbolos se han colocado una tras otro, y se quiere que se entremezclen segn la posicin que ocupan. Se usa tambin para tomar las posiciones de las portadoras pilotos continuas una sola vez. En este bloque se utilizan los parmetros siguientes: Number of input dimensions: El nmero de dimensiones entrada es uno, puesto que es un vector. a la

Index mode: Podemos utilizar tanto zero-based como one-based, teniendo en cuenta que seleccionando el primero, empezamos a contar desde 0 los vectores y ,con one-based, desde 1. Index option: Se escoger Index vector(dialog), puesto que se conoce el orden de los datos. Index: Aqu se debe indicar el reordenamiento de los datos. El vector se puede obtener usando la funcin ordenapos (vase Anexo A). Input port size: Es el tamao del vector de entrada que, como se ha nombrado en el apartado anterior, es 2804.

6.4.8.- Divide por la mitad


Estos dos bloques (Gain) se utilizan, para dividir por la mitad la seal y as poder ejecutar el algoritmo presentado en la introduccin del apartado 6.4. Los parmetros utilizados por este bloque son: Gain: El valor es 0.5 como se ha indicado en la introduccin.

El resto de parmetros no tienen relevancia.

6.4.9.- Sum
Este bloque (Sum) se utiliza para realizar el algoritmo presentado en la introduccin del apartado 6.4. Los parmetros utilizados en este bloque son: List of sign: Aqu deben ir los signos que se quieren usar, en este caso ++, puesto que lo que queremos es hallar la media.

Como en el caso anterior, el resto de parmetros no requieren nombrarse.

76

6.4.10.- Retraso de una trama


Este bloque (Delay), nos sirven para realizar el algoritmo presentado en la introduccin del apartado 3.1.4. Los parmetros que se utilizan son: Delay Units: Hay que escoger entre retrasar por tramas o por muestras. Como se ha dicho ser una trama entera, por tanto seleccionamos Frames. Delay(Samples): Aqu hay que indicar el nmero de tramas que se retrasan y, como se ha dicho, este valor debe ser 1. Initial conditions: Para que al principio tenga el valor 1 al sumarle 0 y dividirlo por dos necesitamos un valor de 2.

Dejar el resto de parmetros como aparecen.

77

6.4.11.- Interpolador Complejo


Este subsistema se va a utilizar para interpolar la seal de forma lineal. Como las seales que llegan son complejas, este interpolador dividir las seales en reales e imaginarias, las interpolar, tras lo cul las volver a unir.

Fig. 6.5 Bloques de un interpolador complejo

6.4.11.1.- Dividimos la seal en parte real e imaginaria


Con este bloque (Complex to Real-imag) separamos las seales complejas en parte real y parte imaginaria. En este bloque se utilizan los siguientes parmetros: Output: Aqu se debe indicar si se quiere obtener la parte real y la parte imaginaria, o slo una de las dos y cul de ellas En este caso se quieren las dos, por tanto real and imag. Sample time: El tiempo de muestreo es -1 porque si no se eliminara parte de la seal.

78

6.4.11.2.- Interpolacin Real


En este bloque (embedded) se realiza una interpolacin lineal de la seal real, se usar un programa detallado en el Anexo A. Los parmetros necesarios son: - Indicacin de tamao de los vectores de entrada y salida: La entrada sern la suma de los cuatro vectores de portadoras pilotos dispersas y una de las continuas, en total 2273, la salida debe ser el tamao de los vectores dado por el estndar 6817. El resto de los parmetros no son necesarios.

6.4.11.3.- Interpolacin imaginaria


Es exactamente igual a la real.

6.4.11.4.- Unimos para crear una seal compleja


En este bloque (Real-imag to complex) se une la parte real y la parte imaginaria del canal estimado para tener la estimacin de canal completa. Los parmetros que se utilizan son: Input: Aqu se debe indicar si la entrada es la parte real y la parte imaginaria, o slo una de las dos y cul de ellas. En este caso son las dos, por tanto real and imag. Sample time: El tiempo de muestreo es -1 porque si no se eliminara parte de la seal.

79

6.5.- Retraso de tres tramas


Este bloque (Delay), nos sirve para retrasar tres tramas ya que, como se ha dicho en el apartado 3.1.4.2, debido al buffer del demodulador la primera trama no lleva informacin, pero para realizar la estimacin del canal necesitamos usar cuatro smbolos seguidos, por ello, se retrasarn en este bloque 3 smbolos que, aadidos al primero sin informacin, suman los cuatro. Los parmetros utilizados son: Delay Units: Hay que escoger entre retrasar por tramas o por muestras. Como se ha dicho ser una trama entera, por tanto seleccionamos Frames. Delay(Samples): Aqu hay que indicar el nmero de tramas que se retrasan y, como se ha dicho, este valor debe ser 3. Initial conditions: Se requiere el valor 0, ya que el estimador de canal almacenar cuatro tramas. Estas tres y las condiciones iniciales del buffer del demodulador de OFDM, y todas deben tener el mismo valor.

Dejar el resto de parmetros como aparecen.

80

6.6.- Retraso de cinco tramas


En este bloque (delay) se retrasa cinco tramas la seal demodulada, que ms las tres del bloque anterior son las ocho que retrasa el estimador de canal. Aunque si no se hiciera, se conseguira un resultado semejante, el error relativo se mejora. Los parmetros utilizados son: Delay Units: Hay que escoger entre retrasar por tramas o por muestras. Como se ha dicho ser una trama entera, por tanto seleccionamos Frames. Delay(Samples): Aqu hay que indicar el nmero de tramas que se retrasan y, como se ha dicho, este valor debe ser 5. Initial conditions: No se requieren condiciones iniciales; valor 0.

Dejar el resto de parmetros como aparecen.

81

6.7.- Retraso de ocho tramas


En este bloque (delay) se retrasa ocho tramas la seal demodulada, ya que como se ha visto antes, la seal que va al estimador de canal se retrasa ocho tramas en total, y la seal que lleva la informacin original es necesario que tambin sufra este retraso. Los parmetros utilizados son: Delay Units: Hay que escoger entre retrasar por tramas o por muestras. Se va seleccionar Frames. Delay(Samples): Aqu hay que indicar el nmero de tramas que se retrasan y, como se ha dicho, este valor debe ser 8*6817. Initial conditions: No se requieren condiciones iniciales; valor 0.

Dejar el resto de parmetros como aparecen.

82

6.8.- Dividimos por la estima del canal


Este bloque (product) realiza la divisin entre los smbolos que han pasado por el canal y el canal estimado, con idea de obtener la estima de la seal transmitida. Number of inputs: Aqu se debe marcar las operaciones que se quieren hacer a las seales que, en este caso, ser */.

El resto de parmetros se dejan al valor de referencia.

83

6.9.- Eliminador de ruido


Este bloque Elimina el ruido de la seal transmitida, para ello, usa el sistema definido en el estndar (vase apartado 5). Lo primero que realizar es la extraccin de los 6048 datos, es decir, hay que eliminar las portadoras pilotos y TPS

Fig. 6.6 Eliminador de Ruido

6.9.1.- Seleccionador de datos


Este bloque se usa ara escoger los datos dentro de la seal demodulada.

Fig.3.7 Seleccionador de datos

84

6.9.1.1.- ndices de datos de los smbolos


Hay cuatro bloques (constant), cada uno de ellos con un vector que indica la posicin de los datos y portadoras tanto TPS como pilotos. Los parmetros utilizados por este bloque son: Constant value: Este valor es el correspondiente al vector de posiciones.

El resto de parmetros son irrelevantes.

6.9.1.2.- Seleccionador de smbolo


Selecciona, en cada intervalo de tiempo de smbolo, uno de los bloques Constant. Para que este bloque funcione necesita una seal que le indique como y cundo cambiar de entrada. Esta seal ser generada desde el exterior del bloque y se unir por el puerto correspondiente. Los parmetros utilizados son: Number of inputs: Se pondr el nmero de estradas que es 4.

El resto de parmetros no son importantes.

6.9.1.3.- Seal de control


Crea una funcin peridica que es constante durante un determinado intervalo y luego se incrementa o decrementa. Esta seal peridica ser la que se encargar de indicar al multiport switch cuando escoger un bloque constant u otro. Los parmetros utilizados por este bloque son: Vector of output values: Este campo indica los valores que ir tomando la funcin en cada intervalo de tiempo; se quiere que vaya incrementndose de forma que se indiquen consecutivamente los distintos bloques constant. Ahora bien, la seal tiene 8 retrasos, que al ser mltiplo de 4 no afecta, pero como hay un buffer en el demodulador de OFDM, la seal es retrasada una trama, lo que implica que el orden debe ser [3 0 1 2]. Sample time: En este campo ir el tiempo que se mantiene constante la seal. Utilizaremos 1120 microsegundos que, como se dijo anteriormente, es la duracin de un smbolo.

El resto de campos no se modifican.

85

6.9.2.- Elimina las portadoras


Este bloque (Selector) se encarga de escoger los datos que el seleccionador de ndices indica de los vectores de entrada. Los parmetros usados son: Number of input dimensions: Su valor ser 1, ya que queremos que la salida sea un vector con la unin de todos los datos. Index mode: Se pueden utilizar ambos valores, zero-based y onebased, teniendo en cuenta que si seleccionamos el primero empezamos a contar los vectores desde cero y, si seleccionamos el segundo, desde uno. Index Option: Aqu debemos seleccionar Index vector(port), ya que de esta manera el ndice lo obtiene del puerto Idx. Input port size: Aqu ir el tamao del vector de entrada que es 6817. Sample time: Tendr valor -1, porque sino podra eliminar muestras.

6.9.3.- Eliminador de ruido


Se encarga de eliminar el ruido. El mtodo es usar el demapeado, los cdigos de bloque y convolucional, y desentrelazar las seales (vase apartados 2.3.1 y 5).

Fig. 6.8 Eliminador de ruido

86

6.9.3.1.- Demodulador
El demodulador funciona mediante el clculo de distancia mnima. Para ello, la idea es calcular el mdulo del error entre el smbolo recibido y cada uno de los transmitidos y tomar el que tenga el valor menor.

Fig. 6.9 Demodulador

6.9.3.1.1.- Unbuffer
Este bloque se coloca para pasar las muestras de una en una ya que por cada muestra hay que calcular un vector con el modulo del error.

6.9.3.1.2.- Valores de la constelacin


Este bloque (Constant) se usa para almacenar un vector con las posiciones de los smbolos QAM originales. Los parmetros utilizados por este bloque son: Constant value: Este valor es el correspondiente al vector de posiciones.

El resto de parmetros son irrelevantes.

6.9.3.1.3.- Restador
Este bloque (Sum) se encarga de restar el valor del smbolo recibido a los que se transmitieron. Los parmetros utilizados en este bloque son: List of sign: Aqu deben ir los signos que se quieren usar, en este caso -+, puesto que lo que queremos es hallar es una resta.

Como en el caso anterior, el resto de parmetros no requieren nombrarse.

87

6.9.3.1.4.- Modulo
Este bloque (Abs) se encarga de realizar el valor absoluto de las distancias para, as poder calcular la mnima. Los parmetros son irrelevantes.

6.9.3.1.5.- Escoge mnimo


Este bloque escoge el mnimo de valor del vector del mdulo del error. Los parmetros relevantes son: Mode: En este campo se pondr index, ya que queremos saber en que posicin est el valor mnimo, ya que, a la hora de demodularlo, hay que pasarlo a los valores originales y estos coinciden con la posicin ms uno de la que tienen. Index based: El valor de este campo ser one-based ya que queremos saber la posicin real. Find the minimun value of: En este caso da igual, ya que la entrada es un vector y no una matriz.

Dejar el resto de parmetros como estaban.

6.9.3.1.6.- Restador
Este bloque sirve para restarle una unidad al valor obtenido y as conseguir el smbolo demodulado. Los parmetros utilizados en este bloque son: List of sign: Aqu deben ir los signos que se quieren usar, en este caso -+, puesto que lo que queremos es hallar es una resta.

Como en el caso anterior, el resto de parmetros no requieren nombrarse.

6.9.3.1.7.- Constante
Este bloque (constant) se usa junto con el bloque restador anterior para eliminar una muestra y as obtener el smbolo correcto. Los parmetros utilizados por este bloque son: Constant value: Este valor es la unidad ya que los smbolos comienzan en cero y los recibidos en uno.

El resto de parmetros son irrelevantes.

88

6.9.3.1.8.- Almacena 6048 muestras


Este bloque (buffer) almacena las muestras que antes el unbuffer separ, de manera que tengamos el vector de smbolos transmitidos juntos de nuevo. Este bloque tiene los siguientes parmetros: Output buffer size (per channel): Aqu debe ir el nmero de muestras que el buffer debe almacenar antes de soltar las muestras seguidas, es decir, 6048. Buffer overlap: Este parmetro sirve slo cuando la salida no enva las muestras una detrs de otra. sino que crea una matriz y enva las columnas una a una, y nos indica el nmero de elementos de esa columna que se repiten en la siguiente; as, en nuestro caso, el valor es 0. Inicial conditions: Como queremos que las muestras que entren sean las primeras, este valor ser 0.

6.9.3.1.9.- Convertidor de smbolos a bits


Este bloque transforma los smbolos a bits, ya que es necesario para el desentrelazador. Los parmetros usados son: - Number of bits per integer: Como queremos pasar de smbolos a bits el nmero es 6. - Output data type: El tipo de salida debe ser boolean, puesto que estamos pasando a bits.

89

6.9.3.2.- Desentrelazador interno


Realiza la operacin inversa explicada en el apartado 2.3.1.2.

Fig. 6.10 Desentrelazador interno

90

6.9.3.2.1.- Desentrelazador de smbolo


Se encarga de colocar los smbolos otra vez en el orden que tenan al principio. El procedimiento de entrelazado se explica en el apartado 2.3.1.2.

Fig. 6.11 Desentrelazador de smbolo

6.9.3.2.1.1.- Desentrelazador para smbolos pares


Este bloque (General block interleaver) desentrelaza segn un algoritmo dado por el estndar (apartado 2.3.1.2). El parmetro a poner es: - Elements: Se colocan aqu las posiciones para el entrelazado.

91

6.9.3.2.1.2.- Seal de control


Genera una seal de control, la cul varia entre +/- 1 cada trama de 36288 bits.

Fig. 6.12 Seal de Control

6.9.3.2.1.2.1.- Generador de pulso


Se encarga de generar un pulso de amplitud 2 y que vara cada trama. Valores usados: - Pulse type: Se puede poner basado en tiempo y muestras, en este caso se usara basado en muestras. - Time: Se puede incluir una seal externa que indique tiempo en cada momento o usar el tiempo de la simulacin, que ser lo adecuado. - Amplitude: Pondremos valor dos para poder obtener la seal de +1 y 1 al restarle uno. - Period: Aqu no importa tanto, el valor que se ponga, mientras se consiga que la parte del pulso de valor 0 y de valor 2 duren lo mismo. Para facilitar se pondr valor 2. - Pulse width: Como el periodo es 2 y queremos que el pulso y la parte que va a 0 valgan lo mismo, el valor es la mitad, es decir, 1. - Phase delay: Como nos interesa que empiece en el pulso, el valor ser 0. -Sample time: Como se est usando el tiempo de simulacin se puede usar el valor por defecto -1.

92

6.9.3.2.1.2.2.- Sumatorio
Este bloque Sum, se usa para restarle uno al pulso y as obtener la seal adecuada. Los parmetros que se utilizan en este bloque son: List of sign: Aqu deben ir los signos que queremos usar, en este caso -+, puesto que queremos restarle uno.

El resto de parmetros no requieren nombrarse.

6.9.3.2.1.2.3.- DSP constant


Este bloque se usa implementar una constante de valor 1. Los parmetros que se utilizan: - Constant value: Aqu se coloca el valor de la constante, es decir, 1. - Sample mode: Se pondr discreto, ya que el modelo no es continuo. - Output: Ponemos sampled based. - Sample time: El tiempo de muestro, se puede poner inf, que suelte una muestra constantemente, -1 cada paso mnimo, o el tiempo esperado.

93

6.9.3.2.1.3 Entrelazador para smbolos impares.


Este bloque General block interleaver, realiza la funcin inversa al entrelazador par, ya que as est recogido en el estndar. Usa los mismos valores que el par (Vase apartado 2.3.1.2). El parmetro a poner es: - Elements: Se colocan aqu las posiciones para el entrelazado.

6.9.3.2.1.4.-Escoge entre smbolos


Este bloque se usa para escoger entre smbolo par o impar usando la seal de control. Los parmetros que se utilizan son: - Criteria for passing first input: Como se tiene una seal que varia entre -1 y 1, se puede poner u>threshold o u2>=threshold. - Threshold: El umbral se colocar a 0, que est entre -1 y +1. - Sample time: Se dejara el -1 que est por defecto.

94

6.9.3.2.2.- Buffer
Este bloque se usa para almacenar los 756 bits necesarios para hacer el desentrelazado de bits, ya que este se realiza en bloques de 756 (6*126 palabras). - Output buffer size: Como se ha dicho es 756. - Buffer overloap: Queremos que las muestras salgan por bloques tal cual no que se repitan, por tanto el valor es 0. - Initial conditions: Se pondr 0, ya que se est dando este valor a todas las condiciones iniciales.

6.9.3.2.3.- Desentrelazador de bits


Este bloque General block interleaver se encarga de desentrelazar los 756 bits segn un algoritmo dado por el estndar (apartado 2.3.1.2); el programa que saca las posiciones puede verse en el Anexo A. El parmetro a poner es: - Elements: Se colocan aqu las posiciones para el entrelazado.

95

6.9.3.2.4.- Retraso
Este bloque se obtiene de dividir el nmero de bits, 36288 (6048*6), ms el nmero de ceros que aadir el buffer anterior (756) entre 2176, es decir, da 1702. Por lo tanto, hacemos 18*2176-(36288+756) = 2124, que es el nmero de ceros que hay que aadir para que buffer se complete con ceros y luego empiece a almacenar los datos, prohibiendo que el desentrelazado salga defectuoso. Los parmetros utilizados son: Delay Units: Hay que escoger entre retrasar por tramas o por muestras. Como no es un nmero de tramas, se escoger samples. Delay(Samples): Aqu hay que indicar el nmero de tramas que se retrasan y, como se ha dicho, este valor debe ser 2124. Initial conditions: Se requiere el valor 0, ya que el estimador de canal almacenar cuatro tramas. Estas tres y las condiciones iniciales del buffer del demodulador de OFDM, y todas deben tener el mismo valor.

Dejar el resto de parmetros como aparecen.

6.9.3.2.5.- Buffer
Este bloque (buffer) se usa para almacenar los 2176 bits que se obtuvieron al aadir los cdigos de bloque y convolucional (ver apartado 2.3.1.2). - Output buffer size: Se necesitan 2176 como se explic. - Buffer overloap: Queremos que las muestras salgan por bloques tal cual no que se repitan, por tanto el valor es 0. - Initial conditions: Se pondr 0, ya que se est dando este valor a todas las condiciones iniciales.

96

6.9.3.3.- Decodificador de Viterbi


Realiza la extraccin de cdigo convolucional y por tanto la correccin de errores mediante el algoritmo de Viterbi. Los parmetros que se deben implementar son: Trellis structure: Se escoge la funcin de matlab adecuada y los parmetros correspondientes, en nuestro caso Poly2trellis(7,[171 133]). Punctured code: Se marca esta casilla, ya que queremos aadir, el vector punctured (pinchado). Punctured vector: Es el mismo que en transmisin (apartado 3.1.1.4) [1 1 0 1 1 0]. Decision type: Se usar Hard decision, por ser, la nica que acepta de entrada bits.

El resto de parmetros se dejan como estn.

6.9.3.4.- Desentrelazador convolucional


Realiza la operacin de desentrelazado convolucional, es decir la operacin inversa de lo explicado en el apartado 2.3.1.1.

Fig. 6.13 Desentrelazador convolucional

6.9.3.4.1.- Convertidor de bits a bytes


Convierte los bits que entran en enteros Los parmetros usados son: - Number of bits per integer: Como queremos pasar de bits a bytes es 8. - Output data type: El tipo de salida debe ser uint8, ya que queremos bytes y ms precisin no es necesaria.

97

6.9.3.4.2.- Retraso
Este retraso se obtiene empricamente, simulando el sistema y viendo cuantas muestras hay de diferencia para conseguir que entren bloques de 204 muestras. Los parmetros utilizados son: Delay Units: Hay que escoger entre retrasar por tramas o por muestras. Como no es un nmero de tramas, se escoger samples. Delay(Samples): Aqu hay que indicar el nmero de tramas que se retrasan, 31. Initial conditions: Se requiere el valor 0, ya que el estimador de canal almacenar cuatro tramas. Estas tres y las condiciones iniciales del buffer del demodulador de OFDM, y todas deben tener el mismo valor.

Dejar el resto de parmetros como aparecen.

6.9.3.4.3.- Desentrelazador convolucional


Realiza la operacin de desentrelazado propiamente dicha. Los parmetros que utiliza son los siguientes: Rows of shift register: Este valor nos lo da el estndar, 12, y nos indica el nmero de registros, los cuales van a ser desplazados un nmero de veces el parmetro que viene a continuacin.. Register length step: Este valor tambin nos lo da el estndar, 17. Initial condition: Como no se indica nada se usara el valor por referencia, 0.

6.9.3.5.- Decodificador de bloque Reed-Salomon


Este bloque (Integer output RS decoder) se encarga de la extraccin del cdigo de bloque y por tanto, de la ltima parte de los sistemas de correccin de DVB-T. Los parmetros usados son: - Codeword length: El valor est dado por el estndar y es 204. - Message length: El valor de este apartado tambin lo da el estndar, 188.

98

6.10.Constelacin Ecualizada

no

Ecualizada

Este bloque (Discrete-Time Scatterer plot Scope), sirve para dibujar las constelaciones de los datos, y ver como es la seal antes de ser ecualizada y despus de ser ecualizada. Los parmetros utilizados son: Dentro de plotting properties: Samples per symbol: Como cada smbolo es representado por una muestra, el valor ser 1. Offset: El valor ser 0, porque el offset representa el valor de muestras que deja pasar antes de empezar a dibujar. Points displayed: El valor de este campo ser el nmero de muestras que se deben representar a la vez. Dado que cada smbolo OFDM tiene 6817 muestras, el nmero ser 6817. New points per displays: Cada vez que se dibuja un smbolo OFDM, al siguiente no le aporta nada, as que el valor debe ser el mismo del campo anterior, para dibujar de nuevo un smbolo OFDM entero.

Las otras pestaas son para caractersticas del dibujo personales. En Rendering properties hay que indicar el tipo de smbolo para representar los datos, el color etc. En Axes properties se debe indicar los ndices mximo y mnimo de los ejes x e y y el nombre de estos. En figure properties se indica el nombre que va a aparecer. Cuando se dibuje la posicin de los datos, indicar si se quiere que la pantalla se abra al empezar la simulacin.

99

6.11.- Calculador del error entre la seal que se transmiti y la recibida


Este bloque (Error rate calculation) se encarga de calcular los bits errneos, los bits totales y la BER. Los parmetros usados son: Receive Delay: El valor de este campo es el retraso que se producir en la entrada de seal recibida (Rx); en este caso el valor debe ser 0. Computation Delay: El valor de este campo es el retraso que se producir en la entrada de seal transmitida (Tx); en este caso el valor debe ser 0. Computation mode: Este campo se usa para saber si todos los datos que entran deben ser analizados o solo parte de ellos. En nuestro caso son todos, por tanto, irreal valor frame entire. Output data: Este campo indica a donde queremos que los datos vayan, es decir, si queremos que se almacenen, o si queremos que se salgan por el puerto para mostrarlos, que es el que se escoger: port. Reset port: Se usa si queremos aadir una seal para resetear los datos; no es necesario. Stop simulation: Se usa para parar la simulacin tras un determinado nmero de errores, no se marcara, porque queremos que simule todo el tiempo.

100

6.12.- Muestra la Ber, el nmero total de bits errneos y el nmero total de bits
Este bloque (Display) se usa para mostrar los datos que el bloque anterior saca por el puerto. Los parmetros son los siguientes: Format: Aqu podemos usar prcticamente, cualquiera de las elecciones. Se escoger short, porque ms de 5 decimales no es necesario. .Decimation: Indica cada cuantas muestras quieres que se realimente lo que se muestra. Floating display: No se marcar, porque la entrada desaparecera.

101

6.13.- Pruebas realizadas para comprobar el funcionamiento


En este apartado se va comprobar el correcto funcionamiento del sistema.

3.3.1.- Comprobacin de que el ecualizador funciona


Para ello, ejecutaremos el programa, quitndole el ruido y veremos el parecido de la constelacin resultante con la transmitida. Se va a realizar comprobaciones peridicas cada 15 milisegundos hasta tener una constelacin lo ms parecida posible.

Fig. 6.14 constelacin ecualizada a los 15 milisegundos

Fig. 6.15 Constelacin ecualizada a los 30 milisegundos

102

Fig. 6.16 Constelacin ecualizada a los 45 milisegundos

Fig. 6.17 Constelacin ecualizada a los 60 milisegundos A partir de los 30 milisegundos la seal empieza a tomar forma de seal 64-QAM. A los 45 milisegundos se obtiene una constelacin bastante definida, pero es a los 60 milisegundos cuando se obtiene la representacin ms clara. A partir de ah las mejoras no se aprecian visualmente. Si comparamos las constelaciones obtenidas con las que se obtuvieron en el apartado 2.3.5, se ve que la energa es tambin la misma, no hay atenuacin.

103

6.13.2.- Comprobacin de que el eliminador de ruido funciona


En este apartado se eliminar el efecto de multicaminos, y se comprobar que el eliminador de ruido funciona correctamente. Para ello, se observar el error peridicamente, cada 15 milisegundos. Notar que el canal en este apartado ser unicamente el bloque Adiccin de ruido gaussiano (Vase apartado 6.2).

Fig. 6.18 Error a los 15 msg

Fig. 6.19 Error a los 30 msg

Fig. 6.20 Error a los 45 msg Se producen 6 bits errneos en el milisegundo doceavo. Esto es debido a un ajuste, pero que no afecta al resultado final, ya que la ecualizacin tarda ms y no es hasta el milisegundo vigsimo quinto cuando la ecualizacin es suficientemente buena como para que el eliminador de ruido funcione correctamente, como se ver en el apartado siguiente.

104

6.13.3.- Comprobacin completo funciona

de

que

el

sistema

En este apartado vamos a calcular la media del valor relativo en la primera parte del vector de datos recibidos, que es donde el error es mayor y en la ltima parte, donde el error es menor. Para realizar estas operaciones se har uso de la funcin de Matlab "mean, que calcula la media. Hay que tener en cuenta que los datos almacenados en salida tienen un retraso de 37225 muestras, es decir, que datos(1) debe ser igual a salida(37225+1).Este dato se obtiene sumando todos los retrasos, aunque es ms sencillo, averiguarlo con el programa find de matlab. Adems habr que ver que el vector datos y el vector dat sean exactamente los mismos, pero desplazados (ver Fig. 3.19 y 3.20), ya que puede pasar que el eliminador de ruido, haga mal la operacin, tanto en la salida como en la obtencin de los datos reales.

Fig. 6.21 Colocacin de la seal datos

6.13.3.1.- Comprobacin de que dat y datos son iguales


Para realizar esta operacin usamos los vectores generados durante la ejecucin del programa. En primer lugar calculamos, el desplazamiento de los datos. Para ello, usamos la funcin find, que busca un valor dentro de una matriz, devolviendo la posicin de este. As obtenemos los valores iniciales de los vectores. Tras eso se obtendrn los valores finales. L = datos(1); a = find(dat == L,1); b = length(dat); c = b-a+1; Si son iguales, el mximo de la resta entre los dos vectores debe ser 0. max(datos(1:b)-dat(a:end)) = 0. Luego se cumple que datos y dat son iguales.

105

6.13.3.2.- Clculo del error de los datos en las tramas finales e iniciales.
Como se explic, se calcular el error entre dat y salida, ya que estos tienen el mismo retraso y as es ms sencillo de calcular. Y como se vio en el apartado anterior dat coincide con los datos que se enviaron. mean((salida(a:a+d) - dat(a:a+d))./dat(a:a+d)) = 2.7911=>279.11%

con d = 188*10, es decir 10 tramas de datos. mean((salida(end-d:end) - dat(end-d:end))./dat(end-d:end)) = 0 =>0%.

El error en las ltimas 10 tramas, es inexistente, es ms, como se comprueba en las figuras 6.22, 6.23 y 6.24, el error a los 30 msg y a los 45 msg es el mismo. Una mejor observacin muestra que desde los 25 msg el error ya no vara.

Fig. 6.22 Error del sistema a los 15 milisegundos

106

Fig. 6.23 Error del sistema a los 30 milisegundos

Fig. 6.24 Error del sistema a los 45 milisegundos

107

7.- Conclusiones y lneas de trabajo futuras


7.1.- Conclusiones
El objetivo de este proyecto ha sido la implementacin de un transmisor y receptor DVB-T, bajo la plataforma de MATLAB y que cumpliera el estndar ETSI EN 300 744 V.1.4.1. Dado que es un simulador, no se han tenido en cuenta aspectos que pueden darse en la vida real y aunque algunos podran haberse modelado no eran caso de estudio. Algunos de estos aspectos son los siguientes: Aumento del error por efectos meteorolgicos, tales como lluvia, niebla etc. Despolarizacin de la seal por lluvia. Colocacin perfecta de la antena receptora.

Aunque el problema de estos aspectos podra ser grave, en general el margen de seguridad que tiene el sistema es adecuado. Como se vio en el apartado 6.13.3.2 aunque los datos no deberan empezar a llegar correctamente hasta el milisegundo 45, en el que la ecualizacin es adecuada (aunque mejorable hasta el milisegundo 60), ya a partir del milisegundo 25 el error era 0. Esto es gracias al gran poder de correccin del sistema que puede, incluso, corregir la seal si la distorsin no es muy elevada. Durante la implementacin del proyecto hubo una serie de problemas el primero debido a retrasos que haba que colocar en el eliminador de ruido ver (apartado 6.9.3.2.4 y apartado 6.9.3.4.2) para que la seal distorsionada y la seal de de salido llegaran al mismo tiempo, esto se deba a problemas de SIMULINK y fueron resueltos observando los datos almacenados en cada paso, durante la ejecucin del modelo. Otro de los inconvenientes surgido durante la ejecucin del trabajo fue el problema con la memoria RAM del ordenador, ya que el sistema requera una gran cantidad y hubo que desactivar la variable que guarda SIMULINK para tener un control sobre los Workspace, la cul hacia que el sistema se parase dando el error Memory allocation error.

108

7.2.- Futuras lneas de trabajo


Las lneas de trabajo futura debern estar orientadas a las mejoras de los dos aspectos claves del receptor, que son el eliminador de ruido y el ecualizador. Para obtener una mejora del eliminador de ruido habra que conseguir implementaciones de menor consumo de potencia en los desentrelazadores y en el demapeador. En lo referente al ecualizador, la idea sera mejorar el tiempo de respuesta de este, ya que el estimador de canal tiene una respuesta muy lenta a las variaciones, y si tenemos un canal variante en el tiempo la imagen no se ver ntida. Hay que notar que en general en el espectro libre el canal no es muy variante si las antenas estn fijas, pero la televisin actualmente se est moviendo hacia los mviles tambin, los cules pueden alejarse o acercarse de la estacin base que les suministra la seal y esto provoca una variacin de la potencia que les llega y efecto Doppler en la frecuencia de la seal recibida, que es equivalente a un canal variante en el tiempo.

109

8.- Bibliografa
Escritas [1] AN INTRODUCTION TO ORTHOGONAL FREQUENCY DIVISION MULTIPLEXING BY OVE EDFORS MAGNUS SANDELL JAN-JAAP VAN DE BEEK DANIEL LANDSTROM FRANK SJBERG [2] Orthogonal Frequency Division Multiplexing Hrushikesh Vasuki (1999) [3] Performance analysis and low power VLSI implementation of DVB-T Imed Ben Dhaou and Laszlo Horvath. [4] ETSI EN 300 744 V.1.4.1 Pginas Web [5] http://telecom.fi-b.unam.mx/Curso/Introduccion.pdf [6] http://es.wikipedia.org [7] http://www.monografias.com/trabajos5/tv/tv.shtml [8] http://members.fortunecity.es/zemogd/ecualizadores.html [9]http://telecomid.webs.upv.es/ftp/CD/Programa%20Oficial%20Telecom%20 I+D%202007_07_14_archivos/pdf/8.pdf [10]http://books.google.es/books?id=VW7_F8qBsEUC&dq=digital+transmissio n+engineering+anderson&pg=PP1&ots=oLdUOL3XJY&sig=rfS5WEwyqJuioHGydBROROgLJc&hl=es&sa=X&oi=book_result&resnum=1&ct=result# PPR8,M1 Otros [11] Tutorial de MATLAB. [12] Demo dvbt_sim de SIMULINK. by

110

Anexo A
Aqu se escribirn los programas de MATLAB.

Generador_dvbt_fun
%Realiza el calculo de los valores necesarios para llevar a cabo la %generacin de la seal DVB-T y la comprobacin del funcionamineto del %receptor. %Calculamos las posiciones de las smbolos %distintos que hay. posiciones = calculapilot; posicion1 = posiciones(1,2:end) + posicion2 = posiciones(2,1:end-1) posicion3 = posiciones(3,1:end-1) posicion4 = posiciones(4,1:end-1) portadoras pilotos, en los 4

1; + 1; + 1; + 1;

%Se escriben las posiciones de las portadoras TPS que vienen en el estandar %hay que tener en cuenta que comienzan por el valor 0 posicionestps = [34 50 209 346 413 569 595 688 790 901 1073 1219 1262 1286 1469 1594 1687 1738 1754 1913 2050 2117 2273 2299 2392 2494 2605 2777 2923 2966 2990 3173 3298 3391 3442 3458 3617 3754 3821 3977 4003 4096 4198 4309 4481 4627 4670 4694 4877 5002 5095 5146 5162 5321 5458 5525 5681 5707 5800 5902 6013 6185 6331 6374 6398 6581 6706 6799]; %Se colocan las posiciones de los datos, seguidos de las posiciones de %portadoras pilotos y por ltimo de las portadoras TPS, tal y como %quedaran trs el bloque Concatena datos, pilotos y portadoras TPS, %explicado en el apartado 2.2.4. Pdat = 1:6048; Ppilo = 6049:6749; PTP = 6750:6817; %Se le suma uno a las posiciones de portadoras TPS para que comiencen en 1 %ya que en matlab la posicin '0' no existe, como queremos quedarnos slo %con las posiciones de los datos, ponemos a 0 las posiciones de las %portadoras TPS primero para su extraccin posterior. datos = 1:6817; ptps = posicionestps + 1; datos(ptps) = 0; %Se pone a '0' las posiciones de las posiciones de cada uno de las %portadoras pilotos, en los distintos smbolos, y se extraen todos los 0, %quedando en cada Pia las posiciones nicamente de los datos. %El siguiente paso, una vez obtenidas las posiciones de los datos, y de las %portadoras, es ordenarlos como convengan para que funcione el bloque, esto

111
%depende de la versin de MATLAB. En este programa se obtuvo para la %versin R2007b. P1a = datos; P1a(posicion1) = 0; P1a = find(P1a ~= 0); P1 = zeros(1,6817); P1(posicion1) = Ppilo; P1(P1a) = Pdat; P1(ptps) = PTP; P2a = datos; P2a(posicion2) = 0; P2a = find(P2a ~= 0); P2 = zeros(1,6817); P2(posicion2) = Ppilo; P2(P2a) = Pdat; P2(ptps) = PTP; P3a = datos; P3a(posicion3) = 0; P3a = find(P3a ~= 0); P3 = zeros(1,6817); P3(posicion3) = Ppilo; P3(P3a) = Pdat; P3(ptps) = PTP; P4a = datos; P4a(posicion4) = 0; P4a = find(P4a ~= 0); P4 = zeros(1,6817); P4(posicion4) = Ppilo; P4(P4a) = Pdat; P4(ptps) = PTP; [dvb_bit_int_table,dvb_sym_int_table] = tablas;

112

Tablas
function [dvb_bit_int_table,dvb_sym_int_table] = tablas %OBJETIVO %La funcin siguiente crea dos tablas una para entrelazado de bit y otra %parael entrelazado de simblos. %VARIABLES %N = Segun el estandar 64-QAM usa 6 bits (2^6 = 64) y 126 palabras, % 126*6 = 756. %ind = El estandar da los valores. %Mmax = En 8k es la potencia de 2 que est ms cerca, es decir, 8192. %pot = (log2 Mmax)-1, ya que estamos usando las palabras binarias. %Nmax = valor mximo de canales en la modulacin OFDM. Nmax = 6048; pot = 12; Mmax = 8192; ind = [0,63,105,42,21,84]; N = 756; dvb_bit_int_table = 1:N; dvb_bit_int_table = reshape(dvb_bit_int_table, 6, 126); % La demultiplexacin para 64-QAM no Jerrquica es se segun el estandar dvb_bit_int_table = dvb_bit_int_table([1 4 2 5 3 6],:); % Se realizan los distintos entrelazados recogidos en el dvb_bit_int_table(1,:) = dvb_bit_int_table(1,mod([0:125] + 1); dvb_bit_int_table(2,:) = dvb_bit_int_table(2,mod([0:125] + 1); dvb_bit_int_table(3,:) = dvb_bit_int_table(3,mod([0:125] + 1); dvb_bit_int_table(4,:) = dvb_bit_int_table(4,mod([0:125] + 1); dvb_bit_int_table(5,:) = dvb_bit_int_table(5,mod([0:125] + 1); dvb_bit_int_table(6,:) = dvb_bit_int_table(6,mod([0:125] + 1); dvb_bit_int_table = dvb_bit_int_table(:); estandar. + ind(1),126) + ind(2),126) + ind(3),126) + ind(4),126) + ind(5),126) + ind(6),126)

113
%Realizamos las operaciones que vienen en el estandar q = 0; h = zeros(1,Mmax); R = zeros(1,pot); for indx = 0:Mmax-1, if indx == 2, R(1) = 1; end Rsum = R(1)*2^7+R(2)*2^1+R(3)*2^4+R(4)*2^2+R(5)*2^9+R(6)*2^6+... R(7)*2^8+R(8)*2^10+R(9)*2^0+R(10)*2^3+R(11)*2^11+R(12)*2^5; h(q+1) = mod(indx,2)*2^12+Rsum; if h(q+1)<Nmax, q = q + 1; end R = [R(2:pot) xor(xor(R(1),R(2)),xor(R(5),R(7)))]; end dvb_sym_int_table = h(1:Nmax)+1; % Borramos variables que no sirvan ms clear R Rsum h indx q % Se expande la tabla ya que son 6 bits por smbolo dvb_sym_int_table = [dvb_sym_int_table*6-5; dvb_sym_int_table*6-4; dvb_sym_int_table*6-3; dvb_sym_int_table*6-2; dvb_sym_int_table*6-1; dvb_sym_int_table*6]; dvb_sym_int_table = dvb_sym_int_table(:);

114
function posiciones = calculapilot %Calcula las posiciones de las portadoras pilotos continuas y dispersas %VARIABLES % - posiciones: Matriz con cuatro filas, una para cada smbolo OFDM % distinto. %- p: Indica el smbolo que se est tratando en ese momento. %- Pcontinuas: Las posiciones de las portadoras continuas. %- x: Valor que aumenta de forma lineal, para que las portadoras dispersas % tomen todos los valores. %- k: Se usa para recorrer el vector de pilotos continuas. %- j: Se usa para recorrer el vector de pilotos dispersas. posiciones = zeros(4,700); luego comentario %y ves en que posicion se hace 0 y ese es el %nmero pcontinuas = [0 48 54 87 141 156 192 201 255 279 282 333 432 450 483 525 531 618 636 714 759 765 780 804 873 888 918 939 942 969 984 1050 1101 1107 1110 1137 1140 1146 1206 1269 1323 1377 1491 1683 1704 1752 1758 1791 1845 1860 1896 1905 1959 1983 1986 2037 2136 2154 2187 2229 2235 2322 2340 2418 2463 2469 2484 2508 2577 2592 2622 2643 2646 2673 2688 2754 2805 2811 2814 2841 2844 2850 2910 2973 3027 3081 3195 3387 3408 3456 3462 3495 3549 3564 3600 3609 3663 3687 3690 3741 3840 3858 3891 3933 3939 4026 4044 4122 4167 4173 4188 4212 4281 4296 4326 4347 4350 4377 4392 4458 4509 4515 4518 4545 4548 4554 4614 4677 4731 4785 4899 5091 5112 5160 5166 5199 5253 5268 5304 5313 5367 5391 5394 5445 5544 5562 5595 5637 5643 5730 5748 5826 5871 5877 5892 5916 5985 6000 6030 6051 6054 6081 6096 6162 6213 6219 6222 6249 6252 6258 6318 6381 6435 6489 6603 6795 6816]; for p = 0:3 diferentes x = 1; k = 1; j = 1; %hay 4 smbolos que tienen posiciones de las pilotos %Este valor sale poniendo uno ms alto %pones la restriccin que est en

while(j <= 700) %los dos if comprueban que la piloto continua est entre las no %continuas if (k <= length(pcontinuas))&(posiciones(p+1,j) > pcontinuas(k)) if(posiciones(p+1,j-1) < pcontinuas(k)) posiciones(p+1,j+1) = posiciones(p+1,j); posiciones(p+1,j) = pcontinuas(k); k = k + 1; j = j + 1; % este bucle que se repite tambin abajo es para cubrir el

115
% caso en que la piloto continua que viene est colocada a % continuacin de la piloto continua anterior, para verlo % comprueba la que la ltima scatered pilot est despues de % la continua while(k <= length(pcontinuas))&(posiciones(p+1,j) > pcontinuas(k)) posiciones(p+1,j+1) = posiciones(p+1,j); posiciones(p+1,j) = pcontinuas(k); k = k+1; j = j+1; end %cuando la continua coincide con la no continua hay que coger %la siguiente continua y comprobar que la siguiente continua %se coloque antes de la ltima no continua elseif (posiciones(p+1,j-1) == pcontinuas(k)) k = k + 1; while(k <= length(pcontinuas))&(posiciones(p+1,j) > pcontinuas(k)) posiciones(p+1,j+1) = posiciones(p+1,j); posiciones(p+1,j) = pcontinuas(k); k = k+1; j = j+1; end end end posiciones(p+1,j+1) = 3*p + 12*(x-1); %distintas posiciones de las %piloto no continuas x = x + 1; j = j + 1; end if(p ~= 0)%se almacena un cero al principio de ms %el ultimo valor de pcontinuas no se almacena posiciones(p+1,j) = pcontinuas(k); end end

116

Interpolador
function canal_int = interpolador(canal) %Funcin que interpola el canal de forma cuadrtica, la funcin de %interpolacin a*x^2+b*x+c. Se calcular los valores de de a,b,c %resolviendo la ecuacin de segundo grado que se forma al sustituir %x en tres lugares distintos, en los que se sepa la solucin, es decir, %en uno de los 2273 puntos conocidos. %VARIABLES %canal_int: Canal trs la interpolacin. %canal: Canal antes de la interpolacin. % %Se interpola entre los dos primeros lugares , ya que hay que interpolar %con la primera ecuacin entre la muestra primera y la segunda, pero %tambin entre la segunda y la tercera, en ambos casos dos muestras, %en el resto de los casos se interpolasolo en un grupo, es decir, con %los siguientes valores de a,b,c se inerpola solo entre dos muestras. canal_int = zeros(3*length(canal)-2,1); c = canal(1); b = (-canal(3)+4*canal(2)-3*c)/6; a = (canal(3)-2*canal(2)+c)/18; canal_int(1) = canal(1); canal_int(2) = a+b+c; canal_int(3) = a*4+b*2+c; %interpolamos en los siguientes grupos for i = 1:(length(canal)-2) c = canal(i); b = (-canal(i+2)+4*canal(i+1)-3*c)/6; a = (canal(i+2)-2*canal(i+1)+c)/18; canal_int(3*(i-1)+4) canal_int(3*(i-1)+5) canal_int(3*(i-1)+6) canal_int(3*(i-1)+7) end = = = = canal(i+1); a*16+b*4+c; a*25+b*5+c; canal(i+2);