tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A...

142
INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA SECCIÓN DE ESTUDIOS DE POSGRADO E INVESTIGACIÓN TÉCNICAS DE CODIFICACIÓN PARA CONTROL DE ERROR EN RADIO DEFINIDO POR SOFTWARE T E S I S QUE PARA OBTENER EL GRADO DE MAESTRO EN CIENCIAS EN INGENIERÍA DE TELECOMUNICACIONES PRESENTA: DAVID VÁZQUEZ ÁLVAREZ DIRECTOR DE TESIS: M. EN C. MIGUEL SÁNCHEZ MERAZ MÉXICO D.F. 2007

Transcript of tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A...

Page 1: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

INSTITUTO POLITÉCNICO NACIONAL

ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA SECCIÓN DE ESTUDIOS DE POSGRADO E INVESTIGACIÓN

TÉCNICAS DE CODIFICACIÓN PARA CONTROL DE ERROR EN RADIO

DEFINIDO POR SOFTWARE

T E S I S QUE PARA OBTENER EL GRADO DE

MAESTRO EN CIENCIAS EN INGENIERÍA DE TELECOMUNICACIONES

PRESENTA:

DAVID VÁZQUEZ ÁLVAREZ

DIRECTOR DE TESIS:

M. EN C. MIGUEL SÁNCHEZ MERAZ

MÉXICO D.F. 2007

Page 2: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de
Page 3: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de
Page 4: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

AGRADECIMIENTOS

A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de ustedes siempre están conmigo. Gracias a ti papá “Don Amadito”, porque representas toda una fuente de inspiración para mi. A ti mamá “Consue”, porque siempre me motivaste de la mejor manera para poder realizar este proyecto. A mi hermana Bety, o puedo decir también “mi gran amiga” por depositar tu confianza en mi. A ti Samantha, nuestra “gugu” por llegar a nuestras vidas.

A ti Gaby, mi amiga, mi compañera, por siempre estar conmigo, por haber creído en mí y motivarme de tal forma para no claudicar en este camino, a tu mamá y hermanos por todo su apoyo incondicional.

A mi familia adoptiva “mi familia”, a usted Sra. Cari, Sra. Agus, por brindarme su amistad, su cariño y por dejarme ser parte de ustedes. A mis primos, amigos, compañeros de juegos, Samuel y Héctor por siempre tener una sonrisa para mí. A usted Don Sergio, Sra. Rebeca, Gaby y Sergio por brindarme siempre su amistad incondicional. A ti Víctor por haberme dado la oportunidad de conocerlos. A toda la familia Serrano.

A mi director de tesis y amigo M. en C. Miguel Sánchez Meraz, por haberme guiado en este proyecto y presionarme para terminarlo, por su paciencia y por su tiempo.

A mis amigos y compañeros de trabajo Gregorio, Isabel, Bety

en especial Alan y Gaby por brindarme su apoyo y atención cuando lo necesitaba.

A todos mis profesores de maestría que formaron parte de este

proyecto, gracias por todas sus enseñanzas.

Infinitamente agradecido.

DAVID VÁZQUEZ ÁLVAREZ

Page 5: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Índice Capítulo 1. Técnicas de procesamiento de señales en sistemas de comunicación

1.1 Introducción 1 1.2 Las telecomunicaciones móviles en la primera generación 3 1.3 El paso de las comunicaciones móviles por la segunda 3

generación 1.4 Las comunicaciones móviles en su evolución a la tercera 5

generación 1.5 El futuro, la cuarta generación de las telecomunicaciones 9

móviles 1.6 Comunicaciones Inalámbricas 10

Capitulo 2. Radio definido por software

2.1 La necesidad de un radio software 13 2.2 Características y beneficios de un radio software 14 2.3 La tecnología RDS 15 2.4 Arquitectura del radio definido por software 18 2.5 Dispositivos de lógica programable 21 2.6 FPGA en el desarrollo de un radio definido por software 23 2.6 Estructura interna de las FPGA 27 2.7 Bloque de lógica programable CLB 29 2.8 Interconexión de CLBs 30 2.9 Bloques especiales 32

Capítulo 3. Técnicas de control de error

3.1 Introducción 33 3.2 Códigos de bloque 34 3.3 Código de bloque lineal 34

3.3.1 Matriz generadora 35 3.3.2 Forma sistemática 35 3.3.3 Matriz H 37

3.4 Síndrome y detección de errores 37 3.4.1 Vector de error 38 3.4.2 Síndrome 38

3.5 Distancia mínima de un código 40 3.6 Propiedades detectoras 40

i

Page 6: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

3.6.1 Probabilidad de no detectar un error 40 3.7 Propiedades correctoras 41 3.8 Códigos Cíclicos 43

3.8.1 Características de los códigos cíclicos 43 3.8.2 Definición de un código cíclico 44 3.8.3 Codificación Sistemática 45

3.9 Matriz generadora y matriz de control de los códigos cíclicos 46 3.9.1 Matriz generadora (matriz G) 46 3.9.2 Matriz de control (matriz H) 46 3.9.3 Sistematización de la matriz G 47

3.10 Codificación de los códigos cíclicos 48 3.10.1 Codificación basada en g(x) 48 3.10.2 Codificación basada en h(x) 50

3.11 Procesamiento del síndrome y detección de errores 52 3.11.1 Procesamiento del síndrome 52

3.11.2. Decodificación 52 3.11.3 Propiedades de la detección de errores 54

Capítulo 4. Diseño e implementación

4.1 Hardware 55 4.1.1 Familia Spartan IIE 56 4.1.2 Arquitectura de los dispositivos Spartan IIE 56

4.2 Software 58 4.2.1 Lenguajes de descripción de hardware 58 4.2.2 HDL visuales 60 4.2.3 HDL textuales 62 4.2.4 Herramientas de software 63

4.3 Diseño e implementación 65 4.3.1 Código Hamming (7,4) 69 4.3.2 Código cíclico (7,4) 73 4.3.3 Código BCH (15,11) 77

Conclusiones 81

Anexo A. Programas que simulan códigos de bloque en C++ 83

B. Programas que implementan códigos de bloque en VHDL 100 C. Artículos presentados en congresos 114

Bibliografía 129

ii

Page 7: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Índice de figuras

Capítulo 1 Figura 1-1. Transición a la Tercera Generación 7

Capítulo 2 Figura 2-1. Diagrama genérico de un radio definido por software (RDS) 16

2-2. Configuración básica de la arquitectura de hardware para un 18 radio definido por software 2-3. Arquitectura de un RDS 21 2-4. Estructura interna de distintos dispositivos lógicos 22 2-5. Requerimientos de desarrollo manejado por ancho de banda 24 2-6. Unidad MAC DSP, Arquitectura Von Neumann 25 2-7. Ejemplo de operaciones MAC en una FPGA 25 2-8. Comparativo de la capacidad de procesamiento de FPGA y DSP 26 2-9. Estructura macroscópica de una FPGA (Spartan II) 28 2-10. Esquema de un bloque lógico configurable simple (Spartan II) 30 2-11. Recursos de enlace de una FPGA (Virtex II) 31

Capítulo 3 Figura 3-1. Procesos de la señal en el lado del transmisor de un 33

sistema de comunicaciones 3-2. Forma sistemática de una palabra código 36 3-3. Transmisión de un mensaje a través de un canal ruidoso 37 3-4. Videoteléfono, utiliza CRC 43 3-5. Palabra código formada 45 3-6. Circuito para un codificador cíclico utilizando g(x) 49 3-7. Circuito de codificación para un código (7,4) utilizando g(x) 49 3-8. Circuito para un codificador cíclico utilizando h(x) 50 3-9. Circuito de codificación para un código (7,4) utilizando h(x) 51 3-10. Circuito que obtiene los valores del síndrome 52 3-11. Circuito de decodificación utilizando tabla estándar 53

Capítulo 4 Figura 4-1. Diagrama en Bloques de una Básica familia FPGA Spartan-IIE 57

4-2. Ventana de aplicación del (ISE WEBPACK 6.0) 64 4-3. Ventana de aplicación del (MODELSIM 6.0) 64

iii

Page 8: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

4-4. Diagrama esquemático del codificador Hamming (7,4) 70 4-5. Diagrama esquemático del codificador Hamming programado (7,4) 70 4-6. Simulación del codificador Hamming (7,4) 71 4-7. Señales de entrada y salida del codificador Hamming (7,4) 71 4-8. Diagrama esquemático del decodificador Hamming (7,4) 71 4-9. Diagrama esquemático del decodificador Hamming 72 programado (7,4) 4-10. Simulación del codificador Hamming (7,4) 72

4-11. Señales de entrada y salida del decodificador Hamming (7,4) 73 4-12. Circuito de un codificador cíclico basado en h(x) 73 4-13. Circuito codificador para un código cíclico basado en h(x) 74 4-14. Circuito que calcula el síndrome para un código cíclico 74 4-15. Circuito de un decodificador Meggit 75 4-16. Diagrama esquemático del codificador cíclico (7-4) 75 4-17. Diagrama esquemático del codificador cíclico (7-4) programado 75 4-18. Diagrama esquemático del decodificador cíclico (7-4) 76 4-19. Diagrama esquemático del decodificador cíclico (7-4) programado 76 4-20. Señales de entrada y salida del codificador cíclico (7,4) 77 4-21. Señales de entrada y salida del decodificador cíclico (7,4) 77 4-22. Diagrama esquemático del codificador BCH (15-11) 78 4-23. Diagrama esquemático del decodificador Meggit (15-11) 78 4-24. Diagrama esquemático del codificador BCH (15-11) programado 79 4-25. Diagrama esquemático del decodificador Meggit (15-11) 79 programado 4-26. Señales de entrada y salida del codificador BCH (15,11) 80 4-27. Señales de entrada y salida del decodificador Meggit (15,11) 80

iv

Page 9: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Objetivos

Realizar una revisión de la evolución de las comunicaciones móviles e inalámbricas, haciendo énfasis en las técnicas de procesamiento digital de señales que son utilizadas.

Realizar una revisión de la tecnología del radio definido por software, su

arquitectura, ventajas y los elementos necesarios para implementarlo. Diseñar módulos de software con diferentes técnicas de control de error e

implementarlas en un dispositivo lógico programable (FPGA). Justificación

Tradicionalmente los equipos receptores y transmisores de radiocomunicaciones son equipos constituidos por multitud de componentes electrónicos, los cuales forman circuitos sintonizadores, etapas de frecuencia intermedia, detectores, amplificadores de baja frecuencia, etc., es decir, están constituidos por “hardware”. Posteriormente, en los años 1980’s y 1990’s se introdujeron microprocesadores en estos equipos para el control de funciones internas y para añadir nuevas prestaciones, así como también la posibilidad de controlar los equipos de radio desde una computadora, añadiendo al equipo de radio puertos de comunicación o interfaces para la conexión a la computadora.

En estos casos, y usando el software adecuado, es posible controlar desde la

computadora numerosas funciones del equipo de radio, igual o mejor que desde los controles del propio equipo. También en la década de los 1990’s comenzó la introducción en los modernos equipos de radio de los chips DSP o “Procesadores Digitales de Señal”, los cuales permiten mediante técnicas digitales realizar filtros de paso de banda y de supresión de ruidos, entre otras posibilidades, muy eficaces, mejor que los realizados tradicionalmente con circuitos analógicos.

En cualquier caso, siempre se trata de equipos realizados enteramente con

componentes electrónicos, o sea, en términos informáticos se definirían como “radios hardware”. Durante las últimas cuatro décadas los sistemas de radio tanto para servicio militar como comercial han ido sufriendo una gran transición de sistemas de comunicación análoga a digital. Esta transición ha traído como consecuencia la evolución de todo el conjunto de formas de onda en comunicaciones digitales y equipos de transmisión de datos asociados a ellos que soportan esta creciente necesidad.

Durante el mismo periodo de tiempo, las plataformas de radio han soportado esas

formas de onda las cuales también han ido evolucionando. Hace no más de 15 años la gran mayoría de las plataformas de radio usaban hardware y software dedicado, en la última década ha venido creciendo un cambio hacia un nuevo paradigma muy fuerte que son los radios definidos por software, en los que la parte hardware es mínima, y la mayor parte de las funciones que definen un equipo de radio se definen por software en una computadora o algún otro dispositivo lógico programable y sus correspondientes implementaciones en forma de onda.

v

Page 10: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Este nuevo paradigma se conoce como Radio Definido por Software (SDR, “software defined by radio”) el cual propone una plataforma de hardware común que pueda ser reconfigurada en software.

Comparando los radios análogos basados en hardware de los años pasados, el

moderno concepto del radio definido por software provee un grado incomparable de compatibilidad y versatilidad, permitiendo formas de onda complicadas que eran inconcebibles de hacer en el pasado y actualmente son implementadas con facilidad. Por lo tanto el radio definido por software es un concepto que está revolucionando la tecnología de las comunicaciones rumbo a la integración de múltiples arquitecturas de redes de telecomunicaciones inalámbricas y alámbricas.

El SDR supone realizar la mayor parte de las funciones de un equipo de radio,

incluso las más importantes, mediante el software implementado en algún dispositivo. Los radios definidos por software pudieran reconfigurarse a sí mismos automáticamente para reconocer y comunicarse con otros. Esto podría imponer el orden en el actual caos de los estándares competitivos inalámbricos (CDMA, GSM, TDMA, etc.), esto transformaría las redes rígidas en sistemas abiertos. La principal ganancia: desempeño del sistema mejorado, costos de servicios más bajos, roaming transparente. Con reprogramación instantánea, se podría cargar un mismo aparato para múltiples usos.

El SDR frente a los estándares de comunicación actuales tiene una gran ventaja, ya

que todos ellos convergerían en un solo dispositivo capaz de reconfigurarse automáticamente dependiendo las necesidades del usuario, esto nos daría como resultado un sistema abierto de comunicaciones, en donde no importaría el estándar que se utilice sino simplemente el “software” que se implementaría para cambiar el funcionamiento de nuestro dispositivo SDR.

Sin embargo, la reconfiguración del hardware a partir del software también requiere

un comportamiento similar del software destinado a regular el intercambio de información. En otras palabras, es importante también tener algoritmos encargados en cada fase del proceso de comunicación, este trabajo se centra en el desarrollo de módulos de software que implementan técnicas de control de error.

vi

Page 11: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Resumen En este trabajo se presenta la implementación de módulos de software para diferentes técnicas de control de error, utilizando códigos de bloque lineal, como son los códigos Hamming, códigos cíclicos y códigos BCH en una FPGA. Inicialmente se realiza una revisión del panorama existente sobre la evolución de las comunicaciones, haciendo énfasis en las técnicas de procesamiento de señales que utilizan los diferentes estándares de comunicación, para hacer conciencia en la necesidad de un radio definido por software. Se realiza una revisión sobre la arquitectura y los diferentes elementos que componen a un radio definido por software. Se analizan diferentes dispositivos de lógica programable para determinar el dispositivo en el cual se va a realizar la implementación, que es una tarjeta FPGA, la cual es revisada en su evolución y porque es la más viable para nuestro trabajo. Una vez que se revisó la arquitectura del radio definido por software y se estableció el dispositivo lógico programable (FPGA) sobre el cual vamos a trabajar, se realiza un análisis sobre diferentes códigos de bloque lineal, como son los códigos Hamming y los códigos cíclicos para poder así llegar finalmente a la implementación de un código Hamming (7-4), un código cíclico (7-4) y un código BCH (15-11).

vii

Page 12: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Abstract

This thesis shows up the implementation of software modules for different error control techniques, using lineal block codes: Hamming codes, cyclic codes and BCH codes on a FPGA. Initially out a review of the current status on the evolution of the communications is carried, making emphasis in the techniques of signal processing used by the different communication standards, to make consciousness in the necessity of a radio defined by software. A review on the architecture and the different elements that compose a radio defined by software is carried out. Different devices of programmable logic are analyzed to determine the device in which will be carried out the implementation that is a FPGA, which is revised in their evolution and for that is the viable for our work. Once this review is realized and the architecture of the radio defined by software and the logical programmable (FPGA) device settled down on which we will be worked it carries out an analysis on different lineal block codes, like they are the Hamming codes and the cyclic codes for this way to be able to arrive finally to the implementation of a Hamming code (7-4), a cyclic code (7-4) and a BCH code (15-11).

viii

Page 13: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 1 Técnicas de procesamiento de señales en sistemas de comunicación

Capítulo 1

Técnicas de procesamiento de señales en sistemas de comunicación

Antes de establecer las diferentes técnicas de control de error que van a

implementarse para un radio definido por software que son el objetivo de este trabajo, es necesario analizar el panorama existente sobre la evolución de las comunicaciones.

1.1 Introducción Desde el principio de las telecomunicaciones dos han sido las opciones principales

para llevar a cabo una comunicación: con o sin hilos, por cable o por el aire. En realidad ambas pueden participar en un mismo proceso comunicativo. Por ejemplo, la transmisión de un evento deportivo por televisión, en el que una cámara recoge la señal y la transmite, generalmente por cable, a una unidad móvil encargada de comunicarse vía radio con el centro emisor, que a su vez se comunica por cable con una antena emisora que la distribuye por el aire a la zona que cubra la cadena de televisión. De todas formas, en este caso se trata fundamentalmente de una transmisión vía radio, pues es así como se distribuye la señal que previamente ha producido la emisora (captar la señal con la cámara, llevarla al centro emisor y procesarla).

Históricamente la comunicación vía radio se reservaba a transmisiones uno a

muchos, con grandes distancias a cubrir. También era útil en situaciones en las que la orografía dificultase en exceso el despliegue de cables. Fundamentalmente se utilizaba para transmitir radio y TV. Por el contrario, las comunicaciones telefónicas utilizaban cables. Todo esto nos lleva a la actual situación, en la que ya no está tan claro cuándo es mejor una u otra opción.

En cuanto a las comunicaciones móviles, no aparecen a nivel comercial hasta finales

del siglo XX. Los países nórdicos, por su especial orografía y demografía, fueron los primeros en disponer de sistemas de telefonía móvil, eso sí, con un tamaño y unos precios no muy populares. Radio búsquedas, redes móviles privadas o Trunking, y sistemas de telefonía móvil mejorados fueron el siguiente paso. Después llegó la telefonía móvil digital, las agendas personales, mini ordenadores, laptops y un sinfín de dispositivos dispuestos a conectarse vía radio con otros dispositivos o redes. Y finalmente la unión entre comunicaciones móviles e Internet, el verdadero punto de inflexión tanto para uno como para otro.

Dentro de los servicios de comunicaciones móviles más extendidos están la

telefonía móvil terrestre, la comunicación móvil por satélite, las redes móviles privadas, la

SEPI-ESIME-IPN 1

Page 14: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 1 Técnicas de procesamiento de señales en sistemas de comunicación

radiomensajería, la radiolocalización GPS, las comunicaciones inalámbricas y el acceso a Internet móvil.

Los sistemas de comunicaciones móviles de la actualidad ofrecen una amplia gama

de servicios con gran calidad. En otros tiempos, haberse imaginado siquiera un dispositivo que tuviese las aplicaciones de los de hoy en día, era un acto de ciencia ficción. Los primeros dispositivos de comunicaciones móviles eran regularmente de gran tamaño, esto debido a las grandes dimensiones de los circuitos que necesitaban para el procesamiento de la señal de salida y/o entrada, con una voluminosa etapa de potencia en sus transmisores, puesto que era poca la eficiencia de potencia y la eficiencia espectral con la que trabajaban las técnicas de transmisión de ese entonces.

El uso de una batería grande era otra de las características muy notorias en los

primeros dispositivos móviles, ya que requerían grandes cantidades de corriente para suministrar la potencia requerida por el transmisor. Sin embargo, la tecnología ha estado en desarrollo constante, y han aparecido nuevas técnicas de transmisión y recepción, además de que los dispositivos electrónicos cada vez son más poderosos y de menor tamaño. Aunado a lo anterior, las comunicaciones móviles se han convertido en uno de los segmentos con mayor y más rápido crecimiento dentro del área de las telecomunicaciones.

Desde su origen, las comunicaciones móviles han experimentado un enorme

crecimiento y su evolución ha sido inevitable. Esta evolución se da precisamente en el seno de las telecomunicaciones móviles, tratando de mejorar las tasas de transmisión, la confiabilidad y la calidad de los servicios. La evolución en este sector no se ha generado de manera desordenada. En casi todos los países del mundo, se ha regulado el uso y las formas de comunicación. La mayoría encargados de la regulación y planeación de las telecomunicaciones y dada la popularidad que esta área ha tenido en todo el mundo, inclusive se han generado organismos mundiales, como UIT (Unión Internacional de Telecomunicaciones) y/o continentales como ETSI (Instituto Europeo para la Estandarización de las Telecomunicaciones) y ANSI (Instituto de Estandarización Americana) capaces de hacer recomendaciones a los organismos de cada país para que exista una convivencia entre diferentes sistemas y tecnologías en todo el mundo.

Las telecomunicaciones móviles se han clasificado de acuerdo a su evolución. Esta

clasificación se ha dado de manera generacional, de tal forma que cada etapa o generación tiene características distintas en los modos y servicios ofrecidos por las diferentes compañías que se encuentran dentro de este sector. Estos modos y servicios, han sufrido mejoras generacionalmente gracias a varios factores, como lo son:

La utilización de dispositivos de menor tamaño (microprocesadores y chips). Mejoras en las tecnologías de esquemas de modulación (modulaciones digitales). Avances en la utilización de modelos de codificación de canal (códigos de detección

y corrección de error). Utilización de modelos programables y adaptativos.

Hasta el día de hoy, las comunicaciones móviles han sufrido tres cambios de

generaciones en su evolución y actualmente se encuentran en etapa de análisis los posibles

SEPI-ESIME-IPN 2

Page 15: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 1 Técnicas de procesamiento de señales en sistemas de comunicación

escenarios para la cuarta generación, que se vislumbra para un futuro, ya que la tercera generación no termina aún por despuntar en varios países, y lo que es peor, en otros varios acaban de adoptar varias compañías esquemas y servicios de Generación 2.5, avalados por los estándares internacionales sugeridos por los organismos que tienen grupos especializados para la planeación de las telecomunicaciones móviles, tal es el caso de IMT-2000 (OHG), 3GPP, GSM, entre otros [1].

1.2 Las telecomunicaciones móviles en la primera generación Los sistemas móviles de primera generación introducidos en los inicios de los 80’s,

se caracterizan por el uso de transmisiones analógicas de servicios de voz, estos servicios fueron introducidos al mercado mundial por compañías como la compañía de Telefonía y Telegrafía de Japón (NTT), el servicio de Telefonía Móvil Avanzada (AMPS), el Sistema de Comunicaciones de Acceso Total (TACS) y la Compañía Telefónica Nórdica (NMT). Los equipos utilizados en esta era fueron muy sencillos pero de gran tamaño, y los servicios estaban limitados. Servicios como voz, o radio-localización fueron los más comunes. Estos servicios se alojaron dentro de la banda de los 800 MHz y el tipo de modulación era modulación analógica en frecuencia (FM). El modo de acceso al sistema por los usuarios era el conocido FDMA (Acceso Múltiple por División de Frecuencia) que por más modificaciones, no lograba abastecer a la cantidad de usuarios, la cual estaba creciendo día tras día y que requería del acceso al sistema, logrando entonces una pronta saturación del espectro reservado para las comunicaciones celulares [2].

En gran manera, esto provocó que se introdujeran diferentes tipos de re-uso de

frecuencia para lograr abastecer la demanda, de esta forma la era de los sistemas de comunicaciones móviles iniciaba su gran evolución, al conseguir la popularidad y aceptabilidad de las masas consumistas que apostaban su dinero por sistemas que les ofrecieran una mayor cobertura, servicios de alta calidad y de valor agregado. Las grandes compañías que intervienen en el sector de las telecomunicaciones voltearon entonces sus intereses hacia este sector, adecuando en los dispositivos personales altas tecnologías que se desarrollaban tras la industria bélica donde las telecomunicaciones habían sido clave para su desarrollo, tal es el caso de sistemas basados en CDMA (Acceso Múltiple por División de Código).

1.3 El paso de las comunicaciones móviles por la segunda generación Las comunicaciones móviles sufren un gran cambio a raíz de la necesidad de

encontrar nuevos espacios para la creciente demanda de usuarios, además de la necesidad de prestar nuevos servicios.

La tecnología dio un gran paso al desarrollar nuevas formas de reutilización del

espectro, y los sistemas que estaban en funcionamiento hasta ese entonces basados en el esquema de Acceso Múltiple por División de Frecuencia (FDMA) fueron sustituidos por nuevas maneras de compartir el espectro. Los servicios y la calidad de éstos también

SEPI-ESIME-IPN 3

Page 16: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 1 Técnicas de procesamiento de señales en sistemas de comunicación

resultaron beneficiados en esta era. Las velocidades en las tasas de transmisión de hasta 9.6 kbps eran en cierta medida buenas, más no lo suficientemente altas aún. Las capacidades de cobertura roaming también se mejoraron considerablemente con respecto a las de la primera generación.

Una de las tecnologías que aparecieron y que dieron el inicio de la segunda

generación fue TDMA, que fue desarrollado y estandarizado por la Asociación de la Industria de las Telecomunicaciones (TIA). TDMA hace un mejor uso del ancho de banda disponible, con respecto a la tecnología analógica previa de primera generación. La primera implementación de telefonía celular de AMPS utilizó TDMA, en el estándar de TIA nombrado como IS-54. Éste requería de voz digitalizada, comprimiéndola y transmitiéndola en ráfagas regulares. La evolución de este estándar fue hacia el llamado IS-136 [3], también conocido como D-AMPS, debido a que es AMPS digital que utiliza control de canal en TDMA. TDMA como se definió en IS-54 e IS-136, logró triplicar la capacidad de usuarios en los sistemas celulares, al dividir el canal celular de 30 kHz de 3 ranuras de tiempo, el cual soporta 3 usuarios quienes se alternan el uso del canal.

Una evolución de este estándar podría utilizar codificadores de voz de media tasa, el

cual permitiría atender hasta 6 usuarios en un solo canal de 30 kHz. El concepto de E-TDMA (TDMA Mejorado), utiliza localidades de ranuras de tiempo dinámicas para evitar que se desperdicien ranuras de tiempo cuando uno de los lados de la conversación está en silencio. Con esta técnica se podría doblar nuevamente la eficiencia espectral de TDMA, para tener una relación de alrededor de 10:1 con respecto a los sistemas analógicos [4].

Otra tecnología utilizada en los sistemas celulares de segunda generación ha sido el

popular CDMA (IS-95), esta tecnología emplea “dispersión de espectro”, dispersando a cada señal sobre un canal de 1.25 MHz, transmitiendo por todo el ancho de banda, en vez de dividir el espectro como TDMA o FDMA, la tecnología de espectro disperso utiliza 64 códigos digitales, conocidos como códigos Walsh, por lo que en teoría es posible que 64 llamadas telefónicas puedan compartir el canal al mismo tiempo. Esta tecnología tuvo su origen en los inicios de la década de los 50´s, y fue utilizada para comunicaciones militares, ya que la señal de CDM es virtualmente inmune a interferencias de señales no deseadas o enemigas. A finales de la década de los 80’s e inicio de los 90’s la corporación Qualcomm propuso y desarrolló un sistema CDMA.

El objetivo principal de CDMA fue el tener una alta eficiencia espectral, mejorando

por mucho la capacidad que podían ofrecer los sistemas analógicos. CDMA, ahora se encuentra supervisado por una organización independiente de Qualcomm, llamada Grupo para el Desarrollo de CDMA (CDG). CDMA ofrece transmisiones de datos de 14.4 kbps y una evolución del primer IS-95, conocido como IS-95B es capaz de ofrecer velocidades por encima de los 64 kbps [5].

Dentro de las comunicaciones móviles apareció una nueva tecnología, con la

característica de cubrir a usuarios traspasando fronteras. Este sistema es capaz de almacenar en un módulo la identificación del usuario, de tal forma que removiéndolo, el usuario puede hacer uso de cualquier otro dispositivo de la misma arquitectura, el cual obtiene la información del usuario precisamente de este módulo llamado SIM (Módulo de

SEPI-ESIME-IPN 4

Page 17: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 1 Técnicas de procesamiento de señales en sistemas de comunicación

Identificación del Subscriptor), en cualquier lugar donde se tenga cobertura. Esta tecnología fue desarrollada en Europa principalmente por Alemania, Italia y Francia quienes fueron los pioneros en la implementación, aunque en 1989, el Instituto Europeo de Estándares de Telecomunicación (ETSI), tomó la responsabilidad del desarrollo de GSM (Sistema Global para las Comunicaciones Móviles).

Existen tres diferentes implementaciones de la tecnología GSM. Estas son: GSM-

900 (opera de 880 a 960 MHz), GSM-1800 (opera 1710 a 1880 MHz) y GSM-1900 (opera a 1850 a 1990 MHz). En esta tecnología, basada en el modo de TDMA, es posible acceder a información en línea, o bien enviar faxes y correos electrónicos. Sin embargo, la velocidad máxima está limitada a 9.6 Kbps. El comité técnico de la ETSI, el grupo especial móvil y ANSI han formado una alianza para mantener la integridad del estándar. Este grupo de trabajo se enfoca en:

Mantener las fases 1 y 2 de GSM Introducir la fase 2 y Dar una significativa mejoría del GSM hacia la 3G [6][7].

El sistema GSM utiliza una modulación que se deriva de la simple modulación por

cambio de frecuencia (FSK). GSM requiere en su modulador de un filtro Gaussiano y señales ortogonales con lo cual crea una señal GMSK (Modulación Gaussiana por Mínimo Cambio) para generar espectros angostos.

De alguna forma esta generación se encuentra en pleno uso en algunos países del mundo, sin embargo, cada una de estas tecnologías ha crecido y tienen variantes que les han ayudado para la mejora de sus servicios, ya sea en la calidad o en la velocidad, como también en el número de usuarios que estos puedan alojar dentro de los anchos de banda. Es decir, CDMA (IS-95A) tiene una variante conocida como IS-95B, y GSM tiene preparado el camino para migrar a la tercera generación, en países como los del bloque europeo ya tienen con éxito migraciones. Dentro de esta era, los servicios de interconectividad entre las diferentes tecnologías, o la cobertura global no se logra, con cierta excepción en el sistema GSM [8].

1.4 Las comunicaciones móviles en su evolución a la tercera generación

La tercera Generación (3G) se ha estado gestando desde 1992, cuando la Unión Internacional de Telecomunicaciones (UIT) inició con los trabajos para la planeación en la forma en que los sistemas modernos deberían trabajar bajo una armonía. A estos trabajos se les conocieron como la IMT-2000. La UIT vislumbró a IMT-2000 como un solo estándar global con capacidad de roaming entre distintas tecnologías, pero los diversos órganos reguladores de las telecomunicaciones de cada país, fabricantes y concesionarios de los servicios de las comunicaciones móviles, fueron incapaces de llegar a un acuerdo unánime.

Para 1998, la UIT se encontró con 13 diferentes interfaces de radio para la tercera

generación, basadas en espectro disperso (CDMA). Las compañías como Qualcomm y la

SEPI-ESIME-IPN 5

Page 18: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 1 Técnicas de procesamiento de señales en sistemas de comunicación

industria que estaba trabajando sobre el estándar (IS-95) CDMA, querían un estándar armonizado de CDMA basado en su tecnología escogida, cdma2000, porque este estándar le sería compatible con sus tecnologías de segunda generación. La compañía Ericsson y la comunidad GSM, querían su propia tecnología, WCDMA (CDMA de Banda Ancha), la cual no es compatible con los sistemas actuales de IS-95. Finalmente en Octubre de 1999, los representantes de los diferentes países llegaron a un acuerdo. El resultado fue el dejar al menos 3 diferentes modos: W-CDMA, cdma2000 y TDD (División de Tiempo Duplex), una componente opcional de W-CDMA.

En la tabla 1-1 se resumen los cinco conjuntos de estándares para la familia de 3G

IMT-2000, aprobado y publicado por la UIT en mayo de 2000 [9]. En la figura 1-1, se observa la evolución que siguen los sistemas de comunicaciones móviles de 2G actual, para su transformación a la 3G, siguiendo las recomendaciones de UIT para las interfaces de radio. Para lograr el objetivo de 2 Mbps de IMT-2000, los sistemas CDMA necesitan utilizar más de 64 códigos, diferentes esquemas de modulación y mayores anchos de banda. La evolución de este estándar, que ya se ha hecho oficial, desarrollado por Qualcomm y ratificado por UIT, es el estándar cdma2000 3XRTT (Tecnología de Radio Transmisión). El 3 de 3X viene de sus 3.75 MHz de ancho de banda, que es el resultado de tres cdmaOne, al juntar los 1.25 MHz de cada uno.

ESTÁNDAR INALÁMBRICO

IMT-2000 NOMBRE ALTERNO O ALIAS

IMT-2000 CDMA Secuencia Directa, CDMA-DS

También conocido como el modo de frecuencia duplex (FDD) para UMTS Acceso de Radio Terrestre (UTRA), o como CDMA de banda ancha (WCDMA)

IMT-2000 CDMA Multiportadora, CDMA-MC

También conocida como CDMA-2000, la cual es compatible con los sistemas de 2G ANSI-95 DCDMA (Secuencia Directa de Espectro Disperso)

IMT-2000 CDMA TDD, CDMA-TDD

También conocido como el modo de división de tiempo duplex de UTRA

IMT-2000 TDMA Portadora única

También conocida como UWC-136 la cual es compatible con sistemas anteriores de 2G EDGE/GPRS

IMT-2000 FDMA/TDMA

También conocida como DECT-2000 (Telecomunicaciones Inalámbricas Digitales Mejoradas)

Tabla 1-1. Interfases de radio aprobadas por la UIT para la 3G.

Como un paso intermedio, algunos operadores de cdmaOne están desarrollando una

tecnología llamada cdma2000 1XRTT, la cual utiliza los mismos canales de 1.25 MHz y dobla la cantidad de códigos a 128, esto duplica la capacidad del sistema, es decir, el número de usuarios por celda. Qualcomm y Motorola también están promoviendo

SEPI-ESIME-IPN 6

Page 19: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 1 Técnicas de procesamiento de señales en sistemas de comunicación

esquemas que mejoran al cdma2000 1XRTT, conocido como Alta Tasa de Datos (HDR) y 1Xtreme, respectivamente.

Figura 1-1. Transición a la Tercera Generación.

Ambos 1Xtreme y HDR, trabajan alternando el esquema de modulación, o la forma en que los datos van representados en las ondas de radio. La mayoría de los teléfonos celulares utilizan el esquema de modulación por desplazamiento de fase (PSK), el cual interrumpe la onda y se mueve a diferentes puntos en su ciclo. La tasa de bits depende de la frecuencia de estas interrupciones, conocidas como símbolos y en el número de formas que cada símbolo pueda tomar. El esquema utilizado por cdmaOne es la modulación en cuadratura de fase (QPSK), el cual puede tomar cuatro diferentes estados. Esto significa que cada estado puede representar a dos bits, dado que dos bits pueden representar a cuatro combinaciones. La variación en 8-PSK puede representar a tres bits por símbolo, incrementando la tasa datos en un 50%. HDR y 1Xtreme, automáticamente aumentan el número de estados (QPSK o 8-PSK) para soportar tasas mayores, dependiendo de su calidad de conexión.

En el transcurso del año 2001, la mayoría de los operadores con tecnología CDMA

planeaban emigrar a la tecnología 1XRTT, la cual les proporcionaría un mejoramiento en la tasa de datos por arriba de los 144 kbps, con la adecuación de un software de actualización. Poco después de esto, para el año 2002, era muy probable que los operadores agregarían lo que se conoce como 1X EV (Evolución), el cual les permitía dedicar un canal de 1,25 MHz para ofrecer servicios de datos con velocidades por arriba de los 2.4 Mbps.

SEPI-ESIME-IPN 7

Page 20: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 1 Técnicas de procesamiento de señales en sistemas de comunicación

TECNOLOGÍA GENERACIÓN BANDAS TIPO DE MODULACIÓN

CODIFICACIÓN DE CANAL

TASA DE

DATOS

AMPS FDMA 1G

800 MHz (124

portadoras separadas

entre sí por 200 kHz.)

Modulación Analógica en

Frecuencia (FM). Sin Codificación

No soporta datos

TDMA (IS-54B e IS-

136) 2G

824-894 MHz y 1850-

1990MHz (canales de

30 Khz)

ð /4 DQPSK Codificación de

Bloque y Convolucional

8 kbps

CDMA 2G, 2.5G

800MHz, 1800MHz

y 2000 MHz con canales de 1.25MHz de ancho de banda

QPSK Codificación convolucional

14.4 kbps en IS-95ª 64 kbps en IS-95B

GSM 2G, 2.5G

880 – 960 MHz, 1710

- 1880 MHz y 1850 –

1990 MHz

GMSK (BT = 0.3)

Codificación convolucional

Para HSCSD

57.6 kbps., GPRS

115 kbps, EDGE

384 kbps.

W-CDMA 3G

Portadoras de 5 MHz (1.25, 10 y 20 MHz),

para la migración de GSM.

QPSK Codificación

convolucional y Turbo Códigos

Macro células – 144 kbps

Micro células – 384 kbps

Pico células - 2Mbps

cdma 3X RTT 3G

3.75 MHz, 3

Portadoras de CDMA

(1.25 MHz)

QPSK y 8-PSK Codificación

convolucional y Turbo Códigos

2.4 Mbps o 3.6864

Mcps

Tabla 1-2. Características de las diferentes Tecnologías en comunicaciones Móviles.

Es claro que este tipo de sistemas están limitados por la interferencia que se generan

entre sí los diferentes usuarios. Actualmente en Europa, Corea del Sur y Japón ya está

SEPI-ESIME-IPN 8

Page 21: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 1 Técnicas de procesamiento de señales en sistemas de comunicación

circulando el CDMA de banda ancha (W-CDMA) [11], estándar apoyado por el grupo de trabajo de Sistemas de Telecomunicaciones Móviles Universal (UMTS). Este estándar requiere de la nueva asignación espectral sugerida por UIT. W-CDMA, es muy semejante a cdma2000 3XRTT (CDMA para 3G) pero utiliza un ancho de banda un poco más amplio, de ahí el nombre. Las bandas más amplias son necesarias para que el sistema pueda interoperar con el Sistema Global de Comunicaciones Móviles (GSM), el estándar inalámbrico más poderoso de la segunda generación.

Los sistemas GSM tienen dos plataformas que anteceden a WCDMA que

correspondería a los sistemas de 3G, la plataforma de GPRS (Servicio de Radio Paquetes General), y EDGE (Tasa de Datos Mejoradas para la Evolución de GSM). W-CDMA es una tecnología de tipo asíncrona, con esparcimiento directo y tasa de chip de 4.096 Mbps. El esquema WCDMA ha sido desarrollado como un esfuerzo conjunto entre ETSI (Instituto de Estándares en Telecomunicaciones y Electrónica de Europa) y ARIB (Asociación para Negocios y Radio Industria de Japón) como la opción para la migración del sistema GSM a la tercera generación. W-CDMA maneja canales de 1.25, 5, 10 y 20 MHz de ancho de banda, con tasas de chip de 1.024, 4.096, 8.192 y 16.384 Mbps respectivamente. Esta tecnología maneja modulación QAM con longitud de trama de 4.615 ms y código convolucional de tasa variable. La comunidad de CDMA está recientemente iniciando a acoger la idea de los módulos de identidad de los subscriptores que guardan la información y que están actualmente en uso solo en el sistema GSM.

De forma resumida se muestran en la tabla 1-2 las diferentes tecnologías de

comunicaciones móviles celulares con algunas de sus características, permitiéndonos hacer un análisis comparativo de funcionalidad y eficiencia. Como se ha descrito en este capítulo, se puede observar cómo cada sistema ha presentado un gran avance en sus capacidades de tasas de datos y además el gran avance tecnológico en los modos de transmisión, como lo es la incorporación de modulaciones digitales y la adecuación de esquemas de codificación de canal. Claramente es posible darnos cuenta que la incorporación de los llamados turbo códigos está siendo de gran apoyo para la mejora de las capacidades en las tasas de datos, con lo cual se han mejorado también la calidad de los servicios, además de la incorporación de aquellos de valor agregado. Aunque la eficiencia de cada tecnología ha sido demostrada, actualmente CDMA y W-CDMA siguen compitiendo por ser la elección de las tecnologías futuras.

1.5 El futuro, la cuarta generación de las telecomunicaciones móviles

La diferencia básica entre una red de tercera generación y otra de 4ta generación es la tasa de bit disponible para el usuario. Mientras que las redes de 3ra generación ofrecen accesos hasta de 384 Kbps, con picos de hasta 2 Mbps [12], con lo que podría manejar servicios de audio, datos e imágenes, las redes de 4ta generación ofrecerán accesos realmente multimedia, en los que podrá manejarse la transferencia de video en tiempo real, con velocidades equivalentes a la de una LAN básica (10 Mbps) y mayores. Los Factores que pueden influir en el desarrollo de las redes de 4ta generación son:

SEPI-ESIME-IPN 9

Page 22: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 1 Técnicas de procesamiento de señales en sistemas de comunicación

El auge de Internet, que cada vez se utiliza más por medios inalámbricos. La proliferación de asistentes digitales personales (PDA’s) y computadoras

personales de bolsillo. La disponibilidad de servicios de valor agregado a los usuarios de Internet móvil

(transacciones bursátiles, reservaciones aéreas, etc.) La oferta de servicios llamados transparentes, donde los dispositivos interactúan

con otros dispositivos, a nombre de los usuarios.

Las Tecnologías que pueden ser decisivas en el desarrollo de las redes de 4ta generación son:

El modo de transferencia Asíncrono (ATM), como red dorsal de la RED

Universal Multimedia (RUM), que permitirá ofrecer diversos servicios con calidad garantizada.

El protocolo IP, como parte de transporte de la RUM La tecnología de antenas adaptativas e inteligentes. La tecnología de modulación/transmisión inalámbrica de multicanalización en

frecuencia con portadoras ortogonales OFDM. La tecnología de radios programables, la cual permitirá que una terminal móvil

pueda hacer “Hand-off” desde una célula perteneciente a un tipo de red, hacia otra célula perteneciente a una red con tecnología inalámbrica diferente [13].

1.6 Comunicaciones Inalámbricas Estos sistemas se encargan de comunicaciones de corta distancia, algunos cientos de

metros a lo sumo. En principio, dos serían las aplicaciones básicas: ofrecer movilidad a los usuarios de la telefonía fija, para que puedan desplazarse por su casa o lugar de trabajo, y poder efectuar llamadas; y conectar dispositivos entre sí. Para los primeros, en Europa surgió el estándar DECT (Telecomunicaciones Digitales Mejoradas e Inalámbricas), mientras que para los segundos parece que Bluetooth va a conseguir poner de acuerdo a todo el mundo.

En Europa, se está trabajando en terminales duales DECT-GSM, que permitan utilizar las redes de telefonía fija en el caso de que estemos cerca de la base que controla la parte DECT, y las redes de telefonía móvil GSM en el resto de circunstancias. Esto evitaría tener que llevar dos aparatos, y abarataría la cuenta telefónica.

En cuanto a Bluetooth, se trata de una iniciativa completamente privada, en la que están involucradas algunas empresas como Ericsson, Toshiba, IBM, Motorola, Qualcomm, 3Com, Lucent y Compaq. Utilizando la banda de los 2,4 Ghz permite enlazar dispositivos vía radio situados a distancias de entre 10 centímetros y 10 metros, aunque se pueden alcanzar los 100 metros con antenas especiales. Ordenadores, laptops, televisores, cadenas de música, y otros dispositivos podrían conectarse entre sí a través de terminales Bluetooth.

SEPI-ESIME-IPN 10

Page 23: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 1 Técnicas de procesamiento de señales en sistemas de comunicación

El servicio que une la telefonía móvil con el acceso a Internet, será el que haga crecer ambos mercados de manera muy importante en los próximos años. La baja capacidad de transmisión de datos de los sistemas de segunda generación de telefonía móvil, y las reducidas dimensiones de las pantallas de los móviles no permitían una unión lo suficientemente atractiva, pero sí funcional. Bien es verdad que la aparición de WAP permitió acceder a diversos contenidos de Internet desde el móvil, pero la nueva generación de telefonía móvil mejorará la velocidad de conexión, y sus terminales estarán más orientados a comunicaciones de diversas características (voz, datos, imágenes). Esto convertirá a los móviles, agendas personales, laptops, y demás dispositivos de mano, en los verdaderos dominadores del acceso a Internet, relegando al ordenador a un papel secundario.

WAP (Protocolos de Aplicaciones Inalámbricas) surge ante la necesidad de acceder a Internet desde un móvil. Este conjunto de protocolos permite establecer una conexión con Internet, e intercambiar información con ésta. No está directamente vinculada con GSM, u otra tecnología similar. Puede funcionar sobre tecnologías móviles de segunda o tercera generación (GSM, D-AMPS, CDMA, UMTS). Los teléfonos WAP cuentan con un navegador especial, que interpreta páginas escritas en una versión reducida del HTML, denominada WML. Existe también una versión reducida del JavaScript para navegadores WAP, conocida como WMLScript.

Las aplicaciones más extendidas de los teléfonos WAP serán el acceso a noticias, pago de compras, recepción de avisos. Debido a la restricción que imponen los terminales, los gráficos se reducen al mínimo, a pesar de que la publicidad apuesta por este medio.

En Japón, NTT DoCoMo lleva casi un año y medio prestando un servicio de acceso a Internet desde el móvil, que está convirtiéndose en un avance de lo que puede suceder cuando realmente la Internet móvil se implante. El servicio, conocido como i-mode, ha supuesto una auténtica revolución en el país nipón, con tanto éxito que ha sufrido caídas importantes debidas a la saturación del sistema. Incluso NTT DoCoMo suspendió la publicidad durante algún tiempo, para intentar disminuir el elevado número de altas. I-mode no utiliza WAP, sino que utiliza un HTML compacto, que lo que hace es adaptar las páginas web HTML a los terminales móviles. Los teléfonos WAP podrían soportar este servicio.

GPRS, EDGE y por supuesto UMTS, permitirán transmitir páginas mucho más sofisticadas a los móviles, por lo que se espera que los terminales futuros sean en su mayoría ocupados por pantallas, que permitan visualizar estas páginas.

Como se ha visto, las comunicaciones inalámbricas, básicamente las móviles, han

tenido un crecimiento acelerado provocado sin duda por el gran interés de los consumidores quienes cada vez necesitan de mayor conectividad y movilidad. Además que los avances en las tecnologías han permitido satisfacer a la imaginación. Es clave que las técnicas de modulación digital, como PSK con sus variantes o GMSK (para GSM) hayan sido utilizadas en los distintos modelos, además de los esquemas de codificación de canal, ya que han sido un soporte indiscutible para la mejora de las eficiencias en las transmisiones de datos, dando la seguridad de una transmisión casi sin errores. Por lo que se advierte que

SEPI-ESIME-IPN 11

Page 24: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 1 Técnicas de procesamiento de señales en sistemas de comunicación

en el futuro, como se espera en la 4ta generación, serán factores fundamentales y son puntos muy importantes de investigación y desarrollo. Así como también los sistemas inteligentes o adaptativos, los cuales al parecer tendrán el punto clave para encontrar mejoras en lo ya establecido.

Como se puede observar durante las diferentes generaciones, todo hace ver que es

muy posible llegar a un sistema global de comunicaciones con capacidad cien por ciento multimedia, donde tanto teléfonos como computadoras portátiles o PDA’s con las tecnologías futuras podrán ser capaces de interoperar, es decir, que los sistemas estarán habilitados para tener un hand-off o hand-over de una célula a otra sin importar la plataforma, y el usuario tendrá la transparencia de la movilidad. Toda esta convergencia podrá dar lugar a pensar en la monopolización del uso de los servicios de telecomunicaciones, sin embargo, lo que debe prevalecer es la “armonía” de los diferentes sistemas, como lo sugiere IMT-2000, así como de los diferentes fabricantes y concesionarios.

Durante el mismo periodo de tiempo, las plataformas de radio han soportado esas

formas de onda las cuales también han ido evolucionando. Hace no más de 15 años la gran mayoría de las plataformas de radio donde principalmente se implementaban usaban hardware y software dedicado, en la última década ha venido creciendo un cambio hacia un nuevo paradigma muy fuerte que son los radios definidos por software y sus correspondientes implementaciones en forma de onda.

Este nuevo paradigma que se forma se conoce como Radio Definido por Software,

RDS (SDR, “software defined by radio”) el cual propone una plataforma en hardware común la cual pueda ser reconfigurada en software. Ésta nueva tecnología se revisará en el capítulo siguiente.

SEPI-ESIME-IPN 12

Page 25: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 2 Radio definido por software

Capítulo 2

Radio definido por software

Una vez revisado el panorama existente en las comunicaciones móviles e inalámbricas, es necesario analizar el concepto y arquitectura del radio definido por software, así como los elementos necesarios para la implementación de una técnica de control de error en RDS.

2.1 La necesidad de un radio software

Tal como los controles remotos se proliferan en nuestras salas, nuestras vidas se están llenando de dispositivos inalámbricos incompatibles, desde teléfonos celulares hasta walkie talkies para bebés. Aún teniendo diferentes funciones, estos aparatos comparten tecnología muy similar: transmisores y receptores, baterías y antenas. Ya existen controles remotos universales, ¿por qué no dispositivos inalámbricos universales?

Esa es la inspiración para el nuevo movimiento de radio definido por software. Radio definido por software (RDS) es un concepto que está revolucionando la tecnología de las comunicaciones rumbo a la integración de múltiples arquitecturas de redes de telecomunicaciones inalámbricas. Sin embargo, la reconfiguración del hardware a través de software exige también un comportamiento similar del software destinado a regular el intercambio de información.

El término “Software Radio” fue acuñado por Joe Mitola en 1991 para referirse a la

clase de “radios” re-programables o re-configurables. En otras palabras, una misma pieza de hardware puede realizar diferentes funciones en diferente tiempo. Con lo anterior podemos especular el hecho de tener un dispositivo hardware de “propósito general” en un ámbito de comunicaciones. Este concepto abre un amplio panorama de oportunidades para la industria de las comunicaciones y la investigación en ese mismo sentido [15].

Algunas de las definiciones de RDS son las siguientes: “Software Radio es un radio

sustancialmente definido en software y cuyo comportamiento en capa física puede ser significativamente alterado a través de cambios en su software”. Otra definición dice que “RDS es un radio en el cual la digitalización en el receptor es realizada en algunos escenarios de bajada desde la antena, típicamente después del filtrado del ancho de banda, reducción de amplificación de ruido, y la conversión a bajas frecuencias en subsecuentes escenarios (con un proceso inverso en la digitalización del transmisor)”. Otra definición define a RDS como “término utilizado para describir control de software para una aplicación de radio el cual provee técnicas de modulación y control de error, operaciones de banda angosta y banda ancha, funciones de seguridad en comunicaciones y requerimientos de forma de onda” [14][15][16].

SEPI-ESIME-IPN 13

Page 26: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 2 Radio definido por software

Desde la creación y evolución constante de estándares tales como 2.5G, 3G y 4G, existe una amplia incompatibilidad entre tecnologías de redes inalámbricas utilizadas por diferentes países. Desde una perspectiva comercial y global, este problema inhibe el uso de servicios de roaming y otras facilidades. Esta es una de las grandes oportunidades de RDS, ya que el aspecto económico es de suma importancia, para la integración transparente de diversas arquitecturas de comunicación.

Los radios definidos por software pudieran reconfigurarse a sí mismos

automáticamente para reconocer y comunicarse con otros. Esto podría imponer el orden en el actual caos de los estándares competitivos inalámbricos (CDMA, GSM, TDMA, etc.), esto transformaría las redes rígidas en sistemas abiertos. La gran ganancia: desempeño del sistema mejorado, costos de servicios más bajos, roaming transparente. Con reprogramación instantánea, se podría cargar un mismo aparato para múltiples usos.

La funcionalidad de la arquitectura de los radios convencionales es usualmente

determinada por el hardware con una mínima configuración de software. El hardware consiste de los amplificadores, filtros, mezcladores y osciladores. El software sólo es confinado para controlar la interfaz con la red de trabajo, explotando las cabeceras y los códigos de control de error de los paquetes de datos, y determinando dónde los paquetes de datos necesitan ser ruteados basados en la información de la cabecera. Debido a que el hardware domina el diseño, actualizando un diseño de radio convencional esencialmente significa completar el diseño viejo y empezar uno nuevo. En la actualización de un diseño de radio software, sólo basta con actualizar el contenido del software y el resto se mejora en diseño de componentes de hardware. En pocas palabras, los radios definidos por software representan un paradigma en el cambio de mezclar radio de hardware-intensivo a multibandas, multimodos, radios de software-intensivo [25].

2.2 Características y beneficios de un radio software

En el campo de las comunicaciones móviles existe actualmente abundancia de tecnologías de acceso inalámbrico, que cubren diferentes áreas geográficas y proporcionan diversos servicios a los usuarios a través de una gran variedad de equipos móviles. Una de las principales metas para el futuro de los sistemas de telecomunicaciones es conseguir una conectividad ubicua, esto por supuesto, a través de la investigación y desarrollo de nuevos equipos de radio que puedan proporcionar ciertas funcionalidades a partir de herramientas de software. La industria de las comunicaciones inalámbricas actualmente está frente a problemas derivados de la constante evolución de los estándares en los protocolos de las capas de enlace (2.5G, 3G y 4G), así como también de la existencia de tecnologías de red inalámbricas incompatibles en diferentes países que inhiben el despliegue de las facilidades del roaming mundial, así como otros problemas [14].

La tecnología RDS es una alternativa prometedora para resolver estos problemas

implementando la funcionalidad del radio a partir de módulos de software funcionando en una plataforma de hardware común.

SEPI-ESIME-IPN 14

Page 27: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 2 Radio definido por software

Estos múltiples módulos de software ponen en práctica diferentes estándares que pueden estar presentes en el sistema de radio. El sistema puede usar e interpretar diferentes funciones, dependiendo del módulo de software que vaya ha ser utilizado. De acuerdo a estos módulos, se ejecutan nuevas características de servicios que podrían ser descargados del aire sobre los equipos portátiles. Este tipo de flexibilidad ofrecida por los RDS evita estar ligado a problemas debidos a los distintos estándares y a resultados relacionados con las características de despliegue de nuevos servicios.

El RDS es un ejemplo de tecnología de radio que presenta un gran potencial para los

servicios de comunicaciones inalámbricas, sobre todo para la 3G, existiendo un gran interés en la implementación de arquitecturas de radios definidos por software en proyectos que necesitan diferentes interfaces en su infraestructura. En este sentido, todos los sistemas de 3G son aplicaciones potenciales de la tecnología RDS. Esta tecnología tiene el potencial de solucionar muchos de los problemas provocados por la aparición de nuevas interfaces aéreas. Las estaciones base y las terminales pueden usar arquitecturas RDS, para poder soportar múltiples interfaces de aire durante periodos de transición y así poder fácilmente ser actualizadas por medio de software.

2.3 La tecnología RDS

Los sistemas de comunicaciones móviles actuales están diversificados en varios estándares, limitando el área de atención de sus terminales, cuya compatibilidad depende del propio hardware. En este contexto surge la necesidad de producir radios con alto nivel de flexibilidad, capaces de adaptarse a los diferentes estándares existentes. El objetivo es garantizar su interoperabilidad a través de simples actualizaciones del software. La reconfigurabilidad del sistema es la principal meta de esta tecnología definida como RDS. Por tanto, con la funcionalidad de esta tecnología RDS, se busca que los sistemas converjan a una total interoperabilidad.

El grado de reconfigurabilidad necesario para determinar si un radio califica como

un radio definido por software se encuentra relacionado con la interacción compleja entre un número de problemas comunes en cuanto al diseño del radio. Estos pueden incluir la ingeniería de sistemas, factores de forma de antena, electrónica de RF, procesamiento en banda base, velocidad y reconfigurabilidad del hardware, así como la administración de suministro de potencia. Un radio que define en software su modulación, corrección de error, proceso de encriptación, exhibe algún control sobre el hardware de RF, y puede ser reprogramado, es entonces claramente un radio definido por software. Por lo tanto éste exhibe cierta flexibilidad a través de software mientras hace uso de una plataforma de hardware común, ya que configura el radio a través de la programación del software y como consecuencia reconfigura el hardware físico [15][16].

En la figura 2.1 se muestra el diagrama genérico para un RDS donde el núcleo del

sistema es la máquina de procesamiento de señal digital [22]. Esta se basa en el uso de dispositivos digitales programables para generar las tareas de procesamiento de señal necesarias para transmitir y recibir información de banda base en o desde diferentes

SEPI-ESIME-IPN 15

Page 28: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 2 Radio definido por software

módulos de RF (diferentes sistemas de radio). Por lo anterior, puede decirse que el gran desafío para los RDS, tal vez el mayor de ellos, es igualar la eficiencia de las soluciones que presentan los radios basados únicamente en hardware. Además, se debe proveer la flexibilidad e inteligencia que el software puede ofrecer, lo que permitiría cambiar la funcionalidad del radio, posiblemente en tiempo real y en algunos procesos, de cierto modo garantizaría una calidad de servicio deseada (QoS).

El RDS por tanto, ofrece la solución ideal para que sobre un equipo único se puedan

tener varios estándares, bandas de frecuencia y aplicaciones. Tales equipos pueden ser programados, configurados y mejorados por software. Con un RDS un usuario podría tener acceso a todos estos estándares y/o tecnologías por medio de la selección y/o ajuste de algunos módulos de software. El sistema RDS ha generado un gran interés en la industria de las comunicaciones inalámbricas por el alcance económico y los beneficios de despliegue que ofrece.

Figura 2-1. Diagrama genérico de un radio definido por software (RDS).

Algunas de las principales características de esta tecnología son las siguientes:

Reconfigurabilidad: el RDS permite la existencia simultánea de múltiples módulos de software, empleando diferentes estándares en el mismo sistema lo que permite la configuración dinámica únicamente a través de la selección apropiada del módulo de software para poder funcionar. Tal configuración es posible tanto en equipos portátiles como en la infraestructura de los equipos.

SEPI-ESIME-IPN 16

Page 29: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 2 Radio definido por software

Conectividad Ubicua: una de las principales metas para el futuro de los sistemas de telecomunicaciones es conseguir una conectividad ubicua la cual se refiere a la capacidad que tiene el usuario para acceder transparentemente a cualquier servicio, en cualquier lugar y en cualquier momento, lo que permite fácilmente la realización del roaming mundial. Si la terminal es incompatible con la tecnología de red en una región particular, entonces es necesario instalar un módulo de software apropiado (posiblemente desde el aire) en el equipo portátil que permita el acceso de conexión transparente a través de diferentes áreas geográficas. Si el equipo portátil usado por el suscriptor es de un modelo anterior, la infraestructura del equipo puede emplear un módulo de software que utilice también estándares anteriores que le permitan comunicarse con el equipo portátil. Lo que hace esta tecnología es facilitar la realización de sistemas de radio de arquitectura abierta.

Multifuncionalidad: que es la capacidad de reconfiguración de un RDS para soportar una variedad casi infinita de capacidades de servicio en un sistema.

Movilidad mundial: la necesidad de transparencia, así como la capacidad de los radios para operar con algunos o preferentemente con todos los estándares en diferentes regiones geográficas del mundo, ha influenciado el crecimiento del concepto de radio definido por software.

Compactación y eficiencia de uso de potencia: la propuesta de RDS ofrece diseños compactos, lo que permite un manejo eficiente de la potencia, especialmente cuando el número de sistemas incrementa.

Facilidad de manufactura: la digitalización de la señal antes de entrar en la cadena del receptor puede resultar en un diseño que incorpora significativamente pocas partes, lo que da como consecuencia un inventario reducido para el fabricante.

Facilidad de actualización: durante el despliegue, los servicios requieren actualizarse o en su caso deben introducirse nuevos servicios. Tales cambios se deben realizar sin la interrupción de la operación de la infraestructura actual [15][16]. Una de las ventajas más importantes sobre los radios actuales, es la flexibilidad, lo

que significa que los RDS pueden ser programados y/o reconfigurados al vuelo. Los usuarios podrían, inicialmente configurar sus radios a través de la descarga de un paquete con características personalizadas de software. Las actualizaciones y reconfiguraciones podrían realizarse con otro software, a través de un simple acceso a la Internet, y las descargas serían recibidas al aire. Además proporciona un servicio de roaming mundial, actualización o mejora de las terminales, nuevos servicios agregados sin necesidad de cambiar la terminal, software versátil, desde el punto de vista ecológico, los RDS eliminan hardware, porque solamente necesitan una terminal móvil, lo que significa que la cantidad de desperdicio industrial se reduciría, y entre otras ventajas está el uso de una terminal para varios servicios, así como nuevos servicios suministrados sin la necesidad de actualizar el hardware.

SEPI-ESIME-IPN 17

Page 30: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 2 Radio definido por software

Las estaciones base que tienen tecnología RDS permiten fácilmente poner en práctica nuevos sistemas de comunicación y corregir fallas de un equipo con el uso de un algoritmo que permita, compensar la atenuación y/o manejar la dirección y la forma del haz radiado con el uso de un arreglo de antenas inteligentes, todo esto controlado por software. Para realizar ésta aplicación se debe generar un procedimiento de programación del software, que configura los componentes de los sistemas de comunicaciones, que permita modificar fácilmente los programas y así realizar la conexión con otros componentes.

2.4 Arquitectura del radio definido por software

En el diseño convencional del radio, los algoritmos de procesamiento de señal en banda base y el control del software son programados al momento de fabricación. En el RDS deben estar disponibles mecanismos eficientes y confiables que permitan al nuevo software descargarse e instalarse en el equipo de radio. Para que sea realizado con éxito debe disponerse de arquitecturas apropiadas de hardware y software, así como sus interfases correspondientes.

La arquitectura del software es una consideración importante para asegurar la

mantenibilidad, expandibilidad, compatibilidad y escalabilidad para los RDS. Idealmente la arquitectura debería permitir al hardware independencia a través del uso apropiado de software intermedio (middleware), el cual sirve como una interfase entre el software orientado a aplicaciones y la capa de hardware. El software necesita estar informado de las capacidades del hardware en ambos extremos del enlace de comunicación para asegurar la compatibilidad y hacer el máximo uso de los recursos de hardware.

Figura 2-2. Configuración básica de la arquitectura de hardware para un radio

definido por software.

La arquitectura del hardware para el procesamiento de señal digital puede implementarse a través de microprocesadores, FPGAs, y/o ASICs. Comúnmente los

SEPI-ESIME-IPN 18

Page 31: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 2 Radio definido por software

microprocesadores ofrecen máxima flexibilidad, un alto consumo de potencia y tasas de cálculo más bajas, mientras que los ASICs proporcionan una mínima flexibilidad, bajo consumo de potencia y tasas de cálculo más altas, los FPGAs, por el otro lado, se encuentran entre las características de un ASIC y un DSP. La selección de los elementos del núcleo de cálculo, depende de los algoritmos y de sus requerimientos de cálculo y rendimiento total. En la práctica un RDS usará los 3 elementos de núcleos de cálculo, aunque la línea de división entre la implementación de las opciones para una función específica dependa de una aplicación particular. En la figura 2-2 se muestra la configuración básica de la arquitectura de hardware para un Radio Definido por Software [10]. Una de las principales características de esta tecnología, como puede verse en la figura, es el uso de una infraestructura de hardware común a todos los bloques de procesamiento de la señal. Es decir, que independientemente del estándar o sistema de comunicación en el que opere el radio, el hardware seguirá siendo el mismo, y los ajustes que sean necesarios serán realizados únicamente a través de software. La configuración de esta arquitectura básica consiste de ocho unidades:

Unidad de Antena. Se requiere una antena omnidireccional, de baja pérdida y de

banda ancha, debido a que pueden ser usadas por una variedad de sistemas de comunicaciones inalámbricas.

Además, la tecnología de procesamiento de señales basada en arreglos de antenas

hace posible seleccionar el funcionamiento del RDS de acuerdo a la aplicación y realiza la selección óptima del algoritmo de procesamiento. El software de antena es capaz de realizar acceso múltiple por división de espacio (SDMA), en el cual la antena configura el haz en la dirección de los usuarios elegidos. El acceso múltiple se consigue cambiando la dirección del haz de la antena, o por cancelación de interferencia, en donde el software de antena configura la dirección hacia el usuario deseado o bien asigna nulos en la dirección de interferencias o de usuarios no deseados.

En la unidad de procesamiento de la señal de RF del transmisor (RFU), las

señales vienen de la unidad de frecuencia intermedia (IFU) o de la unidad de banda base (BBU) y son convertidas a una banda de frecuencia más elevada, estas señales de RF son amplificadas y transmitidas a la unidad de antena. En el caso del receptor las señales recibidas por la unidad de antena se amplifican a un nivel constante que es conveniente para el procesamiento de la señal y son convertidas directamente hacia abajo a una banda de frecuencia intermedia FI o bien a banda base. El procesamiento de la señal de esta etapa se hace con un circuito analógico. La linealidad o eficiencia del amplificador de RF y el método de conversión a bandas de frecuencia más bajas en el receptor son puntos de análisis principales.

En la unidad de procesamiento de señal de frecuencia intermedia (IFU), las

señales de la unidad de conversión analógica a digital y digital a analógica (ADC/DAC) son convertidas hacia arriba a señales de banda de IF, amplificadas y transferidas a la RFU del transmisor. En el receptor, las señales de la unidad de RFU son amplificadas a un nivel adecuado para el procesamiento de la señal en la IFU y directamente convertidas hacia abajo a una frecuencia adecuada para la unidad ADC/DAC o unidad de banda base. Cuando

SEPI-ESIME-IPN 19

Page 32: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 2 Radio definido por software

las señales de varios sistemas son recibidas en el receptor, la banda de frecuencia requerida se debe seleccionar usando un filtro.

En la unidad de conversión analógica a digital (ADC) y conversión digital a

analógica (DAC), la señal digital de la unidad de banda base es convertida a una señal analógica usando un DAC, y transferida a una unidad de banda de frecuencia superior (IFU o RFU). En el receptor las señales de la IFU o de la RFU se amplifican a un nivel adecuado para el ADC. La señal estabilizada es entonces muestreada por un ADC y enseguida convertida a una señal digital.

La unidad de procesamiento de la señal de banda base (BBU), en esta unidad los

datos se modulan digitalmente y se transfieren a la unidad ADC/DAC del transmisor. Los datos transmitidos se recuperan a través del uso de la señal muestreada de la unidad ADC/DAC y usando el procesamiento de señal digital en el receptor. En la BBU del transmisor, los bloques referidos a la trama, codificación, mapeo/modulación y el filtro de transmisor son los bloques clave. Por otra parte, en la BBU del receptor los bloques como el filtro receptor, código y sincronización de símbolo, tasa de conversión de muestreo (remuestreo), demapeo/demodulación y bloque de decodificación son claves en esta sección. Además, en ésta sección se encuentran el bloque de compensación de atenuación (ecualización) y el bloque de eliminación de interferencia para eliminar las señales no deseadas. En la mayoría de los casos, la BBU está configurada por varias unidades DSPH (hardware de procesamiento de señales digitales) tales como DSP, FPGA o ASIC. La configuración de las BBUs puede ser modificada cambiando el DSPS (software de procesamiento de señales digitales).

En el caso del transmisor la unidad de control de transmisión (TCU) configura el

formato de flujo de bits de entrada a la BBU a través del ajuste del protocolo de transmisión de la capa de control de acceso al medio MAC), y en el caso del receptor, los datos detectados de la BBU son verificados de acuerdo al formato de datos del protocolo de transmisión de la capa MAC. Si el número de errores de bit en los datos detectados es grande, se requiere entonces una retransmisión. Además de éste control de transmisión, esta unidad maneja también tareas de codificación. En la mayoría de los casos, la TCU se puede configurar a través de una serie de DSPHs, y todos los bloques componentes podrían también ser descritos usando DSPS. A través de la modificación del DSPS, la TCU puede configurar el protocolo de transmisión a conveniencia del usuario.

La unidad de procesamiento de entrada/salida (IOU). En la estación móvil, todos

los datos de información vienen de un equipo portátil, de una terminal PDA (asistente digital personal) o de una computadora personal, y todos los datos recibidos regresan a éstas terminales o computadoras. Las unidades de entrada/salida y de sincronización tienen el propósito de realizar conexiones flexiblemente con las terminales externas.

SEPI-ESIME-IPN 20

Page 33: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 2 Radio definido por software

Figura 2-3. Arquitectura de un RDS. La unidad de procesamiento de temporización extremo a extremo (TPU)

controla el retraso de transmisión entre el transmisor y el receptor. En la mayoría de los RDS, se usan varios programas de software, los cuales describen todos los componentes de telecomunicaciones dentro de los lenguajes usados por el DSPS, y estos lenguajes se usan para configurar los componentes sobre la unidad DSPH. Este software puede fácilmente modificarse para adaptar los requerimientos de un sistema particular [10].

Como puede verse en la figura 2-3, una de las tareas principales que se realizan en

la parte de software de un RDS es la codificación de canal. Este trabajo se enfoca a desarrollar módulos de software que implementa técnicas de control de error sobre dispositivos lógicos programables.

2.5 Dispositivos de lógica programable

Los dispositivos de Lógica Programable son circuitos digitales cuya función interna puede ser modificada a voluntad. Esta funcionalidad los diferencía de los circuitos lógicos tradicionales donde la función que realiza el circuito viene predefinida de fábrica. La posibilidad de definir a posteriori la función a implementar entrega al usuario mucha mayor flexibilidad para construir diseños más complejos con mayor integración y a un menor costo.

Desde los inicios de los sistemas digitales basados en tecnologías CMOS y TTL, la

construcción de circuitos digitales programables ha sido una ambición de los ingenieros. Por lo mismo estos dispositivos han seguido una evolución tecnológica en los últimos 30

SEPI-ESIME-IPN 21

Page 34: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 2 Radio definido por software

años. En la figura 2-4 se presentan distintos dispositivos lógicos, desde sus formas más primitivas, hasta sus formas más avanzadas.

Figura 2-4. Estructura interna de distintos dispositivos lógicos. En esta figura sin entrar en mayores detalles, se observan las diferencias

fundamentales entre las distintas tecnologías desarrolladas. Primero existiendo los circuitos digitales normales, cuyo desarrollo ya consiste en toda una proeza tecnológica. En 1968 se inició la producción de circuitos digitales construidos empleando la tecnología CMOS, que finalmente permitió el crecimiento exponencial de los sistemas digitales, que siguen empleando esta tecnología de fabricación. Véase el inciso a) de la figura 2-4.

Una primera forma de sistema lógico reconfigurable son las memorias de acceso

aleatorio (RAM). Estos dispositivos pueden almacenar un mapa digital de entradas (direcciones) y salidas (valor de la memoria en tal dirección) por lo que pueden ser empleadas para definir funciones. Aunque muy prácticas, sus capacidades son limitadas.

SEPI-ESIME-IPN 22

Page 35: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 2 Radio definido por software

Primero se sub-utilizan los recursos pues mucha de la información almacenada probablemente es redundante, y segundo, están limitadas a definir un mapa fijo. La arquitectura de las memorias además hace que la velocidad de lectura sea notablemente más lenta que un circuito digital especializado. Véase el inciso b) de la figura 2-4.

Ya en 1970 se empezaron a producir las primeras versiones de circuitos lógicos

reprogramables, constituidos por arreglos de compuertas AND y OR interconectables, que permiten definir funciones lógicas simples, con un bajo costo de compuertas y alcanzando mayores velocidades de propagación entre la entrada y la salida. A esta generación corresponden las conocidas PAL (programmable array logic) y GAL (general array logic). Véase el inciso c) de la figura 2-4.

Cabe notar que, por su propósito, los dispositivos de lógica programable están

asociados a la tecnología de memorias. Así, existen variantes de dispositivos que sólo pueden ser programados una vez (antifuse) o bien que pueden ser reprogramados una infinidad de veces (VRAM “volatile random access memories”). Hoy en día la elección dependerá de la aplicación deseada.

Aunque muy útiles y versátiles, la tecnología de las SPLD estaba limitada a definir

funciones simples, en una forma fija. Esta solución además escalaba mal a medida que el número de pines de entrada salida aumentaba. Cerca del año 1985 surgió la tecnología de las CPLD que permitía resolver estos problemas. En las CPLD se consta de una serie de SPLD las cuales pueden ser interconectadas internamente. Aunque emplean una mucho mayor cantidad de transistores (asociada a nuevas tecnologías de integración), estos dispositivos abrieron una nueva gama de aplicaciones al permitir definir sistemas lógicos mucho más complejos. Véase el inciso d) de la figura 2-4.

La última etapa de desarrollo corresponde a la arquitectura de las FPGA (“Field

Programmable Gate Array”). Empleando las nuevas tecnologías de fabricación de circuitos, con un mayor número de compuertas, estos dispositivos permiten definir no tan sólo mapas de entrada salida y sistemas lógicos simples, sino que dan paso a la construcción de prácticamente cualquier tipo de aplicaciones [22].

La arquitectura de las FPGA se caracteriza por distribuir recursos lógicos

programables y no programables en distintas áreas del chip, y definir recursos para interconectar estas distintas subunidades. Véase el inciso e) de la figura 2-4.

2.6 FPGA en el desarrollo de un radio definido por software

Una de las ventajas principales del RDS en las comunicaciones móviles es la de proveer estaciones base que puedan ser reconfiguradas a un número de estándares con un ancho de banda amplio y tener la capacidad de procesar varios servicios como lo es W-CDMA y CDMA2000 3xRTT. Esta arquitectura multiestándar esta siendo investigada por Fabricantes de Equipos Originales (OEM, “Original Equipment Manufacturer”) en

SEPI-ESIME-IPN 23

Page 36: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 2 Radio definido por software

infraestructura inalámbrica. Todo esto llevaría a cumplir el objetivo principal del RDS que es proveer flexibilidad y bajo costo en los servicios.

Todo esto se debe a que las tecnologías inalámbricas actuales y futuras se caracterizarán por.

Una alta tasa de datos. Un mejoramiento de la eficiencia espectral, lo que resultaría en tener más usuarios

en el mismo ancho de banda.

Para lograr lo antes mencionado se necesita un incremento en los requerimientos del procesamiento digital de señales que superen las ganancias que pueden ser hechas por arquitecturas multiprocesadores DSP. Por lo cual se necesita la potencia de procesamiento en paralelo en hardware que las FPGAs y los ASICs proveen.

AÑO REQUERIMIENTOS DE MERCADO 2000 Voz sobre IP. 2001 HDTV, MPEG4 2002 Voz sobre IP, Video bajo demanda

2003 Tecnología inalámbrica 3G (WCDMA, Internet inalámbrico)

2004 Tecnología inalámbrica 4G (Codificación espacio tiempo, codificación de canales adaptativos

……. Estándares de banda ancha.

Tabla 1-1. Requerimientos de mercado en procesamiento digital de señales.

0

500

1000

1500

2000

2500

BILLONES DE MACs

2000 2001 2002 2003 2004 …..

AÑO

Requerimientos de mercado

Figura 2-5. Requerimientos de desarrollo manejado por ancho de banda

SEPI-ESIME-IPN 24

Page 37: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 2 Radio definido por software

Como puede verse en la figura 2-5 con el paso del tiempo las tecnologías que van surgiendo requieren una mayor capacidad de procesamiento digital de señal, esto se ve reflejada en las unidades MAC (“Multiplier Accumulator”, Acumuladora de Productos) que se requieren para lograr su funcionamiento [24][25].

En la figura 2-6 se muestra una unidad MAC convencional en un DSP, siguiendo la

arquitectura Von Neumann. En esta arquitectura puede verse claramente que para realizar una implementación en donde se necesiten 256 operaciones MAC este algoritmo tendría que repetirse 256 veces para realizar la operación de multiplicación e ir acumulando su resultado para poder mostrar al fin de este el dato obtenido.

Esto resulta en que los DSP tengan una arquitectura inflexible, esto debido a que solo pueden manejar de 1 a 4 unidades MAC dependiendo del modelo de DSP que manejemos. También como puede observarse en la arquitectura mostrada el procesamiento es en serie por lo que se limita la transferencia de datos por esta unidad.

Figura 2-6. Unidad MAC DSP, Arquitecura Von Neumann

Al contrario de las FPGAs la cual nos da una arquitectura flexible ya que en ella se

encuentran recursos distribuidos DSP como registros, multiplicadores y memoria. Además de esto nos proveen de un procesamiento en paralelo lo cual maximiza la transferencia de datos como puede verse en la figura 2-7, en donde se muestra la misma operación de una unidad MAC pero en paralelo, ya que en un solo ciclo de reloj realiza 256 operaciones MAC, además de también soportar el procesamiento en serie.

Figura 2-7. Ejemplo de operaciones MAC en una FPGA.

SEPI-ESIME-IPN 25

Page 38: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 2 Radio definido por software

Como puede verse es muy grande la diferencia entre el manejo de operaciones

MAC en un DSP y una FPGA y debido a los requerimientos en ancho de banda que se mencionan anteriormente, los dispositivos ideales para la implementación de RDS son las FPGA. En la figura 2-8 se muestra la capacidad de procesamiento que ofrecen los DSP y las FPGA, en esta figura se ve claramente la diferencia y la capacidad de las FPGA contra los DSP.

Figura 2-8. Comparativo de la capacidad de procesamiento de FPGA y DSP.

El uso de FPGAs en las estaciones base nos darían como resultado:

Una muy alta velocidad en procesamiento de señales

Muchos canales pueden ser procesados al mismo tiempo. Una velocidad de procesamiento mayor que la de un procesador DSP.

Corrección de Error hacia delante (FEC)

Multiples canales. Implementación de diferentes códigos, (Cíclicos, Convolucionales,

Reed-Solomon (BCH), Viterbi, Turbocódigos).

Funciones de control y conexión. Conexión de procesadores ASICs y memorias.

Interfaces adaptativas a diferentes estándares de trabajo en red.

Minimiza el cambio en el diseño de sistemas para productos que manejen diferentes estándares y protocolos de trabajo en red.

De todo lo anterior queda claro las ventajas de la utilización de una FPGA en un

RDS, por lo que en este trabajo utilizaremos una FPGA en un modelo de Xilinx la cual es una SpartanIIE, debido a que esta tarjeta cumple los requerimientos para nuestro diseño, en

SEPI-ESIME-IPN 26

Page 39: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 2 Radio definido por software

particular, el número de CLBs disponibles. A continuación se describen algunas de las características principales de las FPGA.

2.7 Estructura interna de las FPGA

Las FPGA son dispositivos de lógica reprogramable que se caracterizan por su gran flexibilidad y capacidad (máxima complejidad de los circuitos lógicos implementados).

En este documento nos centraremos en los dispositivos desarrollados por Xilinx,

descartando compañías como Altera, Lattice, Actel, etc. Este sesgo se justifica por diversas razones. En primer lugar Xilinx domina fuertemente el mercado y la tecnología. En el año 2004 fue escogida por los consumidores como la empresa número 1 en dispositivos tipo FPGA. Xilinx ha sido la empresa lider en el desarrollo de la tecnología de las FPGA generando constantemente los productos de alta gama, rompiendo marcas de velocidad de compuertas, de capacidad de cómputo y generando arquitecturas innovadoras.

Además Xilinx provee el software IseWebPack que permite compilar diseños para

los dispositivos reconfigurables de media y baja gama, así como también el software ModelSim en donde podemos analizar tanto las entradas como las salidas de nuestro diseño y por último, el software ChipScopePro que permite implementar el diseño en el dispositivo y comprobar los resultados del diseño.

La estructura macroscópica y los conceptos generales son los elementos importantes

a retener en un área donde se generan nuevos productos cada diez meses. Estos conceptos son comunes a los distintos modelos y marcas de FPGAs.

Una FPGA es un dispositivo de lógica reconfigurable que es capaz de implementar

prácticamente cualquier función deseada. Esto se logra a través de una arquitectura extremadamente flexible donde existen elementos básicos que realizan operaciones simples los cuales son interconectados entre ellos por una densa malla de conexiones. La gran cantidad de elementos básicos y la capacidad de interconectarlos arbitrariamente hacen que las FPGAs puedan fragmentar e integrar cualquier sistema digital. Evidentemente existen restricciones de capacidad y velocidad que hacen las FPGAs poco efectivas para ciertas aplicaciones, sin embargo, los avances técnicos, la flexibilidad y bajo costo convierten las FPGAs en alternativas económicamente viables [22].

Podría pensarse que el circuito digital que subyace a un dispositivo de estas

características es extremadamente complejo y difícil de aprender. En realidad no lo es, la existencia de las FPGA, mucha más que a una invención prolífica, se basa en un cambio de enfoque respecto de las capacidades disponibles en el área de dispositivos digitales. Las FPGAs son circuitos con un gran número de componentes dispuestos en la menor área posible, en estructuras que maximizan la velocidad de propagación de las señales y que sean realizables en una cadena de producción masiva de bajo costo por unidad. La proeza se encuentra en la capacidad de realizar estos circuitos y en las tecnologías de software que

SEPI-ESIME-IPN 27

Page 40: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 2 Radio definido por software

logran dar un uso eficiente a los recursos disponibles. A continuación se describe someramente la arquitectura lógica de una FPGA.

En la figura 2-9 se presenta la estructura general de una FPGA. Tal y como se

mencionó anteriormente una FPGA, a diferencia de otros dispositivos de lógica reconfigurable, contiene un arreglo de elementos lógicos y recursos para interconectarlos en forma arbitraria. En las zonas periféricas se encuentran una gran cantidad de conectores y los circuitos de entrada/salida asociados. Finalmente, las FPGAs modernas incluyen dentro de sí elementos especializados que facilitan la realización de ciertas tareas comunes. Por ejemplo, se pueden encontrar dentro de una FPGA sectores de memoria RAM, circuitos para manejar señales de reloj, circuitos multiplicadores e incluso procesadores embebidos.

Figura 2-9. Estructura macroscópica de una FPGA (Spartan II)

Entonces una familia de FPGAs se distinguirá de otra por las capacidades de sus

puertos de entrada salida, de los átomos de procesamiento lógico, por la arquitectura del sistema de interconexión de elementos lógicos, y por la presencia o no de diversos elementos especializados. Esto, claro, además de los elementos obvios como la velocidad de reloj máxima y el número de elementos lógicos.

Todas las FPGAs de la familia de los dispositivos Xilinx se configuran a través de

una tecnología de memoria volátil estática, es decir, que la configuración se pierde al desvanecerse la alimentación. Debido a esto las FPGAs deben ser inicializadas cada vez que el dispositivo es energizado. Este procedimiento se realiza a través de configuraciones

SEPI-ESIME-IPN 28

Page 41: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 2 Radio definido por software

simples y estándares. Estos circuitos aledaños son el pequeño precio que debe pagarse para tener un dispositivo que puede reconfigurarse literalmente una infinidad de veces. Algunos otros fabricantes de FPGAs proveen dispositivos cuya configuración se basa en tecnología de memorias Flash. Aunque su configuración se desvanece entre encendido y apagado, cada reprogramación acorta su vida útil.

Dado que las FPGAs se emplean como elementos versátiles, es del interés de los

fabricantes y los usuarios que éstas puedan conectarse con distintos estándares de lógica digital. Debido a esto los circuitos de entra salida son relativamente sofisticados pues permiten cumplir con decenas de estándares distintos (LVTTL, LVCMOS, HSTL, PCI, AGP, etc.). Además, claro, cada pin puede ser configurado como entrada, salida o bien en un estado de alta impedancia de entrada.

Debido al gran número y la alta densidad de los transistores dentro de una FPGA,

considerando la disipación térmica y el consumo de energía, la mayoría de las FPGAs funcionan en lógicas de bajo voltaje (3.3 V, 2.5 V o menos). Por lo tanto, es importante notar que no todas las FPGAs son capaces de tener una conexión directa lógica de 0 – 5 V.

2.8 Bloque de lógica programable CLB

En la familia de dispositivos Xilinx el elemento básico de procesamiento se denomina CLB (Configurable Logic Block, bloque de lógica configurable). Cada CLB contiene dos (o cuatro en los modelos avanzados) “slices” (tajadas) y cada “tajada” contiene dos LUT (Look Up Table). Por aritmética se entiende entonces que cada CLB contiene cuatro (u ocho) LUTs.

Esta nomenclatura algo engorrosa recalca un concepto importante a emplear:

jerarquías para manejar la complejidad y los fenómenos locales-globales. En la figura 2-10 se presenta una de las dos tajadas de una CLB simple.

Los dos elementos claves de esta figura son las dos LUTs y los dos registros. Al

configurar el elemento lógico se carga en las LUTs el mapa de una función lógica, exactamente como en los dispositivos lógicos en base a memoria antes presentados. Así un LUT puede funcionar como “y”, “o” o cualquier otra función simple de cuatro entradas y una salida. La concatenación de LUTs y la interconexión de salidas y entradas permiten implementar cualquier función lógica. La presencia de registros en los CLB permite generar dispositivos de lógica sincrónica. La lógica sincrónica permite almacenar resultados intermedios, generar “iteraciones” y sobre todo, permite realizar “pipelines” (líneas de cañerías). La introducción de resultados intermedios permite separar etapas de computación, así el tiempo entre una entrada y su salida es similar o mayor al caso directo, sin embargo, la tasa de entrada y salida aumenta considerablemente, pues no debe esperarse a que las señales del circuito completo se hayan estabilizado, sino tan sólo la porción más larga de las secciones entre registro y registro (la ruta crítica). Estas ventajas hacen que en la práctica se emplee casi exclusivamente lógica sincrónica y por ende es importante que una FPGA contenga un gran número de registros.

SEPI-ESIME-IPN 29

Page 42: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 2 Radio definido por software

Además de las LUTs y los registros, un CLB tiene bloques de lógica de control

(configuración local de entradas/salidas, modo de funcionamiento de la “tajada”) y de cuenta. La lógica de cuenta se encarga de arrastrar de una tajada a otra las señales típicas de operaciones aritméticas en especial para las sumas y multiplicaciones. Esta lógica especial y las conexiones directas entre tajadas y tajadas permiten implementar eficientemente las operaciones aritméticas.

La sofisticación de los CLBs de las distintas familias de las FPGAs se basa

esencialmente en el tipo de lógica especializada instalada en cada tajada y en la versatilidad entregada a través de líneas y opciones especiales. Gracias a lógica especializada, además de operaciones aritméticas, las CLBs pueden configurarse e interconectarse de forma de implementar “memorias RAM distribuidas” (de forma independiente a los bloques de RAM que puedan encontrarse dentro de la FPGA). También existen modelos de FPGA que permiten configurar los CLBs para emplearlos como registros de corrimiento.

Figura 2-10. Esquema de un bloque lógico configurable simple (Spartan II).

2.9 Interconexión de CLBs

Además de la versatilidad de la CLBs el segundo elemento clave que hace de las FPGAs circuitos lógicos universales son los recursos de interconexión de los cientos de CLBs. El concepto que opera al diseñar y repartir los recursos de interconexión es tratar de generar una jerarquía de interconexiones. Partiendo desde los vínculos locales más estrechos, densos y especializados, hacia los vínculos más generales entre CLBs distantes.

SEPI-ESIME-IPN 30

Page 43: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 2 Radio definido por software

En la figura 2-10 se presenta una ilustración de las distintas interconexiones

presentes en las FPGAs Xilinx, desde lo más general y macroscópico (arriba) a lo más específico y local (en la zona baja de la figura).

Se aprecia que existe una diversidad de buses de conexión distintos. En la zona

inferior de la figura se encuentran las líneas especializadas de alta velocidad, que permiten conectar varias CLBs para configurar registros de corrimiento, memorias RAM distribuidas o bien llevar los bits de cuenta de un sector a otro de un sumador o multiplicador. Además de las líneas especializadas cada CLB está conectada directamente con sus ocho vecinos inmediatos, siendo esta la línea de flujo de datos más evidente. Finalmente las CLB se conectan con los vecinos lejanos a través de los buses de datos que conectan uno de cada dos, uno de cada tres y uno de cada seis CLBs en una columna o fila [22][23][24].

Figura 2-10. Recursos de enlace de una FPGA (Virtex II).

El uso que le da cada CLB a los buses queda fijado al momento de configurar la

FPGA. Algunas líneas son bidireccionales, otras no. Al conectarse a un bus un conjunto de CLBs comparten una misma línea del mismo. La cantidad de líneas de cada bus depende del modelo específico de FPGA, evidentemente, entre más líneas mayor flexibilidad al momento de resolver el problema de “emplazamiento y enlace”.

SEPI-ESIME-IPN 31

Page 44: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 2 Radio definido por software

Cada nivel de interconexión complementa el nivel superior de forma de generar un enmallado denso que logre cumplir los requerimientos de velocidad del diseño a implementar y que logre el mejor uso de los recursos de la FPGA.

2.10 Bloques especiales

Además de las CLBs las FPGA de gama media y alta constan de ciertos bloques especializados introducidos dentro del arreglo principal de CLBs. Generalmente dispuestos en las zonas centrales del arreglo de CLBs o bien como columnas dentro de él (tratando de maximizar el perímetro de interconexión).

La familia de dispositivos VirtexIIPro presenta además de CLBs y recursos de

interconexión dentro de la FPGA implementados como circuitos especializados bloques de memoria RAM multiplicadores de 18 x 18 bits y hasta dos procesadores RISC PowerPC (corriendo a 300 MHz). Además presenta bloques de entrada/salida de alta velocidad que pueden manejar tasas de transferencia de más de 2 Gb/s.

Así, la gama dentro de las FPGAs de una misma marca es bastante amplia,

partiendo desde dispositivos muy simples y más bien limitados hasta plataformas para el desarrollo de aplicaciones de alto rendimiento.

Para las aplicaciones de DSP son elementos que mejoran la capacidad: la lógica de

cuenta especializada (para implementar sumas y multiplicaciones), la presencia de memorias RAM (para almacenar tablas precomputadas) y multiplicadores delicados. La carencia de estos elementos se suple por un mayor uso de compuertas.

En los dispositivos Xilinx las FPGAs SPARTANIII y superiores contienen los

elementos mencionados. Finalmente, es interesante mencionar que ante los diversos usos de un mismo producto la nueva familia de FPGAs, trata de integrar toda la gama de aplicaciones en una sola arquitectura común. Así los dispositivos VirtexIV existen en distintas categorías LX, SX y FX. LX para aplicaciones de “lógica de interconexión” (glue logic) y de bajos requerimientos, SX para aplicaciones de procesamiento de señales (multiplicadores dedicados, CLBs son operaciones MAC, memoria RAM) y FX para aplicaciones de alta gama (SX más entradas salidas de alta velocidad, procesadores PowerPC embebidos) [22].

Para el desarrollo de este trabajo como se mencionó anteriormente hemos escogido

la tarjeta SPARTANIIE de la familia Xilinx, en la cual se va a implementar algunas de las técnicas de control de error que son el objetivo del mismo, por lo que en el capítulo siguiente se hará una revisión de diferentes códigos de bloque.

SEPI-ESIME-IPN 32

Page 45: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error

Capítulo 3

Técnicas de control de error Una vez que se conoce el concepto y arquitectura de un radio definido por software, se está listo para proponer algunas técnicas de control de error para su implementación en RDS. El primer paso consiste en conocer el concepto de codificación y decodificación, describir algunos tipos de código de bloque, para así escoger algunos de ellos para su implementación.

3.1 Introducción

Las operaciones básicas de procesamiento de señales en un sistema de comunicación digital son codificación de la fuente, codificación de canal y modulación digital en el lado del transmisor, como se muestra en el diagrama de la figura 3-1, así como los procesos inversos en el lado del receptor. Los códigos para detección y corrección de errores corresponden a la codificación de canal.

Figura 3-1. Procesos de la señal en el lado del transmisor de un sistema de comunicaciones.

Uno de los parámetros que miden el desempeño de un sistema de comunicaciones

digital es la tasa de error binaria (BER) para un cierto valor de la relación de energía de bit a densidad espectral de ruido (Eb/N0). Generalmente, debido al ruido del canal de transmisión, la única manera de proporcionar un valor de BER aceptable es agregando códigos para detección y corrección de los errores [31].

Actualmente se emplean dos formas de controlar los errores. Una de las técnicas es

conocida como solicitud de confirmación (ARQ de Acknowledgment Request) ya que el receptor comprueba los datos recibidos y si hubo error solicita una retransmisión, de lo contrario retorna una confirmación de recepción correcta. La otra técnica se conoce como corrección de error hacia delante (FEC, de Forward Error Correction), y es utilizada en los sistemas de comunicación que operan en tiempo real (es decir, el transmisor no almacena los datos que envía como en el caso de voz y video digitales). En este trabajo sólo se abordarán algunos de los códigos FEC. En general, el proceso de codificación en los códigos FEC es una operación en la cual a un grupo de bits de datos correspondientes al

SEPI-ESIME-IPN 33

Page 46: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error mensaje que se desea transmitir, se le agrega un grupo de bits conocidos como de paridad para fines de detección y corrección de errores.

3.2 Códigos de bloque

La salida de una fuente de información es una secuencia de dígitos binarios "0" o "1". En la codificación de bloque, esta secuencia de información binaria es segmentada en bloques de mensaje de una longitud fija; cada bloque de mensaje, llamado u, consiste en k dígitos de información. Hay un total de 2k mensajes distintos.

El codificador, de acuerdo con ciertas reglas, transforma cada mensaje entrante u, en una palabra binaria de n bits, v, con n > k. v es lo que llamamos palabra código (o vector código) del mensaje u. Por lo tanto, para los 2k posibles mensajes, hay 2k palabras código. A este conjunto de 2k palabras código, se le llama Código bloque. Para que un código bloque sea útil, las 2k palabras código deben ser distintas. En consecuencia, tiene que haber una correspondencia uno a uno entre un mensaje u y su palabra código v [27].

Una estructura que se desea que tenga un código bloque, es la linealidad. Con esta estructura, la complejidad de la codificación se reduce enormemente, como se verá a continuación.

3.3 Código de bloque lineal

Mensajes Palabras código( 0 0 0 0) ( 0 0 0 0 0 0 0 ) ( 1 0 0 0) ( 1 1 0 1 0 0 0 ) ( 0 1 0 0) ( 0 1 1 0 1 0 0 ) ( 1 1 0 0) ( 1 0 1 1 1 0 0 ) ( 0 0 1 0) ( 1 1 1 0 0 1 0 ) ( 0 1 1 0) ( 1 0 0 0 1 1 0 ) ( 1 1 1 0) ( 0 1 0 1 1 1 0 ) ( 0 0 0 1) ( 1 0 1 0 0 0 1 ) ( 1 0 0 1) ( 0 1 1 1 0 0 1 ) ( 0 1 0 1) ( 1 1 0 0 1 0 1 ) ( 1 1 0 1) ( 0 0 0 1 1 0 1 ) ( 0 0 1 1) ( 0 1 0 0 0 1 1 ) ( 1 0 1 1) ( 1 0 0 1 0 1 1 ) ( 0 1 1 1) ( 0 0 1 0 1 1 1 ) ( 1 1 1 1) ( 1 1 1 1 1 1 1 )

Tabla 3-1. Código Lineal (7,4).

SEPI-ESIME-IPN 34

Page 47: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error

A un código bloque de longitud n y 2k palabras código se le llama código lineal (n,k) si y sólo si sus 2k palabras código forman un subespacio k-dimensional. De hecho, un código binario es lineal si y sólo si la suma de módulo 2 de dos palabras código es también una palabra código. El bloque código dado en la tabla 3-1 es un código lineal (7,4). Se puede comprobar fácilmente que la suma de dos palabras código en este código es también otra palabra código [27].

3.3.1 Matriz generadora Un código lineal (n,k) está completamente definido por las k filas de la matriz

generadora G. Ejemplo: El código lineal (7,4) dado en la tabla 3-1 tiene la siguiente matriz como

matriz generadora:

⎥⎥⎥⎥

⎢⎢⎢⎢

=

⎥⎥⎥⎥

⎢⎢⎢⎢

=

1 0 0 0 1 0 10 1 0 0 1 1 10 0 1 0 1 1 00 0 0 1 0 1 1

gggg

G

3

2

1

0

(3-1)

Sea u = (1 1 0 1) el mensaje que hay que codificar, su palabra código

correspondiente será:

v = u*G = (0 0 0 1 1 0 1) (3-2)

3.3.2 Forma sistemática Una propiedad deseable en un código lineal es una estructura sistemática de las

palabras código como la mostrada en la figura 3-2, donde una palabra código se divide en dos partes: la parte del mensaje y la parte de redundancia. La parte del mensaje consiste de k bits de información inalterada (o mensaje) y la parte de redundancia consiste de n - k bits de comprobación de paridad, los cuales son una suma lineal de los bits de información. A un código lineal de bloque con esta estructura se le llama código lineal sistemático de bloque [27][28].

El código (7,4) dado en la tabla 3-1 es un código sistemático, los cuatro bits que

están más a la derecha de cada palabra código son idénticos a los bits correspondientes de información.

SEPI-ESIME-IPN 35

Page 48: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error

n-k dígitos k dígitos

Redundancia Mensaje

Figura 3-2. Forma sistemática de una palabra código.

Un código lineal (n,k) sistemático queda completamente definido por una matriz Gkxn de la siguiente forma:

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

=

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

=

1 ..... 0 0 0 ρ . . . . . . .

0 ..... 0 1 0 ρ . . . . . 0 ..... 0 0 ρ . . . . .

g. . g g

G

1-k-n0,0100

1-k-n0,0100

1-k-n0,0100

1-k

1

0

ρρ

ρρρρ 1

(3-3)

Matriz Identidad k x k Matriz P

Esto nos muestra que los k primeros dígitos por la derecha de una palabra código v son idénticos a los dígitos de información u0, u1,..., uk-1 que hay que codificar, y que los n - k dígitos de redundancia que están a la izquierda, son sumas lineales de los de información.

Ejemplo: Sea u = ( 1 0 1 1 ), el mensaje que hay que codificar, y G la matriz 3-4.

Entonces podemos obtener v de la siguiente forma:

⎥⎥⎥⎥

⎢⎢⎢⎢

•=

1 0 0 0 1 0 10 1 0 0 1 1 10 0 1 0 1 1 00 0 0 1 0 1 1

v u (3-4)

v = ( 1 0 0 1 0 1 1 ) (3-5)

Además, podemos comprobar:

v6 = u3 v5 = u2

SEPI-ESIME-IPN 36

Page 49: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error

v4 = u1 v3 = u0 v2 = u1 + u2 + u3 v1 = u0 + u1 + u2 v0 = u0 + u2 + u3 (3-6)

Existe otra matriz útil asociada con cada código de bloque lineal. Para cualquier matriz G de k x n con k renglones linealmente independientes, existe una Matriz H.

3.3.3 Matriz H Esta matriz H es la matriz de comprobación de paridad del código. Si la matriz

generadora de un código lineal (n,k) está en la forma sistemática, la matriz de comprobación de paridad tiene la siguiente forma:

[ ]

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

== −

1-k-n0,0100

1-k-n0,0100

1-k-n0,0100

ρ . . . . . 1 ..... 0 0 0. .

ρ . . . . . 0 ..... 0 1 0ρ . . . . . 0 ..... 0 0 1

ρρ

ρρρρ

Tkn PIH (3-7)

donde PT es la transpuesta de la matriz P. Esto implica que GHT = 0 . Por lo tanto, la matriz H es una matriz de comprobación de paridad del código lineal generado por la matriz G [28].

3.4 Síndrome y detección de errores Consideramos un código lineal (n,k) con su matriz generadora G y su matriz de

comprobación de paridad H. Sea v una palabra código que se transmite en un canal ruidoso, y r es el vector recibido a la salida del canal. Debido a que el canal es ruidoso, r puede ser distinto de v, como puede verse en la figura 3-3.

CANAL v r

e

Figura 3-3. Transmisión de un mensaje a través de un canal ruidoso.

SEPI-ESIME-IPN 37

Page 50: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error 3.4.1 Vector de error

El vector suma de r y v es e. Los unos que aparecen en e son errores de transmisión

producidos porque el canal es ruidoso. El receptor recibe r que es la suma de la palabra código transmitida y el vector de

error. Cuando recibe r, el decodificador debe determinar si contiene errores de transmisión. Si se detectan errores, el decodificador intentará corregirlos (FEC) o pedirá una retransmisión (ARQ) 28[].

3.4.2 Síndrome Cuando se recibe r, el decodificador calcula lo siguiente:

s = r HT = ( s0, s1,..., sn-k-1 ) (3-8)

donde s es el síndrome de r. s = 0 si y sólo si r es una palabra código, y s es distinto de 0 si y sólo si r no es una palabra código (el receptor detecta la presencia de un error). Pero, es posible que los errores no sean detectables. Esto sucede cuando el vector de error es idéntico a una palabra código no nula. Estos errores son errores indetectables. Como hay 2k - 1 palabras código no nulas, hay 2k - 1 errores indetectables. Una vez que se encuentra el error, se considera que el vector r + e es la palabra código transmitida.

Ejemplo: Sea C(7,4) y r =(1 0 0 1 0 0 1) el vector recibido. La matriz G es:

⎥⎥⎥⎥⎤

⎢⎢⎢⎢⎡

=

⎥⎥⎥⎥⎤

⎢⎢⎢⎢⎡

=

1 0 0 0 1 0 10 1 0 0 1 1 10 0 1 0 1 1 00 0 0 1 0 1 1

gggg

G2

1

0

⎦⎣⎦⎣ 3

(3-9)

entonces, la matriz H es:

⎥⎥⎥

⎢⎢⎢

⎡=

1 1 1 0 1 0 00 1 1 1 0 1 01 1 0 1 0 0 1

H (3-10)

Por lo tanto, el síndrome es s =rHT

SEPI-ESIME-IPN 38

Page 51: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error

⎥⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢⎢

•=

1 0 11 1 11 1 00 1 11 0 00 1 00 0 1

s r (3-11)

cuyo resultado es s = (1,1,1) = eHT. Por lo tanto, existe error. De HT se obtiene:

s0 = 1 = e0 + e3 + e5 + e6 s1 = 1 = e1 + e3 + e4 + e5 s2 = 1 = e2 + e4 + e5 + e6 (3-12)

Fijamos valores de e3, e4, e5 y e6 y despejamos los valores de e0, e1 y e2 como se

muestra en la tabla 3-2.

e0 e1 e2 e3 e4 e5 e6

1 1 1 0 0 0 0

0 1 0 0 0 0 1

0 0 0 0 0 1 0

1 0 1 0 0 1 1

1 1 1 0 1 0 0

0 1 1 0 1 0 1

0 1 1 0 1 1 0

Tabla 3-2. Tabla que muestra los valores de e0, e1, e2, e3, e4, e5 y e6

El vector error más probable será el que menos errores (unos) tenga, el cual es:

e = (0 0 0 0 0 1 0), (3-13) entonces podemos hallar:

v = (1 0 0 1 0 1 1) (3-14)

SEPI-ESIME-IPN 39

Page 52: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error 3.5 Distancia mínima de un código

El peso Hamming (o simplemente peso) de v, que se denota como w(v), se define como el número de componentes distintos de cero de v.

Por ejemplo, el peso de v = ( 1 0 0 1 0 1 1 ) es 4. Sean v y w, la distancia Hamming (o simplemente distancia) entre v y w, que se

denota como d(v,w), se define como el número de dígitos en el mismo sitio que tienen diferentes.

Por ejemplo, la distancia Hamming entre: v = ( 1 0 0 1 0 1 1 ), w = ( 0 1 0 0 0 1 1 ),

d(v,w) = 3. Corolario. Sea C un código lineal cuya matriz de comprobación de paridad es H. El

peso mínimo (o la mínima distancia) de C es igual al menor número de columnas de H que suman 0.

3.6 Propiedades detectoras

Un código bloque con distancia mínima dmin es capaz de detectar todos los patrones de error de dmin - 1 o menos errores.

Un código bloque detecta todos los patrones de error de dmin - 1 o menos errores,

pero también detecta una gran fracción de los patrones de error con dmin o más errores. En realidad, un código lineal (n,k) es capaz de detectar 2n - 2k patrones de error de longitud n.

De entre los 2n - 1 patrones de error distintos de cero, hay 2k - 1 patrones de error

que son idénticos a las 2k - 1 palabras código. Si sucede cualesquiera de esos 2k - 1 patrones de error, la palabra código transmitida, v se transforma en otra palabra código, w. Por lo tanto, se recibe w y su síndrome es cero. En este caso, el decodificador acepta w como la palabra transmitida y realiza una decodificación incorrecta.

Hay 2n - 2k patrones de error detectables. Para n suficientemente grande, 2k - 1 es en

general mucho más pequeño que 2n. Por lo tanto, sólo una pequeña fracción de errores pasa por el decodificador sin ser detectados [27][28].

3.6.1 Probabilidad de no detectar un error

Sea C un código lineal (n,k). Sea Ai el número de vectores del código de peso i. A los números A0, A1, ..., An se les llama distribución del peso de C. Si C se usa sólo para detección de errores en un BSC (Canal Binario Simétrico), la probabilidad de que el decodificador falle al detectar errores se puede calcular como la distribución del peso de C.

SEPI-ESIME-IPN 40

Page 53: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error

Vamos a denotar la probabilidad de no detectar un error como PU(E).

∑ −−=n

niiU ppAEP 1)1()( (3-15)

Donde p es la probabilidad de error de bit del canal. Además, si la distancia mínima

de C es dmin, entonces desde A1 hasta Admin - 1 son cero.

3.7 Propiedades correctoras

Si un código bloque C con distancia mínima dmin se usa para corregir errores aleatorios, es conveniente saber cuántos errores es capaz de corregir dicho código.

La distancia mínima es par o impar. Por lo tanto, podemos elegir un entero t tal que:

2t + 1 <= dmin <= 2t + 2 (3-16) Ahora vamos a probar que el código C es capaz de corregir todos los patrones de

error de t o menos errores. Sean v y r el vector transmitido y recibido, respectivamente. Sea w cualquier otro vector código de C. La distancia Hamming entre v, r y w satisface la desigualdad triangular:

d(v,r) + d(w,r) ≥ d(v,w) (3-17)

Supongamos que un patrón de error de t' errores sucede durante la transmisión de v.

Entonces, el vector recibido tiene t' posiciones distintas de v y d(v,r) = t'. Puesto que v y w son vectores código de C, tenemos que:

d(v,w) ≥ dmin ≥ 2t +1 (3-18)

obtenemos la siguiente desigualdad:

d(w,r) => 2t + 1 - t' (3-19)

si t'<= t, entonces:

d(w,r) > t (3-20) La desigualdad de arriba dice que si un patrón de t o menos errores tiene lugar, el

vector recibido r está más cerca del vector transmitido v que a cualquier otro vector w en C. basándose en el esquema de decodificación de máxima similitud, r es decodificado en v, que es el vector que se transmitió. Se ha realizado una decodificación correcta y por lo tanto una corrección de errores [28].

SEPI-ESIME-IPN 41

Page 54: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error

Por otra parte, el código no es capaz de corregir todos los patrones de error de l errores con l > t, porque por lo menos hay un caso en el cual un patrón de error de l errores da lugar en recepción un vector r que está más cerca de un vector código incorrecto que al vector transmitido. Veamos esto con dos vectores código v y w:

d(v,w) = dmin (3-21)

Sean e1 y e2 dos patrones de error que satisfacen las siguientes condiciones:

e1 + e2 = v + w (3-22)

e1 y e2 no tienen componentes distintas de cero en las mismas posiciones.

Obviamente, se tiene que:

w(e1) + w(e2) = w(v + w) = d(v,w) = dmin (3-23)

ahora suponemos que v se transmite y es corrompida por e1. El vector recibido es:

r = v + e1 (3-24)

la distancia Hamming entre v y r es:

d(v,r) = w(v + r) = w(e1) (3-25)

la distancia Hamming entre w y r es:

d(w,r) = w(w + r) = w(w + v + e1) = w(e2) (3-26)

ahora suponemos que el patrón de error e1 contiene más de t errores (w(e1) > t). Puesto que 2t + 1 <= dmin <= 2t + 2, obtenemos que:

w(e2) <= t + 1 (3-27)

combinando las tres últimas expresiones y usando el hecho de que w(e1) < t, obtenemos la siguiente desigualdad:

d(v,r) => d(w,r) (3-28)

ésta desigualdad dice que existe un patrón de error de l ( l > t ) errores que da lugar a un vector recibido que está más cerca de un vector incorrecto que del vector transmitido. basándose en el esquema de decodificación de máxima similitud se puede producir una decodificación incorrecta [27].

Para resumir, un código bloque con distancia mínima dmin garantiza que corrige

todos los patrones de error de t = [( dmin - 1) /2] o menos errores.

SEPI-ESIME-IPN 42

Page 55: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error 3.8 Códigos Cíclicos

Son una subclase de los códigos de bloque lineales, los cuales tienen esquemas de decodificación eficientes, es decir, con algoritmos relativamente simples. Se dice que un código es cíclico cuando cualquier desplazamiento en lazo cerrado de una palabra código da como resultado otra palabra existente dentro del conjunto empleado para codificar los posibles mensajes. Existen una gran variedad de códigos cíclicos. Por ejemplo, el Código de Redundancia Cíclica (CRC) empleado en comunicaciones de datos en Telefonía IP y el código Golay que es un código binario como el Hamming [31].

Figura 3-4. Videoteléfono, utiliza CRC.

3.8.1 Características de los códigos cíclicos Estos códigos poseen dos características muy importantes:

Son fáciles de implementar usando una circuitería basada en registros de desplazamiento.

Tienen una estructura algebraica bien definida. A continuación se define el concepto de rotación cíclica de un vector que será

necesario para poder definir un código cíclico. Sea la n-tupla v=(v0, v1, ... , vn-1). Si los componentes de esa n-tupla son desplazados

cíclicamente un lugar a la derecha obtenemos la n-tupla: v(1) =(vn-1, v0, ... , vn-2), denominada rotación cíclica de un elemento de v. De una forma más general si los componentes de v son rotados cíclicamente i veces obtenemos:

v(i)=(vn-i, vn-i+1 , ... , vn-1, v0, v1, ... , vn-i-1) (3-29)

SEPI-ESIME-IPN 43

Page 56: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error 3.8.2 Definición de un código cíclico

El código C(n, k) es un código cíclico si y sólo si cualquier rotación cíclica de un vector v perteneciente a C es también un vector del código C [29].

Para representar los vectores pertenecientes a los códigos cíclicos usaremos la

notación polinomial. Cada una de las componentes de un vector código v =(v0, v1, ... , vn-1) serán los coeficientes del polinomio: v(x)=v0+ v1x+v2x2+ ... + vn-1x n-1. A este polinomio se le denomina polinomio código. Por lo tanto a todo vector v le corresponde un polinomio código v(x) de grado (n-1) o menor. v(i) en representación polinomial sería:

v(i)(x) =(vn-i, vn-i+1x, ... , vn-1xi-1, v0xi, v1xi+1,... ,vn-i-1xn-1) (3-30)

consideremos el vector código v =(v0, v1, ... , vn-1) y su polinomio asociado:

v(x) = v0+ v1x+v2x2+ ... + vn-1x n-1 (3-31)

multiplicamos el polinomio por x:

xv(x) = v0x+ v1x2+v2x3+ ... + vn-1x n (3-32) este polinomio módulo (xn-1) nos da:

xv(x) = v0x+ v1x2+v2x3+ ... + vn-2x n-1+ vn-1 (3-33)

y en forma de vector:

(v1, ... , vn-1 ,v0) (3-34)

Si multiplicamos xiv(x)=v0xi+ v1xi+1+ ... + vn-1xn+i-1. Este producto lo podemos expresar como:

(vn-1, v0 , v1 ,..., vn-2 ) (3-35)

que es una rotación cíclica del vector anterior.

De aquí se observa que v(i)(x) es xiv(x) módulo (xn -1). Así, podemos definir como código cíclico a un código C(n,k) en el que si

multiplicamos por x módulo (xn -1) cualquier polinomio del código, obtenemos otro polinomio del código. Además, si el código es lineal entonces, si multiplicamos un polinomio del código por un polinomio cualquiera, obtenemos otro polinomio del código [27][29].

Proposición: C es un código cíclico si y sólo si C es un ideal del anillo F[x]/(xn -1).

Llamaremos C(x) a este ideal.

SEPI-ESIME-IPN 44

Page 57: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error

Teorema: Polinomio de grado mínimo Sea C(n,k) un código cíclico de longitud n y dimensión k y sea g(x) un polinomio

mónico de C(x) de grado r menor posible. Se cumple:

a) g(x) es el único polinomo mónico de grado r del ideal C(x) y genera el ideal principal.

b) g(x) divide (xn-1). c) El conjunto de polinomios g(x), xg(x), x2g(x), ..., xn-r-1g(x) de grado r, r+1, r+2,...,n-

1 genera C(x) como subespacio vectorial. La dimensión del código C es k=n-r [29] Por ser C(x) un ideal principal generado por g(x), tenemos: Teorema: Sea g(x)=1+g1x+g2x2+ ... + gr-1xr-1+xr el polinomo de grado mínimo, para

todo v(x) de grado menor o igual que n-1 v(x) pertenecerá al código si y sólo si v(x) es múltiplo de g(x) [29].

Teorema: Si g(x) tiene grado (n-k) y es factor de xn+1 => g(x) genera siempre un

código cíclico C(n, k) [29].

3.8.3 Codificación Sistemática

Para mejorar la eficacia de este tipo de código, nos interesa algún algoritmo para conseguir una implementación sistemática del código:

Sea u=(u0, ... , uk-1),

u(x) = u0+ ... +uk-1xk-1 (3-36)

xn-k u(x) = u0xn-k + ... + uk-1xn-1 (3-37)

xn-k u(x) = a(x) g(x) + b(x), donde b(x) es un polinomio de grado menor o igual que (n-k-1).

b(x) = b0 + ... + bn-k-1xn-k-1 (3-38)

b(x) + xn-ku(x) = a(x)g(x) pertenecerá a C(n, k) (3.39)

Por lo tanto: ( b0 + b1x + ... + bn-k-1xn-k-1 + u0xn-k + ... + uk-1xn-1 ) pertenecerá al código C(n, k). Por lo tanto tenemos:

Figura 3-5. Palabra código formada

SEPI-ESIME-IPN 45

Page 58: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error

Pasos para la codificación sistemática de u:

a) Multiplicar xn-k por u(x). b) Calcular b(x), que es el resto de dividir xn-ku(x) entre g(x). c) Concatenar b(x) y u(x).

3.9 Matriz generadora y matriz de control de los códigos cíclicos

3.9.1 Matriz generadora (matriz G)

Sea C(n, k) un código cíclico y g(x) = g0+g1x+ ... +gn-kxn-k. Sabemos que el conjunto de k polinomios {g(x), xg(x), ... , xk-1g(x)} forman una base del código C(x). Si ponemos como filas de una matriz k*n, las k n-tuplas correspondientes a esos k polinomios código obtendríamos la matriz generadora siguiente:

⎥⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢⎢

=

g . . . g g g 0 . . . 0 0...

0 . . 0 g . . . . . g g g 0 00 . . 0 0 g . . . . . g g g 00 . . 0 0 0 g . . . . . g g g

G

nk210

k-n210

k-n210

k-n210

(3-40)

El problema de usar esta matriz generadora es que, en general, produce una

codificación no sistemática. Para sistematizar G se verán dos modos de hacerlo más adelante.

3.9.2 Matriz de control (matriz H)

Como g(x) es factor de (xn-1) => (xn-1)=g(x)h(x), siendo h(x)=h0+h1x+ ... +hkxk. Sea una palabra código v=(v0, v1, ... , vn-1), por lo tanto v(x), polinomio asociado a v, debe ser múltiplo del polinomio generador v(x):

v(x) = a(x)g(x). v(x)h(x) = a(x)g(x)h(x) = a(x)(xn - 1)=a(x)xn - a(x) (3-41)

El grado de a(x) es menor o igual que (k-1), las potencias xk, xk+1,..., xn-1 no

aparecen en xna(x)- a(x). Si expandimos el producto v(x)h(x), los coeficientes de xk+1, ... , xn-1 deben ser iguales a cero. Por lo tanto, obtenemos (n-k) ecuaciones, denominadas ecuaciones de diferencia:

SEPI-ESIME-IPN 46

Page 59: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error

∑=

−− =⋅k

ijini vh

0

0 1 ≤ j ≤ n - k (3-42)

El polinomio recíproco de h(x) es xkh(x-1)=hk+hk-1x+hk-2x2+... +h0xk. xkh(x-1) es

también factor de (xn-1), por lo tanto generará un código cíclico C(n, n-k). La matriz generadora de ese código será:

⎥⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢⎢

=

h . . . h h h 0 . . . 0 0...

0 . . 0 h . . . . . h h h 0 00 . . 0 0 h . . . . . h h h 00 . . 0 0 0 h . . . . . h h h

H

02-k4-kk

02-k1-kk

02-k4-kk

02-k1-kk

(3-43)

De las ecuaciones de diferencias obtenemos que cualquier palabra del código es

ortogonal a cualquiera de las filas de la matriz H ⇒ H es la MATRIZ DE PARIDAD de C. H genera el código dual de C, h(x)=polinomio de paridad de C.

Teorema: Sea C(n, k) un código cíclico con polinomio generador g(x) ⇒ el código

dual de C es cíclico y se genera por xkh(x-1), con h(x)=(xn+1)/g(x) [27].

3.9.3 Sistematización de la matriz G

Tenemos dos formas para sistematizar la matriz G: Combinando filas de la matriz G. Por ejemplo: Sea g(x)=1+x+x3. La sistematización

de la matriz G se muestra en la figura siguiente:

1033

022

1

0

3

2

1

0

''''

1 0 0 0 1 0 10 1 0 0 1 1 10 0 1 0 1 1 00 0 0 1 0 1 1

1 1 1 1 0 0 00 1 0 1 1 0 00 0 1 0 1 1 00 0 0 1 0 1 1

G

ggggggg

gg

G

gggg

++=→+=→

→→

⎥⎥⎥⎥

⎢⎢⎢⎢

=⇒

→→→→

⎥⎥⎥⎥

⎢⎢⎢⎢

= (3-43)

Sea C(n, k) nuestro código cíclico y g(x) su polinomio generador. Si dividimos xn-k+i

por g(x) obtenemos:

xn-k+i=ai(x)g(x)+bi(x), con i=0, 1, ..., k-1 (3-44)

SEPI-ESIME-IPN 47

Page 60: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error donde bi(x)+xn-l+i es un múltiplo de g(x) por lo que pertenecerá al código. Podemos usar esos k polinomios código como las filas de la matriz G, obteniendo la matriz generadora de forma sistemática:

⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢

=

1 . . . 0 0 0 b . . . . . b b b

0 . . . 1 0 0 b . . . . . b b b 0 . . . 0 1 0 b . . . . . b b b

0 . . . 0 0 1 b . . . . . b b b

G

k-n1,-k1,2-k1,1-k1,0-k

k-n2,222120

k-n1,121110

k-n0,020100

(3-45)

Podemos calcular H a partir de esta matriz G en forma sistemática como: H=(In-k |

Pt) según se vio en el tema de códigos lineales. La matriz quedaría de la forma:

⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢

=

k-n1,-k1,2-k1,1-k1,0-k

k-n2,222120

k-n1,121110

k-n0,020100

b . . . . . b b b 1 . . . 0 0 0

b . . . . . b b b 0 . . . 1 0 0 b . . . . . b b b 0 . . . 0 1 0 b . . . . . b b b 0 . . . 0 0 1

H (3-46)

3.10 Codificación de los códigos cíclicos

3.10.1 Codificación basada en g(x)

Para codificar seguiremos los tres pasos vistos en la codificación sistemática:

a) Multiplicar xn-k por u(x). b) Calcular b(x), que es el resto de dividir xn-ku(x) entre g(x). c) Concatenar b(x) y u(x) [30].

La implementación se hace con el siguiente circuito:

SEPI-ESIME-IPN 48

Page 61: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error

Figura 3-6. Circuito para un codificador cíclico utilizando g(x).

Los pasos de la codificación serían:

a) La puerta está cerrada, por lo que se introducen los dígitos de xn-ku(x) al canal y al circuito. (gi ⇒ conexión, gi ⇒ no conexión).

b) Se abre la puerta (se elimina la realimentación). En este paso ya están calculados todos los bi, por lo que se van desplazando hacia el canal. Ejemplo: Sea C(7,4) un código cíclico y sea g(x)=1+x+x3 su polinomio generador.

Dibujar el circuito de codificación basado en g(x) y mostrar los pasos dados al realizar la codificación.

El circuito de codificación es el que se muestra en la figura siguiente:

Figura 3-7. Circuito de codificación para un código (7,4) utilizando g(x).

Para mostrar los pasos de la codificación tomaremos u=(1, 0, 1, 1). x3u(x)=(0, 0, 0, 1, 0, 1, 1) (no usamos la notación polinomial ya que para ver la codificación es más cómodo tratar las palabras código como vectores). Los pasos de la codificación se muestran en la siguiente tabla:

SEPI-ESIME-IPN 49

Page 62: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error

Entrada Estado registros Canal- 0 0 0 - 1 1 1 0 1 1 1 0 1 1 0 1 0 0 0 1 1 0 0 1 - - 1 0 0 - - - 1 0 - - - - 1

Tabla 3-4. Pasos de la codificación (7,4)

Por lo tanto, el vector codificado quedaría: v=(1, 0, 0, 1, 0, 1, 1).

3.10.2 Codificación basada en h(x)

Para codificar seguiremos los tres pasos vistos en la codificación sistemática:

a) Multiplicar xn-k por u(x). b) Calcular b(x), que es el resto de dividir xn-ku(x) entre g(x). c) Concatenar b(x) y u(x) [30].

La implementación se hace con el siguiente circuito:

Figura 3-8. Circuito para un codificador cíclico utilizando h(x).

Los pasos de la codificación serían:

a) La puerta 1 está conectada y la puerta 2 está desconectada. Se va introduciendo el mensaje original en los registros de desplazamiento.

b) La puerta 1 está desconectada y la puerta 2 está conectada. Se van calculando y sacando los bits de paridad.

SEPI-ESIME-IPN 50

Page 63: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error

Por lo tanto, hemos visto que tenemos dos métodos de codificación:

Método basado en g(x): tiene (n-k) etapas. Método basado en h(x): tiene k etapas.

Usaremos el que tenga menor número de etapas según cada caso; por ejemplo, para

un código C(7, 4) usaríamos el método basado en g(x).

Ejemplo: Sea C(7,4) un código cíclico y sea g(x)=1+x+x3 su polinomio generador. Dibujar el circuito de codificación basado en h(x) y mostrar los pasos dados al realizar la codificación.

A partir de g(x), obtenemos h(x)=1+x+x2+x4. El circuito de codificación es el que se muestra en la figura 3-9:

Figura 3-9. Circuito de codificación para un código (7,4) utilizando h(x). Para mostrar los pasos de la codificación tomaremos u = (1, 0, 1, 1). Sin

retroalimentación todavía, obtenemos a partir de este vector u, v = (-, -, -, 1, 0, 1, 1). Los pasos de la codificación se muestran en la siguiente tabla:

Estado registros Canal1 0 1 1 0 0 1 0 1 0 0 0 1 0 1

Tabla 3-4. Pasos de la codificación (7,4)

Por lo tanto, el vector codificado quedaría: v=(1, 0, 0, 1, 0, 1, 1).

SEPI-ESIME-IPN 51

Page 64: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error

3.11 Procesamiento del síndrome y detección de errores

3.11.1 Procesamiento del síndrome Por ser también un código lineal el síndrome es, s = r·HT

)()()()()( 1

12

210

xsxgxaxrxrxrxrrxr n

n

+⋅=+⋅⋅⋅+++= −

Si s(x) = 0 ⇒ r(x) = a(x) ·g(x) ⇒ r(x) = g(x) ⇒ r(x) ∈ C(n,k)

Si s(x) ≠ 0 ⇒ r(x) ∉ C(n,k) (3-46)

Por lo tanto, si s(x)≠ 0, se ha producido un error [29]. El primer paso será procesar el síndrome. Para calcular el síndrome se puede usar el

mismo esquema del codificador:

Figura 3-10. Circuito que obtiene los valores del síndrome.

3.11.2. Decodificación

Teorema:

r(x) de cíclica rotación la de síndromeel es gxr de resto el es x sresto g(x) entre s(x)x Dividiendo

xrxrr r(x)r(x)de síndromexs

(1)(1)

nn

)1(

1110

)()(

)(

⇒⋅

+⋅⋅⋅++= −− (3-47)

Demostración:

SEPI-ESIME-IPN 52

Page 65: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error

[ ]

[ ] )()()()()(

)(

)()()()()()()()()1()()()()1()(

)()1()()(

1

1)1()1(

1

)1(

xpxgxqxpxgxa(x)h(x)rc(x)s(x)x :luegor(x) de síndromeel es s(x)

xr de síndromeel es p(x) :donde

xsxgxaxxhxgrxpxgxcxrxrxxrxrxrxrx

xrxxaxrx

(1)n

nn

nn

n

+⋅=+⋅+⋅+=⋅

+⋅+⋅=+⋅+⋅+⋅=⇒++⋅=⋅

++⋅=⋅

−−

(3-48)

Tabla estándar: Utilizando la tabla estándar de la misma forma que se utilizan con los códigos

lineales.

kvevevee

kvevevee

kveveveekvevevee

kvvvv

kniknknkn

i

i

i

i

222222

211211

233233

222222

221

....................................

....................................

......

......

......0

+++

+++

++++++

=

−−−−

(3-49)

Figura 3-11. Circuito de decodificación utilizando tabla estándar.

SEPI-ESIME-IPN 53

Page 66: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 3 Técnicas de control de error

[ ] )()()()()()()()()()()()()(

)()()()(

1110

xsxgxbxaxexsxgxaxrxexgxbxr

xexeexexexvxr

nn

++=⇒⎭⎬⎫

+=+=

+⋅⋅⋅++=

+=−

− (3-50)

La tabla estándar nos da los vectores de corrección que deben sumarse a los vectores

recibidos.

3.11.3 Propiedades de la detección de errores

a) Si g(x) distinto del polinomio 1 => Detecto todos los errores simples. b) Si g(x) múltiplo de (1 + x) => Detecto todos los errores impares.

Demostración: Un error e(x) de peso impar cumple la propiedad de que e(x=1) = 1 lógicamente. Por tanto e(x) no puede ser múltiplo de (1+x) ya que de lo contrario e(1)=0 cosa que es imposible. Como sólo no detectamos los errores que pertenecen al código, no detectaríamos los errores tales que e(x) fuera múltiplo de g(x) en este caso de (1+x). Por tanto, como si e(x) es de peso impar hemos visto que no es múltiplo de (1+x), podemos decir que si e(x) es de peso impar detectamos siempre el error si se cumple que g(x) es múltiplo de (1+x).

c) Si g(x) tiene como factor a un polinomio primitivo detecta todos los errores dobles, siendo un polinomio primitivo aquel que:

es factor de (xn +1) con n = 2γ - 1 no es factor de (xm + 1) con m < n

Una vez que ya se ha hecho la revisión de los códigos de bloque y en especial la de

los códigos cíclicos pasamos a la etapa de implementación, como se vio dentro de las ventajas de los códigos cíclicos se encuentra que son fáciles de implementar usando una circuitería basada en registros de desplazamiento y que tienen una estructura algebraica bien definida por lo que serán los códigos que implementaremos para construir los diferentes módulos de software para la parte de control de error de un RDS utilizando una FPGA.

SEPI-ESIME-IPN 54

Page 67: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación

Capítulo 4

Diseño e implementación

Una vez que hemos revisado algunas de las diferentes técnicas de control de error en códigos de bloque lineal, procedemos a la implementación de tres códigos diferentes, el código Hamming (7,4), código cíclico (7,4) y un código BCH (15,11) que utiliza decodificación Meggit. Para realizar esta implementación se propone la siguiente metodología de trabajo con FPGAs:

1) Programación de los circuitos utilizando lenguajes de programación de alto nivel:

Matlab. Simulink. C++.

2) Implementación en un HDL de los módulos de software obtenidos. HDL visual. HDL textual.

VHDL. Verilog.

IseWebPack 6.0. 3) Simulación de los circuitos utilizando:

Testbenchs 6.0. ModelSim 6.0.

4) Síntesis e implementación en el FPGA: IseWebPack 6.0. ChipScopePro 6.0.

Como puede verse se necesitan herramientas en hardware y software por lo que

haremos una revisión de estas para definir los elementos necesarios para llevar a cabo la implementación de técnicas de control de error en una FPGA para que pueda ser utilizado por un RDS.

4.1 Hardware

En el capítulo 2 se analizaron los dispositivos de lógica programable, entre ellos se hizo un análisis de las FPGA. El objetivo de este trabajo es implementar algunas de las técnicas de codificación de bloque lineal, entre ellas un Código Hamming (7-4), un Código BCH (15-11) y un Código Cíclico (7,4), diseñando e implementando para cada código su codificador y decodificador, para el propósito de nuestro trabajo utilizaremos una FPGA de la familia Spartan IIE de Xilinx, por lo que es importante conocer algunas características que encierra esta familia.

SEPI-ESIME-IPN 55

Page 68: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación 4.1.1 Familia Spartan IIE

Las FPGAs Xilinx Spartan™ son ideales para las aplicaciones de bajo costo y alto volumen y son designadas como reemplazos para arreglos de compuertas de lógica fija y para productos estándar de aplicación específica (ASSP), productos como sets de chips para interfase de bus. Hay cinco miembros de la familia: dispositivos Spartan-3 (1.2V), Spartan IIE (1.8V), Spartan II (2.5V), Spartan XL (3.3V) y Spartan (5V).

La familia FPGA Spartan IIE 1.8V provee a los usuarios con alto desarrollo,

recursos de la lógica abundantes, entre otras características más. El séptimo miembro de la familia ofrece densidades que van de 50.000 a 600.000 compuertas.

La Spartan II está fabricada en un proceso mixto de 0,18μm/0,22mm y seis capas de

metal, utilizando una de las más avanzadas tecnologías de proceso existentes hoy en día. Los dispositivos Spartan se caracterizan por tener una arquitectura flexible y regular

que se compone de un arreglo de bloques lógicos configurables (Configurable Logic Blocks o CLBs), rodeados por bloques de entrada/salida programables (programmable Input/Output Blocks o IOBs). Hay cuatro Delay-Locked Loops (DLLs), uno a cada esquina del dispositivo. Se encuentran dos columnas de bloques RAM en lados opuestos del dispositivo, entre los CLBs y las columnas de IOB que se puede utilizar para definir memorias RAM de puerto simple y de puerto doble (en forma de bloque y distribuida). El XC2S400E tiene cuatro columnas y el XC2S600E tiene seis columnas de bloques RAM.

Estos elementos funcionales se interconectan por una jerarquía poderosa de canales

de la asignación de ruta versátiles. | El núcleo de la FPGA funciona a 1,8 voltios e incorpora una tecnología que la

permite funcionar con interfaces de I/O de 3,3 voltios siendo tolerante a señales de 5 voltios.

El desempeño de estos dispositivos hace que puedan alcanzar tasas de 200MHz

tanto en el interior como en los bloques de Entrada/Salida [22].

4.1.2 Arquitectura de los dispositivos Spartan IIE

El dispositivo Spartan-IIE está compuesto de cinco elementos distinguibles configurables:

IOBs (Input/Output Blocks): proporcionan la interfaz entre el paquete pines y la

lógica interna. CLBs (Configurable Logic Blocks): proporcionan los elementos funcionales para

construir más lógica. Bloques de RAM dedicados de 4096 bits cada uno.

SEPI-ESIME-IPN 56

Page 69: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación

Clock DLLs (Delay-Locked Loops): para la compensación de retraso de distribución de reloj y control de dominio de reloj.

Estructura de interconexión multi-nivel versátil.

Figura 4-1. Diagrama en Bloques de una familia FPGA Básica Spartan-IIE.

Dispositivo Celdas

Lógicas Rango Típico de Compuertas del

Sistema (Lógica y RAM)

CLBs Bits de RAM distribuída

Bits de bloques RAM

XC2S50E 1728 23000 – 50000 384 24576 32K XC2S100E 2700 37000 – 100000 600 38400 40K XC2S150E 3888 52000 – 150000 864 55296 48K XC2S200E 5292 71000 – 200000 1176 75264 56K XC2S300E 6912 93000 – 300000 1536 98304 64K XC2S400E 10800 145000 - 400000 2400 153600 160K XC2S600E 15552 210000 - 600000 3456 221184 288K

Tabla 4-1. Dispositivos de la familia Spartan IIE

Como puede verse en la figura 4-1, los CLBs forman la estructura de lógica central

con acceso fácil a todas las estructuras de soporte y ruteo. Los IOBs se localizan alrededor

SEPI-ESIME-IPN 57

Page 70: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación de toda la lógica y de los elementos de memoria para un ruteo de señales fácil y rápido dentro y fuera del chip.

Los valores guardados en las células de memoria estáticas controlan todos los

elementos lógicos configurables y recursos de interconexión. Estos valores son cargados en las células de memoria en power-up, y pueden ser recargados, si es necesario, para cambiar la función del dispositivo.

La tabla 4-1 muestra los recursos que integran algunos de los miembros de la

familia de dispositivos Spartan IIE [22].

4.2 Software

Una vez definido el tipo de hardware a emplear en nuestra implementación es importante definir también el tipo de lenguaje de descripción de hardware HDL que se utilizará para programar nuestra FPGA. A continuación se muestra una breve descripción sobre estos lenguajes y las características que permitieron elegir el más adecuado para este trabajo.

4.2.1 Lenguajes de descripción de hardware

Teniendo dispositivos de lógica reprogramable se requiere de herramientas de software que permitan definir y programar la lógica que se implementa en estos dispositivos.

Al igual que cuando se desarrolla un programa para un procesador o bien cuando se

diseña un esquemático para desarrollar una PCB (Printed Circuit Board, placa de circuito impreso), el desarrollo de sistemas digitales requiere de herramientas de descripción, definición, compilación e implementación. A continuación se muestra esa cadena de producción y en particular la etapa inicial de ésta, el lenguaje de descripción de hardware.

Un lenguaje de descripción de hardware (HDL, “Hardware Description Language)

es una herramienta que permite especificar de forma más o menos precisa un sistema estático de flujo de datos. En la actualidad su uso más común es para especificar circuitos electrónicos digitales. Existen versiones modernas que son empleadas para especificar también circuitos electrónicos analógicos e híbridos (digitales y analógicos).

En particular los HDLs son empleados para especificar la función que debe

implementar una FPGA u otro circuito de lógica reconfigurable. Los HDL son fundamentalmente distintos de los más conocidos “lenguajes de

programación”, empleados para definir tareas en los PC (“Personal Computer”, computadores individuales) y demás procesadores. Un lenguaje de programación define

SEPI-ESIME-IPN 58

Page 71: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación (indirectamente) el flujo de datos que pasará a través de una estructura lógica predefinida (e implementada en hardware) capaz de realizar un conjunto finito y conocido de tareas.

A comienzos del siglo 20, en 1937, Alan Turing definió el conjunto de tareas

necesarias y las condiciones sobre el flujo de datos que permiten que una estructura finita pueda calcular una cantidad infinita de funciones distintas. Este es el fundamento de todos los sistemas computacionales actuales [33].

Un lenguaje de descripción de hardware permitiría, por ejemplo, definir la

estructura lógica de una CPU (“Central Processing Unit, unidad central de proceso”). El HDL describe los componentes y las interconexiones entre los componentes de un circuito digital. Un HDL no tiene que ver con los datos sino con las operaciones sobre los datos.

Al igual que los lenguajes de programación existen HDLs de más alto nivel o de

más bajo nivel. En el bajo nivel se definen las compuertas lógicas básicas (“and, or, not”, “y, o, no”), los registros (unidades capaces de almacenar un dato, basados en “flip-flops” y compuertas lógicas) y las relaciones entre estos elementos. Se hace referencia de este nivel como “nivel de transferencia entre registros” (RTL, “Register Transfer Level”).

Para considerar un HDL productivo, útil como herramienta, se espera que además

de permitir realizar definiciones de bajo nivel permita construir abstracciones. Es decir construir módulos reutilizables de un nivel superior. A través de sucesivas capas de abstracción se llega a niveles superiores donde sólo se interconectan bloques funcionales que individualmente resuelven un problema, sin preocuparse mayormente de los detalles de la implementación.

Algunos HDL se centran exclusivamente en la unión de bloques flexibles de alto

nivel, mientras que otros se centran exclusivamente en la descripción de sistemas de bajo nivel. Algunos HDL experimentales buscan también permitir realizar construcciones que tomen en cuenta la estructura subyacente de la implementación en hardware reconfigurable.

Junto con los HDL es importante tener métodos de verificación que permitan

confirmar que la estructura construida realice la tarea deseada. Aunque a primera vista pareciese un tema menor en la práctica la verificación de los diseños consume una fracción importante del trabajo total. Algunos HDL pretenden proveer paralelamente a las descripciones métodos de verificación de los diseños construidos.

La calidad de un HDL se mide en base a la capacidad de éste para cumplir los

requerimientos del usuario. En este trabajo se pretende construir bloques de procesamiento de señales en

dispositivos de lógica digital reconfigurable, por lo tanto se requiere del HDL.

Accesos a primitivas de bajo nivel: para poder manipular las señales bit a bit e implementar arquitecturas arbitrarias.

SEPI-ESIME-IPN 59

Page 72: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación

Capacidad de crear abstracciones: para poder implementar distintos algoritmos aprovechando módulos reutilizables, para poder construir un sistema fácilmente modificable.

Expresividad: dado que se desea implementar un sistema completo con pocas Horas

Hombre conviene que el lenguaje requiera de pocas líneas de código para las distintas construcciones.

Diseños flexibles: los módulos generados deberán ser reutilizables y configurables

para ajustarse a los requerimientos de las distintas aplicaciones.

Capacidad de verificación por simulación: dado que se desea implementar algoritmos de procesamiento de señales, un buen método de verificación consiste en simular el sistema sobre señales de prueba y analizar si la salida concuerda con lo deseado.

Conexión con un buen ambiente de visualización: idealmente se desearía poder

interconectar las simulaciones directamente con un ambiente de computación científica que permita generar las entradas y analizar las salidas en un ambiente amigable y conocido [32].

4.2.2 HDL visuales

Dentro los diversos HDL pueden definirse dos grandes clases, los textuales y los visuales. Los HDL textuales describen las estructuras lógicas a través de archivos de texto comunes y ordinarios, que será posteriormente procesado, interpretado y transformado. En contraparte los HDL visuales describen las estructuras lógicas a través de construcciones visuales, de forma muy similar a como se ilustran los circuitos digitales en pizarras y libros.

Los HDL visuales son muy cómodos de usar y resultan casi intuitivos. Cada

elemento lógico está representado por un símbolo conocido, y los elementos de alto nivel por bloques con diversos puertos de entrada/salida. La construcción del sistema completo se realiza de forma similar al proceso de diseño del esquemático de un circuito electrónico común. Se posicionan en una planilla infinita los distintos elementos del sistema y en seguida se interconectan entre ellos a través de cables lógicos. A posteriori el diagrama es procesado para generar los archivos necesarios para configurar un dispositivo lógico.

Los HDL visuales permiten estructurar bloques lógicos en submódulos de forma de

construir una jerarquía arbitraria de planos lógicos que permita simplificar cada nivel. Los HDL visuales, si son construidos ordenadamente, son fáciles de leer y de ser entendidos por otros.

Aunque en una primera lectura pareciese que los HDL visuales son la herramienta

más efectiva y productiva para describir sistemas lógicos, sufren de ciertas limitaciones que hacen que su uso sea más limitado.

SEPI-ESIME-IPN 60

Page 73: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación

Cuando los diseños crecen en tamaño y complejidad mantener diagramas visuales

ordenados y legibles se hace cada vez más difícil, aún con él uso de niveles de jerarquía. Tantos grados de libertad en la disposición y unión de los elementos tiende a escalar mal. De igual forma en un diagrama de grandes dimensiones la introducción de errores por una manipulación involuntaria de un elemento se hace cada vez más factible, la detección de errores en mapas visuales es difícil y ardua.

Más importante aún es observar que los diagramas visuales presentan capacidades

de abstracción muy limitadas y son muy rígidos. Una vez construidos manualmente los diagramas no pueden auto-modificarse en función de los parámetros de instanciación. Los diagramas no permiten expresar adecuadamente los conceptos de recursión, de funciones sobre diagramas o el paso de argumentos de alto nivel a los bloques.

Además de hacer más rigidos los diseños y su posible reutilización, los HDLs

visuales suelen emplear un formato de almacenamiento binario propietario limitando su uso e intercambio exclusivamente a propietarios de herramientas de la misma compañía de software. El uso de HDLs visuales restringe el desarrollo de nuevas aplicaciones de procesamiento o la integración de estos a cadenas de procesamiento desarrolladas internamente.

Finalmente y como una estrategia para tratar de superar estas dificultades, la

mayoría de los lenguajes visuales de descripción de hardware funcionan como una capa por sobre un HDL textual subyacente. Luego pueden definirse bloques a través de unión de elementos de bajo nivel, o bien a través del HDL textual subyacente.

Todas estas dificultades restringen considerablemente el rango de usos de diagramas

para construir sistemas lógicos. Esencialmente los HDL visuales son cómodos para la construcción de diagramas más bien pequeños dedicados a casos específicos (donde su reutilización no requiere flexibilidad). También son una herramienta útil para la introducción pedagógica al tema de los sistemas lógicos, donde el alumno puede explorar los conceptos directamente en una representación visual. Finalmente, el uso más adecuado para los HDLs visuales es para la integración de soluciones prefabricadas para integrar un producto especializado, es decir, para la descripción de más alto nivel.

Puesto en perspectiva, los HDLs visuales parecen no ser la herramienta indicada

para cumplir los requerimientos de la aplicación que se desea desarrollar, explicitados previamente.

En forma complementaria a los HDLs visuales existen los HDLs textuales. Siendo

los primeros en haberse creado, son herramientas más maduras y más estandarizadas. Se tienen las comodidades de un formato puramente de texto, más fácil de estructurar y mantener ordenado, manipulable por diversas herramientas propietarias y no propietarias, fácil de intercambiar y transformar [32].

SEPI-ESIME-IPN 61

Page 74: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación 4.2.3 HDL textuales

Una alternativa más universal para la definición de circuitos lógicos es el uso de HDL textuales, es decir lenguajes escritos de descripción de hardware. A partir de un simple archivo de texto se puede especificar, simular, sintetizar e iniciar la manufactura de un circuito digital.

Además de las diferencias de sintaxis los distintos HDL se diferencían por sus

capacidades, las abstracciones que provee, el énfasis que pone a los distintos objetivos de un lenguaje de descripción de hardware. Debido a que los HDLs son empleados por una gran industria compuesta de diversas compañías existe una presión natural a estandarizar las herramientas comunes. Así de la diversidad de HDLs que han surgido y que se sigue produciendo, existen tan sólo dos de ellos que son empleados a lo largo de la industria electrónica: VHDL y Verilog.

VHDL

Son las siglas para “Very high speed integrated circuit Hardware Description

Language” (“lenguaje de descripción de hardware de circuitos integrados de muy alta velocidad”). Este lenguaje fue desarrollado en los años 1980 por el Departamento de Defensa de Estados Unidos, inicialmente creado para documentar el comportamiento de los chips incluidos en los equipos, rápidamente complementó con herramientas de simulación y se extendió para permitir la descripción y síntesis de circuitos lógicos.

En el año 1987 se publicó el primer estándar IEEE del lenguaje. Este estándar fue

modificado en el año 1993 para introducir una sintaxis más consistente y otras modificaciones menores. En los últimos años se han desarrollado nuevas extensiones para permitir descripciones de circuitos con señales análogas, mixtas (análogas/digitales) y de microondas. Estas extensiones aún no son un estándar.

Este lenguaje enfatiza la modularidad exigiendo definiciones estrictas de los puertos

de conexión de los componentes. Un mismo componente puede ser descrito de distintas formas. Puede realizarse una definición “descriptiva” que permite simular el comportamiento de un componente (y luego de un sistema completo), y puede realizarse una definición “estructural” a nivel de RTL.

Los computadores modernos permiten sintetizar los modelos descriptivos sin

embargo, la eficiencia de los sistemas resultantes respecto de una definición estructural sigue siendo cerca de diez veces menor. Las definiciones descriptivas pueden emplearse como un método de verificación de las posteriores estructurales.

Por ser uno de los HDLs más antiguos, es el lenguaje más maduro con un gran

número de funcionalidades, modelos paramétricos, carga de archivos, sistema de librerías, etc. Sin duda es el lenguaje “serio” para la definición de sistemas digitales y todas las herramientas de EDA (“Electronic Design Automation”, automatización del diseño de electrónica) incluyen soporte de base para este mismo.

SEPI-ESIME-IPN 62

Page 75: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación

VERILOG Fue desarrollado en la empresa privada pensando en crear una herramienta más

práctica y efectiva. Iniciando su desarrollo a mediados de los años 1980 no pasó a ser un estándar público sino hasta en 1995, existiendo una segunda revisión del estándar IEEE en el año 2001.

Aunque Verilog tiene capacidades más limitadas que VHDL su enfoque pragmático

hace que hoy en día este lenguaje domine el 60% del mercado de los HDLs, aunque por lo general en las herramientas EDA traen por defecto soporte para ambos lenguajes. El lenguaje es fácil de aprender y permite definir rápidamente diseños a nivel de RTL. Por defecto, Verilog no trae soporte para librerías de modelos lo que restringe su uso en proyectos de gran escala.

El equilibrio entre los dos lenguajes se traduce en la práctica en que las

herramientas EDA tienen un soporte homogéneo para ambos lenguajes. Dado que se ocupan en la misma posición de la línea de herramientas y que realizan el mismo objetivo por caminos similares no existen mayores diferencias en el uso de una u otra alternativa. Finalmente, en la elección de un lenguaje u otro suele predominar el gusto personal, la existencia de acuerdos comerciales con los proveedores de software, la mayor o menor facilidad de integración con las demás herramientas de trabajo, que las diferencias técnicas entre los lenguajes [32].

En este trabajo se eligió utilizar un HDL textual ya que para algunos códigos el

HDL visual dificultaba su utilización, además de que se pretende que los módulos diseñados en este trabajo puedan ser reutilizables con otros proyectos, por lo que VHDL cumple con estos requisitos, además de ser el lenguaje más maduro entre los HDL textuales.

4.2.4 Herramientas de software

ISE FOUNDATION (ISE WEBPACK 6.0)

Este programa permite la descripción en lenguajes VHDL, Verilog, ABEL, UCF. La pantalla está dividida en cuatro subpantallas principales, tal y como se presenta en la figura 4-2.

En la parte superior izquierda se encuentra la ventana Sources in Project “fuentes en

la pantalla”, la cual presenta de forma jerárquica los elementos incluidos en el proyecto. Bajo esta subpantalla se encuentra Processes for Source el cual muestra los procesos habilitados. La tercera ventana, ubicada en la parte inferior, muestra errores y advertencias, que se producen durante todas las etapas del proyecto. La última ventana se encuentra a la derecha y es una interfaz multi-documento (MDI) para la visualización de los archivos de texto ASCII y el código HDL.

SEPI-ESIME-IPN 63

Page 76: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación

Figura 4-2. Ventana de aplicación del (ISE WEBPACK 6.0).

MODELSIM 6.0

Figura 4-3. Ventana de aplicación del (MODELSIM 6.0).

SEPI-ESIME-IPN 64

Page 77: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación

Para la simulación se utiliza el programa ModelSim. El primer paso consiste en compilar el archivo vhdl correspondiente, posteriormente se abren las ventanas wave y signal, las cuales van a permitir forzar los valores de los puertos de entrada (ventana signal) y ver la simulación (ventana wave). En la figura 4-3 se muestran las ventas wave y signal.

Se utilizó el programa ModelSim ya que tiene las siguientes características:

o Soporta VHDL y Verilog o Generador de TestBench o Compatible con diversas herramientas de síntesis.

Una vez definido el hardware y los elementos de software que se van a utilizar en la

implementación de los códigos de bloque, pasamos al siguiente punto, el diseño.

4.3 Diseño e implementación Siguiendo los pasos que marcamos en la metodología de trabajo con FPGAs se presenta un ejemplo de cómo se desarrollaron las implementaciones de los diferentes códigos. 1) Programación de los circuitos utilizando lenguajes de programación de alto nivel.

Matlab. Simulink. C++.

En este primer paso se desarrollaron funciones de usuario para simular el

funcionamiento de diferentes codificadores y decodificadores, en los cuales se tienen los siguientes:

Codificador Hamming (7,4). Decodificador Hamming (7,4). Codificador Cíclico (7,4). Decodificador Cíclico (7,4). Codificador BCH (15,11). Decodificador BCH (15,11).

A continuación se muestran la función del codificador BCH (7,4).

void Codificador(int U[K], int V[N]) { int cont=0, i; //CALCULA LOS BITS DE REDUNDANCIA Y LOS A¥ADE EN //V(X) QUE ES LA PALABRA CODIGO for (i=N-1; i>=0; i--) { //DEJA LOS ULTIMOS CUATRO BITS DE INFORMACION

SEPI-ESIME-IPN 65

Page 78: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación if(i > N-K-1) { V[i]=U[N-K-cont]; cont++; } //CALCULA LOS BITS DE REDUNDANCIA B(X) else { //CIRCUITO BASADO EN H(X) PARA OBTENER LOS BITS DE REDUNDANCIA V[i] = U[3] ^ U[2] ^ U[1]; for(int j=N-K; j>=1; j--) { U[j] = U[j-1]; } U[0] = V[i]; } } }//FIN DE FUNCION 2) Implementación en un HDL de los módulos de software obtenidos.

HDL visual. HDL textual.

VHDL. Verilog.

IseWebPack 6.0.

Una vez que se tienen los algoritmos construidos para los diferentes codificadores y decodificadores en C++ se implementan estos algoritmos pero ahora en un HDL, en nuestro trabajo elegimos un HDL textual como es VHDL.

Un ejemplo de la implementación de estos algoritmos se muestra a continuación con

la implementación del codificador BCH(7,4).

entity CICLICODE is Port ( ENTRADA : in std_logic_vector(0 to 3); SALIDA : out std_logic_vector(0 to 6)); end CICLICODE; architecture Behavioral of CICLICODE is --DECLARACION DE VECTORES VARIABLES PARA PODER MANEJAR LOOPS begin process(entrada) -- DECLARACION DE CONTADORES VARIABLE CONT: INTEGER; VARIABLE I: INTEGER;

SEPI-ESIME-IPN 66

Page 79: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación VARIABLE J: INTEGER; VARIABLE U: STD_LOGIC_VECTOR (0 TO 3); VARIABLE V: STD_LOGIC_VECTOR (0 TO 6); begin --SE LE ASIGNA A U LA PALABRA DE ENTRADA U(0) := ENTRADA(0); U(1) := ENTRADA(1); U(2) := ENTRADA(2); U(3) := ENTRADA(3); -- EMPIEZA EL CODIGO CICLICO CONT := 0; I := 6; WHILE( I >= 0) LOOP IF(I > 2) THEN V(I) := U(3-CONT); CONT := CONT + 1; ELSE V(I) := U(3) XOR U(2) XOR U(1); J := 3; WHILE( J >= 1) LOOP U(J) := U(J-1); J := J - 1; END LOOP; U(0) := V(I); END IF; I := I-1; END LOOP; --ASIGNAMOS EL VECTOR VARIABLE AL VECTOR SEÑAL SALIDA SALIDA(0) <= V(0); SALIDA(1) <= V(1); SALIDA(2) <= V(2); SALIDA(3) <= V(3); SALIDA(4) <= V(4); SALIDA(5) <= V(5);

SEPI-ESIME-IPN 67

Page 80: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación SALIDA(6) <= V(6); END PROCESS; end Behavioral; 3) Simulación de los circuitos.

Testbenchs 6.0. ModelSim 6.0.

Una vez que se tienen los algoritmos implementados en un HDL se procede a la

simulación de la implementación, para verificar que las señales de entrada y salida correspondan al código deseado. Para esto se utilizan dos tipos de software de Xilinx para simulación en tarjetas FPGA, Testbenchs y ModelSim, las dos en versión 6.0. Estos software nos dan como resultado ventanas de simulación en donde podemos apreciar las señales de entrada y salida, se hacen pruebas del funcionamiento de los algoritmos y si el funcionamiento es correcto se procede al siguiente paso que es la síntesis e implementación en el FPGA. Estas ventanas de simulación se ven más adelante en la implementación de cada código.

4) Síntesis e implementación en el FPGA.

IseWebPack 6.0. ChipScopePro 6.0.

Este es el paso final para lograr la implementación de nuestros códigos en una

FPGA, el programa en VHDL se sintetiza con el software IseWebPack, este paso es el que genera las conexiones entre los CLBs dentro de la FPGA. Para comprobar las señales de entrada y salida en la FPGA se utiliza el software ChipScopePro de Xilinx con el cual se comprueba en tiempo real estas señales. Ya que se realizó esta comprobación nuestra implementación queda lista para su utilización. Cabe mencionar que si se desea implementar otro diseño en la FPGA solo basta con cargar el programa en VHDL y sintetizarlo para tener la nueva implementación en nuestra FPGA.

A continuación se muestra el desarrollo de implementación de cada código de forma

individual en donde se presentan las ventanas de simulación así como los diagramas esquemáticos resultantes de la programación en VHDL.

SEPI-ESIME-IPN 68

Page 81: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación

4.3.1 Código Hamming (7,4)

Con el estudio de los bloques lineales en el capítulo 3, se llegaron a dos conclusiones importantes, de parte del codificador se utilizan las ecuaciones finales (4-1) para poder implementar un codificador Hamming (7,4) y de parte del decodificador utilizando las ecuaciones del síndrome de detección de error (4-2) se implementará el decodificador Hamming (7,4).

v6 = u3 v5 = u2 v4 = u1 v3 = u0 v2 = u1 + u2 + u3 v1 = u0 + u1 + u2 v0 = u0 + u2 + u3 (4-1)

s0 = e0 + e3 + e5 + e6 s1 = e1 + e3 + e4 + e5 s2 = e2 + e4 + e5 + e6 (4-2)

El primer paso fue la creación de un algoritmo para implementarlo en un lenguaje

de alto nivel, en este caso de estudio se utilizó el lenguaje de programación C++. Se realizó un programa utilizando programación estructurada, por medio de una

función que recibe un arreglo de 4 elementos que simula la entrada del codificador para formar otro arreglo de 7 elementos que simula la salida del codificador de acuerdo a las ecuaciones del codificador Hamming.

De esta manera se forma la palabra código de 7 bits a partir de los 4 bits del mensaje

original, se agregan los 3 bits de redundancia los cuales nos darán el control de error. Una vez que se tuvo el programa del codificador, utilizando la palabra de 7 bits, es

decir, utilizando el arreglo de 7 elementos que se utilizó en el programa, se construye una nueva función utilizando las ecuaciones para el síndrome y así detectar si en el mensaje recibido se tiene algún error, si el mensaje tiene algún error esta función corregirá el bit erróneo siempre y cuando no sea un error indetectable como se vio anteriormente.

Este proceso nos sirvió de apoyo para entender el funcionamiento del código de

bloque lineal (7,4) y así poder implementarlo en un dispositivo lógico programable, en este caso de estudio se utilizó una FPGA de la familia SPARTAN II-E de XILINX, se eligió esta tarjeta ya que XILINX es el pionero y líder actual en tarjetas FPGA, además se eligió usar VHDL como se vio anteriormente.

SEPI-ESIME-IPN 69

Page 82: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación

Ya que se tiene el dispositivo en el cual se va a implementar el código para este caso la FPGA Spartan II-E se puede llevar a cabo la programación en VHDL ayudándonos de la implementación en C++ que se hizo anteriormente.

Se utiliza el software del fabricante de la FPGA, el ISE WEB PACK 6.0 para

programar en VHDL y para implementar este programa en la FPGA, con el mismo software se puede comprobar las salidas de la implementación en la tarjeta o se puede utilizar otro software del mismo fabricante que se llama MODEL SIM para la misma versión 6.0 del ISE WEB PACK.

Esta implementación nos da un codificador Hamming (7,4) programado en la FPGA

la cual nos representa una caja negra con 4 datos de entrada y 7 de salida, como se ve el diagrama esquemático resultante del programa en VHDL que se muestra en la figura 4-4 y 4-5.

Figura 4-4. Diagrama esquemático del codificador Hamming (7,4).

Figura 4-5. Diagrama esquemático del codificador Hamming programado (7,4).

A continuación se presenta un segmento de programa en VHDL que demuestra la

entidad del codificador, su entrada de 4 bits y salida de 7 bits: entity COD_HAM is Port ( ENTRADA : in std_logic_vector(0 to 3); SALIDA : out std_logic_vector(0 to 6)); end COD_HAM;

En la figura 4-6 vemos la simulación del codificador programado utilizando el software ModelSim.

SEPI-ESIME-IPN 70

Page 83: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación

Figura 4-6. Simulación del codificador Hamming (7,4).

Figura 4-7. Señales de entrada y salida del codificador Hamming (7,4)

A continuación en la figura 4-7 y 4-8 se muestra el diagrama esquemático para el decodificador y su simulación.

Figura 4-8. Diagrama esquemático del decodificador Hamming (7,4).

SEPI-ESIME-IPN 71

Page 84: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación

Figura 4-9. Diagrama esquemático del decodificador hamming programado (7,4).

A continuación se muestra el segmento de programa en VHDL que muestra la entidad del decodificador, su entrada de 7 bits y salida de 4 bits.

entity dec_ham is Port ( ENTCOD : in std_logic_vector(0 to 6); SALDEC : out std_logic_vector(0 to 3)); end dec_ham;

En la figura 4-9 y 4-10 vemos la simulación del decodificador programado utilizando el software ModelSim.

Figura 4-10. Simulación del codificador Hamming (7,4).

SEPI-ESIME-IPN 72

Page 85: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación

Figura 4-11. Señales de entrada y salida del decodificador Hamming (7,4).

Una vez que todas las simulaciones de los programas dan los resultados esperados, se está listo para implementar un codificador y decodificador Hamming (7,4) en la FPGA utilizando el ISE WEB PACK, si se desea comprobar en tiempo real con la FPGA también se puede utilizar el software ChipScopePro del mismo fabricante.

4.3.2 Código cíclico (7,4)

Siguiendo los mismos procedimientos que se ocuparon en la implementación del código Hamming (7,4) se desarrolló un programa en C++ que simula un codificador y decodificador cíclico.

Como se vio en el Capítulo 3 los códigos cíclicos son más fáciles de implementar en hardware, por lo que se facilitó la programación en VHDL a diferencia del código Hamming visto en el punto anterior.

El esquema del codificador se realizó por medio del circuito que se muestra en la figura 4-12.

Figura 4-12. Circuito de un codificador cíclico basado en h(x).

SEPI-ESIME-IPN 73

Page 86: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación

Como se vio en el Capítulo 3 este circuito implementa un codificador cíclico basado en h(x).

Para nuestro caso particular del código cíclico 7-4 utilizamos el siguiente polinomio generador.

g(x) = 1 + x + x3 (4-3)

A partir del cual, obtenemos h(x)

h(x) = 1 + x + x2 + x4 (4-4)

Una vez obtenido h(x) se puede implementar el circuito de codificación siguiendo el de la figura 4-13 como se ve a continuación

Figura 4-13. Circuito codificador para un código cíclico basado en h(x).

En la parte del decodificador se calcula los valores del síndrome los cuales nos

detectarán si existe o no error, mediante el siguiente circuito.

Figura 4-14. Circuito que calcula el síndrome para un código cíclico.

En la figura 4-14 tenemos el circuito que calcula el síndrome, pero hace falta la

detección del error y la corrección del mismo, por lo que se implementa un decodificador Meggit como se muestra en la figura 4-15.

SEPI-ESIME-IPN 74

Page 87: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación

Figura 4-15. Circuito de un decodificador Meggit

Una vez que se tienen todos los elementos del codificador y decodificador se

realizan la programación en VHDL, en donde podemos observar los diagramas esquemáticos del codificador y decodificador como se muestran en las figuras siguientes.

Figura 4-16. Diagrama esquemático del codificador cíclico (7-4).

Figura 4-17. Diagrama esquemático del codificador cíclico 7-4 programado.

SEPI-ESIME-IPN 75

Page 88: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación

Figura 4-18. Diagrama esquemático del decodificador cíclico (7-4).

Figura 4-19. Diagrama esquemático del decodificador cíclico (7-4) programado.

A continuación se muestran las entidades formadas en VHDL para el codificador y decodificador respectivamente. entity CICLICODE is Port ( ENTRADA : in std_logic_vector(0 to 3); SALIDA : out std_logic_vector(0 to 6)); end CICLICODE; entity ciclicdecoder is Port ( ENTRADA : in std_logic_vector(0 to 6); SALIDA : out std_logic_vector(0 to 3)); end ciclicdecoder;

En las siguientes figuras vemos la simulación que se realizó para los dos programas en VHDL utilizando el software ModelSim.

SEPI-ESIME-IPN 76

Page 89: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación

Figura 4-20. Señales de entrada y salida del codificador cíclico (7,4).

Figura 4-21. Señales de entrada y salida del decodificador cíclico (7,4).

De esta forma se tiene el software que implementa en una FPGA un código cíclico (7,4), a continuación se realiza la implementación de un código bloque lineal por medio de un algoritmo de codificación BCH y utilizando nuevamente la codificación Meggit.

4.3.3 Código BCH (15,11)

Un código BOSE – CHAUDHURI- HOCQUENQHEM (BCH) es un código cíclico con una gran variedad de longitudes de bloque, tasas de código y capacidad de corrección de errores. Los códigos BCH más comunes tienen una longitud de bloque n = 2m – 1, donde m es un entero igual o mayor que 3. Los polinomios generadores de los códigos BCH suelen venir tabulados según los valores de n, k, t. Tales polinomios se expresan en formato octal y al ser convertidos a binario el dígito de más a la derecha representa el coeficiente de grado cero del polinomio. Para este código el polinomio generador utilizado es g(x) = x3 + x + 1. Al igual que los códigos implementados anteriormente se realizan los mismos pasos, primero se realiza un programa en C++ para después poder codificar ese programa en VHDL para su implementación en la FPGA.

SEPI-ESIME-IPN 77

Page 90: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación

La función que se desarrolló para la simulación de un código (15-11) debido a su funcionamiento resultó ser una función general, en la que sólo deben ser cambiados los parámetros de n-k para el código e introducir el polinomio generador para el código correspondiente. De este modo logramos un módulo de software general en el cual sólo serán necesarios algunos cambios para poder implementar otro tipo de código.

Los diagramas esquemáticos para el codificador y decodificador se muestran en las

figuras siguientes.

Figura 4-22. Diagrama esquemático del codificador BCH (15-11).

Figura 4-23. Diagrama esquemático del decodificador Meggit (15-11).

Las entidades formadas en VHDL para el codificador y decodificador son respectivamente las siguientes: entity CODER is Port ( ENTRADA : in std_logic_vector(0 to 10); SALIDA : out std_logic_vector(0 to 14)); end CODER; entity DECODER is Port ( ENTRADA : in std_logic_vector(0 to 14); SALIDA : out std_logic_vector(0 to 10)); end DECODER;

Los diagramas esquemáticos programados para el codificador y decodificador 15-11 se muestran en las figuras siguientes:

SEPI-ESIME-IPN 78

Page 91: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación

Figura 4-24. Diagrama esquemático del codificador BCH (15-11) programado.

Figura 4-25. Diagrama esquemático del decodificador Meggit (15-11) programado.

En las siguientes figuras se muestran los resultados de las simulaciones, tanto para

el codificador como para el decodificador.

SEPI-ESIME-IPN 79

Page 92: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Capítulo 4 Diseño e implementación

Figura 4-26. Señales de entrada y salida del codificador BCH (15,11).

Figura 4-27. Señales de entrada y salida del decodificador Meggit (15,11).

De esta forma se implementan tres diferentes técnicas de control de error en códigos de bloque. Estos módulos de software creados están listos para ser implementados en una FPGA o en cualquier otro dispositivo lógico programable que soporte VHDL, el cual después de ser programado con alguno de estos módulos, se comportará como un codificador o decodificador, en el cual solo se tendrá que reprogramar para utilizar otra técnica de control de error diferente a la que esté utilizando, esta facilidad de reconfiguración es uno de los principales objetivos del radio definido por software en lo que respecta al procesamiento de señales y representaría una gran ventaja debido a la evolución tan rápida de las telecomunicaciones.

SEPI-ESIME-IPN 80

Page 93: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Conclusiones

Conclusiones

En este trabajo se logró la implementación de diferentes técnicas de control de error, utilizando códigos de bloque lineal, como son los códigos Hamming, códigos cíclicos y códigos BCH.

Los códigos más adecuados para su implementación en hardware son los códigos

cíclicos, debido a esto la programación en el lenguaje de descripción de hardware resultó ser más sencilla que la de los códigos Hamming o BCH, aunque en este trabajo el último de los códigos que se implementaron fue un código BCH (15-11) en el que se logró un programa general, ya que con sólo unos cambios en parámetros de la función del codificador se pueden implementar códigos de diferente longitud, por lo que no solo llegamos al diseño de diferentes módulos de software, sino que llegamos a un solo módulo de software general el cual puede modificarse para la implementación de códigos de diferente longitud.

En la parte de la decodificación de los códigos, la forma más viable de implementar

un decodificador es utilizando la decodificación Meggit, ya que emplea registros de corrimiento como los códigos cíclicos, una vez implementado el módulo encargado de detectar el síndrome, sólo resta implementar el circuito del decodificador Meggit para poder corregir el error, pero este depende de la longitud del código, ya que el tamaño del registro de corrimiento cambiará así como el circuito de corrección de la palabra código.

Los programas que resultaron de este trabajo para códigos cíclicos y BCH utilizan

decodificador Meggit, estos programas están construidos de tal forma que sólo con hacer el cambio en el tamaño del arreglo que representa el registro de corrimiento y de cambiar las condiciones necesarias para hacer la corrección de error se tiene un módulo que nos representa otro decodificador diferente, por lo que puede servir de base para la construcción de más módulos de software que implementen distintos decodificadores.

Los resultados de este trabajo son importantes en el estudio del procesamiento de

señales en el radio definido por software, ya que como se mencionó en el Capítulo 2 no todo el proceso de comunicación puede implementarse en software, pero una de las etapas importantes en este proceso es el de detección y control de error, ya que los codificadores y decodificadores nos dan un porcentaje mayor de eficiencia en la transmisión del mensaje.

Lo más importante de implementar un diseño en un dispositivo lógico programable

es que utilizando el mismo hardware, en este caso la misma tarjeta FPGA, se pueden tener implementadas diferentes técnicas de control de error, así con un mismo dispositivo tenemos una gran variedad de codificadores y decodificadores. Esta es la idea principal del radio definido por software.

De este modo se trata de hacer conciencia en la necesidad de un radio definido por

software, ya que cada día que pasa la tecnología en comunicaciones móviles e inalámbricas avanza y no siempre se utilizarán los mismos dispositivos de transmisión y recepción, por

SEPI-ESIME-IPN 81

Page 94: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Conclusiones lo cual para evitar estos cambios el tener un dispositivo reconfigurable sería de gran eficiencia y utilidad.

Recomendaciones para trabajos futuros Este trabajo se centró en el estudio de algunas técnicas de control de error y sería interesante que trabajos futuros se encaminaran a las demás etapas de la transmisión de un mensaje, como por ejemplo la modulación. Esta etapa también se puede programar y de este modo se puede ir armando un radio definido por software completo y sobre todo con muchas variantes. Este trabajo sirve como base para la implementación de otras técnicas de control de error, como los códigos convolucionales que son los utilizados actualmente en telefonía celular, así como los turbo códigos que aparecieron en el año de 1993 y son utilizados en diferentes estándares de comunicaciones satelitales y terrestres.

SEPI-ESIME-IPN 82

Page 95: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Anexo A. Programas que simulan códigos de bloque en C++ 1.- Programa desarrollado para simular un codificador y decodificador Hamming para el código (7,4). /* INSTITUTO POLITECNICO NACIONAL SECCION DE ESTUDIOS DE POSGRADO E INVESTIGACION ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA MAESTRIA EN CIENCIAS EN INGENIERIA EN TELECOMUNICACIONES PROGRAMA QUE SIMULA UN CODIFICADOR Y DECODIFICADOR HAMMING PARA EL CODIGO (7,4) HECHO POR: ING. DAVID VAZQUEZ ALVAREZ */ #include<iostream.h> #include<conio.h> #define N 7 #define K 4 /* SIMULACION DE UN CODIGO CICLICO (N,K) N: LONGITUD DE LA PALABRA CODIGO K: LONGITUD DE LA PALABRA A CODIFICAR U(X): VECTOR DE INFORMACION O PALABRA A CODIFICAR V(X): PALABRA CODIFICADA S(X): SINDROME RX(X): PALABRA CODIGO CON ERROR R(X): PALABRA DECODIFICADA Y CORREGIDA */ ////////////////////////////////////////////////////////// ///// FUNCION QUE LEE EL VECTOR DE INFORMACION U(X) ////// ////////////////////////////////////////////////////////// void LeeInformacion(int U[K]) { int i; cout<<"\n INTRODUCE EL VECTOR DE INFORMACION U(X): \n\n"; for(i=0; i<K; i++) { cout << "\t\t\tU[" << i << "]= "; cin >> U[i]; } }//FIN DE FUNCION ////////////////////////////////////////////////////// ///// FUNCION QUE IMPRIME LA PALABRA A CODIFICAR ///// ////////////////////////////////////////////////////// void ImprimePalabra(int U[K]) { cout<<"\n\n VECTOR INFORMACION:\n\n\t\t\t"; for(int i=0; i<K; i++) {

83

Page 96: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

cout<<U[i]; } }//FIN DE FUNCION /////////////////////////////////////////////////////////////////////// ///// FUNCION EN DONDE SE IMPLEMENTA UN ALGORITMO ///////////////////// ///// PARA UTILIZAR UN CODIFICADOR HAMMING (7,4) ///////////////////// /////////////////////////////////////////////////////////////////////// void Codificador(int U[K], int V[N]) { V[0] = U[0] ^ U[2] ^ U[3]; V[1] = U[0] ^ U[1] ^ U[2]; V[2] = U[1] ^ U[2] ^ U[3]; V[3] = U[0]; V[4] = U[1]; V[5] = U[2]; V[6] = U[3]; }//FIN DE FUNCION ///////////////////////////////////////////////////// ///// FUNCION QUE IMPRIME LA PALABRA CODIFICADA ///// ///////////////////////////////////////////////////// void ImprimeCodigo(int V[N]) { cout<<"\n\n PALABRA CODIGO:\n\n\t\t\t"; for(int i=0; i<N; i++) { cout<<V[i]; } }//FIN DE FUNCION //////////////////////////////////////////////////////////////////// ///// FUNCION QUE INTRODUCE UN ERROR A LA PALABRA CODIGO /////////// ///// SELECCIONANDO EL BIT EN DONDE SE QUIERE APLICAR EL ERROR ///// //////////////////////////////////////////////////////////////////// void IntroduceError(int V[N], int e) { if(V[e] == 0) { V[e] = 1; } else { V[e] = 0; } }//FIN DE FUNCION ////////////////////////////////////////////////////////////////////////// ///// FUNCION QUE IMPRIME LA PALABRA CODIGO CON EL ERROR INTRODUCIDO ///// ////////////////////////////////////////////////////////////////////////// void ImprimeError(int V[N]) { int i; cout<<"\n\n PALABRA CODIGO CON ERROR:\n\n\t\t\t";

84

Page 97: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

for(i=0; i<N; i++) { cout<<V[i]; } }//FIN DE FUNCION //////////////////////////////////////////////////////////////// ///// FUNCION EN DONDE SE IMPLEMENTA UN ALGORITMO ////////////// ///// PARA UTILIZAR UN DECODIFICADOR HAMMING (7,4) //////////// //////////////////////////////////////////////////////////////// void Decodificador(int V[N], int VCR[N]) { int S[N-K], e[16][7]; int i, j, k, suma; //DETERMINA LOS VALORES DEL SINDROME S[0] = V[0] ^ V[3] ^ V[5] ^ V[6]; S[1] = V[1] ^ V[3] ^ V[4] ^ V[5]; S[2] = V[2] ^ V[4] ^ V[5] ^ V[6]; cout<<"\n\n VALORES DEL SINDROME:\n"; for(k = 0; k < 3; k++) { cout<<"\n\t\t\t S["<<k<<"]="<<S[k]; } ///////////////////////////////////////////////////////////////////////////// if(S[0] == 1 || S[1] == 1 || S[2] == 1) { int E[16][4] = {0,0,0,0, 0,0,0,1, 0,0,1,0, 0,0,1,1, 0,1,0,0, 0,1,0,1, 0,1,1,0, 0,1,1,1, 1,0,0,0, 1,0,0,1, 1,0,1,0, 1,0,1,1, 1,1,0,0, 1,1,0,1, 1,1,1,0, 1,1,1,1}; for(i = 0; i < 16; i++) { //CALCULA EL VALOR DE E[0] suma = E[i][0] ^ E[i][2] ^ E[i][3]; if(S[0]==1) { if(suma == 0) { e[i][0] = 1; }

85

Page 98: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

else { e[i][0] = 0; } } else { if(suma == 0) { e[i][0] = 0; } else { e[i][0] = 1; } } //CALCULA EL VALOR DE E[1] suma = E[i][0] ^ E[i][1] ^ E[i][2]; if(S[1] == 1) { if(suma == 0) { e[i][1] = 1; } else { e[i][1] = 0; } } else { if(suma == 0) { e[i][1] = 0; } else { e[i][1] = 1; } } //CALCULA EL VALOR DE E[2] suma = E[i][1] ^ E[i][2] ^ E[i][3]; if(S[2] == 1) { if(suma == 0) { e[i][2] = 1; } else { e[i][2] = 0; } } else { if(suma == 0)

86

Page 99: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

{ e[i][2] = 0; } else { e[i][2] = 1; } } e[i][3] = E[i][0]; e[i][4] = E[i][1]; e[i][5] = E[i][2]; e[i][6] = E[i][3]; }//CIERRA EL PRIMER FOR //IMPRIME LA MATRIZ CON LOS RESULTADOS DE CORRECCION DE ERROR Y DETECTA EL //VECTOR ERROR CON MENOS ERRORES UNO int acumula, renglon; cout<<"\n\n\t MATRIZ CON LAS POSIBLES CORRECCIONES\n"; cout<<"\n\n\t\tITERACION VECTOR ERROR NUM. DE 1"; for(i = 0; i < 16; i++) { acumula = 0; cout<<"\n\t\t "<<i<<" "; for(j = 0; j < 7; j++) { if(e[i][j] == 1) { acumula = acumula + 1; } cout<<e[i][j]; } if(acumula == 1) { renglon = i; } cout<<" "<<acumula; getch(); }//CIERRA EL PRIMER FOR cout<<"\n\n\t EL VECTOR ERROR ES LA FILA: "<<renglon; VCR[0] = V[0] ^ e[renglon][0]; VCR[1] = V[1] ^ e[renglon][1]; VCR[2] = V[2] ^ e[renglon][2]; VCR[3] = V[3] ^ e[renglon][3]; VCR[4] = V[4] ^ e[renglon][4]; VCR[5] = V[5] ^ e[renglon][5]; VCR[6] = V[6] ^ e[renglon][6]; ///////////////////////////////////////////////////////////////////////// }//FIN DEL IF else { VCR[0] = V[0]; VCR[1] = V[1];

87

Page 100: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

VCR[2] = V[2]; VCR[3] = V[3]; VCR[4] = V[4]; VCR[5] = V[5]; VCR[6] = V[6]; }//FIN DEL ELSE }//FIN DE FUNCION //////////////////////////////////////////////////////////// ///// FUNCION QUE RECUPERA LA INFORMACION DECODIFICADA ///// //////////////////////////////////////////////////////////// void RecuperaInformacion(int U[K], int R[N]) { U[0] = R[3]; U[1] = R[4]; U[2] = R[5]; U[3] = R[6]; }//FIN DE FUNCION void main(void) { int U[K], V[N], VCR[N], e, R[K]; clrscr(); LeeInformacion(U); ImprimePalabra(U); Codificador(U,V); ImprimeCodigo(V); // PREGUNTA EN QUE BIT SE DESEA PROVOCAR EL ERROR cout<<"\n\n EN QUE BIT DESEAS INTRODUCIR EL ERROR, [1,2,3,4,5,6,7]....."; cin>>e; IntroduceError(V,e-1); ImprimeError(V); Decodificador(V,VCR); ImprimeCodigo(VCR); RecuperaInformacion(R,VCR); ImprimePalabra(R); getch(); }//FIN DE MAIN 2.- Programa desarrollado para simular un codificador y decodificador Cíclico para el código (7,4). /* INSTITUTO POLITECNICO NACIONAL SECCION DE ESTUDIOS DE POSGRADO E INVESTIGACION ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA MAESTRIA EN CIENCIAS EN INGENIERIA EN TELECOMUNICACIONES PROGRAMA QUE SIMULA UN CODIFICADOR Y DECODIFICADOR CICLICO (7,4) HECHO POR: ING. DAVID VAZQUEZ ALVAREZ */ #include<iostream.h> #include<conio.h> #define N 7 #define K 4

88

Page 101: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

/* SIMULACION DE UN CODIGO CICLICO (N,K) N: LONGITUD DE LA PALABRA CODIGO K: LONGITUD DE LA PALABRA A CODIFICAR U(X): VECTOR DE INFORMACION O PALABRA A CODIFICAR V(X): PALABRA CODIFICADA S(X): SINDROME RX(X): PALABRA CODIGO CON ERROR R(X): PALABRA DECODIFICADA Y CORREGIDA */ ////////////////////////////////////////////////////////// ///// FUNCION QUE LEE EL VECTOR DE INFORMACION U(X) ////// ////////////////////////////////////////////////////////// void LeeInformacion(int U[K]) { int i; cout<<"\n INTRODUCE EL VECTOR DE INFORMACION U(X): \n\n"; for(i=0; i<K; i++) { cout << "\t\t\tU[" << i << "]= "; cin >> U[i]; } }//FIN DE FUNCION ////////////////////////////////////////////////////// ///// FUNCION QUE IMPRIME LA PALABRA A CODIFICAR ///// ////////////////////////////////////////////////////// void ImprimePalabra(int U[K]) { cout<<"\n\n VECTOR INFORMACION:\n\n\t\t\t"; for(int i=0; i<K; i++) { cout<<U[i]; } }//FIN DE FUNCION /////////////////////////////////////////////////////////////////////// ///// FUNCION EN DONDE SE IMPLEMENTA UN ALGORITMO ///////////////////// ///// PARA UTILIZAR UN CODIFICADOR CICLICO (7,4) ///////////////////// ///// UTILIZANDO UN POLINOMIO G(X) = X^3 + X + 1, ///////////////////// ///// A PARTIR DE G(X), CALCULAMOS H(X) = X^4 + X^2 + X + 1 /////////// ///// PARA IMPLEMENTAR EL CIRCUITO DEL CODIFICADOR BASADO EN H(X) ///// /////////////////////////////////////////////////////////////////////// void Codificador(int U[K], int V[N]) { int cont=0, i; //CALCULA LOS BITS DE REDUNDANCIA Y LOS A¥ADE EN //V(X) QUE ES LA PALABRA CODIGO for (i=N-1; i>=0; i--) { //DEJA LOS ULTIMOS CUATRO BITS DE INFORMACION if(i > N-K-1) { V[i]=U[N-K-cont]; cont++;

89

Page 102: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

} //CALCULA LOS BITS DE REDUNDANCIA B(X) else { //CIRCUITO BASADO EN H(X) PARA OBTENER LOS BITS DE REDUNDANCIA V[i] = U[3] ^ U[2] ^ U[1]; for(int j=N-K; j>=1; j--) { U[j] = U[j-1]; } U[0] = V[i]; } } }//FIN DE FUNCION ///////////////////////////////////////////////////// ///// FUNCION QUE IMPRIME LA PALABRA CODIFICADA ///// ///////////////////////////////////////////////////// void ImprimeCodigo(int V[N]) { cout<<"\n\n PALABRA CODIGO:\n\n\t\t\t"; for(int i=0; i<N; i++) { cout<<V[i]; } }//FIN DE FUNCION //////////////////////////////////////////////////////////////////// ///// FUNCION QUE INTRODUCE UN ERROR A LA PALABRA CODIGO /////////// ///// SELECCIONANDO EL BIT EN DONDE SE QUIERE APLICAR EL ERROR ///// //////////////////////////////////////////////////////////////////// void IntroduceError(int V[N], int e) { if(V[e] == 0) { V[e] = 1; } else { V[e] = 0; } }//FIN DE FUNCION ////////////////////////////////////////////////////////////////////////// ///// FUNCION QUE IMPRIME LA PALABRA CODIGO CON EL ERROR INTRODUCIDO ///// ////////////////////////////////////////////////////////////////////////// void ImprimeError(int V[N]) { int i; cout<<"\n\n PALABRA CODIGO CON ERROR:\n\n\t\t\t"; for(i=0; i<N; i++) { cout<<V[i];

90

Page 103: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

} }//FIN DE FUNCION //////////////////////////////////////////////////////////////// ///// FUNCION EN DONDE SE IMPLEMENTA UN ALGORITMO ////////////// ///// PARA UTILIZAR UN DECODIFICADOR MEGGIT UTILIZANDO ///////// ///// UTILIZANDO EL CALCULO DEL SINDROME POR MEDIO DE G(X) ///// //////////////////////////////////////////////////////////////// void Decodificador(int V[N], int VCR[N]) { int S[3], Aux[3], R[N], RX[N], BUF[N], BUFX[N]; int i, j; //ASIGNAMOS AL VECTOR R(X) QUE ES EL VECTOR RECIBIDO EL VECTOR V(X) for (i=0, j=N-1; i<N; i++, j--) { R[j] = V[i]; } //INCIALIZAMOS CON CERO LOS ELEMENTOS DEL VECTOR BUFFER for(i=0; i<7; i++) { BUF[i] = 0; } //INICIALIZAMOS CON CERO LOS ELEMENTOS DEL SINDROME for (i=0; i<3; i++) { S[i] = 0; } //IMPRIME LOS VALORES INICIALES DEL SINDROME Y DEL BUFFER cout<<"\n\n ITERACION\t\tR(X)\t\tSINDROME\tBUFFER\n"; cout<<"\n\t0\t\t-\t\t"<<S[0]<<S[1]<<S[2]<<"\t\t"<<BUF[0]<<BUF[1]<<BUF[2]<<BUF[3]<<BUF[4]<<BUF[5]<<BUF[6]; getch(); //REALIZA EL CALCULO DEL SINDROME for (i=0; i<14; i++) { //ESTA PARTE PONE EN LOS REGISTROS LA PALABRA CODIGO Y DETERMINA LOS //PRIMEROS 7 VALORES DEL SINDROME, HASTA R(X) if(i<=6) { //ASIGNAMOS A UN AUXILIAR LOS VALORES DE S Aux[0] = S[0]; Aux[1] = S[1]; Aux[2] = S[2]; S[0] = Aux[2] ^ R[i]; S[1] = Aux[0] ^ Aux[2]; S[2] = Aux[1]; //ASIGNA AL BUFFER

91

Page 104: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

for(j=0; j<7; j++) { BUFX[j] = BUF[j]; } BUF[0] = R[i]; BUF[1] = BUFX[0]; BUF[2] = BUFX[1]; BUF[3] = BUFX[2]; BUF[4] = BUFX[3]; BUF[5] = BUFX[4]; BUF[6] = BUFX[5]; //IMPRIME EN PANTALLA LOS VALORES DEL SINDROME Y EL BUFFER cout<<"\n\t"<<i+1<<"\t\t"<<R[i]<<"\t\t" <<S[0]<<S[1]<<S[2]<<"\t\t"<<BUF[0]<<BUF[1]<<BUF[2]<<BUF[3]<<BUF[4]<<BUF[5]<<BUF[6]; getch(); } else { //CORRECCION DE LA PALABRA CODIGO //ASIGNAMOS A UN AUXILIAR LOS VALORES DE S Aux[0] = S[0]; Aux[1] = S[1]; Aux[2] = S[2]; S[0] = Aux[2] ^ (Aux[0] & !Aux[1] & Aux[2]); S[1] = Aux[0] ^ Aux[2]; S[2] = Aux[1]; //ASIGNA AL BUFFER for(j=0; j<7; j++) { BUFX[j] = BUF[j]; } BUF[0] = BUFX[6] ^ (Aux[0] & !Aux[1] & Aux[2]); BUF[1] = BUFX[0]; BUF[2] = BUFX[1]; BUF[3] = BUFX[2]; BUF[4] = BUFX[3]; BUF[5] = BUFX[4]; BUF[6] = BUFX[5]; //IMPRIME EN PANTALLA LOS VALORES DEL SINDROME Y LA PALABRA CORREGIDA cout<<"\n\t"<<i+1<<"\t\t-"<<"\t\t" <<S[0]<<S[1]<<S[2]<<"\t\t"<<BUF[0]<<BUF[1]<<BUF[2]<<BUF[3]<<BUF[4]<<BUF[5]<<BUF[6]; getch(); } } //ASIGNA EL VECTOR CORREGIDO EN EL BUFFER A VCR for(i=0; i<N; i++) { VCR[i] = BUF[i]; }

92

Page 105: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

}//FIN DE FUNCION //////////////////////////////////////////////////////////// ///// FUNCION QUE RECUPERA LA INFORMACION DECODIFICADA ///// //////////////////////////////////////////////////////////// void RecuperaInformacion(int U[K], int R[N]) { U[0] = R[3]; U[1] = R[4]; U[2] = R[5]; U[3] = R[6]; }//FIN DE FUNCION void main(void) { int U[K], V[N], VCR[N], e, R[K]; clrscr(); LeeInformacion(U); ImprimePalabra(U); Codificador(U,V); ImprimeCodigo(V); // PREGUNTA EN QUE BIT SE DESEA PROVOCAR EL ERROR cout<<"\n\n EN QUE BIT DESEAS INTRODUCIR EL ERROR, [1,2,3,4,5,6,7]....."; cin>>e; IntroduceError(V,e-1); ImprimeError(V); Decodificador(V,VCR); ImprimeCodigo(VCR); RecuperaInformacion(R,VCR); ImprimePalabra(R); getch(); }//FIN DE MAIN 3.- Programa desarrollado para simular un codificador y decodificador para el código (15,11). /* INSTITUTO POLITECNICO NACIONAL SECCION DE ESTUDIOS DE POSGRADO E INVESTIGACION ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA MAESTRIA EN CIENCIAS EN INGENIERIA EN TELECOMUNICACIONES PROGRAMA QUE SIMULA UN CODIFICADOR Y DECODIFICADOR PARA EL CODIGO (15,11) HECHO POR: ING. DAVID VAZQUEZ ALVAREZ */ #include<iostream.h> #include<conio.h> #define N 15 #define K 11 /* SIMULACION DE UN CODIGO CICLICO (N,K) N: LONGITUD DE LA PALABRA CODIGO K: LONGITUD DE LA PALABRA A CODIFICAR U(X): VECTOR DE INFORMACION O PALABRA A CODIFICAR

93

Page 106: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

V(X): PALABRA CODIFICADA S(X): SINDROME RX(X): PALABRA CODIGO CON ERROR R(X): PALABRA DECODIFICADA Y CORREGIDA */ ////////////////////////////////////////////////////////// ///// FUNCION QUE LEE EL VECTOR DE INFORMACION U(X) ////// ////////////////////////////////////////////////////////// void LeeInformacion(int U[K]) { int i; cout<<"\n INTRODUCE EL VECTOR DE INFORMACION U(X): \n\n"; for(i=0; i<K; i++) { cout << "\t\t\tU[" << i << "]= "; cin >> U[i]; } }//FIN DE FUNCION ////////////////////////////////////////////////////// ///// FUNCION QUE IMPRIME LA PALABRA A CODIFICAR ///// ////////////////////////////////////////////////////// void ImprimePalabra(int U[K]) { cout<<"\n\n VECTOR INFORMACION:\n\n\t\t\t"; for(int i=0; i<K; i++) { cout<<U[i]; } }//FIN DE FUNCION /////////////////////////////////////////////////////////////////////// ///// FUNCION EN DONDE SE IMPLEMENTA UN ALGORITMO ///////////////////// ///// PARA UTILIZAR UN CODIFICADOR BCH (15,11) /////////////////////// ///// UTILIZANDO UN POLINOMIO G(X) = X^3 + X + 1, ///////////////////// /////////////////////////////////////////////////////////////////////// void Codificador(int U[K], int V[N]) { /* * CALCULA LOS BITS DE REDUNDANCIA bb[], LOS COEFICIENTES DE b(x). */ int bb[N-K]; int g[5]={1,1,0,0,1}; int i, j; int retro; for (i = 0; i < N - K; i++) { bb[i] = 0; } /*inicializa todos los valores del vector de redundancia en 0*/ for (i = K - 1; i >= 0; i--) { retro = U[i] ^ bb[N - K - 1];

94

Page 107: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

if (retro != 0) { for (j = N - K - 1; j > 0; j--) if (g[j] != 0) bb[j] = bb[j - 1] ^ retro; else bb[j] = bb[j - 1]; bb[0] = g[0] && retro; } else { for (j = N - K - 1; j > 0; j--) bb[j] = bb[j - 1]; bb[0] = 0; } } for (i = 0; i < N - K; i++) { V[i] = bb[i]; } for (i = 0; i < K; i++) { V[i + N - K] = U[i]; } }//FIN DE FUNCION ///////////////////////////////////////////////////// ///// FUNCION QUE IMPRIME LA PALABRA CODIFICADA ///// ///////////////////////////////////////////////////// void ImprimeCodigo(int V[N]) { cout<<"\n\n PALABRA CODIGO:\n\n\t\t\t"; for(int i=0; i<N; i++) { cout<<V[i]; } }//FIN DE FUNCION //////////////////////////////////////////////////////////////////// ///// FUNCION QUE INTRODUCE UN ERROR A LA PALABRA CODIGO /////////// ///// SELECCIONANDO EL BIT EN DONDE SE QUIERE APLICAR EL ERROR ///// //////////////////////////////////////////////////////////////////// void IntroduceError(int V[N], int e) { if(V[e] == 0) { V[e] = 1; } else { V[e] = 0; } }//FIN DE FUNCION

95

Page 108: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

////////////////////////////////////////////////////////////////////////// ///// FUNCION QUE IMPRIME LA PALABRA CODIGO CON EL ERROR INTRODUCIDO ///// ////////////////////////////////////////////////////////////////////////// void ImprimeError(int V[N]) { int i; cout<<"\n\n PALABRA CODIGO CON ERROR:\n\n\t\t\t"; for(i=0; i<N; i++) { cout<<V[i]; } }//FIN DE FUNCION //////////////////////////////////////////////////////////////// ///// FUNCION EN DONDE SE IMPLEMENTA UN ALGORITMO ////////////// ///// PARA UTILIZAR UN DECODIFICADOR MEGGIT (15,11) /////////// ///// UTILIZANDO EL CALCULO DEL SINDROME POR MEDIO DE G(X) ///// //////////////////////////////////////////////////////////////// void Decodificador(int V[N], int VCR[N]) { int S[N-K], Aux[N-K], R[N], BUF[N], BUFX[N]; int i, j; //ASIGNAMOS AL VECTOR R(X) QUE ES EL VECTOR RECIBIDO EL VECTOR V(X) for (i=0, j=N-1; i<N; i++, j--) { R[j] = V[i]; } //INICIALIZAMOS CON CERO LOS ELEMENTOS DEL VECTOR BUFFER for(i=0; i<N; i++) { BUF[i] = 0; } //INICIALIZAMOS CON CERO LOS ELEMENTOS DEL SINDROME for (i=0; i<N-K; i++) { S[i] = 0; } //IMPRIME LOS VALORES INICIALES DEL SINDROME Y DEL BUFFER cout<<"\n\n ITERACION\t\tR(X)\t\tSINDROME\tBUFFER\n"; cout<<"\n\t0\t\t-\t\t"<<S[0]<<S[1]<<S[2]<<S[3]<<"\t\t"<<BUF[0]<<BUF[1]<<BUF[2]<<BUF[3]<<BUF[4]<<BUF[5]<<BUF[6]<<BUF[7]<<BUF[8]<<BUF[9]<<BUF[10]<<BUF[11]<<BUF[12]<<BUF[13]<<BUF[14]; getch(); //REALIZA EL CALCULO DEL SINDROME for (i = 0; i <30; i++) {

96

Page 109: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

//ESTA PARTE PONE EN LOS REGISTROS LA PALABRA CODIGO Y DETERMINA LOS //PRIMEROS 15 VALORES DEL SINDROME, HASTA R(X) if(i <= 14) { //ASIGNAMOS A UN AUXILIAR LOS VALORES DE S Aux[0] = S[0]; Aux[1] = S[1]; Aux[2] = S[2]; Aux[3] = S[3]; S[0] = Aux[3] ^ R[i]; S[1] = Aux[0] ^ Aux[3]; S[2] = Aux[1]; S[3] = Aux[2]; //ASIGNA AL BUFFER for(j=0; j<N; j++) { BUFX[j] = BUF[j]; } BUF[0] = R[i]; BUF[1] = BUFX[0]; BUF[2] = BUFX[1]; BUF[3] = BUFX[2]; BUF[4] = BUFX[3]; BUF[5] = BUFX[4]; BUF[6] = BUFX[5]; BUF[7] = BUFX[6]; BUF[8] = BUFX[7]; BUF[9] = BUFX[8]; BUF[10] = BUFX[9]; BUF[11] = BUFX[10]; BUF[12] = BUFX[11]; BUF[13] = BUFX[12]; BUF[14] = BUFX[13]; //IMPRIME EN PANTALLA LOS VALORES DEL SINDROME Y EL BUFFER cout<<"\n\t"<<i+1<<"\t\t"<<R[i]<<"\t\t" <<S[0]<<S[1]<<S[2]<<S[3]<<"\t\t"<<BUF[0]<<BUF[1]<<BUF[2]<<BUF[3]<<BUF[4]<<BUF[5]<<BUF[6]<<BUF[7]<<BUF[8]<<BUF[9]<<BUF[10]<<BUF[11]<<BUF[12]<<BUF[13]<<BUF[14]; getch(); } else { //CORRECCION DE LA PALABRA CODIGO //ASIGNAMOS A UN AUXILIAR LOS VALORES DE S Aux[0] = S[0]; Aux[1] = S[1]; Aux[2] = S[2]; Aux[3] = S[3]; S[0] = Aux[3] ^ (Aux[0] & !Aux[1] & !Aux[2] & Aux[3]); S[1] = Aux[0] ^ Aux[3]; S[2] = Aux[1];

97

Page 110: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

S[3] = Aux[2]; //ASIGNA AL BUFFER for(j=0; j<N; j++) { BUFX[j] = BUF[j]; } BUF[0] = BUFX[14] ^ (Aux[0] & !Aux[1] & !Aux[2] & Aux[3]); BUF[1] = BUFX[0]; BUF[2] = BUFX[1]; BUF[3] = BUFX[2]; BUF[4] = BUFX[3]; BUF[5] = BUFX[4]; BUF[6] = BUFX[5]; BUF[7] = BUFX[6]; BUF[8] = BUFX[7]; BUF[9] = BUFX[8]; BUF[10] = BUFX[9]; BUF[11] = BUFX[10]; BUF[12] = BUFX[11]; BUF[13] = BUFX[12]; BUF[14] = BUFX[13]; //IMPRIME EN PANTALLA LOS VALORES DEL SINDROME Y LA PALABRA CORREGIDA cout<<"\n\t"<<i+1<<"\t\t-"<<"\t\t" <<S[0]<<S[1]<<S[2]<<S[3]<<"\t\t"<<BUF[0]<<BUF[1]<<BUF[2]<<BUF[3]<<BUF[4]<<BUF[5]<<BUF[6]<<BUF[7]<<BUF[8]<<BUF[9]<<BUF[10]<<BUF[11]<<BUF[12]<<BUF[13]<<BUF[14]; getch(); } } //ASIGNA EL VECTOR CORREGIDO EN EL BUFFER A VCR for(i = 0; i < N; i++) { VCR[i] = BUF[i]; } }//FIN DE FUNCION //////////////////////////////////////////////////////////// ///// FUNCION QUE RECUPERA LA INFORMACION DECODIFICADA ///// //////////////////////////////////////////////////////////// void RecuperaInformacion(int U[K], int R[N]) { U[0] = R[4]; U[1] = R[5]; U[2] = R[6]; U[3] = R[7]; U[4] = R[8]; U[5] = R[9]; U[6] = R[10]; U[7] = R[11]; U[8] = R[12]; U[9] = R[13]; U[10] = R[14];

98

Page 111: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

}//FIN DE FUNCION void main(void) { int U[K], V[N], VCR[N], e, R[K]; clrscr(); LeeInformacion(U); ImprimePalabra(U); Codificador(U,V); ImprimeCodigo(V); // PREGUNTA EN QUE BIT SE DESEA PROVOCAR EL ERROR cout<<"\n\n EN QUE BIT DESEAS INTRODUCIR EL ERROR,\n\n\t [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]....."; cin>>e; IntroduceError(V,e-1); ImprimeError(V); Decodificador(V,VCR); ImprimeCodigo(VCR); RecuperaInformacion(R,VCR); ImprimePalabra(R); getch(); }//FIN DE MAIN

99

Page 112: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Anexo B. Programas que implementan códigos de bloque en VHDL 1.- Programa desarrollado para implementar un codificador Hamming para el código (7,4). --PROGRAMA QUE IMPLEMENTA UN CODIFICADOR HAMMING (7,4) --HECHO POR: ING. DAVID VÁZQUEZ ALVAREZ library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; -- Uncomment the following lines to use the declarations that are -- provided for instantiating Xilinx primitive components. --library UNISIM; --use UNISIM.VComponents.all; entity COD_HAM is Port ( ENTRADA : in std_logic_vector(0 to 3); SALIDA : out std_logic_vector(0 to 6)); end COD_HAM; architecture Behavioral of COD_HAM is begin SALIDA(0) <= ENTRADA(0) XOR ENTRADA(2) XOR ENTRADA(3); SALIDA(1) <= ENTRADA(0) XOR ENTRADA(1) XOR ENTRADA(2); SALIDA(2) <= ENTRADA(1) XOR ENTRADA(2) XOR ENTRADA(3); SALIDA(3) <= ENTRADA(0); SALIDA(4) <= ENTRADA(1); SALIDA(5) <= ENTRADA(2); SALIDA(6) <= ENTRADA(3); end Behavioral; 2.- Programa desarrollado para implementar un decodificador Hamming para el código (7,4). --PROGRAMA QUE IMPLEMENTA UN DECODIFICADOR HAMMING (7,4) --HECHO POR: ING. DAVID VÁZQUEZ ALVAREZ library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL;

100

Page 113: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

use IEEE.STD_LOGIC_UNSIGNED.ALL; -- Uncomment the following lines to use the declarations that are -- provided for instantiating Xilinx primitive components. --library UNISIM; --use UNISIM.VComponents.all; entity dec_ham is Port ( ENTCOD : in std_logic_vector(0 to 6); SALDEC : out std_logic_vector(0 to 3)); end dec_ham; architecture Behavioral of dec_ham is SIGNAL S: std_logic_vector(0 to 2); SIGNAL E: std_logic_vector(0 to 6); SIGNAL ER: std_logic_vector(0 to 6); SIGNAL SN: std_logic_vector(0 to 2); begin -- CALCULA EL VALOR DEL SINDROME S(0) <= ENTCOD(0) XOR ENTCOD(3) XOR ENTCOD(5) XOR ENTCOD(6); S(1) <= ENTCOD(1) XOR ENTCOD(3) XOR ENTCOD(4) XOR ENTCOD(5); S(2) <= ENTCOD(2) XOR ENTCOD(4) XOR ENTCOD(5) XOR ENTCOD(6); SN(0) <= NOT (S(0)); SN(1) <= NOT (S(1)); SN(2) <= NOT (S(2)); E(0) <= S(0) AND SN(1) AND SN(2); E(1) <= SN(0) AND S(1) AND SN(2); E(2) <= SN(0) AND SN(1) AND S(2); E(3) <= S(0) AND S(1) AND SN(2); E(4) <= SN(0) AND S(1) AND S(2); E(5) <= S(0) AND S(1) AND S(2); E(6) <= S(0) AND SN(1) AND S(2); ER(0) <= E(0) XOR ENTCOD(0); ER(1) <= E(1) XOR ENTCOD(1); ER(2) <= E(2) XOR ENTCOD(2); ER(3) <= E(3) XOR ENTCOD(3); ER(4) <= E(4) XOR ENTCOD(4); ER(5) <= E(5) XOR ENTCOD(5); ER(6) <= E(6) XOR ENTCOD(6);

101

Page 114: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

SALDEC(0) <= ER(3); SALDEC(1) <= ER(4); SALDEC(2) <= ER(5); SALDEC(3) <= ER(6); end Behavioral; 3.- Programa desarrollado para implementar un codificador Cíclico para el código (7,4). --PROGRAMA QUE IMPLEMENTA UN CODIFICADOR CICLICO PARA EL CODIGO 7,4 --HECHO POR: ING. DAVID VAZQUEZ ALVAREZ library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; -- Uncomment the following lines to use the declarations that are -- provided for instantiating Xilinx primitive components. --library UNISIM; --use UNISIM.VComponents.all; entity CICLICODE is Port ( ENTRADA : in std_logic_vector(0 to 3); SALIDA : out std_logic_vector(0 to 6)); end CICLICODE; architecture Behavioral of CICLICODE is --DECLARACION DE VECTORES VARIABLES PARA PODER MANEJAR LOOPS begin process(entrada) -- DECLARACION DE CONTADORES VARIABLE CONT: INTEGER; VARIABLE I: INTEGER; VARIABLE J: INTEGER; VARIABLE U: STD_LOGIC_VECTOR (0 TO 3); VARIABLE V: STD_LOGIC_VECTOR (0 TO 6); begin --SE LE ASIGNA A U LA PALABRA DE ENTRADA U(0) := ENTRADA(0);

102

Page 115: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

U(1) := ENTRADA(1); U(2) := ENTRADA(2); U(3) := ENTRADA(3); -- EMPIEZA EL CODIGO CICLICO CONT := 0; I := 6; WHILE( I >= 0) LOOP IF(I > 2) THEN V(I) := U(3-CONT); CONT := CONT + 1; ELSE V(I) := U(3) XOR U(2) XOR U(1); J := 3; WHILE( J >= 1) LOOP U(J) := U(J-1); J := J - 1; END LOOP; U(0) := V(I); END IF; I := I-1; END LOOP; --ASIGNAMOS EL VECTOR VARIABLE AL VECTOR SEÑAL SALIDA SALIDA(0) <= V(0); SALIDA(1) <= V(1); SALIDA(2) <= V(2); SALIDA(3) <= V(3); SALIDA(4) <= V(4); SALIDA(5) <= V(5); SALIDA(6) <= V(6); END PROCESS; end Behavioral; 4.- Programa desarrollado para implementar un decodificador Cíclico para el código (7,4).

103

Page 116: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

--PROGRAMA QUE IMPLEMENTA UN DECODIFICADOR CICLICO (7,4) --HECHO POR: ING. DAVID VAZQUEZ ALVAREZ library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; -- Uncomment the following lines to use the declarations that are -- provided for instantiating Xilinx primitive components. --library UNISIM; --use UNISIM.VComponents.all; entity ciclicdecoder is Port ( ENTRADA : in std_logic_vector(0 to 6); SALIDA : out std_logic_vector(0 to 3)); end ciclicdecoder; architecture Behavioral of ciclicdecoder is begin PROCESS(ENTRADA) -- DECLARACION DE CONTADORES VARIABLE I: INTEGER; VARIABLE J: INTEGER; --DECLARACION DE VECTORES AUXILIARES VARIABLE S: STD_LOGIC_VECTOR (0 TO 2); VARIABLE AUX: STD_LOGIC_VECTOR (0 TO 2); VARIABLE R: STD_LOGIC_VECTOR (0 TO 6); VARIABLE BUF: STD_LOGIC_VECTOR (0 TO 6); VARIABLE BUFX: STD_LOGIC_VECTOR (0 TO 6); BEGIN --SE LE ASIGNA A R EL VECTOR DE ENTRADA R(6) := ENTRADA(0); R(5) := ENTRADA(1); R(4) := ENTRADA(2); R(3) := ENTRADA(3); R(2) := ENTRADA(4); R(1) := ENTRADA(5); R(0) := ENTRADA(6); --INICIALIZAMOS CON CERO EL BUFFER

104

Page 117: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

BUF(0) := '0'; BUF(1) := '0'; BUF(2) := '0'; BUF(3) := '0'; BUF(4) := '0'; BUF(5) := '0'; BUF(6) := '0'; --INICIALIZAMOS CON CERO LOS ELEMENTOS DEL SINDROME S(0) := '0'; S(1) := '0'; S(2) := '0'; --REALIZA EL CALCULO DEL SINDROME I := 0; WHILE (I < 14) LOOP IF(I <= 6) THEN AUX(0) := S(0); AUX(1) := S(1); AUX(2) := S(2); S(0) := AUX(2) XOR R(I); S(1) := AUX(0) XOR AUX(2); S(2) := AUX(1); J := 0; WHILE (J < 7) LOOP BUFX(J) := BUF(J); J := J + 1; END LOOP; BUF(0) := R(I); BUF(1) := BUFX(0); BUF(2) := BUFX(1); BUF(3) := BUFX(2); BUF(4) := BUFX(3); BUF(5) := BUFX(4); BUF(6) := BUFX(5); ELSE AUX(0) := S(0); AUX(1) := S(1);

105

Page 118: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

AUX(2) := S(2); S(0) := AUX(2) XOR ( AUX(0) AND NOT(AUX(1)) AND AUX(2) ); S(1) := AUX(0) XOR AUX(2); S(2) := AUX(1); J := 0; WHILE (J < 7) LOOP BUFX(J) := BUF(J); J := J + 1; END LOOP; BUF(0) := BUFX(6) XOR ( AUX(0) AND NOT(AUX(1)) AND AUX(2) ); BUF(1) := BUFX(0); BUF(2) := BUFX(1); BUF(3) := BUFX(2); BUF(4) := BUFX(3); BUF(5) := BUFX(4); BUF(6) := BUFX(5); END IF; I := I+1; END LOOP; --ASIGNAMOS EL VECTOR VARIABLE AL VECTOR SEÑAL SALIDA SALIDA(0) <= BUF(3); SALIDA(1) <= BUF(4); SALIDA(2) <= BUF(5); SALIDA(3) <= BUF(6); END PROCESS; end Behavioral; 5.- Programa desarrollado para implementar un codificador Cíclico para el código (15,11). --PROGRAMA QUE IMPLEMENTA UN CODIFICADOR PARA UN CODIGO (15,11) --HECHO POR: ING. DAVID VAZQUEZ ALVAREZ library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL;

106

Page 119: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

use IEEE.STD_LOGIC_UNSIGNED.ALL; -- Uncomment the following lines to use the declarations that are -- provided for instantiating Xilinx primitive components. --library UNISIM; --use UNISIM.VComponents.all; entity CODER is Port ( ENTRADA : in std_logic_vector(0 to 10); SALIDA : out std_logic_vector(0 to 14)); end CODER; architecture Behavioral of CODER is begin --OBTIENE LOS COEFICIENTES DEL VETOR DE REDUNDANCIA process(entrada) VARIABLE X: STD_LOGIC_VECTOR (0 TO 3); VARIABLE RETRO: STD_LOGIC; VARIABLE ENT: STD_LOGIC_VECTOR (0 TO 10); VARIABLE GG: STD_LOGIC_VECTOR (0 TO 4); VARIABLE I: INTEGER; VARIABLE J: INTEGER; VARIABLE K: INTEGER; begin -- INICIALIZA EL VECTOR DE REDUNDANCIA X(0) := '0'; X(1) := '0'; X(2) := '0'; X(3) := '0'; --ASIGNA VALORES AL POLINOMIO G(X) GG(0) := '1'; GG(1) := '1'; GG(2) := '0'; GG(3) := '0'; GG(4) := '1'; --ASIGNAMOS LOS VALORES DE ENTRADA ENT(0) := ENTRADA(0); ENT(1) := ENTRADA(1); ENT(2) := ENTRADA(2); ENT(3) := ENTRADA(3); ENT(4) := ENTRADA(4); ENT(5) := ENTRADA(5);

107

Page 120: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

ENT(6) := ENTRADA(6); ENT(7) := ENTRADA(7); ENT(8) := ENTRADA(8); ENT(9) := ENTRADA(9); ENT(10) := ENTRADA(10); -- AGREGA LOS BITS DE REDUNDANCIA UTILIZANDO UN CODIFICADOR BCH I := 10; WHILE (I>=0) LOOP RETRO := ENT(I) XOR X(3); if RETRO /= '0' then J:=3; WHILE (J>0) LOOP if GG(J) /= '0' then X(J) := X(J-1) XOR RETRO; else X(J) := X(J-1); end if; J := J-1; END LOOP; X(0) := GG(0) AND RETRO; else K := 3; WHILE (K>0) LOOP X(K) := X(K-1); K := K-1; END LOOp; X(0) := '0'; end if; I := I-1; END LOOP; -- ASIGNAMOS EL VECTOR VARIABLE A UNA SEÑAL SALIDA(0) <= X(0); SALIDA(1) <= X(1); SALIDA(2) <= X(2); SALIDA(3) <= X(3);

108

Page 121: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

SALIDA(4) <= ENTRADA(0); SALIDA(5) <= ENTRADA(1); SALIDA(6) <= ENTRADA(2); SALIDA(7) <= ENTRADA(3); SALIDA(8) <= ENTRADA(4); SALIDA(9) <= ENTRADA(5); SALIDA(10) <= ENTRADA(6); SALIDA(11) <= ENTRADA(7); SALIDA(12) <= ENTRADA(8); SALIDA(13) <= ENTRADA(9); SALIDA(14) <= ENTRADA(10); END PROCESS; end Behavioral; 6.- Programa desarrollado para implementar un decodificador Cíclico para el código (15,11). --PROGRAMA QUE IMPLEMENTA UN DECODIFICADOR MEGGIT PARA UN CODIGO 15,11 --HECHO POR: ING. DAVID VAZQUEZ ALVAREZ library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; -- Uncomment the following lines to use the declarations that are -- provided for instantiating Xilinx primitive components. --library UNISIM; --use UNISIM.VComponents.all; entity DECODER is Port ( ENTRADA : in std_logic_vector(0 to 14); SALIDA : out std_logic_vector(0 to 10)); end DECODER; architecture Behavioral of DECODER is begin PROCESS(ENTRADA) -- DECLARACION DE CONTADORES VARIABLE I: INTEGER; VARIABLE J: INTEGER;

109

Page 122: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

--DECLARACION DE VECTORES AUXILIARES VARIABLE S: STD_LOGIC_VECTOR (0 TO 3); VARIABLE AUX: STD_LOGIC_VECTOR (0 TO 3); VARIABLE R: STD_LOGIC_VECTOR (0 TO 14); VARIABLE BUF: STD_LOGIC_VECTOR (0 TO 14); VARIABLE BUFX: STD_LOGIC_VECTOR (0 TO 14); BEGIN --SE LE ASIGNA A R EL VECTOR DE ENTRADA R(14) := ENTRADA(0); R(13) := ENTRADA(1); R(12) := ENTRADA(2); R(11) := ENTRADA(3); R(10) := ENTRADA(4); R(9) := ENTRADA(5); R(8) := ENTRADA(6); R(7) := ENTRADA(7); R(6) := ENTRADA(8); R(5) := ENTRADA(9); R(4) := ENTRADA(10); R(3) := ENTRADA(11); R(2) := ENTRADA(12); R(1) := ENTRADA(13); R(0) := ENTRADA(14); --INICIALIZAMOS CON CERO EL BUFFER BUF(0) := '0'; BUF(1) := '0'; BUF(2) := '0'; BUF(3) := '0'; BUF(4) := '0'; BUF(5) := '0'; BUF(6) := '0'; BUF(7) := '0'; BUF(8) := '0'; BUF(9) := '0'; BUF(10) := '0'; BUF(11) := '0'; BUF(12) := '0'; BUF(13) := '0'; BUF(14) := '0'; --INICIALIZAMOS CON CERO LOS ELEMENTOS DEL SINDROME S(0) := '0'; S(1) := '0';

110

Page 123: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

S(2) := '0'; S(3) := '0'; --REALIZA EL CALCULO DEL SINDROME I := 0; WHILE (I < 30) LOOP IF(I <= 14) THEN AUX(0) := S(0); AUX(1) := S(1); AUX(2) := S(2); AUX(3) := S(3); S(0) := AUX(3) XOR R(I); S(1) := AUX(0) XOR AUX(3); S(2) := AUX(1); S(3) := AUX(2); J := 0; WHILE (J < 15) LOOP BUFX(J) := BUF(J); J := J + 1; END LOOP; BUF(0) := R(I); BUF(1) := BUFX(0); BUF(2) := BUFX(1); BUF(3) := BUFX(2); BUF(4) := BUFX(3); BUF(5) := BUFX(4); BUF(6) := BUFX(5); BUF(7) := BUFX(6); BUF(8) := BUFX(7); BUF(9) := BUFX(8); BUF(10) := BUFX(9); BUF(11) := BUFX(10); BUF(12) := BUFX(11); BUF(13) := BUFX(12); BUF(14) := BUFX(13); ELSE AUX(0) := S(0); AUX(1) := S(1);

111

Page 124: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

AUX(2) := S(2); AUX(3) := S(3); S(0) := AUX(3) XOR ( AUX(0) AND NOT(AUX(1)) AND NOT(AUX(2)) AND AUX(3) ); S(1) := AUX(0) XOR AUX(3); S(2) := AUX(1); S(3) := AUX(2); J := 0; WHILE (J < 15) LOOP BUFX(J) := BUF(J); J := J + 1; END LOOP; BUF(0) := BUFX(14) XOR ( AUX(0) AND NOT(AUX(1)) AND NOT(AUX(2)) AND AUX(3) ); BUF(1) := BUFX(0); BUF(2) := BUFX(1); BUF(3) := BUFX(2); BUF(4) := BUFX(3); BUF(5) := BUFX(4); BUF(6) := BUFX(5); BUF(7) := BUFX(6); BUF(8) := BUFX(7); BUF(9) := BUFX(8); BUF(10) := BUFX(9); BUF(11) := BUFX(10); BUF(12) := BUFX(11); BUF(13) := BUFX(12); BUF(14) := BUFX(13); END IF; I := I+1; END LOOP; --ASIGNAMOS EL VECTOR VARIABLE AL VECTOR SEÑAL SALIDA SALIDA(0) <= BUF(4); SALIDA(1) <= BUF(5); SALIDA(2) <= BUF(6); SALIDA(3) <= BUF(7); SALIDA(4) <= BUF(8); SALIDA(5) <= BUF(9); SALIDA(6) <= BUF(10);

112

Page 125: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

SALIDA(7) <= BUF(11); SALIDA(8) <= BUF(12); SALIDA(9) <= BUF(13); SALIDA(10) <= BUF(14); END PROCESS; end Behavioral;

113

Page 126: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Anexo C. Artículos presentados en congresos

9° CONGRESO NACIONAL EN INGENIERÍA ELECTROMECÁNICA Y DE SISTEMAS

México D.F., 13 al 17 de Noviembre, 2006

IMPLEMENTACIÓN DE TÉCNICAS DE CONTROL DE ERROR EN RADIO DEFINIDO POR SOFTWARE

D. Vázquez Alvarez, M. Sánchez Meraz

Maestria en Ingenieria en Telecomunicaciones, SEPI-ESIME-IPN, México, D.F., México Teléfono (55) 5729-6000 Ext. 54553 E-mail: [email protected]

Resumen.- Este trabajo presenta la implementación de algunas técnicas de control de error, códigos de bloque lineales en un dispositivo lógico programable (FPGA) y demuestra las ventajas que tiene la implementación de un radio definido por software.

Abstract.- This work presents the implementation of some

error control techniques, linear blocks codes in a programmable logic device (FPGA) and show the software defined radio advantages.

I. INTRODUCCIÓN

Tal como los controles remotos se proliferan en nuestras

salas, nuestras vidas se están llenando de dispositivos inalámbricos incompatibles, desde teléfonos celulares hasta walkie talkies para bebés. Aun teniendo diferentes funciones, estos aparatos comparten tecnología muy similar: transmisores y receptores, baterías y antenas. Ya existen controles remotos universales, ¿Por que no dispositivos inalámbricos universales?

Esa es la inspiración para el nuevo movimiento de radio definido por software. Radio Definido por Software (RDS) es un concepto que esta revolucionando la tecnología de las comunicaciones rumbo a la integración de múltiples arquitecturas de redes de telecomunicaciones inalámbricas. Sin embargo, la reconfiguración del hardware a través de software exige también un comportamiento similar del software destinado a regular el intercambio de información.

II. RADIO SOFTWARE

El término “Software Radio” fue acuñado por Joe

Mitola en 1991 para referirse a la clase de “radios” re-programables o re-configurables. En otras palabras, una misma pieza de hardware puede realizar diferentes funciones en diferente tiempo [1]. Con lo anterior podemos especular el hecho de tener un dispositivo hardware de “propósito general” en un ámbito de comunicaciones. Este concepto abre un amplio panorama de oportunidades para la

industria de las comunicaciones y la investigación en ese mismo sentido.

Algunas de las definiciones de RDS son las siguientes: “Sofware Radio es un radio sustancialmente definido en software y cuyo comportamiento en capa física puede ser significativamente alterado a través de cambios en su software”. Otra definición dice que “RDS es un radio en el cual la digitalización en el receptor es realizada en algunos escenarios de bajada desde la antena, típicamente después del filtrado del ancho de banda, reducción de amplificación de ruido, y la conversión a bajas frecuencias en subsecuentes escenarios (con un proceso inverso en la digitalización del transmisor)”, la arquitectura de un RDS puede verse en la Figura 1. Otra definición define a RDS como “término utilizado para describir control de software para una aplicación de radio el cual provee técnicas de modulación y control de error, operaciones de banda angosta y banda ancha, funciones de seguridad en comunicaciones y requerimientos de forma de onda” [1].

Desde la creación y evolución constante de estándares tales como 2.5G, 3G y 4G, existe una amplia incompatibilidad entre tecnologías de redes inalámbricas utilizadas por diferentes países. Desde una perspectiva comercial y global, este problema inhibe el uso de servicios de roaming y otras facilidades. Esta es una de las grandes oportunidades de SDR, ya que el aspecto económico es de suma importancia, para la integración transparente de diversas arquitecturas de comunicación.

Los radios definidos por software pudieran reconfigurarse a si mismos automáticamente para reconocer y comunicarse con otros. Esto podría imponer el orden en el actual caos de los estándares competitivos inalámbricos (CDMA, GSM, TDMA, etc.), esto transformaría las redes rígidas en sistemas abiertos. La gran ganancia: Desempeño del sistema mejorado, costos de servicios más bajos, roaming transparente. Con reprogramación instantánea, se podría cargar un mismo aparato para múltiples usos.

Como puede verse en la figura 1 una de las tareas principales que se realizan en la parte de software de un RDS es la codificación de canal. Este trabajo se enfoca a desarrollar módulos de software que implementan técnicas de control de error sobre dispositivos programables.

114

Page 127: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Figura 1.- Arquitectura de un RDS.

III. DISPOSITIVOS DE LÓGICA PROGRAMABLE

Los dispositivos de Lógica Programable son circuitos

digitales cuya función interna puede ser modificada a voluntad. Esta funcionalidad los diferencia de los circuitos lógicos tradicionales donde la función que realiza el circuito viene predefinida de fábrica. La posibilidad de definir a posteriori la función a implementar entrega al usuario mucha mayor flexibilidad para construir diseños más complejos con mayor integración y a un menor costo[2].

En la figura 2 sin entrar en mayores detalles se observan las diferencias fundamentales entre las distintas tecnologías desarrolladas. Primero existiendo los circuitos digitales normales, cuyo desarrollo ya consiste en toda una proeza tecnológica. En 1968 se inició la producción de circuitos digitales construidos empleando la tecnología CMOS, que finalmente permitió el crecimiento exponencial de los sistemas digitales, que siguen empleando esta tecnología de fabricación. Véase el inciso a) de la figura 2.

Una primera forma de sistema lógico reconfigurable son las memorias de acceso aleatorio (RAM). Estos dispositivos pueden almacenar un mapa digital de entradas (direcciones) y salidas (valor de la memoria en tal dirección) por lo que pueden ser empleadas para definir funciones. Aunque muy prácticas, sus capacidades son limitadas. Primero se sub-utilizan los recursos pues mucha de la información almacenada probablemente es redundante, y segundo, están limitadas a definir un mapa fijo. La arquitectura de las

memorias además hace que la velocidad de lectura sea notablemente más lenta que un circuito digital especializado. Véase el inciso b) de la figura 2.

En 1970 se empezaron a producir las primeras versiones de circuitos lógicos reprogramables. Constituidos por arreglos de compuertas AND y OR interconectables, que permiten definir funciones lógicas simples, con un bajo costo de compuertas y alcanzando mayores velocidades de propagación entre la entrada y la salida. A esta generación corresponden las conocidas PAL (programmable array logic) y GAL (general array logic). Véase el inciso c) de la figura 2.

Cabe notar que, por su propósito, los dispositivos de lógica programable están asociados a la tecnología de memorias. Así, existen variantes de dispositivos que solo pueden ser programados una vez (antifuse) o bien que pueden ser reprogramados una infinidad de veces (VRAM “volatile random access memories”). Hoy en día la elección dependerá de la aplicación deseada. Aunque muy útiles y versátiles, la tecnología de las SPLD estaba limitada a definir funciones simples, en una forma fija. Esta solución además escalaba mal a medida que el número de pines de entrada salida aumentaba. Cerca del año 1985 surgió la tecnología de las CPLD que permitía resolver estos problemas. En las CPLD se consta de una serie de SPLD las cuales pueden ser interconectadas internamente. Aunque emplean una mucho mayor cantidad de transistores (asociada a nuevas tecnologías de integración), estos

115

Page 128: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

dispositivos abrieron una nueva gama de aplicaciones al permitir definir sistemas lógicos mucho más complejos. Véase el inciso d) de la figura 2.

Figura 2.- Estructura interna de distintos dispositivos lógicos La última etapa de desarrollo corresponde a la

arquitectura de las FPGA. Empleando las nuevas tecnologías de fabricación de circuitos, con un mayor número de compuertas, estos dispositivos permiten definir no tan sólo mapas de entrada salida y sistemas lógicos simples, sino que dan paso a la construcción de prácticamente cualquier tipo de aplicaciones.

IV. DISPOSITIVOS FPGA

Una FPGA (“Field Programmable Gate Array”) es un

dispositivo de lógica reconfigurable que es capaz de implementar prácticamente cualquier función deseada [6]. Esto se logra a través de una arquitectura extremadamente flexible donde existen elementos básicos que realizan operaciones simples los cuales son interconectados entre ellos por una densa malla de conexiones. La gran cantidad de elementos básicos y la capacidad de interconectarlos arbitrariamente hacen que las FPGAs puedan fragmentar e integrar cualquier sistema digital. Evidentemente existen restricciones de capacidad y velocidad que hacen las FPGAs poco efectivas para ciertas aplicaciones, sin embargo los avances técnicos, la flexibilidad y bajo costo convierten las FPGAs en alternativas económicamente viables.

Podría pensarse que el circuito digital que subyace a un dispositivo de estas características es extremadamente complejo y difícil de aprender. En realidad no lo es, la existencia de las FPGA mucha más que a una invención prolífica se basa en un cambio de enfoque respecto de las

Las FPGAs son circuitos con un gran número de componentes dispuestos en la menor área posible, en estructuras que maximizan la velocidad de propagación de las señales y que sean realizables en una cadena de producción masiva de bajo costo por unidad. La proeza se encuentra en la capacidad de realizar estos circuitos y en las tecnologías de software que logran dar un uso eficiente a los recursos disponibles.

En la figura 3 se

capacidades disponibles en el área de dispositivos digitales.

presenta la estructura general de una FPGA. Tal y como se mencionó anteriormente una FPGA, a diferencia de otros dispositivos de lógica reconfigurable, contiene un arreglo de elementos lógicos y recursos para interconectarlos en forma arbitraria. En las zonas periféricas se encuentran una gran cantidad de conectores y los circuitos de entrada/salida asociados. Finalmente las FPGAs modernas incluyen dentro de si elementos especializados que facilitan la realización de ciertas tareas comunes. Por ejemplo se puede encontrar dentro de una FPGA sectores de memoria RAM, circuitos para manejar señales de reloj, circuitos multiplicadores e incluso procesadores embebidos.

Figura 3.- Estructura general de una FPGA.

V. CÓDIGOS D BLOQUE La salida de u es una secuencia

de d

tas reglas, transforma cad

código v.

E

na fuente de informaciónígitos binarios "0" o "1". En la codificación de bloque,

esta secuencia de información binaria es segmentada en bloques de mensaje de una longitud fija; cada bloque de mensaje, llamado u, consiste en k dígitos de información. Hay un total de 2k mensajes distintos.

El codificador, de acuerdo con ciera mensaje entrante u, en una palabra binaria de n bits, v,

con n > k. V es lo que llamamos palabra código (o vector código) del mensaje u. Por lo tanto, para los 2k posibles mensajes, hay 2k palabras código. A este conjunto de 2k palabras código, se le llama Código bloque. Para que un código bloque sea útil, las 2k palabras código deben ser distintas. En consecuencia, tiene que haber una correspondencia uno a uno entre un mensaje u y su palabra

116

Page 129: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Una estructura que se desea que tenga un código bloque, es la linealidad. Con esta estructura, la complejidad de la codificación se reduce enormemente, como veremos más ade

A un código bloque de longitud n y 2k palabras código se l k) si y sólo si sus 2k palabras código forman un subespacio k-dimensional. De hecho, un códi

en d

lante.

A) Código bloque lineal

e llama código lineal (n,

go binario es lineal si y sólo si la suma de módulo 2 de dos palabras código es también una palabra código. El bloque código dado en la siguiente tabla (Tabla 1) es un código lineal (7,4). Se puede comprobar fácilmente que la suma de dos palabras código en este código es también otra palabra código.

Una propiedad deseable en un código lineal es una estructura sistemática de las palabras código como la mostrada en la figura 4, donde una palabra código se divide

os partes: la parte del mensaje y la parte de redundancia. La parte del mensaje consiste de k bits de información inalterada (o mensaje) y la parte de redundancia consiste de de n - k bits de comprobación de paridad, los cuales son una suma lineal de los bits de información. A un código lineal de bloque con esta estructura se le llama código lineal sistemático de bloque [3].

Ejemplo de código lineal (7,4) Mensajes Palabras código( 0 0 0 0) ( 0 0 0 0 0 0 0 ) ( 1 0 0 0) ( 1 1 0 1 0 0 0 ) ( 0 1 0 0) ( 0 1 1 0 1 0 0 ) ( 1 1 0 0) ( 1 0 1 1 1 0 0 ) ( 0 0 1 0) ( 1 1 1 0 0 1 0 ) ( 0 1 1 0) ( 1 0 0 0 1 1 0 ) ( 1 1 1 0) ( 0 1 0 1 1 1 0 ) ( 0 0 0 1) ( 1 0 1 0 0 0 1 ) ( 1 0 0 1) ( 0 1 1 1 0 0 1 ) ( 0 1 0 1) ( 1 1 0 0 1 0 1 ) ( 1 1 0 1) ( 0 0 0 1 1 0 1 ) ( 0 0 1 1) ( 0 1 0 0 0 1 1 ) ( 1 0 1 1) ( 1 0 0 1 0 1 1 ) ( 0 1 1 1) ( 0 0 1 0 1 1 1 ) ( 1 1 1 1) ( 1 1 1 1 1 1 1 )

Tabla 1.- Código

El código (7,4) dado en la tabla 1 es un código sistemático, los c recha de

cad

Un c tamente definido por una matriz G k x n de la siguiente forma:

Lineal (7,4).

uatro bits que están más a la de

a palabra código son idénticos a los bits correspondientes de información.

Figura 4.- Forma sistemática de una palabra código.

ódigo lineal (n,k) sistemático queda comple

y las palabras código se obtienen usando la siguiente ecuación.

G (1)

la derecha de una palabra código v son idénticos a los dígitos de i

v5 = u2

u2 + u3 u1 + 2

(2)

palabra código, utilizando un código Hamming (7,4) [4].

Consideramos un código lineal (n,k) con su matriz generadora G y su matriz de comprobación de paridad H.

v = u ⋅

Esto nos muestra que los k primeros dígitos por

nformación u0, u1,..., uk-1 que hay que codificar, y que los n - k dígitos de redundancia que están a la derecha, son sumas lineales de los de información. De esto se puede comprobar que:

v6 = u3

v4 = u1 v3 = u0 v2 = u1 +v1 = u0 + uv0 = u0 + u2 + u3

Esto nos representa las ecuaciones para formar una

B) Síndrome y detección de errores

n-k dígitos k dígitos

Redundancia Mensaje

117

Page 130: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Sea smite en un canal ruidoso, y r es el vector recibido a la salida del canal. Deb

Figur aje a través de un canal ruidoso.

Vector de error: El vecto suma de r y v es e. Los unos que aparecen en e son errores de transmisión producidos por

El receptor recibe r que es la suma de la palabra código tran

inte

H = ( s0, s1,..., sn-k-1 ) es el síndrome de r.

sólo si r es una palabra código, y s es distinto de 0 si y sólo si r no es una palabra código ( el receptor dete que los errores no sean detectables. Esto sucede cuando el vector de erro

5

(3)

representan la forma de encontrar el síndrome de detección de error en una palabra código y corr

con usiones importantes, de parte del codificador se

utilizan las ecuacion er implementar un cutili

estr

odificador

utili

A de la familia

este

Har

ante

puede comprobar las salidas de la

v una palabra código que se tran

ido a que el canal es ruidoso, r puede ser distinto de v.

a 5.- Transmisión de un mens

r

que el canal es ruidoso.

smitida y el vector de error. Cuando recibe r, el decodificador debe determinar si contiene errores de transmisión. Si se detectan errores, el decodificador

ntará corregirlos (FEC) o pedirá una retransmisión (ARQ).

Síndrome: Cuando se recibe r, el decodificador calcula lo siguiente:

s = r T

s = 0 si y

cta la presencia de un error ). Pero, es posible

r es idéntico a una palabra código no nula. Estos errores son errores indetectables. Como hay 2k - 1 palabras código no nulas, hay 2k - 1 errores indetectables. Una vez que se encuentra el error, se considera que el vector r + e es la palabra código transmitida.

De HT obtenemos:

s0 = e0 + e3 + e5 + e6

s1 = e1 + e3 + e4 + e

s2 = e2 + e4 + e5 + e6

Estas ecuaciones nos

egirlo [4].

VI. IMPLEMENTACIÓN

Con el estudio de los bloques lineales, se llegaron a dos cl

es finales (2) para pododificador Hamming (7,4) parte del decodificador zando las ecuaciones del síndrome de detección de error

(3) se implementará el decodificador Hamming (7,4). El primer paso fue la creación de un algoritmo para

implementarlo en un lenguaje de alto nivel, en este caso de estudio se utilizó el lenguaje de programación C.

Se realizo un programa utilizando program

y de

ación ucturada, por medio de una función de usuario que

recibe un arreglo de 4 elementos para formar otro arreglo de 7 elementos de acuerdo a las ecuaciones del cHamming.

De esta manera se forma la palabra código de 7 bits apartir de los 4 bits del mensaje original, se agregan los 3 bits de redundancia los cuales nos darán el control de error.

Una vez que se tuvo el programa del codificador, zando la palabra de 7 bits, es decir, utilizando el arreglo

de 7 elementos que se utilizó en el programa, se construye una nueva función de usuario utilizando las ecuaciones parael síndrome y así detectar si en el mensaje recibido se tiene algún error, si el mensaje tiene algún error esta función corregirá el bit erróneo siempre y cuando no sea un error indetectable como se vio anteriormente.

Este proceso nos sirvió de apoyo para entender el funcionamiento del código de bloque lineal (7,4) y así poder implementarlo en un dispositivo lógico programable, en este caso de estudio utilizamos una FPGSPARTAN II-E de XILINX, se eligió esta tarjeta ya que XILINX es el pionero y líder actual en tarjetas FPGA.

También es importante hacer notar que teniendo dispositivos de lógica reprogramable se requiere de herramientas de software que permitan definir y programar la lógica que se implementa es estos dispositivos. Encaso utilizaremos un lenguaje de descripción de Hardware (HDL) la cual es una herramienta que permite especificar de forma precisa un sistema estático de flujo de datos.

En particular los HDLs son empleados para especificar la función que debe implementar una FPGA u otro circuito de lógica reconfigurable, para este caso el HDL que escogimos fue VHDL (Very high speed integrated circuit

daware Description Language), debido a que es uno de los HDLs más antiguos es el lenguaje más maduro con un gran número de funcionalidades, modelos paramétricos, carga de archivos, sistema de librerías, etc.

Ya que se tiene el dispositivo en el cual se va a implementar el código para este caso la FPGA Spartan II-E se puede llevar a cabo la programación en VHDL ayudándonos de la implementación en C que se hizo

riormente. Se utiliza el software del fabricante de la FPGA, el ISE

WEB PACK 6.0 para programar en VHDL y para implementar este programa en la FPGA, con el mismo software se implementación en la tarjeta o se puede utilizar otro software del mismo fabricante que se llama MODEL SIM para la misma versión 6.0 del ISE WEB PACK.

CANAL v r

e

118

Page 131: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Esta implementación nos da un codificador Hamming (7,4) programado en la FPGA la cual nos representa una caja negra con 4 datos de entrada y 7 de salida como se ve el diagrama esquemático resultante del programa en VHDL que se muestra en la figura 6.

Figura 6.- Diagrama esquemático del codificador de Hamming programado.

Segmento de programa en VHDL que demuestra la

entidad del codificador, su entrada de 4 bits y salida de 7

SALIDA : out std_logic_vector(0 to 6)); nd COD_HAM;

cador pro

bits:

entity COD_HAM is Port ( ENTRADA : in std_logic_vector(0 to 3); e En la figura 7 vemos la simulación del codifi

gramado utilizando el software ModelSim:

Figura 7.1.- Simulación de codificador Hamming.

Figura 7.2- Simulación del codificador Hamming.

A continuación en la figura 8 y 9 se muestra el diagrama esquemático para el decodificador y su simulación.

Figura 8.- Diagrama esquemático del decodificador Hamming programado. Segmento de programa en VHDL que muestra la

entidad del decodificador, su entrada de 7 bits y salida de 4 bits.

entity dec_ham is Port ( ENTCOD : in std_logic_vector(0 to 6);

SALDEC : out std_logic_vector(0 to 3)); end dec_ham; En la figura 9 vemos la simulación del decodificador

programado utilizando el software Model Sim.

Figura 9.1.- Simulación de decodificador de Hamming.

Figura 9.2- Simulación del decodificador Hamming.

119

Page 132: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Una vez que todas las simulaciones de los programas dan los resultados esperados, se esta listo para implementar el diseño en la FPGA utilizando el ISE WEB PACK, si se desea comprobar en tiempo real con la FPGA tambien se puede utilizar el software ChipScopePro del mismo fabricante.

VII. CONCLUSIONES

Esta es la idea pri pal del radio definido por software, en este artículo se del proceso de tran

r software, ya que cada día que

VIII. REFERENCIAS

Lo más importante de implementar un diseño en un

dispositivo lógico programable es que utilizando el mismo hardware, en este caso la misma tarjeta FPGA, se pueden tener implementados diferentes técnicas de control de error, así con un mismo dispositivo tenemos una gran variedad de codificadores y decodificadores.

nci

presenta solo una etapasmisión de un mensaje, pero es uno de los más

importantes ya que los codificadores y decodificadores nos dan un porcentaje mayor de eficiencia en la transmisión del mensaje.

De este modo se trata de hacer conciencia en la

necesidad de un radio definido po pasa la tecnología en comunicaciones móviles e

inalámbricas avanza y no siempre se utilizarán los mismos dispositivos de transmisión y recepción, por lo cual para evitar estos cambios el tener un dispositivo reconfigurable sería de gran eficiencia y utilidad.

[1] H. Reed Jeffrey, “Software radio”, Ed. Prentice Hall PTR, 2002, ch. 1, pp 1-8

[2] H.W. Tuttlebee Walter, “ Software defined radio”, Ed. Wiley, 2004, ch. 10, pp 235-270

[3] B. Wicker Stephen, “Error Control Systems”, Ed. Prentice Hall, 1995, ch. 4, pp. 68-98

[4] K. Moon Tood, “Error Coding Correction”, Ed. Wiley, 2005, ch. 2, pp. 61-112

5] www.xilinx.com [

120

Page 133: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Id 10º CONGRESO NACIONAL DE INGENIERÍA Artículo Aceptado por Refereo ELECTROMECÁNICA Y DE SISTEMAS Noviembre 26-30, 2007; México, D.F.

Resumen –– Comparando los radios análogos basados en hardware de los años pasados, el moderno concepto del radio definido por software provee un grado incomparable de compatibilidad y versatilidad, permitiendo formas de onda complicadas que eran inconcebibles de hacer en el pasado y actualmente son implementadas con facilidad. Por lo tanto el radio definido por software es un concepto que esta revolucionando la tecnología de las comunicaciones rumbo a la integración de múltiples arquitecturas de redes de telecomunicaciones inalámbricas y alámbricas. Sin embargo, la reconfiguración del hardware a partir del software también requiere un comportamiento similar del software destinado a regular el intercambio de información. En otras palabras es importante también tener algoritmos encargados en cada fase del proceso de comunicación, este trabajo se centra en el desarrollo de módulos de software que implementan técnicas de control de error. El diseño esta basado en C++ y VHDL. Los resultados de la implementación son presentados. Palabras Clave – Radio Definido por Software (SDR), Dispositivo de Lógica Reprogramable (FPGA), Códigos Cíclicos. Abstract –– Comparing the similar radios based on hardware of last years, the modern concept of the radio-software provides an incomparable grade of compatibility and versatility, allowing complicated wave forms that were inconceivable of making in the past and at the moment they are implemented with easiness. Therefore the software-radio is a concept that this revolutionizing the technology of the communications heading for the integration of multiple networks architectures of wireless and wire telecommunications. However, the reconfiguración of the hardware starting from the software also requires a similar behavior of the software dedicated to regulate the exchange of information. In other words its important also to have algorithms in charge in each phase of the communication process, this work is centered in the development of software modules that implement error control techniques. The design was based on C++ and VHDL. The results of the implementation are presented. Keywords –– Software Radio (SDR), Device of Reprogrammable Logic (FPGA), Ciclic Codes.

I. INTRODUCCIÓN

Implementación de códigos cíclicos en radio definido por software

D. Vázquez Alvarez, M. Sánchez Meraz Departamento de Ingeniería en Comunicaciones y Electrónica, ESIME-IPN, México D.F., México

Maestría en Ingeniería en Telecomunicaciones, SEPI-ESIME-IPN, México, D.F., México Teléfono (55) 5729-6000 Ext. 54553 E-mail: [email protected]

Durante las ultimas cuatro décadas los sistemas de radio

tanto para servicio militar como comercial han ido sufriendo una gran transición de sistemas de comunicación análoga a digital. Esta transición ha traído como consecuencia la evolución de todo el conjunto de formas de onda en comunicaciones digitales y equipos de transmisión de datos asociados a ellos que soportan esta creciente necesidad [13].

Durante el mismo periodo de tiempo, las plataformas de radio han soportado esas formas de onda las cuales también han ido evolucionando. Hace no más de 15 años la gran mayoría de las plataformas de radio donde principalmente se implementaban usaban hardware y software dedicado, en la última década ha venido creciendo un cambio hacia un nuevo paradigma muy fuerte que son los radios definidos por software y sus correspondientes implementaciones en forma de onda.

Este nuevo paradigma que se forma se conoce como Radio Definido por Software (SDR, “software defined by radio”) el cual propone una plataforma la cual pueda ser reconfigurada en software.

II. RADIO SOFTWARE

Tradicionalmente los equipos receptores y transmisores

de radiocomunicaciones son equipos constituidos por multitud de componentes electrónicos, los cuales forman circuitos sintonizadores, etapas de frecuencia intermedia, detectores, amplificadores de baja frecuencia, etc, es decir, están constituidos por “hardware”. Posteriormente, en los años 1980’s y 1990’s se introdujeron microprocesadores en estos equipos para el control de funciones internas y para añadir nuevas prestaciones, así como también la posibilidad de controlar los equipos de radio desde una computadora, añadiendo al equipo de radio puertos de comunicación o interfaces para la conexión a la computadora [1,2,9].

En estos casos, y usando el software adecuado, es

posible controlar desde la computadora numerosas funciones del equipo de radio, igual o mejor que desde los controles del propio equipo. También en la década de los 1990’s comenzó la introducción en los modernos equipos de radio de los chips DSP o “Procesadores Digitales de Señal”,

121

Page 134: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Id 10º CONGRESO NACIONAL DE INGENIERÍA Artículo Aceptado por Refereo ELECTROMECÁNICA Y DE SISTEMAS Noviembre 26-30, 2007; México, D.F.

los cuales permiten mediante técnicas digitales realizar filtros de paso de banda y de supresión de ruidos, entre otras posibilidades, muy eficaces, mejor que los realizados tradicionalmente con circuitos analógicos.

Tabla 1- Comparación del estándar GSM con RDS.

GPRS EDGE 3G SDR

Acceso de paquetes en la interfase de radio, compartimiento óptimo de recursos de radio en bandas de frecuencia GSM.

Todas las capacidades de GPRS.

Acceso a la tecnología wCDMA.

Habilidad para reconfigurar las características y servicios de la Terminal por el usuario final.

Tecnología de cambio de paquetes en la infraestructura de la red de trabajo, compartiendo recursos de la red.

Extensión de la tasa de datos de 9.6 kbps a 384 kbps con solo un cambio de paquete de radio.

Una nueva interfase (Iu) de GSM BSS a Core Networks similar al GSM “A”.

Capacidad de punto principal.

Acceso a Internet.

Migración de 2G a 2.5G

Descargar nuevas interfaces de aire.

Capacidad para extenderse con futuros protocolos de radio.

Verdadera capacidad multimedia.

Modelos de Internet para nuevos servicios.

Aplicación de servicios existentes y para nuevas aplicaciones.

Adopción de servicios avanzados: Localización mejorada. Antenas inteligentes. Control de interferencias activa.

Casi todos los equipos de radio modernos dotados de interfaces informáticos son equipos que tienen la opción de ser controlados por computadora, permitiendo que desde éste último se gobiernen y visualicen parte o todas las funciones y parámetros que normalmente tienen. El SDR tampoco se refiere al uso de sofisticadas técnicas de procesado digital de señal, mediante la introducción de DSP, implementadas a nivel de las etapas de audio, para mejorar la inteligibilidad y calidad de las señales. Las técnicas DSP permiten realizar filtros de audio mediante técnicas digitales que son mucho más efectivos que los tradicionalmente realizados con componentes electrónicos analógicos, e incluso se puede programar sus características por software. Pero en cualquier caso, tanto unos como otros no dejan de ser al fin y al cabo equipos de radio convencionales, a pesar de los “añadidos avanzados” que estas técnicas puedan introducir.

Un radio software (SDR), en cambio, tiene casi todos sus “componentes” definidos y funcionando en forma de programas en una dispositivo programable, a excepción de un mínimo de componentes físicos necesarios, externos al dispositivo, que no pueden ser definidos por software en una computadora [6]. Y mientras no sea activado ese software o conjunto de programas, el equipo de radio no será tal, sino que será un simple conjunto de unas cuantas placas electrónicas externas, incapaces de hacer nada práctico. Es el software que se haga funcionar en el dispositivo programable o computadora el que define el esquema de modulación a emplear, o el esquema de codificación y, en fin todo el equipo de radio.

Además una radio SDR es muy flexible, ya que modificando reemplazando sus programas de software, o añadiendo nuevos programas, se consigue modificar sus funcionalidades, como es añadir nuevos modos o mejorar sus prestaciones. Ello permite también acomodar el SDR a las necesidades de cada tipo de usuario. El SDR es algo novedoso y representa un nuevo paradigma en radiocomunicación.

En cualquier caso, siempre se trata de equipos realizados

enteramente con componentes electrónicos, o sea, en términos informáticos se definirían como “radios hardware”. Pero desde principios de la década del 2000 se ha estado investigando y desarrollando un nuevo concepto de equipos de radiocomunicaciones, los equipos de radio desarrollados por programa o “radios software”, en los que la parte hardware (circuitería) es mínima, y la mayor parte de las funciones que definen un equipo de radio se definen por software (programas) en una computadora o algún otro dispositivo lógico programable.

Desde la creación y evolución constante de estándares tales como 2.5G, 3G y 4G, existe una amplia incompatibilidad entre tecnologías de redes inalámbricas utilizadas por diferentes países. Desde una perspectiva comercial y global, este problema inhibe el uso de servicios de roaming y otras facilidades. Esta es una de las grandes oportunidades de SDR, ya que el aspecto económico es de suma importancia, para la integración transparente de diversas arquitecturas de comunicación.

Los radios definidos por software pudieran reconfigurarse a si mismos automáticamente para reconocer y comunicarse con otros. Esto podría imponer el orden en el actual caos de los estándares competitivos inalámbricos (CDMA, GSM, TDMA, etc.), esto transformaría las redes rígidas en sistemas abiertos. La gran ganancia: Desempeño del sistema mejorado, costos de servicios más bajos,

El SDR supone realizar la mayor parte de las funciones de un equipo de radio, incluso las más importantes, mediante el software implementado en algún dispositivo. En primer lugar hay que destacar la principal diferencia entre una radio definida por programas (SDR) y otra controlada por programas.

122

Page 135: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Id 10º CONGRESO NACIONAL DE INGENIERÍA Artículo Aceptado por Refereo ELECTROMECÁNICA Y DE SISTEMAS Noviembre 26-30, 2007; México, D.F.

Fig. 1. Arquitectura de un RDS

roaming transparente. Con reprogramación instantánea, se podría cargar un mismo aparato para múltiples usos.

Un ejemplo comparativo en cuanto a los beneficios que ofrece el SDR y algunos estándares utilizados en el mundo como GSM y UMTS se muestran en la tabla 1.

En la tabla 1 se ve la gran ventaja que tiene el SDR frente a los estándares de comunicación actuales, ya que todos ellos convergerían en un solo dispositivo capaz de reconfigurarse automáticamente dependiendo las necesidades del usuario, esto nos daría como resultado un sistema abierto de comunicaciones, en donde no importaría el estándar que se utilice sino simplemente el “software” que se implementaría para cambiar el funcionamiento de nuestro dispositivo SDR. En la figura 1 se muestran los diferentes módulos que pueden ser programados para formar un radio definido por software.

Por ello es de gran importancia construir algoritmos para las diferentes tareas que se realizan en el proceso de transmisión y recepción de un mensaje, en este trabajo nos hemos centrado en algunas técnicas de control de error utilizando códigos de bloque lineal, como son los códigos Hamming, códigos BCH y códigos cíclicos, encontrando en estos últimos la mejor manera de implementar un codificador y decodificador de manera general para diferentes longitudes de código.

III. FPGA Una FPGA (“Field Programmable Gate Array”) es un

dispositivo de lógica reconfigurable que es capaz de implementar prácticamente cualquier función deseada. Esto se logra a través de una arquitectura extremadamente flexible donde existen elementos básicos que realizan operaciones simples los cuales son interconectados entre ellos por una densa malla de conexiones. La gran cantidad de elementos básicos y la capacidad de interconectarlos arbitrariamente hacen que las FPGAs puedan fragmentar e integrar cualquier sistema digital. Evidentemente existen restricciones de capacidad y velocidad que hacen las FPGAs poco efectivas para ciertas aplicaciones, sin embargo los avances técnicos, la flexibilidad y bajo costo convierten las FPGAs en alternativas económicamente viables [5,12].

Las Arquitecturas de Software Controlable (SCA) son más adaptables a ser sistemas de comunicación multi-estándar y multi-canal. En los sistemas de comunicación las FPGA son componentes esenciales para poder realizar una configuración en diferentes técnicas de canalización que sea basado en el fin de la aplicación. El objetivo es obtener el máximo uso de un simple diseño a través de una reconfiguración de software para aprovechar las ventajas del hardware y la configuración dinámica y selección de diferentes técnicas de canalización, mientras se aseguran un alto nivel de fidelidad de las señales recibidas en su destino.

123

Page 136: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Id 10º CONGRESO NACIONAL DE INGENIERÍA Artículo Aceptado por Refereo ELECTROMECÁNICA Y DE SISTEMAS Noviembre 26-30, 2007; México, D.F.

Los sistemas de acceso múltiple son ampliamente usados

en satélites y comunicaciones terrestres haciendo cada vez más sólido el camino del SDR, el cual promete interoperabilidad y compatibilidad entre diferentes estándares. La eficiencia del uso de estas técnicas puede ser probada por el incremento de técnicas de control de error (FEC), con un ancho de banda definido y aumentando la eficiencia en el ancho de banda podría llegar a convertirse más y más relevante con canales congestionados. Esto nos lleva al objetivo principal que es garantizar la calidad de los datos transmitidos. Es por eso que en este trabajo presentamos diferentes algoritmos para control de error basados en códigos de bloque lineal.

IV. CÓDIGOS PARA DETECCIÓN Y CORRECCIÓN DE ERRORES

Fig. 2. Procesos de la señal en el lado del transmisor de un sistema de comunicaciones

Las operaciones básicas de procesamiento de señales en

un sistema de comunicación digital son codificación de la fuente, codificación de canal y modulación digital en el lado del transmisor, así como los procesos inversos en el lado del receptor. Los códigos para detección y corrección de errores corresponden a la codificación de canal [7,11].

Uno de los parámetros que miden el desempeño de un sistema de comunicación digital es la tasa de error binaria (BER) para un cierto valor de la relación de energía de bit a densidad espectral de ruido (Eb/N0). Generalmente, debido al ruido del canal de transmisión, la única manera de proporcionar un valor de BER aceptable es agregando códigos para detección y corrección de los errores.

Actualmente se emplean dos formas de controlar los errores. Una de las técnicas es conocida como solicitud de confirmación (ARQ, de Acknowledgment Request), ya que el receptor comprueba los datos recibidos y si hubo error solicita una retransmisión, de lo contrario retorna una confirmación de recepción correcta. La otra técnica se conoce como corrección de error hacia delante (FEC, de Forward Error Correction), y es utilizada en los sistemas de comunicación que operan en tiempo real, (es decir, el transmisor no almacena los datos que envía como en el caso de voz y video digitales). Por cuestiones de extensión solo se abordarán algunos códigos FEC. En general, el proceso de codificación en los códigos FEC es una operación en la cual a un grupo de bits de datos correspondientes al mensaje que se desea transmitir, se le agrega un grupo de bits conocidos como de paridad para fines de detección y corrección de errores. En trabajos anteriores se han

mostrado los resultados obtenidos en códigos hamming, por lo que en el presente trabajo nos centraremos en los códigos cíclicos.

V. CÓDIGOS CÍCLICOS

Son una subclase de los códigos de bloque lineales, los cuales tienen esquemas de decodificación eficientes, es decir con algoritmos relativamente simples. Se dice que un código es cíclico cuando cualquier desplazamiento en lazo cerrado de una palabra código da como resultado otra palabra existente dentro del conjunto empleado para codificar los posibles mensajes. Existen una gran variedad de códigos cíclicos. Por ejemplo, el Código de Redundancia Cíclica (CRC) empleado en comunicaciones de datos en Telefonía IP y el código Golay que es un código binario como el Hamming [3,4].

Estos códigos poseen dos características muy importantes:

• Son fáciles de implementar usando una circuitería

basada en registros de desplazamiento. • Tienen una estructura algebraica bien definida. El código C(n, k) es un código cíclico si y solo si

cualquier rotación cíclica de un vector v perteneciente a C es también un vector del código C.

Así, podemos definir como código cíclico a un código C(n,k) en el que si multiplicamos por x módulo (xn -1) cualquier polinomio del código, obtenemos otro polinomio del código. Además, si el código es lineal entonces, si multiplicamos un polinomio del código por un polinomio cualquiera, obtenemos otro polinomio del código.

Para mejorar la eficacia de este tipo de código, nos interesa algún algoritmo para conseguir una implementación sistemática del código, por lo tanto se tienen los siguientes pasos para la codificación sistemática de u:

1) Multiplicar xn-k por u(x). 2) Calcular b(x), que es el resto de dividir xn-ku(x)

entre g(x). 3) Concatenar b(x) y u(x).

Por lo tanto tenemos:

Fig. 3. Palabra código formada

La implementación se hace con el siguiente circuito:

124

Page 137: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Id 10º CONGRESO NACIONAL DE INGENIERÍA Artículo Aceptado por Refereo ELECTROMECÁNICA Y DE SISTEMAS Noviembre 26-30, 2007; México, D.F.

Fig. 4. Circuito de codificación basado en g(x)

Los pasos de la codificación serían: 1. La puerta está cerrada, por lo que se introducen los

dígitos de xn-ku(x) al canal y al circuito. (gi ⇒ conexión, gi ⇒ no conexión).

2. Se abre la puerta (se elimina la realimentación). En este paso ya están calculados todos los bi, por lo que se van desplazando hacia el canal.

Si se desea implementar al codificador basado en h(x)

se realiza con el siguiente circuito:

Fig. 5. Circuito de codificación basado en h(x)

Los pasos de la codificación serían:

1. La puerta 1 está conectada y la puerta 2 está desconectada. Se va introduciendo el mensaje original en los registros de desplazamiento.

2. La puerta 1 está desconectada y la puerta 2 está conectada. Se van calculando y sacando los bits de paridad.

Por lo tanto hemos visto que tenemos dos métodos de

codificación: • Método basado en g(x): tiene (n-k) etapas. • Método basado en h(x): tiene k etapas.

Usaremos el que tenga menor número de etapas según cada caso.

Por ser también un código lineal el síndrome se calcula de la siguiente forma:

s = r·HT (1)

)()()()()( 1

12

210

xsxgxaxrxrxrxrrxr n

n

+⋅=+⋅⋅⋅+++= −

− (2)

Si

s(x) = 0 ⇒ r(x) = a(x) ·g(x) ⇒ r(x) = g(x) ⇒ r(x) ∈ C(n,k)

Si

S(x) ≠ 0 ⇒ r(x) ∉ C(n,k) (3)

Por lo tanto, si s(x)≠ 0, se ha producido un error. El primer paso será procesar el síndrome. Para calcular el síndrome se puede usar el mismo esquema del codificador que se muestra en la figura 5. Quedando el circuito del decodificador de la figura 6.

Las propiedades de la detección de errores son:

1) Si g(x) distinto del polinomio 1 => Detecto todos los errores simples.

2) Si g(x) múltiplo de (1 + x) => Detecto todos los errores impares.

3) Si g(x) tiene como factor a un polinomio primitivo detecta todos los errores dobles, siendo un polinomio primitivo aquel que: • es factor de (xn +1) con n = 2γ - 1 • no es factor de (xm + 1) con m < n

Fig. 6. Circuito para el cálculo del síndrome

Una vez que se ha detectado los valores para el síndrome se realiza la corrección del error por medio del siguiente circuito que corresponde a un decodificador Meggit, el cual puede ser conectado al circuito de detección del síndrome.

Fig. 7. Circuito de decodificación Meggit

125

Page 138: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Id 10º CONGRESO NACIONAL DE INGENIERÍA Artículo Aceptado por Refereo ELECTROMECÁNICA Y DE SISTEMAS Noviembre 26-30, 2007; México, D.F.

VI. IMPLEMENTACIÓN

Por cuestiones de apreciación solo se muestran los resultados para el código cíclico (7,4) ya que un código con mayor longitud como el (15,11) sus diagramas esquemáticos programados son demasiado grandes por lo tanto no se aprecia de una manera óptima el funcionamiento de estos. Para poder implementar este código el primer paso consistió en desarrollar un programa en C++ que simulara el funcionamiento de un codificador y decodificador cíclico. Como se vio anteriormente los códigos cíclicos son más fáciles de implementar en hardware.

Es importante hacer notar que teniendo dispositivos de lógica programable se requiere de herramientas de software que permitan definir y programar la lógica que se implementa es estos dispositivos. En este caso utilizaremos un lenguaje de descripción de Hardware (HDL) la cual es una herramienta que permite especificar de forma precisa un sistema estático de flujo de datos.

En particular los HDLs son empleados para especificar la función que debe implementar una FPGA u otro circuito de lógica reconfigurable, para este caso el HDL que escogimos fue VHDL (Very high speed integrated circuit Hardaware Description Language), debido a que es uno de los HDLs más antiguos, es el lenguaje más maduro con un gran número de funcionalidades, modelos paramétricos, carga de archivos, sistema de librerías, etc.

Ya que se tiene el dispositivo en el cual se va a implementar el código para este caso la FPGA Spartan II-E se puede llevar a cabo la programación en VHDL ayudándonos de la implementación en C++ que se hizo anteriormente.

El esquema del codificador se realizo por medio del circuito que se muestra en la figura 5, debido que es el que menos etapas presenta, este circuito implementa un codificador cíclico basado en h(x). Para nuestro caso particular del código cíclico (7-4) utilizamos el siguiente polinomio generador.

g(x) = 1 + x + x3 (4)

A partir del cual, obtenemos h(x)

H(x) = 1 + x + x2 + x4 (5)

En la parte del decodificador se calcula los valores del síndrome los cuales nos detectaran si existe o no error, mediante el circuito de la figura 6. A continuación se realiza la corrección del error en el caso de que exista por medio del circuito de la figura 7, el cual nos representa un decodificador Meggit.

Se utiliza el software del fabricante de la tarjeta FPGA, el ISE WEB PACK 6.0 para programar en VHDL y para implementar este programa en la FPGA, con el mismo software se puede comprobar las salidas de la implementación en la tarjeta o se puede utilizar otro

software del mismo fabricante que se llama MODEL SIM para la misma versión 6.0 del ISE WEB PACK [12].

Esta implementación nos da un codificador Cíclico (7,4) programado en la FPGA la cual nos representa una caja negra con 4 datos de entrada y 7 de salida como se ve el diagrama esquemático de la figura 8 resultante del programa en VHDL.

Fig. 8.1. Diagrama esquemático del codificador cíclico 7-4

Fig. 8.2. Diagrama esquemático del codificador cíclico 7-4 programado

El segmento de programa en VHDL, que demuestra la entidad formada para el codificador se muestra a continuación. entity CICLICODER is Port ( ENTRADA : in std_logic_vector(0 to 3); SALIDA : out std_logic_vector(0 to 6)); end CICLICODE; En la figura 9 se muestra los resultados de la simulación del codificador.

Fig. 9. Simulación del codificador cíclico (7,4)

El diagrama esquemático para el decodificador resultante de la programación VHDL se muestra a continuación en la figura 10.

126

Page 139: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Id 10º CONGRESO NACIONAL DE INGENIERÍA Artículo Aceptado por Refereo ELECTROMECÁNICA Y DE SISTEMAS Noviembre 26-30, 2007; México, D.F.

Fig. 10.1. Diagrama esquemático del decodificador cíclico 7-4

Fig. 10.2. Diagrama esquemático del decodificador cíclico 7-4 programado

A continuación se muestra el segmento de programa que representa la entidad formada en VHDL. entity CICLICDECODER is Port ( ENTRADA : in std_logic_vector(0 to 6); SALIDA : out std_logic_vector(0 to 3)); end ciclicdecoder;

En la figura 11 vemos el resultado de la simulación del decodificador Meggit.

Fig. 11. Simulación del decodificador Meggit para un

código cíclico (7,4) Una vez que todas las simulaciones de los programas

dan los resultados esperados, se esta listo para implementar el diseño en la FPGA utilizando el ISE WEB PACK, si se desea comprobar en tiempo real con la FPGA tambien se puede utilizar el software ChipScopePro del mismo fabricante. De esta forma se tiene el software que implementa en una FPGA un código cíclico (7-4),

Este trabajo presenta los resultados de la implementación de un código cíclico, pero cabe hacer mención que los algoritmos que se desarrollaron para la programación de este código (7-4) son algoritmos generales,

en los cuales solo se necesita un cambio en los valores (n,k) y estos funcionaran de la misma forma por ejemplo para un (15-11), por lo que no solo se logró una implementación particular sino también un algoritmo base con el cual podemos crear una modulo completo de diferentes códigos de bloque.

VII. CONCLUSIONES

El poder programar diferentes técnicas de codificación y detección de error nos da la facilidad de poder desarrollar dispositivos con aplicaciones multi-estándar en donde la selección de la técnica a utilizar podrá reconfigurarse cada vez que así se requiera, para acoplarse ya sea a un estandar de acceso al medio, modulación o codificación.

Para el caso del control de error, dentro de los códigos de bloque los que más se adecuan para este trabajo son los códigos cíclicos debido a su fácil implementación en hardware, lo que facilita la programación en un lenguaje de descripción de hardware (HDL).

De este modo se trata de hacer conciencia en la necesidad de un radio definido por software, ya que cada día que pasa, la tecnología en comunicaciones móviles e inalámbricas avanza y no siempre se utilizarán los mismos dispositivos de transmisión y recepción, por lo cual para evitar estos cambios el tener un dispositivo reconfigurable sería de gran eficiencia y utilidad.

Una vez que todos estos trabajos se hayan desarrollado nos llevaran a tener un solo dispositivo universal capaz de realizar cambios en su configuración de transmisión y recepción en forma automática, lo que hace del SDR un elemento importante en las telecomunicaciones hoy en día.

REFERENCIAS

[1] H. Reed Jeffrey, “Software radio”, Ed. Prentice Hall PTR, 2002,

ch. 1, pp 1-8. [2] H.W. Tuttlebee Walter, “ Software defined radio”, Ed. Wiley,

2004, ch. 10, pp 235-270. [3] B. Wicker Stephen, “Error Control Systems”, Ed. Prentice Hall,

1995, ch. 4, pp. 68-98. [4] K. Moon Tood, “Error Coding Correction”, Ed. Wiley, 2005, ch.

2, pp. 61-112. [5] Meg Vootukuru, Systems Engineer, Syneren Technologies

Corporation, “FPGA Based Power Efficient Chanelizer For Software Defined Radio”, SDR FORUM, 2006.

[6] F. Fernández de Villegas, “Equipos de Radio definidos por Software”, www.ealuro.com/sdr, 2004.

[7] A. Blaickner, W. Scherr, “A FEC codec processor (ASIP) for software defined radio”, SDR FORUM, 2000.

[8] J. Estudillo Ramirez, R. Cumplido, “Integración de redes y protocolos con SDR”, SDR FORUM, 2005.

[9] Motorota SSG, “Software Defined Radio Development Work in North America”, SDR FORUM, 2000.

[10] Chales A. Linn, “Assessing the impact of software-defined radio technology on waveform throughput delay”, SDR FORUM, 2005.

[11] R. Alvarado Escamilla, “Códigos para detección y control de error en comunicaciones digitales”, SDR FORUM, 2004.

[12] www.xilinx.com[13] www.sdrforum.org

127

Page 140: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Id 10º CONGRESO NACIONAL DE INGENIERÍA Artículo Aceptado por Refereo ELECTROMECÁNICA Y DE SISTEMAS Noviembre 26-30, 2007; México, D.F.

BIOGRAFIAS Ing. David Vázquez Alvarez. Ingeniero en Comunicaciones y Electrónica de la ESIME-IPN (2001). Candidato a Maestro en Ciencias en Ingeniería de Telecomunicaciones SEPI-ESIME-IPN. Actualmente es profesor Asociado de la ESIME Zacatenco. Áreas de Interés Actual: Sistemas de Transmisión, Teoría de Códigos, Radio definido por Software.

M. en C. Miguel Sánchez Meraz. Profesor Titular del Departamento de Telecomunicaciones de la SEPI ESIME del Instituto Politécnico Nacional. Obtuvo el grado de Ingeniero en Comunicaciones y Electrónica y el de Maestro en Ciencias en Ingeniería de Sistemas por el Instituto Politécnico Nacional. Actualmente desarrolla varios proyectos em el área de procesamiento de señales aplicado a sistemas de comunicación y navegación satelital.

128

Page 141: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

Bibliografía [1] J. Mitola “The software radio architecture,” IEEE Commun. Mag. May 1995, pp 26-

38. [2] M. Barret, E. Arnott, “Adaptive antenna for mobil communicactions,” IEEE

Electronics & Communication Engeneering Journal, pp. 203-214. [3] ANSI, http://www.ansi.org [4] Mun Choon Chan, Thomas Y.C “Next generation wireless data service”,

Architecture and Experience. IEEE Pers. Comm., pp. 20-33. [5] Andrew J. Viterbi, “Spread spectrum: Myths and Reality”, IEEE Comunication

Magazine, Volumen 17, num 3. pp 34-41. [6] Ramjee Prasad, Tero Ojanapera, “An Overview of Third-Generation Wireless

Personal Communication”, IEEE Pers. Comm. pp. 59-65 [7] GSM, http://www.gsmworld.com/index.shtml [8] L. Hanzo, T.H. Liew, B.L. Yeap, “Turbo Coding, Turbo Equalisation and Space-

Time Coding for Transmission Over Fading Channels”, John Wiley & Sons, LTD, 2002.

[9] Douglas N. Knisely, Sarath Kumar, “Evolution of wireless data services: IS-95 to

cdma2000.” IEEE Comm. Magazine, pp. 140-149 [10] Hiroshi Harada, Ramjee Prasad “Simulation and Software Radio”, Artech House

Publishers; First Ed. 2002. [11] Maximóvil, http://www.maximovil.com/news/item.asp?ID=2223. [12] Chaundhury, W. Morh, and S. Onoe, “The 3GPP proposal for IMT-2000”, IEEE

Communication Magazine, Vol 37, pp.72-81, December 1999. [13] Sánchez García Jaime, “Comunicaciones Inalámbricas de 4ta. Generación.”,

Congreso Tecnológico de Chihuahua ELECTRO 2001, pp. 61- 66. [14] Burns, P. Prasad, “Software Defined Radio for 3G”, Artech House, 2002. [15] H. Reed Jeffrey, “Software radio”, Prentice Hall PTR, 2002, ch. 1, pp 1-8. [16] H.W. Tuttlebee Walter, “ Software defined radio”, Wiley, 2004, ch. 10, pp 235-270.

129

Page 142: tesis.ipn.mxtesis.ipn.mx/jspui/bitstream/123456789/15978/1/Técnicas de... · AGRADECIMIENTOS A mi familia, a mis padres, por apoyarme en todo momento y a pesar de estar lejos de

[17] Meg Vootukuru, Systems Engineer, Syneren Technologies Corporation, “FPGA Based Power Efficient Chanelizer For Software Defined Radio”, SDR FORUM, 2006.

[18] F. Fernández de Villegas, “Equipos de Radio definidos por Software”,

www.ealuro.com/sdr, 2004. [19] J. Estudillo Ramirez, R. Cumplido, “Integración de redes y protocolos con SDR”,

2005. [20] Motorola SSG, “Software Defined Radio Development Work in North America”,

www.sdrforum.org, 2000. [21] Chales A. Linn, “Assessing the impact of software-defined radio technology on

waveform throughput delay”, www.sdrforum.org, 2005. [22] XILINX, www.xilinx.com [23] Emerging Standards & Protocols, www.xilinx.com/esp [24] Digital Signal Processor, www.xilinx.com/dsp [25] www.sdrforum.org [26] www.wipro.com/insights/softwareradio.html [27] B. Wicker Stephen, “Error Control Systems”, Prentice Hall, 1995, ch. 4, pp. 68-98.2 [28] K. Moon Tood, “Error Coding Correction”, Wiley, 2005, ch. 2, pp. 61-112 [29] Wawe Graham, “Coding Techniques, an introduction to compression and error

control”, Palgrave, 2000, ch 5, pp. 198-221, ch 6, pp 222-294. [30] A. Blaickner, W. Scherr, “A FEC codec processor (ASIP) for software defined

radio”, www.sdrforum.org, 2000. [31] R. Alvarado Escamilla, “Códigos para detección y control de error en

comunicaciones digitales”, www.sdrforum.org, 2004. [32] VHDL, www.vhdl.org [33] A. M. Turing, “Systems of logic based on ordinals”, Proc. Lond. Math. Soc. 45

(1939) 161-228.

130