Implementació en una FPGA d'un generador de senyals modulades M-QAM
Full text
TRABAJO DE FINAL DE CARRERA TÍTULO DEL TFC: Implementación en una FPGA de un generador de señales moduladas M-QAM. TITULACIÓN: Ingeniería Técnica de Telecomunicaciones, especialidad en sistemas de telecomunicación. AUTOR: Enric Pulido Escruela DIRECTOR: Pere L. Gilabert Pinal FECHA: 21 Abril de 2009
Título: Implementación en una FPGA de un generador de señales moduladas M-QAM. Autor: Enric Pulido Escruela Director: Pere L. Gilabert Pinal Fecha: 21 Abril de 2009 Resumen La modulación QAM es hoy en día, una de las más comunes y cotidianas en el día a día. Su utilización pasa por aplicaciones tan conocidas como ADSL, telefonía móvil, WiFi, y una gran variedad de sistemas de transmisión de televisión (TDT), microondas, satélite, etc. Para una mejor organización y comprensión, este proyecto se ha orientado de forma metódica y siguiendo un orden claro y conciso: estudio teórico, estudio de las herramientas de desarrollo, implementación, y finalmente, simulación. Este proyecto pretende desarrollar en una Field Programmable Gate Array (FPGA), un transmisor y un receptor para una modulación Multiple Quadrature Amplitude Modulation (M-QAM), así como un generador aleatorio de bits de información. Se implementarán tres niveles distintos de esta modulación: una 4QAM, una 16QAM y una 64QAM. Para ello, inicialmente se realiza un estudio sobre la modulación QAM para familiarizarse con todas sus características y situar el objetivo final. Esta es la primera parte del proyecto, en la que se contempla una breve introducción teórica, y todo el proceso de modulación. Una parte importante del trabajo, es la familiarización con el entorno de programación de FPGAs, que utilizan un lenguaje VHDL. Las herramientas para el desarrollo del sistema que se utilizarán son las librerías System Generator de Xilinx, que se ejecutan sobre Matlab/Simulink, y que mediante bloques predefinidos, permiten la programación gráfica del lenguaje VHDL. En la segunda parte del proyecto, se hace hincapié en estos aspectos. Todo el proceso de desarrollo está contenido en la siguiente parte, explicando cuidadosamente cada subsistema, y las figuras de mérito: Bit Error Rate (BER) y Error Vector Magnitude (EVM). En los sistemas de comunicación, un elemento de importante motivo de estudio es el canal de comunicación. Este no es el objetivo del proyecto, pero en el proyecto se han definido dos bloques externos para poder evaluar mediante las figuras e mérito, los efectos de degradación que sufre la información al ser transmitida por un canal. Finalmente se presentan una serie de simulaciones que evalúan el funcionamiento del transmisor/receptor QAM.
Title: Implementation in an FPGA of a generator of M-QAM modulated signals. Author: Enric Pulido Escruela Director: Pere L. Gilabert Pinal Date: 21 Abril de 2009 Overview One of the most commonly used modulation schemes is the Quadrature Amplitude Modulation (QAM). It is used in well-know applications such as ADSL, mobile communications, WiFi, WiMAX and a great variety of television standards, etc. This project aims at implementing in a Field Programmable Gate Array (FPGA) an M-QAM modulator and demodulator, including a random bit generator acting as a source. The specific mapping schemes implemented for this modulation are: 4-QAM, 16-QAM and 64-QAM, present in most of current communications standards. In a first approach towards the implementation, it has been important to carry out a previous research on QAM modulation schemes to understand all its characteristics. All theoretical aspects have been included in this the first part of the project. The FPGA has been programmed by using the System Generator software from Xilinx that runs over the MATLAB/Simulink platform. The System Generator is a type of visual programming language (customized VHDL blocks) that is later compiled and loaded into the FPGA. All the developed process is included in the next part, explaining carefully all subsystems and the figures of merit: the Bit Error Rate (BER) and the Error Vector Magnitude. In all communications systems, between the transmitter and the receiver there’s a communications channel. This project is not taking into account any channel characterization or equalization. However, these figures of merit have been included to characterize the degradation suffered by the transmitted data due to the distortion, noise introduced by the communications channel. Finally, the simulated and experimental results are provided showing the correct functioning of the TX/RX M-QAM modulator/demodulator.
ÍNDICE CAPÍTULO 1. INTRODUCCIÓN ........................................................................ 1 CAPÍTULO 2. MULTIPLE QUADRATURE AMPLITUDE MODULATION <M- QAM> ................................................................................................................. 3 2.1. Modulaciones y canales ........................................................................... 3 2.1.1. Caracterización de modulaciones ..................................................... 4 2.2. Modulador M-QAM................................................................................... 5 2.2.1. Separación de bits ............................................................................. 6 2.2.2. Cuantificación .................................................................................... 8 2.2.3. Filtrado .............................................................................................. 8 2.3. Demodulador M-QAM ............................................................................ 10 2.3.1. Fase y cuadratura ........................................................................... 10 2.3.2. Filtro adaptado ................................................................................ 10 2.3.3. Decisor ............................................................................................ 11 2.4. Aplicaciones comunes de una M-QAM .................................................. 11 2.5. Otras modulaciones ............................................................................... 12 2.5.1. ASK <Amplitude Shift Keying> ........................................................ 12 2.5.2. PSK <Phase Shift Keying> .............................................................. 12 CAPÍTULO 3. HERRAMIENTAS DE IMPLEMENTACIÓN .............................. 13 3.1. Circuitos integrados ............................................................................... 13 3.2. Simulink & System Generator ................................................................ 14 3.2.1. System Generator de Xilinx ............................................................. 15 CAPÍTULO 4. SISTEMA M-QAM EN SYSTEM GENERATOR ....................... 21 4.1. PROGRAMACIÓN Y SIMULACIÓN EN MATLAB ................................. 22 4.1.1. Fuente de información ..................................................................... 22 4.1.2. Modulador ....................................................................................... 24 4.1.3. Selector de QAM ............................................................................. 28 4.1.4. Demodulador ................................................................................... 28 4.1.5. Cálculo BER .................................................................................... 30 4.1.6. Cálculo EVM ................................................................................... 32 4.1.7. Sincronización de todo el sistema ................................................... 33 4.2. SIMULACIÓN E IMPLEMENTACIÓN EN LA FPGA .............................. 36 4.2.1. Pruebas sin canal ruidoso ............................................................... 36 4.2.2. Pruebas con canal ruidoso .............................................................. 37
4.2.3. Implementación en la FPGA ........................................................... 40 CAPÍTULO 5. CONCLUSIONES ..................................................................... 42 5.1. Conclusiones sobre Simulink y Xilinx..................................................... 42 5.2. Conclusiones sobre el proceso de modulación QAM ............................ 42 BILIOGRAFIA ............................................................................................... 44 5.3. ANEXO A – PANEL DE CONTROL ....................................................... 46 5.4. ANEXO B – CÓDIGO MCODE .............................................................. 49 5.5. ANEXO C - CONSTELACIONES .......................................................... 69
Introducción 1 CAPÍTULO 1. INTRODUCCIÓN Durante todo el transcurso de la vida y la historia del ser humano, hay un aspecto que nos diferencia de cualquier otro ser vivo, y que nos ha permitido una evolución constante para llegar hasta el día de hoy tal y como lo conocemos: la comunicación. Desde los inicios más elementales, como la teoría del bú-bú, pasando por la lengua, las palomas mensajeras y los mensajeros reales a caballo, hasta llegar a los satélites artificiales de hoy día. Este término se ha convertido en un aspecto básico para la sociedad. Con un simple vistazo a nuestro alrededor, podemos darnos cuenta de la importancia de lo comentado: radio, televisión, telefonía móvil, Internet, etc. A grandes rasgos, se puede establecer un vínculo común entre todas las variantes de comunicación. Hay tres elementos básicos: emisor, canal y receptor. Fig. 1.1 Esquema elemental de una comunicación. El emisor se puede catalogar como el encargado de crear un mensaje de interés así como su codificación y transmisión. En segundo lugar tenemos el canal como el medio de transmisión por el que la información ofrecida por el emisor va a viajar. Por último, es necesario un destinatario al que le interese el mensaje del emisor y sea capaz de descodificarlo: este es el receptor. Este proyecto estudia todos estos ámbitos concretos referidos a la comunicación digital, entre los cuales cabe destacar la importancia de la modulación. Situándolo en el contexto del esquema de comunicación estaría referido al código utilizado, y que tanto receptor (demodulador) como emisor (modulador) deben conocer para poder entenderse. Para tener un esquema claro y conciso de un sistema de comunicaciones digitales es preferible centrarse en los aspectos técnicos (ver Fig. 1.2). Fig. 1.2 Esquema de una comunicación digital [2]
2 Implementación en una FPGA de un generador de señales moduladas M-QAM En este contexto es muy importante el canal por el que se transmite, ya que no todas las formas de comunicación son válidas para un mismo canal y hay que discernir entre un tipo de comunicación u otro. En este aspecto, el proyecto enfoca el problema del canal calculando la BER y la EVM, dando de esta forma, una idea de cómo afecta cada canal a la comunicación, y estando en idénticas situaciones, permite comparar los resultados de las diferentes modulaciones. Esto servirá para conocer qué tipo de modulación es más apropiada en cada caso, obteniendo al final, una comunicación más óptima. En cualquier caso, se pretende estudiar todo lo comentado desarrollando un modulador y un demodulador para una modulación de Quadrature Amplitude Modulation (QAM), con un generador aleatorio de bits. La estructura del proyecto sigue un orden lógico basándose, en primer lugar, en el estudio teórico y localización del objetivo, seguidamente se exponen las herramientas para conseguir ese objetivo, y finalmente se describe el desarrollo y los resultados. Inicialmente se introducirá una descripción teórica y detallada sobre el funcionamiento de la modulación QAM, tanto a nivel funcional (emisor y receptor) como de caracterización. Se expondrá el tema buscando una visión amplia de la evolución en los sistemas de comunicación. Es importante siempre, tener unos conocimientos mínimos antes de realizar cualquier proyecto, y el capítulo 1 y 2 son los pensados para esto, y para clarificar los objetivos finales. Una vez se tienen claros los objetivos y la teoría, el siguiente paso es conocer las herramientas de las que se dispone para desarrollar lo que se ha propuesto. El capítulo 3 explicará detalladamente los instrumentos de hardware (FPGA) y software (System Generator), con los que se realizará el proyecto. Llegados a este punto, ya se dispone del qué y el con qué, por lo que en el capítulo 4 se describirá el cómo, es decir, la ejecución de todo el sistema bloque a bloque y las simulaciones realizadas con el sistema completo, tanto en Simulink, como en la FPGA. Finalmente, se incluye un capítulo con las conclusiones más importantes del proyecto, en el que se intenta resumir los puntos que han sido más relevantes.
Herramientas de implementación 3 CAPÍTULO 2. MULTIPLE QUADRATURE AMPLITUDE MODULATION <M-QAM> Las modulaciones son un conjunto de técnicas que permiten transportar información entre un emisor y un receptor a través de una onda sinusoidal (normalmente) llamada portadora. Como se verá más adelante, el término modulación engloba diferentes metodologías de tratamiento de señal, cada una con sus ventajas y sus inconvenientes particulares, aunque todas ellas tienen en común que permiten incrementar el aprovechamiento del canal por el que se transmite. En este capítulo se pretende estudiar las modulaciones, profundizando sobretodo en las características de la M-QAM y sus usos más actuales. 2.1. Modulaciones y canales Hoy en día existen cantidad de señales codificadas a nuestro alrededor que circulan entre emisor y receptor sin apenas darnos cuenta, y lo más increíble es que se pueden diferenciar y elegir las que resultan útiles para nuestro aparato receptor. Esta es una de las principales propiedades de una modulación. Esto se puede lograr, entre otras cosas, gracias a las diferentes modulaciones existentes tales como M-QAM, AM, FM, FSK, ASK, M-PAM, M-PSK, etc. y sus respectivas particularidades. Las ondas sinusoidales que viajan a través del espacio, se pueden clasificar y medir hoy en día. Para ello, ha sido necesario la creación y el desarrollo de herramientas matemáticas concretas tales como la transformada de Fourier, ecuaciones de Maxwell (para más información ver [5]). El análisis espectral de Fourier se caracteriza por la transformación de señales temporales a señales frecuenciales. Hay que remarcar que esta técnica transforma señales no aleatorias, aunque también es posible hacerlo con aleatorias, como el ruido, mediante promediados. Una vez se obtuvieron las herramientas necesarias para el manejo de señales temporales, ya era posible clasificarlas espectralmente (espectro electromagnético, Fig. 2.1) (en relación a la luz, puede resultar muy interesante al lector, el experimento realizado por Newton sobre la difracción, y el de young sobre el carácter ondulatorio de la luz [1]). Fig. 2.1 Clasificación del espectro electromagnético
10 Implementación en una FPGA de un generador de señales moduladas M-QAM 2.3. Demodulador M-QAM Fig. 2.9 Esquema demodulador QAM 2.3.1. Fase y cuadratura En el demodulador QAM se recibe la señal, que utilizará un sistema de recepción u otro en función del canal utilizado. La información modulada estará en las componentes fase y cuadratura, es por este motivo por el que en primer lugar se separan ambas componentes (paso 1), pasándolas a banda base, mediante la multiplicación de un coseno y un seno de frecuencia equivalente a la portadora (demodulador I-Q). El filtro que se añade a continuación es simplemente para filtrar en banda base la señal (filtro paso bajo), y eliminar ruido y posible distorsión harmónica. 2.3.2. Filtro adaptado El tercer paso es utilizar un conversor analógico digital que permita cuantificar la señal, la señal, para filtrarla de nuevo digitalmente, (esta vez por el filtro adaptado, de coseno coseno realzado), obteniendo en cada rama los símbolos transmitidos inicialmente. El inicialmente. El proceso es el inverso al de la Fig. 2.7. La convolución entre la señal y el filtro se verá afectada en mayor o menor grado en función del estado del canal. Este aspecto hay que tenerlo muy en cuenta, ya que una señal recibida con poca SNR llevará a una pérdida de información importante. Existen técnicas que efectúan un rápido análisis del canal y lo caracterizan consiguiendo una respuesta impulsonial de este, que mediante un ecualizador de canal (que en este proyecto no se contempla), mejora sustancialmente su calidad.
Herramientas de implementación 11 2.3.3. Decisor Una vez se han conseguido los símbolos, se establecen unos intervalos de decisión o umbrales, que decidirán, en función del valor en amplitud y el instante de muestreo, a que símbolo pertenece el nivel de señal recibido. De alguna forma se puede entender como el paso inverso a la cuantificación del modulador (Fig. 2.6). Poco a poco se irán decidiendo los valores de la rama en fase y la rama en cuadratura, y finalmente (paso5), con la combinación de ambos, se mapearán los símbolos para obtener la palabra de bits resultante. 2.4. Aplicaciones comunes de una M-QAM La modulación QAM se utiliza en multitud de sistemas de comunicación digital hoy en día, algunos tan conocidos como ADSL, la televisión digital terrestre (TDT), en aplicaciones WiMAX, WiFi combinado con sistemas multiportadora y otros menos conocidos, pero de mucha importancia como los traffic node. Se ha creído interesante describir brevemente alguna aplicación clásica de la QAM para dar al lector una visión más amplia sobre el tema. 2.4.1.1. ADSL Inicialmente se compaginaron dos técnicas de modulación para el ADSL: CAP (Modulación de fase y amplitud con supresión de portadora) y DMT (Modulación multitono discreto). Finalmente, los organismos de estandarización (ANSI, ETSI e ITU) optaron por la solución DMT. Su funcionamiento consiste básicamente en el empleo de múltiples portadoras, dónde cada una de éstas (denominadas subportadoras) es modulada mediante una QAM de hasta 15 bits por símbolo. 2.4.1.2. TDT La Televisión Digital Terrestre es un tema en actual implantación y desarrollo, en el que el verdadero motivo de uso, es el mejor aprovechamiento del espectro disponible, lo que permite un mayor número de canales, mejor calidad de imagen o imagen de alta definición y mejor calidad de sonido. Esto se consigue mediante una COFDM, que al igual que en el ADSL, utiliza múltiples frecuencias portadoras moduladas en QAM. 2.4.1.3. Traffic Node Los Traffic Node son equipos de transmisión para telefonía móvil situados en puntos concretos de la red (Hubs, BSC). Su funcionamiento es muy parecido a un DXX, pero a nivel de dos megas (un tributario). Se encargan de
12 Implementación en una FPGA de un generador de señales moduladas M-QAM crosconectar y multiplexar el tráfico de diferentes estaciones base (BTS), consiguiendo de esta forma, un mayor aprovechamiento de la infraestructura y del ancho de banda disponible. Es necesario el uso de dos equipos traffic node, pues es una transmisión punto a punto. Para transmitir la información entre estos dos puntos se utiliza una modulación QAM, que puede variar en función del modelo de equipo. Para más información ver anexo C.4. 2.5. Otras modulaciones Se ha creído interesante hacer una breve introducción a estas modulaciones por su similitud con la QAM, pues puede ser de ayuda en la comprensión de ésta. 2.5.1. ASK <Amplitude Shift Keying> Su expresión viene dada por la siguiente ecuación: )2cos()()( 0 tfTsKthdkAtV k π ⋅⋅−⋅= ∑ (2.5) Como se observa y aunque esta modulación se caracteriza por utilizar únicamente la componente en fase (representa la información digital con variaciones de amplitud), es comparable a la rama del modulador QAM que se encarga de la información de fase. 2.5.2. PSK <Phase Shift Keying> )2()()( 0 tfsenTsKthdkAtV k π ⋅⋅−⋅= ∑ (2.6) A diferencia de la ASK, la PSK modula toda la información variando la fase de la portadora. Todo el proceso para obtener una QAM, se puede llegar a entender como la modulación simultánea de una ASK y una FSK en una misma portadora, teniendo en cuenta una serie de condiciones para las amplitudes (ver [4] para más información).
Herramientas de implementación 13 CAPÍTULO 3. HERRAMIENTAS DE IMPLEMENTACIÓN En este capítulo se quiere dar a entender al lector las herramientas utilizadas para la programación de esta modulación. Además, se pretende situar dentro de un contexto tecnológico y actual, el potencial de la tecnología utilizada, que es la base en la que se fundamenta el desarrollo de las telecomunicaciones. 3.1. Circuitos integrados Si nos situamos en el campo de las comunicaciones, para poder manipular una señal es necesaria una herramienta capaz de procesar la información a una elevada velocidad para minimizar en lo posible el efecto de retardo y aumentar al máximo la calidad de transmisión (manteniendo siempre un equilibrio velocidad-calidad). Hoy en día existen diferentes tipos de placas que nos lo permiten, pero las más utilizadas en la tecnología actual son las ASIC y las FPGA. Fig. 3.1. De izquierda a derecha: chip ASIC y chip de una FPGA Un ASIC (Application Specific Integrated Circuit) es un circuito integrado pensado para un solo uso en particular. Esto quiere decir que una vez se ha programado y litografiado no hay forma de poder utilizarlo para otro fin. Por ejemplo, los teléfonos móviles utilizan chips ASIC diseñados expresamente para ellos. La evolución de la tecnología y en concreto la miniaturización, ha permitido en los últimos años incrementar la cantidad de puertas lógicas contenidas en un ASIC, pasando de 5000 a más de 100 millones. Una FPGA (Field Programmable Gate Arrays) es un circuito integrado con millones de puertas lógicas, pero a diferencia de las ASIC, no son de un uso en concreto sino que las interconexiones y funcionalidades de los bloques lógicos pueden programarse. Como consecuencia son un poco más lentas y tienen un mayor consumo de potencia. Las FPGA son una evolución de las CPLD, poseen una mayor densidad de elementos lógicos, pero la principal diferencia está en su arquitectura, pues gracias a la enorme libertad entre las interconexiones entre bloques proporciona una gran flexibilidad.
14 Implementación en una FPGA de un generador de señales moduladas M-QAM Recientemente se ha comenzado a utilizar tecnologías híbridas que combinan FPGAs con microprocesadores y periféricos que ha permitido crear sistemas para la programación del chip. Este es nuestro caso concreto, en el que se utiliza una Virtex-4 de Xilinx para desarrollar el proyecto. Fig. 3.2. FPGA con microprocesadores y periféricos Gracias a esta combinación de tecnologías se puede, desde el ordenador personal de mesa, programar e incluso simular una FPGA. Para ello es imprescindible disponer de las aplicaciones necesarias: • Matlab • Simulink • System Generator (Librerias de Xilinx) El lenguaje de programación que se utilizará para la programación de la FPGA (Virtex-4) es VHDL, que es una mezcla entre VHSIC (Very High Speed Integrated Circuit), y HDL (Hardware Description Language). Se trabajará con una interfaz Simulink (de Matlab) (Fig. 3.3), desde el cual se accede a las librerías de System Generator de Xilinx. 3.2. Simulink & System Generator System Generator utiliza un modelo de programación gráfico y específico de bloques predefinidos preprogamados en VHDL, creados por la compañía Xilinx para sus FPGAs. Desde Simulink se puede acceder a las librerías deseadas y seleccionar el bloque que más convenga en cada momento. Estos bloques están pensados para poder hacer combinaciones ente ellos, de tal forma, que se obtiene una gran libertad a la hora de implementar un diseño. La base sobre la que se realiza la compilación es Matlab y por tanto es posible el intercambio de información entre Matlab y Simulink (y viceversa) en tiempo real, es decir, es posible la comunicación entre una fuente externa y la FPGA.
Herramientas de implementación 15 Fig. 3.3. Entorno Simulink con bloques de Xilinx. De esta forma, se pueden declarar e inicializar variables en Matlab para utilizarlas en Simulink. 3.2.1. System Generator de Xilinx Es importante conocer el funcionamiento y las posibilidades de cada bloque, sin ello es imposible llegar a entender el desarrollo del proyecto. Los bloques empleados en el proyecto son los siguientes: System Generator Es la base fundamental del proyecto que se crea. En este bloque se definen los parámetros básicos del sistema. Los más importantes son: Fig. 3.4 Bloque System Generator. 1. El modo de compilación a utilizar, es decir, el tipo de tarjeta, el modelo de FPGA, si se trata de una simulación, etc. 2. La parte de la FPGA que se utilizará. 3. El clock del hardware de la FPGA. 4. El periodo del sistema (Ts), que sincroniza todo el diseño a la hora de decidir en que instante salta el flag en los bloques que lo requieren (en todos estos bloques el periodo sólo se puede definir con valores múltiples enteros de Ts).
16 Implementación en una FPGA de un generador de señales moduladas M-QAM En nuestro caso particular las propiedades del System Generator quedan con estos datos: 1. PCI and USB (Simulación). 2. Virtex 4 xc4bsx35-10ff668. 3. 50 ns. 4. Ts (Ts=50 ns). Shared Memory Es un bloque de gran utilidad, que permite almacenar palabras de hasta 28 bits. Es muy manejable ya que las posiciones de memoria siempre son accesibles para su lectura o reescritura (si así se desea). Para poder utilizarlo, es necesario que esté inicializado y controlado desde Matlab (de hecho se puede tratar el bloque como una interfaz entre Matlab y la FPGA). Fig. 3.5 Shared Memory. • addr: mediante un puntero indica la posición de memoria que va a ser leída o modificada. Normalmente se coloca un contador para ir recorriendo todas las posiciones, y de esta forma rellenar toda la la Shared. El número máximo del contador debe coincidir con la cantidad de posiciones definidas en las opciones de la Shared. • din: puerto por el que la información entrante accede a la Shared para su escritura. • dout: puerto por el que obtenemos la información leída. • we: puerto que se utiliza para habilitar/deshabilitar la escritura en la memoria. Cuando está a 1, habilitamos la escritura. • Req: una característica importante y que ha aportado mucho al proyecto en calidad de datos. Este puerto nos ofrece la posibilidad de escoger entre Matlab o Simulink como origen de la fuente de información (din). Esto es muy interesante, pues es posible exportar datos de Simulink para poder trabajar con ellos en Matlab, y también es posible importar datos a Simulink desde Matlab. Puede tomar dos valores: 1 en caso de querer los datos de Simulink y 0 en caso de quererlos de Matlab. Single Port RAM Este bloque es muy similar a una Shared Memory, la única diferencia es que no hay que tener ningún control de él en Matlab. Simplemente es una memoria
Herramientas de implementación 17 para datos en Simulink. Los puertos de control tienen la misma utilidad que los anteriormente nombrados. Fig. 3.6 Single Port RAM (izquierda) y MCode (derecha). Mcode El gran comodín de Xilinx es sin duda este bloque. Permite cargar y ejecutar un breve código programado en Matlab (archivo con extensión .m) por el usuario. Es bastante limitado en cuanto a operabilidad, pero es de vital importancia para poder elaborar cualquier diseño. Mediante una cabecera en la que definimos las variables de entrada y salida, se puede crear una función personalizada (igual que una función en C). Bit Basher Otro bloque muy utilizado y que permite la extracción de bits de una palabra tanto individualmente (de uno en uno) como en grupos. Cuando se trabaja a nivel de bit es muy interesante su funcionalidad, pues su uso es de una facilidad extrema. Es importante tener claro que cuando se extrae el bit 0, se habla del bit con menos peso (LSB), es decir, entiende los bits según la siguiente estructura: Fig. 3.7 Numeración de los bits MSB-LSB (izquierda) y bloque Bit Basher (derecha). También ofrece la posibilidad de agrupar bits creando a la salida, palabras de N bits. El gran potencial de este bloque reside en la posibilidad de concatenar varios de ellos. FIR_Compiler Este bloque filtrará una señal a través del filtro que se diseñe y se asigne desde Matlab. Se utiliza este filtro para múltiples situaciones, pero en este caso
18 Implementación en una FPGA de un generador de señales moduladas M-QAM concreto servirá para suavizar las transiciones de la señal modulada, ya que en una transmisión real una transición con tiempo igual a cero, requiere un ancho de banda infinito. Básicamente hará las funciones de filtro conformador y filtro adaptado, configurándolo como interpolador (incrementa el número de muestras por símbolo) y diezmador (disminuye el número de muestras por símbolo) respectivamente. Fig. 3.8 FIR_Compiler Este bloque permite cargar filtros definidos en Matlab mediante una variable que se carga en las opciones del propio bloque. Mux El multiplexor que ofrece Xilinx es una herramienta que permite elegir en cada instante la entrada deseada. En el ejemplo del dibujo, hay dos posibles entradas que son seleccionadas para multiplexarse con la salida por el primer puerto sel. Se tiene la posibilidad de aumentar el número de entradas a un valor muy elevado, lo que da mucha libertad para manejar palabras de muchos bits. Fig. 3.9 Multiplexor de dos entradas Counter Contador simple y muy utilizado en el proyecto. Definiendo el número de bits y el valor incremental, irá dando a la salida los números consecutivos correspondientes. Tiene características opcionales muy interesantes y que son de gran ayuda, como por ejemplo el valor límite, puertos de reset, y enable. Es un elemento imprescindible para el uso de Shared’s y Mux, pues nos sirve de puntero para indicar en cada momento la posición a utilizar. Fig. 3.10 Por orden de izq. a dcha.: Counter, Constant, Cmult y Convert.
Herramientas de implementación 19 Constant Un bloque que proporciona un valor constante (ver Fig. 3.10). Se puede elegir el número de bits, el valor constante y la precisión (booleano, signed, unsigned). Cmult Este elemento permite multiplicar una señal de entrada por un valor definido en el bloque. Como la gran mayoría de componentes de Xinlinx, se puede escoger el formato de la señal de salida y su precisión (ver Fig. 3.10). Convert En muchas situaciones se requieren formatos concretos de valores para manipular un puerto de algún bloque. Xilinx da la solución ofreciendo un convertidor como este. Es de mucha utilidad para poder trabajar con un mismo valor en formatos distintos (paralelamente) (ver Fig. 3.10). Accumulator Crear un acumulador en Xilinx es una tarea ardua y costosa, pues es necesario coordinar una buena cantidad de bloques para conseguirlo (en Xilinx no existe la posibilidad de utilizar una variable global que se pueda ir incrementando). Con este elemento se obtiene todo ese trabajo de forma muy simplificada. Fig. 3.11 Accumulator. DAC y ADC Estos dos bloques permiten utilizar los puertos físicos de la FPGA para transmitir y recibir información. En los puertos de salida se utiliza el conversor Digital-Analógico, y en el de entrada el Analógico-Digital. Es importante saber que introducen un retardo de Ts entre ellos. Fig. 3.12 Conversores DA y AD de Xilinx.
26 Implementación en una FPGA de un generador de señales moduladas M-QAM Fig. 4.6. Símbolos de una modulación 4QAM. De izquierda a derecha: fase (1) y cuadratura (-1). Las constelaciones programadas para cada nivel de QAM se muestran en el anexo C. Como se ha comentado anteriormente, en la realidad no es posible trabajar con transiciones instantáneas. Esto supondría trabajar con pulsos rectangulares de transiciones instantáneas ( ∆ T=0), lo que en el mundo frecuencial correspondería a un ancho de banda infinito. Se precisará un filtro conformador para solucionar este problema. Los filtros FIR que se colocan a la salida del MCode, son precisamente para suavizar notablemente la transición de lo símbolos, pues en la realidad no existe ningún canal con un ancho de banda infinito. Para utilizar este bloque, se carga una variable llamada rccfilter que contiene los coeficientes de un coseno realzado que se ha definido inicialmente a través de Matlab mediante la función rcosine [3]. Se ha optado por elegir un coseno realzado con las siguientes características: Tabla 4.2 Características del filtro implementado para 4QAM y 16QAM. Orden 80 Complejidad del filtro (longitud) M uestras por símbolo 4 Muestras que interpolará y diezmará Rollof factor 0.25 Determina la forma y amortiguamiento de los lóbulos. Tabla 4.3 Características del filtro implementado para 64QAM Orden 96 Complejidad del filtro (longitud) Muestras por símbolo 6 Muestras que interpolará y diezmará Rollof factor 0.35 Determina la forma y amortiguamiento de los lóbulos.
Sistema M-QAM en Xilinx 27 Se han utilizado dos filtros distintos por motivos de sincronismo que se analizarán más adelante. La señal queda así convolucionada y lista para ser transmitida por un canal. Fig. 4.7. De izquierda a derecha: fase y cuadratura 4QAM donde el marcador señala el símbolo de la palabra “11”. En este punto es de vital importancia configurar manualmente la configuración de la señal a transmitir, pues se está limitado por esta característica de la FPGA, que utiliza un formato 14-13 en los puertos físicos de transmisión y recepción. Por este motivo se introduce un multiplicador (operador lineal) que atenúa la señal hasta un valor máximo que pertenezca al intervalo permitido. El formato 14-13, si se tiene en cuenta que debe ser signed, corresponde al intervalo [-0.9999, 0.9999]. Esta consideración de diseño es crítica, pues para cada modulación hay que tener en cuenta que utiliza unos valores de fase y cuadratura distintos (ver constelaciones en anexo C). Esto equivale a decir que el multiplicador debe ser ajustado en cada caso concreto, ya que de otra manera se saturarían los valores de la señal y se transmitirían símbolos erróneos. En la Tabla 4.4 se puede ver la configuración que debe seguir cada operador: Tabla 4.4 Configuración para cada bloque multiplicador Nivel modulación Formato de entrada Multiplicador Formato de salida 4QAM 16 - 10 1 14 - 13 16QAM 16 - 10 0.25 14 - 13 64QAM 16 - 10 0.1 14 - 13 Ahora ya se tiene el nivel de señal adecuado para su transmisión por los conversores A/D de la FPGA.
28 Implementación en una FPGA de un generador de señales moduladas M-QAM 4.1.3. Selector de QAM Este bloque se ha añadido una vez finalizado el esquema global, pues a la hora de implementar el sistema en la FPGA únicamente se dispone de dos puertos de entrada y dos de salida. Esto significa que solamente se puede transmitir las componentes en fase y cuadratura de un nivel de modulación QAM. Para conseguir una transmisión con cualquier tipo de QAM en tiempo real, se han utilizado dos bloques multiplexores en función de una variable numérica, que, determinada por el usuario, se corresponderá con el nivel de modulación deseada (Fig. 4.8). El primer MUX se encarga de la componente en fase, y el segundo de la componente en cuadratura. Fig. 4.8 Esquema y variables del selector QAM. 4.1.4. Demodulador Como se puede ver en la Fig. 4.9 este subsistema está formado por varios filtros FIR, y un MCode, y su función es la de recuperar la señal del canal y demodularla para entregar al receptor el mensaje inicial: Fig. 4.9. De arriba abajo: Esquema demodulador 4QAM, 16QAM y 64QAM.
Sistema M-QAM en Xilinx 29 En primer lugar se observa la necesidad de utilizar dos filtros FIR, que contienen un coseno realzado, para que este actúe como filtro adaptado. Este tipo de filtro, convoluciona la señal recibida con su coseno realzado. En una transmisión corriente siempre existe ruido gausiano blanco, de forma que el empleo del filtro conformador y el filtro adaptado son totalmente recomendables si se desea optimizar la SNR del sistema. Para tener éxito en esta convolución es necesario que coincidan las características del filtro transmisor como el del receptor, si no, el resultado de la convolución que se obtendría sería perjudicial para los instantes de decisión definidos en el demodulador (el siguiente bloque). Fig. 4.10. De izquierda a derecha: componentes fase y cuadratura de una 4QAM después de pasar por el filtro del receptor. Se puede observar fácilmente en la imagen la distribución de los símbolos recibidos, tanto para la componente en cuadratura, como para la de fase. El valor corresponde con el de transmisión (fase=1, cuadratura= -1). Posiblemente el siguiente paso es el más farragoso de todo el proyecto, pues a través del MCode se programa una rutina para cada nivel de modulación, en la que hay que configurar con cierta precisión los umbrales de decisión para dejar un margen de error entre símbolos. Inicialmente se ha optado por utilizar en todos los niveles de QAM un filtro estándar con las características ya mencionadas con anterioridad (página 26), con lo que se consigue minimizar al máximo la complejidad, operabilidad y manejabilidad de los filtros. De la Tabla 4.4 se observa que el sistema recibe los valores con formato 14 – 13, por lo que se añade un multiplicador a la entrada del MCode que amplifique la señal, y modifique el formato de nuevo para que coincida con los umbrales de decisión prefijados en el bloque dempaeador. Es importante en este punto decantarse y fijar estos valores, pues en caso de no hacerlo, el nivel de señal que llega al MCode después del diezmado variará considerablemente. Esto quiere decir que los valores de decisión pueden llegar a alterarse mucho y provocar una demodulación errónea. En la Fig. 4.9 se observa que los valores
30 Implementación en una FPGA de un generador de señales moduladas M-QAM del multiplicador equivalen al valor inverso del operador fijado en el modulador (figura 4.4). Esta es una opción que permite conseguir valores iguales a los símbolos de transmisión, en el receptor. La salida del bloque MCode proporcionará los bits de la palabra transmitida, y los símbolos recibidos, finalizando aquí el proceso de comunicación de esa palabra. En la Fig. 4.11 se observan los bits recibidos, es decir, la información inicial modulada y demodulada. Fig. 4.11. De izquierda a derecha: b1 y b0 en recepción (b1=1, b0=1). 4.1.5. Cálculo BER Este cálculo permite conocer la tasa de error entre el transmisor y el receptor a nivel de bit. La BER no es más que los errores ocurridos dentro de una cantidad limitada de bits, es decir, cada X bits transmitidos se hace recuento de los bits erróneos (pues se está comparando constantemente los bits transmitidos con los recibidos) y se obtiene su cociente. 100·(%) Txbitsdetotal erróneosBitsde BER ∑ ∑ = (4.1) Se observa que bitsdetotalNerróneoBitsdeN ºº ≤ , por lo que la BER tendrá como valor máximo 1, es decir 10 ≤ ≤ BER . En las modulaciones digitales, para conseguir una comunicación más robusta a posibles errores, existen técnicas de codificación que consiguen corregirlos o detectarlos en función de la cantidad de bits redundantes que se introduzcan (en caso de introducir bits de codificación para la protección de datos, en el receptor también se debe tener en cuenta). La BER puede ser un buen parámetro para, por ejemplo, determinar esta redundancia.
Sistema M-QAM en Xilinx 31 Para un mayor entendimiento del funcionamiento de este mecanismo se recurrirá a la ejemplificación de los casos a través de la modulación 4QAM. Fig. 4.12. Bloques encargados del cálculo de la BER Para el diseño de este subsistema, es necesaria la diferenciación entre tres elementos principales: el selector de bits, el comparador y el acumulador. 4.1.5.1. Selector Este bloque es sencillamente un MUX que da a la salida los bits de la entrada pero de uno en uno y consecutivos (pasa los bits de paralelo a serie). Esto es necesario para la posterior comparación con los bits transmitidos. 4.1.5.2. Comparador Sencillamente es un bloque que contiene otro selector, pero en este caso para los bits de información, y una puerta XOR para comparar ambas ristras de bits (bit a bit). En la tabla se observa que en caso de paridad entre bits la salida es 0, por lo contrario, en caso de disparidad entre bits la salida es 1. Tabla 4.5 Puerta lógica XOR B1 B0 XOR 0 0 0 0 1 1 1 0 1 1 1 0 4.1.5.3. Acumulador Se encarga de sumar, mediante un acumulador, la cantidad de veces que va apareciendo el “1” dado por el comparador. Esta suma se resetea cada 1024 bits, momento en el que se calcula el cuociente entre el acumulado y los 1024 bits.
32 Implementación en una FPGA de un generador de señales moduladas M-QAM Fig. 4.13 Contador de errores (para BER y EVM). En resumen, se obtendrá el valor de la BER en tiempo real cada 1024 bits transmitidos. Es importante comentar que se ha conseguido un diseño que no pierde ninguna comparación entre bits, pero para ello es necesario un buen sincronismo. Este aspecto es especialmente delicado, pues en el instante de realizar la comparación es básica la correspondencia entre ambos bits, si no, se estarían comparando parejas de bits erróneas, con el consecuente error en el cálculo de la BER. Para solucionar esto se ha optado por utilizar una fuente con un valor constante, consiguiendo de esta forma una secuencia de bits predecible. Comparando las cadenas de bits justo en la entrada de la XOR en un intervalo de tiempo concreto, es fácil observar y cuantificar el retardo que hay entre la señal de información y la demodulada. Una vez se conoce el retardo, colocando un simple bloque Delay con ese valor encontrado, conseguimos sincronizar el sistema. 4.1.6. Cálculo EVM Este subsistema conceptualmente funciona exactamente igual que el del cálculo de la BER, pero cambiando bits por símbolos. Las diferencias son a nivel de diseño, pues en vez de utilizar una puerta XOR para comparar, se ha decidido utilizar un MCode programable. Su tabla de resultados es la siguiente: Tabla 4.6 Configuración MCode S 1 S 0 dout MCode 1 1 0 1 -1 1 -1 1 1 -1 -1 0 Evidentemente, variarán por completo todos los valores de sincronismo habiendo así, que realizar otro estudio completo en este aspecto.
Sistema M-QAM en Xilinx 33 Fig. 4.14 Configuración del subsistema EVM. Tanto para el cálculo de la BER como para el de la EVM se ha realizado un análisis de los retardos para los diferentes niveles de QAM, pues los procesos de modulación son diferentes. Además los sistemas trabajan con mayor número de bits, por lo cual el diseño varía en la parte del selector (MUX). 4.1.7. Sincronización de todo el sistema En este punto se explicará un aspecto clave en el desarrollo del proyecto, el apartado que conlleva la unificación de todos los subsistemas. Hay un concepto básico a entender, que es vital para sincronizar correctamente cada uno de los bloques con el anterior, y este es el concepto del tiempo Ts del sistema. Hay que hacer especial hincapié en este aspecto, pues cuando se dice que un bloque posee un periodo Ts, hay que entender que durante todo Ts, la salida del bloque mantendrá el valor que corresponda en ese instante. El primer paso es diferenciar los subsistemas que poseen un periodo fijo e invariable, estos son, el modulador y el demodulador, que debido al filtraje deben tener como mínimo, Ts·mostxsimb. A partir de aquí se adaptará el resto del sistema. El método que se ha seguido para sincronizar el sistema es secuencial, empezando por los periodos inamovibles, y adaptando finalmente los subsistemas anteriores y los posteriores a ese punto. 4.1.7.1. Sincronización 4QAM Como se ha dicho, el período inamovible corresponde al modulador/demodulador, y posee un valor Ts·mostximb. Esto significa que en el bloque MCode del modulador (Fig. 4.3) y demodulador (Fig. 4.9) debe ser específico el retardo, por lo que a la entrada del MCode deben llegar los bits con este mismo periodo. En caso de ser menor, los bits no podrían procesarse bien antes de la llegada de nuevos bits, por lo que se perdería información, y
34 Implementación en una FPGA de un generador de señales moduladas M-QAM en caso de ser mayor, podría enviarse la información por duplicado, o se retardaría mucho la comunicación. Se entiende entonces, que para que los bits lleguen con la cadencia adecuada, hay que ir al bloque anterior para regular el flujo. Como se observa en la Fig. 4.3, el encargado de regularlo es el contador, por lo que se procede a especificarle un periodo de Ts·mostxsimb. De nuevo, aparece el mismo problema en el bloque separador de bits Fig. 4.3a. Se debe encontrar un periodo para el flujo de palabras aleatorias que llegan a este bloque, de forma que no solape información. Se parte del hecho que el contador funciona con un periodo Ts·mostxsimb, lo que significa que multiplexará cada entrada con la salida en ese tiempo. Si se tiene en cuenta que debe multiplexar 14 entradas, este bloque tardará Ts·mostxsimb·14 en multiplexar una palabra de 28 bits entera (ver Tabla 4.1). Este será el valor de retardo de la fuente de información para 4QAM. Una vez se tiene la parte inicial sincronizada, se pasa a la final (cálculo de BER). Fig. 4.15. Vista interior del subsistema “comparación bits QAM”. Como el MCode del demodulador da los bits en paralelo, y la única forma de comparar bits uno a uno (BER) es en serie, es necesario el uso del MUX (Fig. 4.12). Se sabe que los bits llegan a este bloque con un periodo de Ts·mostxsimb (se mantiene el valor durante Ts·mostxsimb), por lo que al tratarse de una 4QAM, querrá decir que llegan 2 bits demodulados en paralelo, cada y durante Ts·mostxsimb. El periodo correcto del contador del MUX ha de ser entonces (Ts·mostxsimb)/2, de esta forma la cadencia permitirá pasar de paralelo a serie sin pérdida de información. Se ha pasado entonces de un flujo inicial Ts·mostxsimb a (Ts·mostxsimb)/2 (Fig. 4.15 punto 1). La misma operación hay que realizar con los bits de información originales en el subsistema “comparación bits 4QAM”. El caso es idéntico, pues como se ha comentado, el periodo de los bits sin modular también es Ts·mostxsimb. Se tendrá en el punto 2, (Ts·mostxsimb)/2. Se observa que la cadencia es la misma, por lo que es totalmente factible la comparación bit a bit, el único inconveniente reside en el retardo existente entre el punto 1 y 2 (a diferencia del punto 2, la información que llega al punto 1 ha sido manipulada por diferentes bloques provocando cierto retardo). La solución es sencilla, comparando las gráficas en los dos puntos nombrados se puede obtener el retardo en múltiplos de Ts. Únicamente es necesario añadir un bloque
Sistema M-QAM en Xilinx 35 retardadador con ese valor, consiguiendo así que el punto 1 y 3 estén totalmente sincronizados para la comparación entre bits. 4.1.7.2. Sincronización 16QAM La sincronización de la 16QAM es muy similar a la 4QAM. Inicialmente se tiene el mismo periodo invariable Ts·mostxsimb en el modulador y demodulador, por lo que en el subsistema Aleatorio, el contador del MUX (Fig. 4.3 b) debe tener un flujo Ts·mostxsimb. La diferencia con a la 4QAM radica en el número de entradas que tiene el multiplexor, que en este caso son 7. Entonces, la fuente de información, es decir, el contador de la shared memory (Fig. 4.2), deberá tener un periodo Ts·mostxsimb·7. De la misma forma que anteriormente, para el cálculo de la B.E.R, es imprescindible una buena sincronización. El proceso a seguir es exactamente igual que el descrito en la 4QAM, con la diferencia que el MUX paralelo/serie recibe 4 bits del demodulador en vez de 2, lo que significa que deberá tener un contandor con periodo Ts·mostxsimb/4 = Ts. Como el proceso de modulación es diferente al 4QAM, el retardo acumulado entre los puntos 1 y 2 también lo será. Se procede a su cálculo utilizando el mismo método y añadiendo un delay, consiguiendo la sincronización deseada entre los puntos 1 y 3. 4.1.7.3. Sincronización 64QAM Para esta modulación, se ha utilizado un coseno realzado de 6 muestras por símbolo para los filtros. Para entender el motivo del uso de un filtro diferente a las otras modulaciones, hay que observar el MUX extractor de bits de la BER. En una 64QAM se transmiten 6 bits por símbolo, esto quiere decir que el MUX nombrado tendrá, como mínimo, un retardo de 6·Ts. Si se empleara un filtro con mostxsimb=4, no daría tiempo a multiplexar todos los bits, ya que cuando el MUX alcanzara el cuarto bit, en el siguiente Ts llegaría una palabra de seis bits nueva, con la consecuente pérdida del quinto y sexto bit. En cambio, al utilizar mostxsimb=6, la palabra con los seis bits nuevos llegará en el momento adecuado. Partiendo de esta premisa, se sincronizan el resto de los bloques de igual forma que la 4QAM y la 16QAM. Únicamente hay que tener en cuenta el hecho de que la palabra aleatoria inicial se partirá en 4 palabras de menor peso (28/6= 4.67), y por tanto habrá 4 bits que se perderán.
42 Implementación en una FPGA de un generador de señales moduladas M-QAM CAPÍTULO 5. CONCLUSIONES Una vez finalizadas todas las simulaciones y pruebas es posible alcanzar una serie de conclusiones tanto a nivel de herramientas de desarrollo, como de la propia modulación M-QAM. Este capítulo recoge todas las observaciones que se han ido experimentando durante el transcurso del proyecto. Se ha decidido separar las conclusiones en dos partes, por un lado las relacionadas con las herramientas empleadas, y por otro lado las referentes a la propia modulación y el proceso de comunicación. 5.1. Conclusiones sobre Simulink y Xilinx • Cuando se trabaja con periodos de tiempo (Ts) diferentes en un mismo sistema, es difícil conseguir una buena sincronización, ya que Simulink únicamente acepta múltiples enteros positivos de Ts. En muchos casos es necesario pasar de paralelo a serie y viceversa, lo que conlleva trabajar con dos periodos diferentes. • Se debe minimizar en lo posible el uso de Shared Memory’s, pues los recursos de memoria de la FPGA son limitados, lo que puede suponer un problema de implementación si se basa el diseño en una cantidad excesiva de estos bloques. • Siguiendo la línea anterior, es importante y necesaria la optimización del sistema software para ahorrar recursos hardware (programación eficiente). • Existe un problema en la interpretación de datos directa entre Simulink y Matlab cuando se desea hacer una exportación. Hay que saber en todo momento que se quiere visualizar, es decir, que configuración de bits es la correcta para poder hacer una reinterpretación de los datos. • Cuando se simula sobre la FPGA, existe un cierto retardo entre el conversor D/A (emisor) y el A/D (receptor) que hay que tener en cuenta para el sincronismo del sistema. Es muy recomendable el uso de un retardo variable controlado manualmente desde Matlab. 5.2. Conclusiones sobre el proceso de modulación QAM • La modulación QAM posee un aprovechamiento mayor del ancho de banda asignado que otras modulaciones como ASK, PSK, etc., ya que utiliza números complejos en su mapeado (cuadratura y fase). • En un canal con ruido, la probabilidad de error aumenta (o la probabilidad de demodular mal) conforme aumenta el número de bits por símbolo. A mayor nivel de modulación más información transmitida
Conclusiones 43 instantáneamente, pero la distancia entre símbolos decrece (si se mantiene la misma potencia de transmisión), lo que implica una mayor probabilidad de error, ya que los intervalos de decisión son menos robustos a variaciones pequeñas de la señal. • La correcta sincronización en este tipo de comunicaciones es vital, retardarse o adelantarse puede suponer la pérdida de toda la información. La sincronización entre transmisor y receptor fundamenta la comprensión del mensaje. • La forma de la respuesta impulsional escogida en el filtro conformador y adaptado, (concretamente la cantidad de muestras por símbolo), hace variar considerablemente el ancho de banda de la señal, pues a mayor cantidad de muestras por símbolo más suave es la curva de transición entre símbolos, y por tanto menor es el ancho de banda utilizado en la comunicación. Si elegimos un número de muestras por símbolo demasiado elevado la comunicación se ralentiza mucho. • Gracias al mapeado utilizado en la modulación (Código Gray), la BER siempre es mucho menor que la EVM Esto es debido, a que cuando se comete un error en la transmisión de un símbolo, el recibido tendrá muchísimas posibilidades de ser próximo al verdadero. El código de Gray tiene esta característica presente para el diseño de su mapeado, configurándolo de forma, que los símbolos cercanos entre si disten un bit. De esta forma de disminuye considerablemente la BER frente a la EVM
44 Implementación en una FPGA de un generador de señales moduladas M-QAM BILIOGRAFIA [1] Lozano Leyva, M., De Arquímedes a Einstein, Grupo editorial Random House Mondadori, S.L., Barcelona, 2006. [2] Proakis, John G. Saheli, M., Digital communications, Prentice Hall, United States, 1994. [3] Manual de Matlab [4] Wikipedia [5] Cardama Aznar, A., Antenas, Edicions UPC, Barcelona, 1998. [6] Berenguer Sau, J., Radiofreqüència, Una introducció experimental, Edicions UPC, Barcelona, 1998.
Conclusiones 45 ANEXOS TÍTULO DEL TFC: Implementación en una FPGA de un generador de señales moduladas M-QAM. TITULACIÓN: Ingeniería Técnica de Telecomunicaciones, especialidad en sistemas de telecomunicación. AUTOR: Enric Pulido Escruela DIRECTOR: FECHA:
46 Implementación en una FPGA de un generador de señales moduladas M-QAM 5.3. ANEXO A – PANEL DE CONTROL A.1 Código para el control del modulador y el demodulador. %################################################# %VALORS INICIALS %################################################# Ts=25e-9; n=64; Typemod=0; Delay=0; AWGN=0; Graph=0; offset=10; ordre=80;%72;%96 mostxsimb=4;%12;%16 retard=ordre/(mostxsimb*2); rolloff=0.25; L=1024; rrcfilter = rcosine(1,mostxsimb,'fir/sqrt',rolloff,retard); tall=0; RefreshBER=1024; q=quantizer([14 8]); q2=quantizer([14 10]); q3=quantizer([14 13]); ordre2=96;%72;%84; rolloff2=0.35;%0.9; mostxsimb2=6;%12;%6; retard2=ordre2/(mostxsimb2*2); rrcfilter2 =(rcosine(1,mostxsimb2,'fir/sqrt',rolloff2,retard2)); Tsmemo=Ts; Tsmemo2=Ts*mostxsimb; %################################################# %SHARED MEMORY %################################################# %SHARED DE CONTROL ContMEM=SharedMemory('ControlMEM'); ContMEM2=SharedMemory('ControlMEM2'); ContALE=SharedMemory('ControlALE'); ContALE2=SharedMemory('ControlALE64'); ContAWGN=SharedMemory('ControlAWGN'); %SHARED DE RESULTATS Res=SharedMemory('Results'); Res2=SharedMemory('Results2'); Res3=SharedMemory('Results3'); %sortida modulador %Shared's VALORS Aleatoris Mem=SharedMemory('Memo'); Mem2=SharedMemory('Memo2'); Mem3=SharedMemory('Memo3'); %################################################# %ESCOLLIM MODULACIÓ %################################################# %0=4QAM; 1=16QAM; 2=64QAM TypeMOD=dec2bin(2,2);
Conclusiones 47 %################################################# %ESCOLLIM DELAY %################################################# Delay=dec2bin(0,10); %################################################# %ESCOLLIM NIVELL SOROLL %################################################# AWGN=num2bin(q3,0.0); %################################################# %ESCOLLIM EL TIPU DE GRAFIC en RES %################################################# %0=IQ_4QAM_PRE__FILT; 1=IQ_16QAM_PRE__FILT; %2=IQ_4QAM_POST_FILT; 3=IQ_16QAM_POST_FILT; Graph=dec2bin(1,2); ContAWGN(0)=bin2dec([Graph Delay TypeMOD AWGN]); %################################################# %PROVES %################################################# ContALE(:)=bin2dec('00'); %Actives Shared Valors aleatoris ContALE2(:)=bin2dec('00'); var=randint(1024, 1, 2^28); Mem(:)=(var); Mem2(:)=(var); Mem3(:)=(var); ContALE(:)=bin2dec('01'); ContALE2(:)=bin2dec('01'); %ACTIVAR CAPTURA DE DADES ContMEM(:)=bin2dec('111'); ContMEM2(:)=bin2dec('111'); %PASSAR DADES A MATLAB ContMEM(:)=bin2dec('000'); ContMEM2(:)=bin2dec('000'); %################################################# %PLOTAR LUTS %################################################# plot(Res(:)); hold on; plot(Res3(:),'r'); plot(Res2(:)); figure(2); plot(Res(:)); for i=1:1:L Resultat=dec2bin(Res2(i-1),28); Res_I(i)=bin2num(q3,Resultat(1:1:14)); Res_Q(i)=bin2num(q3,Resultat(15:1:28)); end plot(complex(Res_I,Res_Q),'.r'); plot(Res_I,'r') hold on; plot(Res_Q,'b') for i=1:1:L Resultat2=dec2bin(Res3(i-1),28); Res3_I(i)=bin2num(q3,Resultat2(1:1:14)); Res3_Q(i)=bin2num(q3,Resultat2(15:1:28));
48 Implementación en una FPGA de un generador de señales moduladas M-QAM end plot(complex(Res_I,Res_Q),'.r'); plot(Res3_I,'b') hold on; plot(Res3_Q,'b') plot(Res3_I*(max(Res_I)/max(Res3_I)),'b'); pp=num2bin(q,Res(:)); val=bin2num(q2,pp); plot(val); %################################################# %RESET LUTS %################################################# release(ContMEM); release(ContMEM2); release(ContAWGN); release(Res); release(Res2); release(Res3); release(ContALE); release(ContALE2); release(Mem); release(Mem2); release(Mem3);
Conclusiones 49 5.4. ANEXO B – CÓDIGO MCODE B.1 Modulador 4QAM function [I,Q] = fourQAM(b0,b1) I=4;%FASE Q=4;%QUADRATURA % | % 00 | 01 % -----|----- % 10 | 11 % | if b0==0 && b1==0 I=-1; Q=1; end if b0==0 && b1==1 I=-1; Q=-1; end if b0==1 && b1==0 I=1; Q=1; end if b0==1 && b1==1 I=1; Q=-1; end end B.2 Modulador 16QAM function [I,Q] = sexteenQAM(b0,b1,b2,b3) I=30; Q=30; %****************************** % GRAY CODE * %****************************** % | * % 0000 0100 | 1100 1000 * % | * % 0001 0101 | 1101 1001 * % | * % ------------|------------ * % | * % 0011 0111 | 1111 1011 * % | * % 0010 0110 | 1110 1010 * % | * %****************************** if b3==0 && b2==0 && b1==0 && b0==0 I=-3;
50 Implementación en una FPGA de un generador de señales moduladas M-QAM Q=3; end if b3==0 && b2==0 && b1==0 && b0==1 I=-3; Q=1; end if b3==0 && b2==0 && b1==1 && b0==0 I=-3; Q=-3; end if b3==0 && b2==0 && b1==1 && b0==1 I=-3; Q=-1; end if b3==0 && b2==1 && b1==0 && b0==0 I=-1; Q=3; end if b3==0 && b2==1 && b1==0 && b0==1 I=-1; Q=1; end if b3==0 && b2==1 && b1==1&& b0==0 I=-1; Q=-3; end if b3==0 && b2==1 && b1==1 && b0==1 I=-1; Q=-1; end if b3==1 && b2==0 && b1==0 && b0==0 I=3; Q=3; end if b3==1 && b2==0 && b1==0 && b0==1 I=3; Q=1; end if b3==1 && b2==0 && b1==1 && b0==0 I=3; Q=-3; end if b3==1 && b2==0 && b1==1 && b0==1 I=3; Q=-1; end if b3==1 && b2==1 && b1==0 && b0==0 I=1; Q=3; end if b3==1 && b2==1 && b1==0 && b0==1 I=1; Q=1; end if b3==1 && b2==1 && b1==1 && b0==0 I=1; Q=-3; end if b3==1 && b2==1 && b1==1 && b0==1 I=1; Q=-1;
Conclusiones 51 end end B.3 Modulador 64QAM function [b3,b2,b1,b0] = sexteenQAM_dem(I,Q) %------------------------------------------ %Orden de los bits -> [b3=MSB,b2,b1,b0=LSB] %------------------------------------------ b0=3; b1=3; b2=3; b3=3; fase = xfix({xlSigned,14,11,xlRound,xlWrap}, I); quad = xfix({xlSigned,14,11,xlRound,xlWrap}, Q); umbral=1; if fase<-umbral && quad>umbral b3=0; b2=0; b1=0; b0=0; end if fase<-umbral && quad<umbral b3=0; b2=0; b1=0; b0=1; end if fase>-umbral && quad<umbral b3=0; b2=1; b1=0; b0=1; end if fase<-umbral && quad>umbral b3=0; b2=1; b1=0; b0=0; end if fase<umbral && quad<umbral b3=1; b2=1; b1=0; b0=1; end if fase<umbral && quad>umbral b3=1; b2=1; b1=0; b0=0; end if fase>umbral && quad<umbral b3=1; b2=0; b1=0; b0=1; end if fase>umbral && quad>umbral b3=1; b2=0;
58 Implementación en una FPGA de un generador de señales moduladas M-QAM end if fase<umbral2 && fase >umbral && quad>umbral0 && quad<umbral b5=0; b4=0; b3=0; b2=0; b1=0; b0=1; I2=3; Q2=1; end if fase<umbral2 && fase >umbral && quad>umbral && quad<umbral2 b5=0; b4=0; b3=0; b2=0; b1=1; b0=1; I2=3; Q2=3; end if fase<umbral2 && fase >umbral && quad>umbral2 && quad<umbral3 b5=0; b4=0; b3=1; b2=0; b1=1; b0=1; I2=3; Q2=5; end if fase<umbral2 && fase >umbral && quad>umbral3 b5=0; b4=0; b3=1; b2=0; b1=0; b0=1; I2=3; Q2=7; end if fase<umbral2 && fase >umbral && quad>-umbral && quad<-umbral0 b5=0; b4=1; b3=0; b2=0; b1=1; b0=0; I2=3; Q2=-1; end if fase<umbral2 && fase >umbral && quad>-umbral2 && quad<-umbral b5=0; b4=1; b3=0; b2=0; b1=1; b0=1; I2=3; Q2=-3; end
Conclusiones 59 if fase<umbral2 && fase >umbral && quad>-umbral3 && quad<-umbral2 b5=0; b4=1; b3=0; b2=1; b1=1; b0=1; I2=3; Q2=-5; end if fase<umbral2 && fase >umbral && quad<-umbral3 b5=0; b4=1; b3=0; b2=1; b1=1; b0=0; I2=3; Q2=-7; end if fase<umbral3 && fase >umbral2 && quad<umbral && quad>umbral0 b5=0; b4=0; b3=0; b2=1; b1=0; b0=1; I2=5; Q2=1; end if fase<umbral3 && fase >umbral2 && quad<umbral2 && quad>umbral b5=0; b4=0; b3=0; b2=1; b1=1; b0=1; I2=5; Q2=3; end if fase<umbral3 && fase >umbral2 && quad<umbral3 && quad>umbral2 b5=0; b4=0; b3=1; b2=1; b1=1; b0=1; I2=5; Q2=5; end if fase<umbral3 && fase >umbral2 && quad>umbral3 b5=0; b4=0; b3=1; b2=1; b1=0; b0=1; I2=5; Q2=7; end if fase<umbral3 && fase >umbral2 && quad<0 && quad>-umbral
60 Implementación en una FPGA de un generador de señales moduladas M-QAM b5=0; b4=1; b3=1; b2=0; b1=1; b0=0; I2=5; Q2=-1; end if fase<umbral3 && fase >umbral2 && quad<-umbral && quad>-umbral2 b5=0; b4=1; b3=1; b2=0; b1=1; b0=1; I2=5; Q2=-3; end if fase<umbral3 && fase >umbral2 && quad<-umbral2 && quad>- umbral3 b5=0; b4=1; b3=1; b2=1; b1=1; b0=1; I2=5; Q2=-5; end if fase<umbral3 && fase >umbral2 && quad<-umbral3 b5=0; b4=1; b3=1; b2=1; b1=1; b0=0; I2=5; Q2=-7; end if fase>umbral3 && quad<umbral && quad>umbral0 b5=0; b4=0; b3=0; b2=1; b1=0; b0=0; I2=7; Q2=1; end if fase>umbral3 && quad<umbral2 && quad>umbral b5=0; b4=0; b3=0; b2=1; b1=1; b0=0; I2=7; Q2=3; end if fase>umbral3 && quad<umbral3 && quad>umbral2
Conclusiones 61 b5=0; b4=0; b3=1; b2=1; b1=1; b0=0; I2=7; Q2=5; end if fase>umbral3 && quad>umbral3 b5=0; b4=0; b3=1; b2=1; b1=0; b0=0; I2=7; Q2=7; end if fase>umbral3 && quad<-umbral0 && quad>-umbral b5=0; b4=1; b3=1; b2=0; b1=0; b0=0; I2=7; Q2=-1; end if fase>umbral3 && quad<-umbral && quad>-umbral2 b5=0; b4=1; b3=1; b2=0; b1=0; b0=1; I2=7; Q2=-3; end if fase>umbral3 && quad<-umbral2 && quad>-umbral3 b5=0; b4=1; b3=1; b2=1; b1=0; b0=1; I2=7; Q2=-5; end if fase>umbral3 && quad<-umbral3%32 b5=0; b4=1; b3=1; b2=1; b1=0; b0=0; I2=7; Q2=-7; end if fase<-umbral0 && fase >-umbral && quad<umbral && quad>umbral0 b5=1;
62 Implementación en una FPGA de un generador de señales moduladas M-QAM b4=0; b3=0; b2=0; b1=0; b0=0; I2=-1; Q2=1; end if fase<-umbral0 && fase >-umbral && quad<umbral2 && quad>umbral b5=1; b4=0; b3=0; b2=0; b1=0; b0=1; I2=-1; Q2=3; end if fase<-umbral0 && fase >-umbral && quad<umbral3 && quad>umbral2 b5=1; b4=0; b3=0; b2=1; b1=0; b0=1; I2=-1; Q2=5; end if fase<-umbral0 && fase >-umbral && quad>umbral3 b5=1; b4=0; b3=0; b2=1; b1=0; b0=0; I2=-1; Q2=7; end if fase<-umbral0 && fase >-umbral && quad<-umbral0 && quad>- umbral b5=1; b4=1; b3=0; b2=0; b1=0; b0=0; I2=-1; Q2=-1; end if fase<-umbral0 && fase >-umbral && quad<-umbral && quad>- umbral2 b5=1; b4=1; b3=0; b2=0; b1=1; b0=0; I2=-1; Q2=-3; end
Conclusiones 63 if fase<-umbral0 && fase >-umbral && quad<-umbral2 && quad>- umbral3 b5=1; b4=1; b3=1; b2=0; b1=1; b0=0; I2=-1; Q2=-5; end if fase<-umbral0 && fase >-umbral && quad<-umbral3 b5=1; b4=1; b3=1; b2=0; b1=0; b0=0; I2=-1; Q2=-7; end if fase<-umbral && fase >-umbral2 && quad<umbral && quad>umbral0 b5=1; b4=0; b3=0; b2=0; b1=1; b0=0; I2=-3; Q2=1; end if fase<-umbral && fase >-umbral2 && quad<umbral2 && quad>umbral b5=1; b4=0; b3=0; b2=0; b1=1; b0=1; I2=-3; Q2=3; end if fase<-umbral && fase >-umbral2 && quad<umbral3 && quad>umbral2 b5=1; b4=0; b3=0; b2=1; b1=1; b0=1; I2=-3; Q2=5; end if fase<-umbral && fase >-umbral2 && quad>umbral3 b5=1; b4=0; b3=0; b2=1; b1=1; b0=0; I2=-3; Q2=7; end
64 Implementación en una FPGA de un generador de señales moduladas M-QAM if fase<-umbral && fase >-umbral2 && quad<-umbral0 && quad>- umbral b5=1; b4=1; b3=0; b2=0; b1=0; b0=1; I2=-3; Q2=-1; end if fase<-umbral && fase >-umbral2 && quad>-umbral2 && quad<- umbral b5=1; b4=1; b3=0; b2=0; b1=1; b0=1; I2=-3; Q2=-3; end if fase<-umbral && fase >-umbral2 && quad>-umbral3 && quad<- umbral2 b5=1; b4=1; b3=1; b2=0; b1=1; b0=1; I2=-3; Q2=-5; end if fase<-umbral && fase >-umbral2 && quad<-umbral3 b5=1; b4=1; b3=1; b2=0; b1=0; b0=1; I2=-3; Q2=-7; end if fase<-umbral2 && fase >-umbral3 && quad<umbral && quad>umbral0 b5=1; b4=0; b3=1; b2=0; b1=1; b0=0; I2=-5; Q2=1; end if fase<-umbral2 && fase >-umbral3 && quad<umbral2 && quad>umbral b5=1; b4=0; b3=1; b2=0; b1=1; b0=1; I2=-5;
Conclusiones 65 Q2=3; end if fase<-umbral2 && fase >-umbral3 && quad<umbral3 && quad>umbral2 b5=1; b4=0; b3=1; b2=1; b1=1; b0=1; I2=-5; Q2=5; end if fase<-umbral2 && fase >-umbral3 && quad>umbral3 b5=1; b4=0; b3=1; b2=1; b1=1; b0=0; I2=-5; Q2=7; end if fase<-umbral2 && fase >-umbral3 && quad<-umbral0 && quad>- umbral b5=1; b4=1; b3=0; b2=1; b1=0; b0=1; I2=-5; Q2=-1; end if fase<-umbral2 && fase >-umbral3 && quad<-umbral && quad>- umbral2 b5=1; b4=1; b3=0; b2=1; b1=1; b0=1; I2=-5; Q2=-3; end if fase<-umbral2 && fase >-umbral3 && quad<-umbral2 && quad>- umbral3 b5=1; b4=1; b3=1; b2=1; b1=1; b0=1; I2=-5; Q2=-5; end if fase<-umbral2 && fase >-umbral3 && quad<-umbral3 b5=1; b4=1; b3=1; b2=1;
66 Implementación en una FPGA de un generador de señales moduladas M-QAM b1=0; b0=1; I2=-5; Q2=-7; end if fase<-umbral3 && quad <umbral && quad>umbral0 b5=1; b4=0; b3=1; b2=0; b1=0; b0=0; I2=-7; Q2=1; end if fase<-umbral3 && quad <umbral2 && quad>umbral b5=1; b4=0; b3=1; b2=0; b1=0; b0=1; I2=-7; Q2=3; end if fase<-umbral3 && quad <umbral3 && quad>umbral2 b5=1; b4=0; b3=1; b2=1; b1=0; b0=1; I2=-7; Q2=5; end if fase<-umbral3 && quad>umbral3 b5=1; b4=0; b3=1; b2=1; b1=0; b0=0; I2=-7; Q2=7; end if fase<-umbral3 && quad <-umbral0 && quad>-umbral b5=1; b4=1; b3=0; b2=1; b1=0; b0=0; I2=-7; Q2=-1; end if fase<-umbral3 && quad <-umbral && quad>-umbral2 b5=1; b4=1; b3=0; b2=1; b1=1;
Conclusiones 67 b0=0; I2=-7; Q2=-3; end if fase<-umbral3 && quad <-umbral2 && quad>-umbral3 b5=1; b4=1; b3=1; b2=1; b1=1; b0=0; I2=-7; Q2=-5; end if fase<-umbral3 && quad <-umbral3 b5=1; b4=1; b3=1; b2=1; b1=0; b0=0; I2=-7; Q2=-7; end b00=xfix({xlUnsigned,1,0,xlRound,xlWrap}, b0); b11=xfix({xlUnsigned,1,0,xlRound,xlWrap}, b1); b22=xfix({xlUnsigned,1,0,xlRound,xlWrap}, b2); b33=xfix({xlUnsigned,1,0,xlRound,xlWrap}, b3); b44=xfix({xlUnsigned,1,0,xlRound,xlWrap}, b4); b55=xfix({xlUnsigned,1,0,xlRound,xlWrap}, b5); end B.7 Control del acumulador BER/EVM function [cee,we,res,res2,BER] = BER_periodica(lut,error) %ce=count enable %we=write enable %lut=punter lut %res=reset acumuludar %res2=reset counter cee=1; we=1; res=0; res2=0; mostres=512; %Només podem dividir per poténcies de dos!! BER = 0; if lut==mostres-1 %El comptador va de 0 a 2047!!! cee=0; we=0; res=1; res2=1; BER = xfix({xlUnsigned,24,13},error/mostres); end end