D ISEÑO Y SIMULACIÓN DE MÓDEM MULTITONO DISCRETO (DMT) UNIVERSIDAD DE CASTILLA-LA MANCHA ESCUELA SUPERIOR DE INFORMÁTICA CIUDAD REAL GRADO EN INGENIERÍA INFORMÁTICA TRABAJO FIN DE GRADO Diseño y simulación de módem multitono discreto (DMT) David Valero Jiménez Junio, 2015 UNIVERSIDAD DE CASTILLA-LA MANCHA ESCUELA SUPERIOR DE INFORMÁTICA CIUDAD REAL Departamento de Tecnologías y Sistemas de Información Tecnología específica de Computación TRABAJO FIN DE GRADO Diseño y simulación de módem multitono discreto (DMT) Autor: David Valero Jiménez Director: Inocente Sánchez Ciudad Junio, 2015 David Valero Jiménez Ciudad Real – Spain E-mail: David.Valero1@alu.uclm.es Teléfono: +34 686 54 64 17 c 2015 David Valero Jiménez Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". Se permite la copia, distribución y/o modificación de este documento bajo los términos de la Licencia de Documentación Libre GNU, versión 1.3 o cualquier versión posterior publicada por la Free Software Foundation; sin secciones invariantes. Una copia de esta licencia esta incluida en el apéndice titulado «GNU Free Documentation License». Muchos de los nombres usados por las compañías para diferenciar sus productos y servicios son reclamados como marcas registradas. Allí donde estos nombres aparezcan en este documento, y cuando el autor haya sido informado de esas marcas registradas, los nombres estarán escritos en mayúsculas o como nombres propios. TRIBUNAL: Presidente: Secretario: Vocal: FECHA DE DEFENSA: CALIFICACIÓN: PRESIDENTE Fdo.: SECRETARIO Fdo.: VOCAL Fdo.: Resumen Los módems DMT (Discrete Multitone) son utilizados en tecnologías ampliamente extendidas como el ADSL, WiFi, DVB (COFDM) o 4G. La técnica de modulación OFDM proporciona alta eficiencia espectral, robustez frente a interferencias cocanal en canales de banda estrecha e interferencia entre símbolos, facilita la adaptación a condiciones severas en el canal de transmisión, no requiere filtros sintonizados por subcanal y se logra una implementación eficiente haciendo uso del algoritmo FFT. En este Trabajo de Fin de Grado se realiza el estudio del esquema de modulación Discrete Multitone (DMT). A tal efecto, se lleva a cabo un estudio inicial de las técnicas básicas de modulación y análisis espectral relacionadas con DMT. En segundo lugar se aborda el desarrollo e implementación de un simulador genérico y configurable en lenguaje C. Dicho software de simulación sirve como herramienta para observar y entender los procesos de modulación y demodulación, así como medir el impacto de los parámetros de modulación en la respuesta al ruido del sistema. Adicionalmente se ha diseñado un prototipo hardware del modulador utilizando el lenguaje VHDL que genera una señal analógica a partir de una trama prefijada. VII Abstract Discrete Multitone (DMT) modems are used in widespread technologies like ADSL, WiFi, DVB (COFDM) or 4G. OFDM modulation technique provides high spectral efficiency, narrowband co-channel and inter-symbol interference robustness, easy adaptation to severe channel conditions, efficient implementation through FFT algorithm and not requirement of subchannel tuned filters. This End-Of-Degree Project covers the study of DMT modulation technology basics. The first task accomplished in this work is the study of the basic modulation and spectral analysis techniques related to DMT. In second place, a generic and configurable DMT modem simulator has been developed and implemented in C language. This simulator serves as a tool to observe and understand DMT modulation and demodulation processes, as well as to measure the impact of modulation parameters on the system noise response. Additionally, a modulator hardware prototype capable of generating an analog signal from a given frame has been designed in VHDL. IX Índice general Resumen VII Abstract IX Índice general XI Índice de cuadros XV Índice de figuras XVII Índice de listados XIX Listado de acrónimos XXI Agradecimientos XXIII 1. Introducción y antecedentes 1 2. Objetivos 3 3. Fundamentos teóricos 5 3.1. Conceptos básicos sobre bandas de frecuencias, señales y ondas en el espectro electromagnético . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.2. Representación de ondas en los dominios del tiempo y de la frecuencia . . . 6 3.2.1. Desarrollo en serie de Fourier . . . . . . . . . . . . . . . . . . . . 7 3.2.2. Transformada de Fourier . . . . . . . . . . . . . . . . . . . . . . . 7 3.2.3. Transformada de Fourier Discreta . . . . . . . . . . . . . . . . . . 8 3.2.4. Propiedades interesantes de WN . . . . . . . . . . . . . . . . . . . 10 3.2.5. Propiedades interesantes de la DFT . . . . . . . . . . . . . . . . . 10 3.3. Cálculo de la DFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.3.1. Cálculo directo de la DFT . . . . . . . . . . . . . . . . . . . . . . 11 3.3.2. Cálculo de la DFT mediante FFT . . . . . . . . . . . . . . . . . . 13 XI 3.3.3. Comparación temporal de la DFT y la FFT base 2 . . . . . . . . . . 18 3.4. Análisis espectral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.4.1. Resolución espectral de la DFT y frecuencia de muestreo . . . . . . 19 3.4.2. Demostración: obtención de una señal discreta periódica a partir de una señal continua . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.4.3. Teorema de muestreo de Nyquist-Shanon . . . . . . . . . . . . . . 22 3.5. Esquemas básicos de modulación . . . . . . . . . . . . . . . . . . . . . . . 23 3.6. Modulación Discreta Multitono (DMT) . . . . . . . . . . . . . . . . . . . 23 3.6.1. PSK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.6.2. QAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.7. Energía y potencia de una señal . . . . . . . . . . . . . . . . . . . . . . . . 27 3.8. Relación señal/ruido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4. Simulación 29 4.1. Metodología de desarrollo de software . . . . . . . . . . . . . . . . . . . . 29 4.2. Decisiones de diseño del software de simulación . . . . . . . . . . . . . . . 30 4.2.1. Verificación de datos de entrada . . . . . . . . . . . . . . . . . . . 30 4.2.2. Codificación de tramas . . . . . . . . . . . . . . . . . . . . . . . . 30 4.2.3. Estructura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.3. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.3.1. Tipos y estructuras de datos . . . . . . . . . . . . . . . . . . . . . 31 4.3.2. Enfoque de implementación del algoritmo FFT base 2 . . . . . . . 31 4.3.3. Generación de gráficas . . . . . . . . . . . . . . . . . . . . . . . . 31 4.4. Requisitos de compilación y ejecución . . . . . . . . . . . . . . . . . . . . 32 4.5. Uso del software de simulación . . . . . . . . . . . . . . . . . . . . . . . . 32 4.6. Ejecución de los casos de simulación propuestos . . . . . . . . . . . . . . . 36 4.7. Otros casos de simulación . . . . . . . . . . . . . . . . . . . . . . . . . . 39 5. Prototipado 41 5.1. Modelado hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.2. Software y hardware utilizado . . . . . . . . . . . . . . . . . . . . . . . . 43 5.3. Procesos de simulación del hardware . . . . . . . . . . . . . . . . . . . . . 44 5.4. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 6. Conclusiones y líneas futuras 45 A. Implementación C del algoritmo de cálculo directo de la DFT 49 B. Implementación C del algoritmo FFT base 2 53 C. Repositorios 59 C.1. Comparador de algoritmos de cálculo de la DFT (lenguaje C) . . . . . . . . 59 C.2. Simulador del módem DMT (lenguaje C) . . . . . . . . . . . . . . . . . . . 59 C.3. Prototipo hardware (lenguaje VHDL) . . . . . . . . . . . . . . . . . . . . . 59 D. Delta de Dirac 61 E. Demostración: transformada de Fourier de un pulso rectangular 63 F. Demostración: transformada de Fourier de un tren de deltas 65 Bibliografía 67 Índice de cuadros 3.1. Correspondencia de las componentes frecuenciales . . . . . . . . . . . . . 9 3.2. Orden de bit invertido en una DFT de 8 puntos . . . . . . . . . . . . . . . . 15 3.3. Ejemplo de DIT base 2 para una DFT de 8 puntos. . . . . . . . . . . . . . . 16 3.4. Complejidad de los métodos de cálculo de la DFT . . . . . . . . . . . . . . 18 3.5. Resultados de la comparativa de algoritmos de cálculo de la DFT . . . . . . 18 3.6. Demostración: transformada de Fourier de una señal continua aperiódica . . 21 XV Índice de figuras 3.1. Ecuación de onda sinusoidal pura . . . . . . . . . . . . . . . . . . . . . . . 6 3.2. Análisis de Fourier de una onda periódica compuesta . . . . . . . . . . . . 6 3.3. Fórmula de Euler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.4. Desarrollo en serie de Fourier . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.5. Coeficiente espectral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.6. Transformada de Fourier aplicada al procesamiento de señales . . . . . . . 8 3.7. Transformada de Fourier Inversa aplicada al procesamiento de señales . . . 8 3.8. DFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.9. IDFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.10. DFT (Factor Twiddle) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.11. IDFT (Factor Twiddle) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.12. Periodicidad de la DFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.13. Simetría de la DFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.14. Cálculo directo de la DFT . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.15. Caso base del DIT base 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.16. División de X(k) en parte par e impar . . . . . . . . . . . . . . . . . . . . 14 3.17. Cálculo eficiente de la segunda mitad de la DFT . . . . . . . . . . . . . . . 14 3.18. DIT base 2 de ocho puntos . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.19. División de X(k) en cuatro partes . . . . . . . . . . . . . . . . . . . . . . . 17 3.20. Comparativa entre algoritmos para el cálculo de la DFT . . . . . . . . . . . 18 3.21. Frecuencia de muestreo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.22. Resolución espectral y frecuencia de muestreo . . . . . . . . . . . . . . . . 19 3.23. Función «sinc» normalizada o seno cardinal normalizada . . . . . . . . . . 20 3.24. Criterio de Nyquist para la frecuencia de muestreo . . . . . . . . . . . . . . 22 3.25. Comparación entre pulsos en frecuencias ortogonales y no ortogonales . . . 24 3.26. Frecuencias ortogonales superpuestas . . . . . . . . . . . . . . . . . . . . 24 3.27. Número de bits por portadora . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.28. Número de bits por trama . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 XVII 3.29. Ejemplo de diagrama de constelación para 16-QAM . . . . . . . . . . . . . 26 3.30. Energía de una señal discreta no periódica . . . . . . . . . . . . . . . . . . 27 3.31. Potencia de una señal discreta no periódica . . . . . . . . . . . . . . . . . 27 3.32. Potencia de una señal discreta (N muestras) . . . . . . . . . . . . . . . . . 27 3.33. Potencia de una señal sinusoidal . . . . . . . . . . . . . . . . . . . . . . . 28 3.34. Relación señal/ruido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.1. Configuración caso de simulación 1 . . . . . . . . . . . . . . . . . . . . . 36 4.2. Caso 1: Simulación del proceso de transmisión . . . . . . . . . . . . . . . 36 4.3. Caso 1: Simulación del proceso de transmisión con generación de gráfica . 36 4.4. Caso 1: Simulación del proceso de recepción . . . . . . . . . . . . . . . . 36 4.5. Caso 1: Estadísticas de respuesta al nivel de ruido . . . . . . . . . . . . . . 36 4.6. Configuración caso de simulación 2 . . . . . . . . . . . . . . . . . . . . . 37 4.7. Caso 2: Simulación del proceso de transmisión . . . . . . . . . . . . . . . 37 4.8. Caso 2: Simulación del proceso de transmisión con generación de gráfica . 37 4.9. Caso 2: Simulación del proceso de recepción . . . . . . . . . . . . . . . . 37 4.10. Caso 2: Estadísticas de respuesta al nivel de ruido . . . . . . . . . . . . . . 37 4.11. Resumen de estadísticas de respuesta al ruido (casos propuestos) . . . . . . 38 4.12. Gráficas de la seña simulada en el dominio temporal (casos propuestos) . . 38 5.1. Esquema de bloques del modelo hardware . . . . . . . . . . . . . . . . . . 41 5.2. Máquina de estados de la entidad tx_constellation_mapper . . . . . . . 42 5.3. Máquina de estados de la entidad fft_r2 . . . . . . . . . . . . . . . . . . 43 D.1. Delta de Dirac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 E.1. Función rectangular de amplitud A . . . . . . . . . . . . . . . . . . . . . . 63 E.2. Función «sinc» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Índice de listados 4.1. Uso de simu-tx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.2. Uso de simu-rx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.3. Uso de simu-stats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 A.1. Archivo fuente «dft.h» . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 A.2. Archivo fuente «dft.c» . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 B.1. Archivo fuente «fft.h» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 B.2. Archivo fuente «fft.c» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 XIX Listado de acrónimos DMT Discrete Multitone ADSL Asymmetric Digital Subscriber Line DVB Digital Video Broadcasting OFDM Orthogonal Frequency Division Multiplexing COFDM Coded Orthogonal Frequency Division Multiplexing AM Amplitude Modulation DSB-SC Double-Sideband modulation Suppressed-Carrier SSB-SC Single-Sideband modulation Suppressed-Carrier USB Upper Sideband LSB Lower Sideband PM Phase Modulation FM Frequency Modulation ASK Amplitude Shift Keying PSK Phase Shift Keying FSK Frequency Shift Keying QAM Quadrature Amplitude Modulation DFT Discrete Fourier Transform IDFT Inverse Discrete Fourier Transform FFT Fast Fourier Transform IFFT Inverse Fast Fourier Transform DIT Decimation In Time DIF Decimation In Frequency SRFFT Split Radix Fast Fourier Transform XXI Agradecimientos Quiero agradecer a algunas personas su ayuda para haber logrado esto. A Inocente Sánchez Ciudad por haberme tendido esta escalera al fin de mis estudios de Grado en Ingeniería Informática y su ayuda para profundizar en algunos de los conocimientos que he adquirido estos años. A Julio Daniel Dondo Gazzano y Juan Carlos López López por su ayuda en parte de este trabajo. A mi familia, sin ellos esto hubiese sido tan fácil. A mis amigos, por servirme de referencia. A los compañeros y compañeras de tantos proyectos tan llenos de buenas intenciones como carentes de entendimiento y apoyo. A mi abuelo, que me inculcó la dedicación seria a las aficiones personales, tanto de manera altruista como para hacer de ellas algo de lo que vivir. Y a ti Almudena, por tantas cosas que sería inútil intentar escribirlas todas. David XXIII A todos aquellos que lucharon por la Idea, a los que aún lo hacen. Capítulo 1 Introducción y antecedentes U módem Multitono Discreto DMT (Discrete Multi Tone) codifica datos en varias subportadoras, multiplexadas en la frecuencia, usando modulación tanto en amplitud como en fase para lograr una alta eficiencia espectral, lo que es útil tanto para lograr canales por los que transmitir grandes volúmenes de datos por unidad de tiempo como para aprovechar mejor bandas relativamente estrechas. Para el desarrollo de este proyecto se usará la técnica de modulación digital con portadoras ortogonales, conocida como OFDM [HR06] (Orthogonal Frecuency Division Multiplexing). N Una de las características de la modulación OFDM es la baja tasa de binaria que se necesita al transmitir en varias subportadoras simultáneamente, lo que conlleva significativas ventajas en comparación con otros esquemas de modulación de portadora única. Algunas de estas ventajas permiten paliar, sin recurrir a técnicas avanzadas de filtrado, problemas como la atenuación de las frecuencias altas en un cable e interferencias en bandas estrechas, además de lograr una relativamente alta inmunidad al ruido. Algunas de las aplicaciones de DMT se encuentran, por ejemplo, en el ADSL o la transmisión de datos sobre canales de banda estrecha. Por su parte, la modulación OFDM es usada en WiFi, la tecnología móvil 4G o DVB (COFDM). El hecho de que se requiera una menor tasa de modulación que en los esquemas de portadora única no evita que se necesite hacer en tiempo real una conversión de datos a señal analógica en transmisión, y un muestreo y procesado de datos en recepción, en un espacio de tiempo determinado. Con el objetivo de evitar retardos y hacer práctica la comunicación, se recurre a un algoritmo para el cálculo rápido de la Transformada Discreta de Fourier, conocida como Transformada Rápida de Fourier [Jon07] o FFT (Fast Fourier Transform). En el presente Trabajo de Fin de Grado se diseñará un módem DMT con el fin de afianzar y extender conocimientos adquiridos en los estudios de Grado en Ingeniería Informática. Para ello se estudiarán las bases teóricas, se hará una propuesta de diseño totalmente configurable, se realizarán simulaciones y se particularizará dicho diseño para realizar un prototipo. 1 2 1. I NTRODUCCIÓN Y ANTECEDENTES Teniendo lo anterior en cuenta se ha dividido el documento en los siguientes capítulos: Capítulo 2: Objetivos Finalidad del presente trabajo. Capítulo 3: Fundamentos teóricos Exposición de los fundamentos teóricos en relación a los objetivos marcados. Capítulo 4: Simulación Especificación y justificación de las simulaciones llevadas a cabo sobre el diseño. Capítulo 5: Prototipado Implementación y simulación de un prototipo del módem DMT en lenguaje VHDL. Capítulo 6: Conclusiones y líneas futuras Conclusiones finales y propuestas de continuación del trabajo. Capítulo 2 Objetivos L objetivos generales que se marcan para lograr la finalidad propuesta en este TFG son los siguientes: OS 1. Realizar un estudio teórico de todos los aspectos relacionados con el tratamiento de la señal, análisis espectral y las técnicas de codificación digital. 2. Realizar una pareja de programas, uno transmisor que genera la señal analógica (en forma de fichero de datos) a partir de una trama binaria, y otro programa receptor que obtiene la citada trama a partir de la señal analógica (leyendo el fichero de datos). Para ello se utilizarían las herramientas matemáticas de la FFT, inversa y directa, respectivamente. 3. Usar un prototipo físico para mostrar el funcionamiento de alguno de los dos programas, o de ambos, sobre placas físicas. Los objetivos específicos desarrollados son los siguientes: a. Analizar el concepto de señal en el dominio del tiempo y su representación en el dominio de la frecuencia, así como los conceptos de muestreo, criterio de Nyquist, ancho de banda, etc. b. Estudiar las herramientas matemáticas de conversión entre ambos dominios, basada en el análisis de Fourier, especialmente la Transformada de Fourier Discreta, en una primera aproximación y la variante rápida para realizar cálculos en tiempo real. c. Estudiar la técnica OFDM, su necesidad de ancho de banda en relación con la tasa binaria y los distintos esquemas de modulación: QPSK, 8-PSK, 16-QAM, 64-QAM, etc. d. Realizar un programa simulador del proceso de transmisión que genere a partir de una trama de bits una señal analógica, en forma de fichero de datos, similar a la que generaría un módem real. Este programa tendrá todos sus parámetros configurables, de manera que cualquier dato, como puede ser el número de bits de la trama N , la duración de la misma o la cantidad de subportadoras, f , pueda variar a voluntad. El archivo de datos llevará una cabecera donde se identificarán todos estos datos para que el programa receptor los pueda conocer y sea capaz de interpretarlos. 3 4 2. O BJETIVOS e. Realizar un programa simulador del proceso de recepción que, leyendo la cabecera del fichero de datos, extraiga las características del módem y realice el adecuado análisis espectral de las muestras para obtener la trama de datos binarios que se usaron para general dicho archivo. f. Probar distintas tramas, generar los ficheros correspondientes, y comprobar con el programa receptor recupera las tramas correctamente. g. Realizar una simulación particularizada para los siguientes parámetros: 10 subportadoras entre 200 y 2000 Hz con un esquema de modulación de 3 bits por subportadora, usando 2 amplitudes y 4 fases. Las tramas serán de 30 bits. El número de bits N , es el número de subportadoras, f , multiplicado por el número de bits por subportadora, p. h. Añadir ruido aleatorio a los ficheros generados y ver hasta qué punto es correcta la trama recuperada en función de la amplitud del ruido. i. Comparar la inmunidad al ruido del esquema de modulación anterior (apartado g) y de una modulación 8-PSK. j. Construir un prototipo físico que genere la señal en transmisión a partir de una trama de N bits y f subportadoras, comparando la forma de onda producida, que puede ser vista a través de un osciloscopio, con la forma de onda simulada. Opcionalmente se podría construir otro prototipo que realizase la función receptora, admitiendo como señal de entrada la generada por el prototipo transmisor y presentando la trama que generó dicha señal. Los valores de N y f dependerán del hardware utilizado. Capítulo 3 Fundamentos teóricos E N primer lugar se realizará un estudio de los fundamentos de la generación y el tratamien- to de señales en los que se basa DMT explicando los esquemas de modulación básicos. A continuación se describirá el citado método de multiplexación y se explicarán e implementarán algoritmos para el cálculo de la DFT. 3.1 Conceptos básicos sobre bandas de frecuencias, señales y ondas en el espectro electromagnético Las frecuencias del espectro electromagnético usadas en telecomunicaciones se pueden clasificar por bandas o por aplicaciones. Una banda es un intervalo de frecuencias que se define para un determinado uso. Aparece al tiempo el concepto de ancho de banda, que es la diferencia en Hz entre la frecuencia máxima y la frecuencia mínima de una banda. Dos tipos de banda a tener en cuenta, por su importancia, son las bandas base y las bandas de paso. Una banda base se define como el rango de frecuencias de una señal que no ha sido modificada desde su origen, relativa por tanto al tipo de señal utilizada para modular una portadora generalmente de mayor frecuencia, mientras que una banda de paso es el rango de frecuencias que, en teoría, pasarán por un filtro sin ser atenuadas. Una onda portadora es una onda definida y periódica que se modula con una señal base que necesita adaptarse a un medio para una comunicación, razón por la cual dicha onda portadora es de mayor frecuencia que la máxima frecuencia de la banda base. A la hora de muestrear señales analógicas para su tratamiento digital se utilizan las llamadas señales muestreadoras. La señal muestreadora ideal (sδ (t) ó IIIT s (t)) es un tren de deltas, una función periódica definida en base la Delta de Dirac que se describe en el anexo D. Sin embargo, en la práctica, se implementa el tren de deltas con un tren de pulsos rectangulares con las consecuencias que se verán en el apartado 3.4.2. 5 6 3. F UNDAMENTOS TEÓRICOS 3.2 Representación de ondas en los dominios del tiempo y de la frecuencia La ecuación 3.1 describe una onda sinusoidal pura, donde A es la amplitud, ω = 2πf la velocidad angular, f es la frecuencia y ϕ la fase de oscilación inicial, todas constantes. y(t) = A · sen(ωt + ϕ) Figura 3.1: Ecuación de onda sinusoidal pura Según el análisis de Fourier cualquier onda periódica compuesta puede representarse como la suma de ondas sinusoidales cuyas frecuencias discretas son múltiplos de una determinada frecuencia fundamental. Las señales con las que se tratará son ondas de este tipo, por tanto representables por la ecuación 3.2, donde f0 es la frecuencia fundamental o primer armónico, 2f0 el 2o armónico de f0 , 3f0 el tercero, etc. Y el sumando A0 representa la componente continua de la señal, que se supone nula. y(t) = A0 + A1 · sen(2πf0 t + ϕ1 ) + A2 · sen(2π2f0 t + ϕ2 ) + A3 · sen(2π3f0 t + ϕ3 ) + ... Figura 3.2: Análisis de Fourier de una onda periódica compuesta Lo anterior junto a las implicaciones de la fórmula de Euler (figura 3.3) son de suma importancia para el estudio y el tratamiento de señales. ejα = cos(α) + jsen(α) Para z = x + jy ez = ex ejy = ex (cos(y) + jsen(y)) Donde j es la unidad imaginaria que cumple j 2 = −1 y α viene dado en radianes. Figura 3.3: Fórmula de Euler 3. F UNDAMENTOS TEÓRICOS 3.2.1 7 Desarrollo en serie de Fourier Teniendo en cuenta las ecuaciones 3.2 y 3.3, en términos generales una señal periódica x(t) se puede expresar como combinación lineal de exponenciales complejas que se corresponden con frecuencias múltiplos de una misma frecuencia f0 = T10 . Usando una forma exponencial compacta de la serie de Fourier se obtiene la expresión de la figura 3.4. +∞ X x(t) = Cn ejnω0 t n=−∞ Figura 3.4: Desarrollo en serie de Fourier Donde el producto nω0 es la velocidad angular de la componente enésima. Los coeficientes espectrales Cn , representan el valor de las componentes de la señal en el dominio de frecuencia y se calculan con la expresión: T 1 Z 20 Cn = x(t)e−jnω0 t dt T0 T0 − 2 Figura 3.5: Coeficiente espectral C0 es la componente continua, C1 la componente fundamental y los siguientes el resto de armónicos. Propiedades de los coeficientes espectrales Cn Si x(t) es real, los coeficientes son complejos conjugados tal que C−n = Cn , con lo que: x(t) = C0 + ∞ X 2|Cn |cos(nω0 t + Φn ) n=1 Si x(t) es par (x(−t) = x(t)), los coeficientes Cn son reales. Si x(t) es impar (x(−t) = −x(t)), los coeficientes Cn son imaginarios puros. 3.2.2 Transformada de Fourier La transformada de Fourier es una aplicación que hace corresponder una función compleja en el dominio del tiempo (o el espacio), otra función en el dominio de la frecuencia. Es aplicable en multitud de casos en ciencia e ingeniería y está normalizada según su aplicación. Se puede usar la transformada de Fourier para el procesamiento de la señal. En base al desarrollo de la serie de Fourier se tiene la expresión 3.6 en la que transforma x(t) en X(ω). 8 3. F UNDAMENTOS TEÓRICOS Se cumple que ω = 2πf , siendo X(ω) la función compleja que define una señal en el dominio frecuencial y x(t) la función de la misma señal en el dominio temporal que en este caso es real por motivos físicos. X(ω) = Z +∞ x(t)e−jωt dt −∞ Figura 3.6: Transformada de Fourier aplicada al procesamiento de señales La aplicación inversa se define como en la figura 3.7. x(t) = Z +∞ X(ω)ejωt dω −∞ Figura 3.7: Transformada de Fourier Inversa aplicada al procesamiento de señales La única diferencia entre la Transformada de Fourier y la Transformada de Fourier Inversa es el signo opuesto de sus exponentes. 3.2.3 Transformada de Fourier Discreta En el contexto de la codificación digital de señales transmitidas en el medio físico (variaciones de tensión en un cable, una antena, etc.), se utilizan las versiones discretas de la Transformada de Fourier, Discrete Fourier Transform (figura 3.8) e Inverse Discrete Fourier Transform (figura 3.9). Dadas secuencias de N muestras x(n) : 0 ≤ n ≤ N − 1 en el dominio del tiempo discreto y X(k) : 0 ≤ k ≤ N − 1 en el dominio frecuencial discreto, y sustituyendo ω = 2πf , se relacionan entre sí mediante dichas transformadas. X(k) = N −1 X x(n)e −j2πkn N n=0 Figura 3.8: DFT x(n) = −1 j2πkn 1 NX X(k)e N N k=0 Figura 3.9: IDFT 3. F UNDAMENTOS TEÓRICOS 9 Los exponentes y factores de normalización en la DFT y la IDFT se establecen por convenio según la aplicación. Se debe cumplir que dichos exponentes sean de signo opuesto y que el producto de los factores de normalización sea N1 . En el caso del procesamiento de señales, al aplicar los factores de normalización √1N y √1N se obtienen transformadas unitarias. Mientras que al usar 1 y N1 sólo se realiza el escalado en la IDFT por lo que es menos costoso computacionalmente. Tanto por simplificación de la expresión como para facilitar la programación de un algoritmo eficiente para el cálculo de la DFT y la IDFT se recurre al concepto del Factor Twiddle −j2π (factor de fase), WN = e N . X(k) = N −1 X x(n)WNkn n=0 Figura 3.10: DFT (Factor Twiddle) x(n) = −1 1 NX X(k)WN−kn N k=0 Figura 3.11: IDFT (Factor Twiddle) Teniendo en cuenta las propiedades de la DFT (en la sección 3.2.5), en el caso de la transmisión se tiene un símbolo codificado para cada subportadora dando valores a X(k) según la tabla 3.1, por lo que usaremos la IDFT para obtener las muestras discretas de x(n). k 0 1 2 3 ... N/2 ... N-2 N-1 Símbolo correspondiente Componente continua Componente fundamental o 1a armónica 2a armónica 3a armónica ... Componente de Nyquist ... Conjugado de la 2a armónica Conjugado de la fundamental o 1a armónica Cuadro 3.1: Correspondencia de las componentes frecuenciales 10 3. F UNDAMENTOS TEÓRICOS Como se ve en la tabla, X(0) es la componente continua (parte constante de la señal) que no porta información. X(N/2) se corresponde con la componente en la frecuencia de Nyquist (explicado más adelante en 3.4.3). Los valores desde X(N/2 + 1) a X(N − 1) son, en orden inverso, los conjugados de X(1) a X(N/2 − 1). Se debe tener en cuenta que el número de subportadoras utilizadas y el de puntos de la DFT no son iguales, de hecho en la sección 3.4.1 se especificarán los requisitos que debe cumplir la DFT en función del número de subportadoras entre otros factores. Propiedades interesantes de WN 3.2.4 El factor Twiddle tiene algunas propiedades interesantes para la optimización del cálculo de la DFT, se verá su aplicación al estudiar la FFT. Periodicidad (WNk+N = WNk ) WNk+N = e −j2π(k+N ) N =e −j2πk N e−j2π = WNk ya que e−j2π = 1 k+ N 2 Simetría (WN k+ N 2 WN =e = −WNk ) −j2π(k+ N 2 ) N =e −j2πk N e−jπ = −WNk ya que e−jπ = −1. Las siguientes expresiones, en particular, pueden resultar útiles para el desarrollo de los algoritmos existentes: WNk = W N tal que k|N, N divisible entre k k WN = e −j2π N k k n(k+ N ) 2 WN −j2πk N = WNk nk = W N tal que 2|N 2 2 W 3.2.5 =e n(k+ N 2 N 2 ) =e −j2πn(k+ N 2 ) N 2 =e −j2πnk N 2 e−j2πn = W Nnk , ya que e−j2πn = 1 2 Propiedades interesantes de la DFT Periodicidad Se puede demostrar de forma trivial usando la fórmula de Euler (3.3) y la propiedad de periodicidad de WN (sección 3.2.4). 3. F UNDAMENTOS TEÓRICOS 11 X(k) = X(k + N ) Figura 3.12: Periodicidad de la DFT Simetría La DFT de una señal real x(n) en tiempo discreto, X(k), presenta simetría par en su parte real y simetría impar en su parte imaginaria, lo que a su vez implica que X(0) y X(N/2) son reales. Generalizando y teniendo en cuenta la propiedad de periodicidad: X(k) = X(N − k) Figura 3.13: Simetría de la DFT donde X(N − k) representa el conjugado de X(N − k). 3.3 Cálculo de la DFT El algoritmo que se obtiene directamente a partir de la expresión matemática de la DFT (apartado 3.3.1) es costoso computacionalmente, por lo que se aprovechan diversos hechos matemáticos para definir otros algoritmos más rápidos que se engloban en la familia de algoritmos FFT (Fast Fourier Transform), se estudiarán algunos de ellos en el apartado 3.3.2. En este trabajo se abordará únicamente la implementación del algoritmo directo y el FFT base 2, siendo este último adecuado y suficientemente óptimo para nuestros objetivos. Dicha tarea de implementación requiere el estudio y comprensión del método directo y de los fundamentos de FFT base 2 en sí mismo. No obstante, en el apartado 3.3.2, se describirán a grandes rasgos FFT base 4 y FFT de base partida. 3.3.1 Cálculo directo de la DFT El cálculo directo de la DFT se puede hacer mediante dos bucles recorriendo los valores de k y n en los rangos correspondientes (ver sección 3.2.3). Se usará el valor del exponente del factor Twiddle ( −2π ) y será multiplicado por los valores correspondientes de k y n en N cada iteración para realizar los cálculos según la fórmula de Euler (3.3). Tal y como se ha expuesto en la sección 3.2.2 el cálculo de la DFT y la IDFT se puede implementar con un mismo procedimiento con muy pocas modificaciones. Para la IDFT, según 12 3. F UNDAMENTOS TEÓRICOS el convenio elegido para este diseño, se debe cambiar de signo el factor Twiddle y se debe aplicar el factor de normalización 1/N . Operando en el caso de la DFT para realizar el cálculo directo tenemos: X(k) = N −1 X x(n)e −j2πkn N n=0 N −1 X " ! 2πkn 2πkn = x(n) cos − + j · sen − N N n=0 N −1 X " ! 2πkn 2πkn = x(n) cos − j · sen N N n=0 !# = !# Por tanto si x(n) = x< (n) + j · x= (n): X< (k) = N −1 X n=0 " ! 2πkn 2πkn x< (n)cos + x= (n)sen N N !# (a) Parte real X= (k) = N −1 X n=0 " ! 2πkn 2πkn −x< (n)sen + x= (n)cos N N !# (b) Parte imaginaria Figura 3.14: Cálculo directo de la DFT En el caso de la IDFT solamente cambian los roles de X(k) y x(n), y el signo de los sumandos en los que aparece la función seno, por lo que, en este aspecto, tampoco hay ningún inconveniente en usar un procedimiento común para el cálculo de la DFT y la IDFT. Y como se ha mencionado, al tratar con señales físicas, la secuencia x(n) es real. En el anexo A se adjunta una implementación en lenguaje C de una función para el cálculo básico de la DFT y su inversa. 3. F UNDAMENTOS TEÓRICOS 3.3.2 13 Cálculo de la DFT mediante FFT El cálculo directo de la DFT es ineficiente ya que no aprovecha las propiedades del factor Twiddle para reducir el coste computacional. Dicho cálculo incluye 2N 2 operaciones trigonométricas, 4N 2 multiplicaciones y 4N (N − 1) sumas con números reales. A este gran número de operaciones hay que sumar las necesarias para indexación y direccionamiento de variables. Los algoritmos FFT más comunes para el cálculo de la DFT están basados en el de CooleyTukey. Dicho algoritmo, de tipo «divide y vencerás», se basa en expresar una DFT de N puntos en términos de varias transformadas de tamaños N1 , N2 , ..., NM , de forma recursiva, tal que N = N1 · N2 · . . . · NM . En el caso de la FFT el algoritmo de Cooley-Tukey se particulariza principalmente para los casos en que los factores son iguales a un determinado número r llamado base del algoritmo: N = rM . Los algoritmos FFT más utilizados, en el caso de la DFT, reciben el nombre de DIT (diezmado en tiempo) en base 2, base 4 y base partida. Existen otros algoritmos similares a los de diezmado en tiempo que se basan en dividir recursivamente la secuencia de salida en lugar de la de entrada, motivo por el que son llamados algoritmos de diezmando en frecuencia (DIF). De hecho se obtiene un DIF al usar el DIT con las modificaciones necesarias para el cálculo de la IDFT: cambiar el signo de los factores de fase y dividir el resultado por N (según el factor de normalización que hemos elegido). Algoritmo de diezmado en tiempo base 2 (DIT Radix-2) El algoritmo DIT base 2, divide una transformada de N puntos (para N potencia de 2) en otras dos de tamaño N/2 de forma recursiva hasta llegar al caso base donde se tiene una DFT trivial de dos puntos (figura 3.15). X(0) = 1 X x(n)W20·n = x(0) + x(1) n=0 X(1) = 1 X x(n)W21·n = x(0) − x(1) n=0 Figura 3.15: Caso base del DIT base 2 El desarrollo de la DFT se realiza dividiendo la transformada en otras dos cuyos elementos se corresponden con los pares en un caso y los impares en otro, es decir: 14 3. F UNDAMENTOS TEÓRICOS X(k) = N −1 X N 2 x(n)WNkn = n=0 N 2 −1 X k(2n) x(2n)WN + n=0 −1 X k(2n+1) x(2n + 1)WN n=0 k(2n+1) k(2n) Si se tiene en cuenta que WN = WN · WNk , que el segundo factor de fase no depende de n y que por tanto se puede sacar del sumatorio; queda la siguiente expresión para un punto X(k): N 2 X(k) = N 2 −1 x(2n)WN2kn X + WNk n=0 −1 X x(2n + 1)WN2kn n=0 Además, aplicando la tercera propiedad de las enunciadas en el apartado 3.2.4 y considerando la definición de la DFT (3.8), es posible obtener la expresión 3.16; que junto con la 3.15 es fundamental para la programación del algoritmo. N 2 X(k) = N 2 −1 X kn x(2n)W N + 2 n=0 WNk −1 X x(2n + 1)W Nkn 2 n=0 X(k) = Y (k) + WNk · Z(k) Figura 3.16: División de X(k) en parte par e impar En la expresión anterior, Y (k) y Z(k) son transformadas de tamaño N/2 que se pueden resolver de forma recursiva. Se puede ver que para cada k solamente se debe calcular explícitamente el factor de fase WNk . Ya que el cálculo de los factores de fase WN2kn , que aparecen en los dos sumandos de la expresión, es implícito y se obtiene en último término a partir del caso base (3.15). Se cumple, por la propiedad de simetría del factor Twiddle (3.2.4), que para la segunda mitad de la secuencia de salida: X k+ N 2 =Y k+ X k+ N 2 N 2 k+ N 2 + WN ·Z k+ N 2 = Y (k) − WNk · Z(k) Figura 3.17: Cálculo eficiente de la segunda mitad de la DFT Es decir, el cálculo de la segunda mitad se puede realizar con la diferencia de los mismos sumandos que en la primera. 3. F UNDAMENTOS TEÓRICOS 15 La representación gráfica de las operaciones de este algoritmo se puede realizar mediante un diagrama de «mariposa». La figura 3.18 es un ejemplo para una DFT de 8 puntos. ETAPA 1 x(0) x(4) ETAPA 3 X(1) -1 W80 W80 W82 -1 X(3) -1 W80 -1 W80 W81 -1 -1 W80 x(3) x(7) X(2) -1 x(1) x(5) X(0) W80 x(2) x(6) ETAPA 2 W82 -1 W80 W82 -1 -1 W83 -1 -1 X(4) X(5) X(6) X(7) Figura 3.18: DIT base 2 de ocho puntos Como se ve en el diagrama, las sucesivas operaciones sobre la transformada original cambian el orden de los índices en el resultado. Para facilitar el indexado eficiente de los datos de entrada del algoritmo se puede aprovechar el hecho de que si se toman como índices las cadenas binarias invertidas correspondientes a cada uno de los índices originales, el orden creciente de los elementos según estos nuevos índices coincide con el que aparece al aplicar las «mariposas». Esto se conoce como orden de bit invertido (bit-reversed order). Índice de entrada x(0) → x(0002 ) x(4) → x(1002 ) x(2) → x(0102 ) x(6) → x(1102 ) x(1) → x(0012 ) x(5) → x(1012 ) x(3) → x(0112 ) x(7) → x(1112 ) Índice de salida X(0) → x(0002 ) X(1) → x(0012 ) X(2) → x(0102 ) X(3) → x(0112 ) X(4) → x(1002 ) X(5) → x(1012 ) X(6) → x(1102 ) X(7) → x(1112 ) Cuadro 3.2: Orden de bit invertido en una DFT de 8 puntos En teoría el orden de los factores Twiddle es igual al tamaño de la mariposa en cada etapa, en la práctica y como se ve en la figura 3.18, es suficiente con calcular los primeros N/2 factores de orden N por equivalencia según las propiedades enumeradas en la sección 3.2.4. En el anexo B se adjunta una implementación en lenguaje C del algoritmo FFT base 2. 16 3. F UNDAMENTOS TEÓRICOS A modo de ejemplo, sea x(n) una secuencia de 8 puntos de una señal en el dominio temporal, x0 (n) la misma secuencia en orden de bit invertido y X(k) su transformada de Fourier. En la tabla 3.3 se puede ver el resultado de cada una de las tres etapas del algoritmo DIT de base 2 para dicha secuencia. x0 (n) 1,00000 0,56472 0,75148 0,42437 0,86688 0,48954 0,65144 0,36788 x(n) 1,00000 0,86688 0,75148 0,65144 0,56472 0,48954 0,42437 0,36788 Etapa 1 1,56472 0,43528 1,17585 0,32711 1,35642 0,37734 1,01932 0,28356 Etapa 2 2,74057 0,435 − 0,327j 0,389 0,435 + 0,327j 2,3757 0,377 − 0,283j 0,337 0,337 + 0,283j Etapa 3 5,11631 0,500 − 0,794j 0,389 − 0,337j 0,369 − 0,140j 0,36483 0,369 + 0,140j 0,369 + 0,337j 0,500 + 0,794j Cuadro 3.3: Ejemplo de DIT base 2 para una DFT de 8 puntos. Cálculo de los factores Twiddle: W80 = 1 W81 = e W82 = e W83 =e √ −j2π 8 = −j4π 8 = −j −j6π 4 =− √ 2 2 − 2 2 j √ 2 2 √ − 2 2 j Obtención de la etapa 1: 1,00000 + 0,56472 = 1,56472 1,00000 − 0,56472 = 0,43528 0,75148 + 0,42437 = 1,17585 0,75148 − 0,42437 = 0,32711 0,86688 + 0,48954 = 1,35642 0,86688 − 0,48954 = 0,37734 0,65144 + 0,36788 = 1,01932 0,65144 − 0,36788 = 0,28356 Obtención de la etapa 2: Siguiendo la primera mariposa de la etapa 2 tenemos: 1,56472 + W80 · 1,17585 = 2,74057 0,43528 + W82 · 0,32711 = 0,43528 − 0,32711j 1,56472 − W80 · 1,17585 = 0,389 0,43528 − W82 · 0,32711 = 0,43528 + 0,32711j La segunda mariposa se realiza de forma análoga. Para la tercera etapa, como puede verse en la figura 3.18, se utilizan los 4 factores Twiddle de orden 8 que han sido calculados. 3. F UNDAMENTOS TEÓRICOS 17 Algoritmo de diezmado en tiempo base 4 (DIT Radix-4) De forma similar al caso anterior, DIT base 4 divide una DFT con número de puntos N potencia de 4 en cuatro transformadas de tamaño N/4. El resultado es la disminución del número de multiplicaciones y el aumento del número de sumas. Para una DFT de las características indicadas es más eficiente que usar DIT base 2. En [PM03], tras estudiar el algoritmo y definir las particiones de la transformada, se obtienen las expresiones de la figura 3.19 para el cálculo de la FFT. Donde X(4k) y X(4k + 2) agrupan los elementos pares, y X(4k + 1) junto con X(4k + 3) los impares. N 4 X(4k) = −1 X n=0 N x(n) + x n + 4 N 4 −1 X X(4k + 1) = N x(n) − jx n + 4 n=0 N 4 −1 X X(4k + 2) = X(4k + 3) = N x(n) + jx n + 4 −1 X n=0 N +x n+ 2 N x(n) − x n + 4 n=0 N 4 3N +x n+ 4 N −x n+ 2 N +x n+ 2 N −x n+ 2 4 3N + jx n + 4 3N −x n+ 4 WNn W Nkn 4 3N − jx n + 4 WN0 W Nkn WN2n W Nkn 4 WN3n W Nkn 4 Figura 3.19: División de X(k) en cuatro partes Algoritmo FFT de base partida (SRFFT) Es posible aprovechar el hecho de que se puedan calcular de forma independiente los puntos pares e impares de una DFT para optimizar aún más el cálculo. Dado que la parte par solamente requiere operaciones de suma puede realizarse más eficientemente usando DIT base 2. Sin embargo para la parte impar resulta más eficiente hacerlo mediante DIT base 4 ya que contiene las operaciones de multiplicación. Ya que DIT base 4 tiene la «mariposa» más grande libre de multiplicaciones, para este método, es óptimo tomar casos base de cuatro puntos. Una base mayor que 4 no resulta en mayor eficiencia, ver [PM03]. *** Como se ha explicado al principio de esta sección y a pesar de las mejoras expuestas, los algoritmos FFT base 4 y FFT de base partida no se compararán ni serán implementados. 18 3. F UNDAMENTOS TEÓRICOS 3.3.3 Comparación temporal de la DFT y la FFT base 2 En la tabla 3.4 se comparan las complejidades del cálculo directo de la DFT frente al cálculo usando la FFT base 2. DFT directa FFT base 2 Sumas complejas N (N − 1) N · log2 N Multiplicaciones complejas N2 N 2 · log2 N Cuadro 3.4: Complejidad de los métodos de cálculo de la DFT Teniendo esto en cuenta se pueden esperar resultados como los de la tabla 3.5. Los datos han sido obtenidos por el programa del anexo C.1 para los algoritmos directos y los de la FFT base 2. DFT 106,14ms 387,08ms 1,52s 23,99s 1024 2048 4096 16384 IDFT 100,38ms 387,22ms 1,52s 24,11s FFT base 2 184,26µs 353,43µs 726,24µs 3,26ms IFFT base 2 178,16µs 358,84µs 759,09µs 3,37ms Cuadro 3.5: Resultados de la comparativa de algoritmos de cálculo de la DFT En la figura 3.20, en la que está representada la tabla 3.5, se puede apreciar que en cada algoritmo la transformada y su inversa quedan prácticamente superpuestas y que el FFT, además de suponer un importante ahorro en coste computacional, tiene una pendiente menor en función del número de puntos de la transformada. 24.1 s Coste temporal DFT IDFT FFT IFFT 106 ms 3 ms 178 µs 1024 2048 4096 16384 Número de puntos Figura 3.20: Comparativa entre algoritmos para el cálculo de la DFT La eficiencia de los algoritmos puede variar con la implementación del circuito, pero el número de operaciones a realizar y su importancia para el tiempo de ejecución tienen bastante peso en la comparación de éstos. 3. F UNDAMENTOS TEÓRICOS 3.4 19 Análisis espectral En esta sección se revisarán algunos de los conceptos vitales para la comprensión del proceso de muestreo de una señal que posibilita su análisis de Fourier en un sistema digital. 3.4.1 Resolución espectral de la DFT y frecuencia de muestreo Para una DFT de N puntos se llama resolución espectral 4f0 a la diferencia de frecuencia entre dos puntos de X(k). Siendo T0 el tiempo de observación (T0 = 4f1 0 ) de la señal, supuesta periódica. Y la frecuencia de muestreo fs , inversa del periodo de muestreo Ts . Teniendo en cuenta que T0 = N Ts se puede calcular: fs = N 1 = Ts T0 Figura 3.21: Frecuencia de muestreo 4f0 = 1 1 fs = = T0 N Ts N Figura 3.22: Resolución espectral y frecuencia de muestreo Como se puede observar, la resolución espectral es N veces menor que la frecuencia de muestreo. Por otro lado, teniendo en cuenta 4f0 y la frecuencia máxima sobre la que codificar información, se tendrá que obtener una fs mínima válida. Tampoco convendrá aumentar dicha frecuencia más de lo necesario ya que se obtendría una DFT de más puntos. El Teorema de Muestreo (sección 3.4.3) proporciona un criterio para elegir fs . En el siguiente apartado (3.4.2) que describe el proceso por el cual se obtiene una señal discretizada y periódica a partir de una señal continua de ejemplo, se puede apreciar gráficamente el papel la resolución espectral y de la frecuencia de muestreo utilizadas. 20 3. F UNDAMENTOS TEÓRICOS 3.4.2 Demostración: obtención de una señal discreta periódica a partir de una señal continua Dada una señal x(t) y su transformada de Fourier X(f ), ambas representadas en la tabla 3.6-1, se procede a explicar el proceso por el cual la señal continua se muestrea y trunca para obtener una señal discreta periódica y su transformada en la tabla 3.6-7. Resulta oportuno aclarar que la multiplicación de dos señales en el dominio temporal implica la convolución de sus espectros en el dominio frecuencial. Ver [PM03] para más información. En primer lugar, en la tabla 3.6-2 aparecen la representación de un tren de deltas de periodo Ts en el dominio temporal y su espectro, otro tren deltas de periodo inverso fs . La demostración de esta transformada de Fourier se adjunta en el anexo F. Dicho tren de deltas es la función muestreadora ideal. En la tabla 3.6-3 se representa, también en ambos dominios, la señal muestreada. En el dominio del tiempo la función resultante es el producto de x(t) y IIITs (t). Y de forma análoga, en el dominio frecuencial, se obtiene la convolución de X(f ) y IIIfs (f ). Se obtiene una función periódica en el dominio frecuencial, ya que la convolución de una señal con una delta centrada en un punto cualquiera es la señal original desplazada a dicho punto. La señal se trunca con un pulso rectangular de longitud T0 cuya transformada de Fourier es la función «sinc» normalizada (figura 3.23), se incluye la demostración en el anexo E. Sus representaciones se encuentran en la tabla 3.6-4. sinc(x) = sen(xπ) xπ Figura 3.23: Función «sinc» normalizada o seno cardinal normalizada Por otro lado, en la tabla 3.6-5, se representan las funciones resultantes para la señal truncada donde podemos ver que en el dominio frecuencial aparece un «rizado» como consecuencia de la convolución con la función «sinc». Finalmente, para obtener una función periódica en el dominio temporal y una función discretizada en el dominio frecuencial (tabla 3.6-7), se utilizan de nuevo las correspondientes operaciones de multiplicación y convolución con sendos trenes de deltas de periodos T0 en el dominio del tiempo y ∆f0 en el dominio de la frecuencia (tabla 3.6-6). 3. F UNDAMENTOS TEÓRICOS 21 Dominio del tiempo Dominio de la frecuencia x(t) X(f) 1 t f 0 0 IIITs(t) IIITs(f) 1 fs 2 t -Ts 0 Ts f 0 -fs x(t) x IIITs(t) fs X(f) * IIITs(f) 3 t -Ts 0 Ts f -fs 0 -fs/2 (t) fs/2 fs sinc(f) 1 T0 4 t 0 -Ts/2 f Ts/2 0 x(t) x IIITs(t) x Π(t) X(f) * IIITs(f) * sinc(f) f 5 t -fs 0 0 -fs/2 IIIT0(t) fs/2 fs IIIT0(f) 1 T0 6 t -T0 0 T0 f - f0 0 x(n) f0 X(k) 7 t N muestras f N muestras Cuadro 3.6: Demostración: transformada de Fourier de una señal continua aperiódica 22 3. F UNDAMENTOS TEÓRICOS 3.4.3 Teorema de muestreo de Nyquist-Shanon El teorema de muestreo de Whittaker-Nyquist-Kotelnikov-Shannon demuestra que es posible reconstruir de forma exacta una señal periódica continua en banda base si la señal está limitada en banda y la frecuencia de muestreo es, al menos, el doble de la frecuencia máxima de sus componentes. fs ≥ 2fmax Figura 3.24: Criterio de Nyquist para la frecuencia de muestreo Lo descrito en la figura 3.24 es equivalente a decir que la máxima frecuencia a considerar (la del último tono) sea precisamente la frecuencia de Nyquist (índice N/2 para N par). Si se consideran frecuencias superiores a la de Nyquist se distorsionan las frecuencias inferiores. Este efecto, por el que dos señales distintas se hacen indistinguibles, se llama aliasing, Efecto Nyquist o error de solapamiento. Sin embargo, en la práctica es usual definir frecuencias de muestreo superiores a la indicada por el criterio de Nyquist en función de la eficacia de los circuitos de filtro de la señal y de otros requisitos que se puedan presentar en base a los algoritmos utilizados. Como se verá más adelante, muestrear a frecuencias muy superiores a las que establece el criterio de Nyquist dota al diseño del módem objeto de este trabajo de gran inmunidad al ruido. Es decir, los tres primeros puntos de la tabla 3.6 son también la demostración gráfica del teorema de muestreo. Sobre el gráfico de la tabla 3.6-3 en el dominio frecuencial, si no se hubiese respetado el criterio de Nyquist, se solaparían las repeticiones del espectro original X(f ). En el caso que nos ocupa, un módem DMT, tendremos que tener en cuenta que para cada código transmitido se asignará un par de valores para la amplitud y para la fase. Se ha mencionado anteriormente que tanto el valor de X(k) para la componente continua como para k = N2 son reales, por lo que no portarán datos. 3. F UNDAMENTOS TEÓRICOS 3.5 Esquemas básicos de modulación La modulación es el proceso por el cual se modifica una determinada señal que será usada como onda portadora para codificar en ella la información de una comunicación. De las propiedades de una onda se deducen los esquemas básicos de modulación, que se basan en producir cambios en la amplitud, la frecuencia o la fase de la señal portadora. En señales analógicas tenemos respectivamente los esquemas de modulación AM, FM y PM; y en señales digitales sus correspondientes discretos: ASK, FSK y PSK; en inglés Analog, Frequency y Phase Shift Keying. Los esquemas de modulación en frecuencia y fase reciben el nombre de modulaciones angulares. La modulación analógica en amplitud es usualmente de doble banda lateral, es decir, la moduladora se transmite en dos bandas diferentes de forma redundante, por encima (USB) y por debajo (LSB) de la portadora. Existen otros esquemas de modulación analógica en amplitud entre los que están DSB-SC (doble banda lateral con portadora suprimida) y SSB-SC (banda lateral única con portadora suprimida), más eficientes energéticamente al no reinsertar la portadora y en el caso de SSBSC se elimina además información redundante al modular la señal en una sola banda lateral. Pero esto tiene como consecuencia que la fabricación de dispositivos DSB-SC o SSB-SC conlleve mayor coste ya que se requiere circuitería más compleja en el receptor, que entre otras cosas, tiene que volver a generar la portadora. Otros tipos de modulación como QAM (estudiado en el siguiente apartado) o la modulación polar son esquemas más complejos que combinan varias formas de modulación básicas como las descritas en este apartado. 3.6 Modulación Discreta Multitono (DMT) La Modulación Discreta Multitono, en inglés Discrete Multi-tone Modulation (DMT), también llamada Multiplexación por División de Frecuencias Ortogonales, en inglés OFDM (Orthogonal Frequency Division Multiplexing) es un método de multiplexación de información que consiste en la utilización de un conjunto de ondas subportadoras de diferentes frecuencias, en cada una de las cuales se modula la información en QAM o PSK. En la figura 3.25 se pueden ver comparadas las componentes frecuenciales de una señal multitono de frecuencias no ortogonales, otra en la que las frecuencias sí que lo son y otra con la señal resultante; en ese orden. 23 24 3. F UNDAMENTOS TEÓRICOS f f Figura 3.25: Comparación entre pulsos en frecuencias ortogonales y no ortogonales Se puede observar en la segunda gráfica que en cada pico generado para una subportadora, marcado por una barra roja vertical, la amplitud para el resto de señales es nula. Para otro grupo de señales de ejemplo en función del tiempo en la figura 3.26 observamos que, pese a las diferentes frecuencias de las componentes, para un número entero de ciclos el valor total si integramos las áreas es nulo. t Figura 3.26: Frecuencias ortogonales superpuestas El hecho de que las frecuencias sean ortogonales hace posible que puedan solaparse y que aún así se puedan obtener los símbolos codificados en cada subportadora. 3. F UNDAMENTOS TEÓRICOS 3.6.1 PSK La Modulación por Desplazamiento de Fase (Phase Shift Keying) es un esquema de modulación digital que consiste en hacer variar la fase de la señal portadora entre un número determinado de valores discretos. Algunos de los tipos de modulación PSK más comunes son BPSK (PSK binario con separación de 180o ) y QPSK (PSK cuaternario o en cuadratura, con separación de 90o ). BPSK y QPSK, en la práctica, son equivalentes a 2-QAM y 4-QAM. 3.6.2 QAM La Modulación de Amplitud en Cuadratura (Quadrature Amplitude Modulation) es un esquema de modulación tanto digital como analógico que combina la modulación en amplitud (doble banda lateral con supresión de portadora) con la modulación en fase. En caso que nos ocupa, las comunicaciones digitales, se combinan ASK y PSK sumando señales desplazadas en fase previamente moduladas en amplitud. La variación del número de valores discretos para las amplitudes y las fases define el número de símbolos que se pueden codificar, según esto se habla de 8-QAM, 16-QAM, 256-QAM, etc. Por ejemplo, si fijamos el número de amplitudes an a 2 y el de fases pn a 4 podremos codificar 8 símbolos diferentes. Para secuencias de bits esto supondría cubrir el rango [0002 , 1112 ]. En general, cada subportadora puede codificar secuencias binarias de longitud dada por la expresión 3.27. BIT S_SU BP ORT ADORA = log2 (an · pn) Figura 3.27: Número de bits por portadora Volviendo a DMT, el número de subportadoras cn determinará a partir de la expresión 3.27 el tamaño de la secuencia de bits por trama (3.28). BIT S_T RAM A = cn · BIT S_SU BP ORT ADORA = cn · log2 (an · pn) Figura 3.28: Número de bits por trama Se puede representar gráficamente la codificación para un esquema de modulación QAM mediante un diagrama de constelación. Para ello se representan los símbolos o puntos de constelación usando coordenadas cartesianas, donde usualmente el eje de las abscisas es llamado «I» (en fase) y el de ordenadas «Q» (en cuadratura, 90o ). 25 26 3. F UNDAMENTOS TEÓRICOS Q 0000 0100 1100 1000 0001 0101 1101 1001 0011 0111 1111 1011 0010 0110 1110 1010 I Figura 3.29: Ejemplo de diagrama de constelación para 16-QAM A menudo no se utilizan todos los estados posibles para unos valores de amplitud y fase dados, de hecho un esquema QAM de un determinado número de puntos puede ser implementado con diversas constelaciones. Se pueden considerar esquemas de QAM digital rectangulares, circulares con diversas distribuciones, etc. Cada constelación tiene sus consecuencias en cuanto a la complejidad de procesamiento o la tasa de error de bit. En la figura 3.29 se puede apreciar un diagrama de constelación para 16-QAM cuadrado. Las constelaciones QAM cuadradas no maximizan la utilización del espacio de los puntos pero es más sencilla su implementación. Los esquemas circulares son óptimos ya que requieren la mínima potencia promedio para una determinada «distancia» mínima entre dos puntos. Con QAM, cuanto menor es el número de valores posibles para las amplitudes y las fases mayor es la «distancia» a la que se pueden colocar los símbolos para una determinada potencia de transmisión. Gráficamente, si en un diagrama de constelación se representan los valores muestreados según sus coordenadas se puede comprobar a cuál de los símbolos está más cercano cada uno de ellos. Por tanto, cuanto mayor sea la densidad de símbolos en el diagrama más difícil será decidir con exactitud la correspondencia con las muestras de la señal, menor será la inmunidad al ruido del sistema. Este hecho es de suma importancia ya que, junto con el número de subportadoras utilizadas, la cantidad de símbolos que se pueden codificar en cada una de ellas afecta a la cantidad de datos que se pueden transmitir por unidad de tiempo. Pero también afecta, de forma inversa, a la inmunidad frente al ruido en la señal a la hora de muestrearla en recepción. Dicha relación podrá ser medida en la simulación del diseño. 3. F UNDAMENTOS TEÓRICOS 3.7 27 Energía y potencia de una señal El estudio riguroso de los conceptos de energía y potencia de una señal se extendería demasiado, por lo que en esta sección se darán expresiones básicas para entender su uso en este trabajo. La potencia de una señal es una magnitud medida en vatios (W att = J/s) e indica la energía necesaria por unidad de tiempo para enviar dicha señal. La potencia limita además, dado un cierto factor de atenuación del medio de propagación, el alcance de la señal. Mientras que la energía, siendo una magnitud asociada, es atemporal y medida en julios (J). Se dice que una señal x(t) es de energía si su energía total Ex es finita y mayor que cero, y su potencia promedio total Px igual a 0. Por otro lado, si una señal x(t) tiene una Ex infinita y una Px finita y mayor que cero, se dice que es una señal de potencia. En particular, para la energía y potencia de una señal discreta x(n) y suponiendo una impedancia de 1Ω se cumplen las siguientes expresiones (ver [Alv11]): Ex = ∞ X |x(n)|2 n=−∞ Figura 3.30: Energía de una señal discreta no periódica N X 1 Px = lı́m |x(n)|2 N →∞ 2N + 1 n=−N Figura 3.31: Potencia de una señal discreta no periódica Para un número determinado de muestras, N : −1 1 NX Px = |x(n)|2 N n=0 Figura 3.32: Potencia de una señal discreta (N muestras) La expresión 3.32 es aplicable en el módem DMT a la señal en el dominio temporal. 28 3. F UNDAMENTOS TEÓRICOS Dada una señal sinusoidal x(t) = A · cos(2πf0 t), periódica y continua, tiene una energía total infinita y una potencia promedio total dada por la expresión: 1 A2 A2 Px = · · T0 = T0 2 2 ! Figura 3.33: Potencia de una señal sinusoidal La expresión 3.33 es aplicable en el módem DMT a las componentes del espectro de la señal en el dominio temporal. 3.8 Relación señal/ruido La relación señal/ruido o SNR (Signal-to-Noise Ratio), se define como la proporción entre la potencia de una señal y la potencia del ruido que afecta a dicha señal en el medio de transmisión. Esta relación medida en decibelios (dB), viene dada por la expresión 3.34 donde S es la potencia de la señal y R la potencia del ruido. S = 10 · log R SN RdB Figura 3.34: Relación señal/ruido Se utilizará el concepto de la relación señal/ruido para valorar la respuesta en simulación del módem a cierto nivel de ruido. Capítulo 4 Simulación U NA 4.1 Metodología de desarrollo de software vez expuestos los fundamentos teóricos del diseño de un módem DMT se procede a la implementación del software de simulación y posteriormente a la ejecución de los casos de simulación marcados como objetivo. La medición de la relación señal/ruido durante la simulación permitirá experimentar de forma aislada la influencia de los parámetros de modulación en la inmunidad al ruido. En esta fase del trabajo se utilizará la metodología de prototipado que se basa en una investigación inicial previa a varios ciclos de investigación de requisitos, diseño y codificación que llevan de forma progresiva a un modelo del software que cumpla con todos los requisitos. Codificación Investigación inicial Modelo a implementar Investigación de requisitos Diseño Dicha metodología permite evaluar de forma exhaustiva la satisfacción de requisitos y funcionalidades en cada modelo generado, del más simple al más complejo que incluirá todas las funcionalidades previstas y servirá para llevar a cabo la implementación. Es importante que el modelo final sirva de referencia para una implementación limpia del software ya que el hecho de reutilizar dicho modelo repercute negativamente en la calidad final de la implementación. 29 30 4. S IMULACIÓN 4.2 Decisiones de diseño del software de simulación En este punto se puede considerar el estudio de los fundamentos teóricos realizado en capítulo 3 como un análisis del problema y un establecimiento inicial de requisitos, por tanto, se procede con el diseño del software de simulación. Tras el proceso de desarrollo, se extrae el resumen de las decisiones de diseño que han dado forma al modelo implementado. 4.2.1 Verificación de datos de entrada Durante la ejecución de los programas se comprueba que los parámetros de configuración respeten el criterio de Nyquist (3.4.3) y que el número de bits de la trama sea coherente con el número de estados de codificación. Del mismo modo, dados los requisitos que impone el algoritmo FFT base 2, se comprueba que el número de muestras a tratar sea potencia de dos. Si no lo es, se adapta a la potencia de dos inmediatamente superior y se utiliza la frecuencia de muestreo proporcionada por el usuario para adaptar la resolución espectral. Dicha operación modifica, por tanto, las frecuencias reales de los canales y será notificada al usuario. 4.2.2 Codificación de tramas Para realizar la codificación de tramas, o mapeo de constelación, se toman las tuplas de la menos significativa a la más significativa (little-endian) en el tipo de datos. Siguiendo ese orden, se hacen corresponder las tuplas con las subportadoras en orden creciente. En transmisión se emplea la expresión 3.2 simplificada para generar el espectro. Mientras que en recepción se inicializa una matriz de símbolos para comparar las muestras espectrales recibidas y determinar los bits correspondientes. 4.2.3 Estructura El simulador consiste en dos programas principales que comparten el código del módem dividido en varios módulos, siendo los más importantes el de manejo de datos de entrada y salida, cálculo de la Transformada Discreta de Fourier (anexos A y B), codificación y el de simulación y análisis de ruido. Un tercer programa permite generar estadísticas útiles para valorar la respuesta del módem DMT a cierto nivel de ruido. Las tres partes del software de simulación serán implementadas en ejecutables separados (simu-tx, simu-rx y simu-stats respectivamente) para simplificar las líneas de órdenes y el propio diseño, haciendo uso de las técnicas de reutilización de código que posibilita la estructura modular elegida para evitar redundancia en el código fuente. 4. S IMULACIÓN 4.3 Implementación Debido a las necesidades de hacer operaciones de bajo nivel y de tener la capacidad de poder tratar con grandes volúmenes de datos, y dada la simplicidad de las estructuras de datos que se requieren, se opta por la implementación en lenguaje C. Una implementación en C++ se ha estimado demasiado compleja considerando el uso de las estructuras de datos definidas en los tres programas principales, tanto en implementación como en el uso de recursos. El código fuente generado se puede consultar en el repositorio correspondiente (apéndice C.2). A continuación se explican las principales decisiones de implementación. 4.3.1 Tipos y estructuras de datos Los tipos de la biblioteca estándar de C son suficientes para abordar el diseño propuesto, sin embargo, no se utilizará el tipo complex sino matrices bidimensionales. Esta decisión de implementación se ha tomado considerando el tipo de operaciones a realizar con los datos y en las posibilidades de optimización en los cálculos que requieren partes reales, imaginarias o ambas. Para minimizar el número de parámetros de las funciones y para las estructuras de datos definidas para la entrada del módem y de la línea de órdenes se ha recurrido a las estructuras del lenguaje C, ya que solamente se requiere agrupar variables de tipos diferentes. 4.3.2 Enfoque de implementación del algoritmo FFT base 2 Se ha optado por un enfoque iterativo y el aprovechamiento de la aritmética de punteros. Se hace una descripción más detallada de dicha implementación en el anexo B. 4.3.3 Generación de gráficas Para la generación opcional de gráficas en la simulación del proceso de transmisión se hace uso de gnuplot. Los scripts para gnuplot se encuentran en el directorio llamado gnuplot del directorio activo durante la ejecución, por lo que es recomendable ejecutar el software desde el directorio principal de compilación. 31 32 4. S IMULACIÓN 4.4 Requisitos de compilación y ejecución Los requisitos de compilación son el compilador gcc y la utilidad make. Y los de ejecución un emulador de terminal POSIX y, opcionalmente, gnuplot. En un sistema operativo GNU/Linux con gestor de paquetes dpkg y haciendo uso de la aplicación aptitude basta ejecutar: 1 # aptitude install gcc make gnuplot−qt Para la instalación con gestor de paquetes rpm y haciendo uso de la aplicación yum: 1 # yum install gcc make gnuplot−qt También deberán de ser instalados los paquetes necesarios para la compilación cruzada en cada sistema operativo si se usan los scripts «Makefile.32» o «Makefile.64» incluidos para tal efecto en el código fuente. 4.5 Uso del software de simulación Los ejecutables pueden ser configurados en cuanto al algoritmo usado para el cálculo de la DFT, el factor de normalización utilizado en dichos algoritmos y el nivel de ruido añadido a la señal generada para transmisión. El esquema de modulación y el resto de parámetros del módem DMT pueden especificarse tanto con un archivo de texto como de forma interactiva. Las posibilidades de modulación incluyen QAM circular no optimizado, ASK y PSK; dependiendo del número de valores posibles de amplitud y fase indicados en los parámetros de configuración. Uso del programa de simulación del proceso de transmisión El programa debe usarse en un sistema compatible con la interfaz POSIX. En el listado 4.1 se detallan los argumentos que puede recibir el ejecutable. 1 Simulation program for DMT modem transmission process . 3 Usage : [−i < configuration_file >] −o < output_file > [−a < algorithim >] [−f < normalization_method >] [−n < noise_peak_amplitude >] [−p ] [− h] 4 6 7 8 9 10 11 Options : −i : Optional configuration file . If not specified program will ask for configuration parameters . −o : Required output file . −a : DFT algorithm to use : dft or fft ( lower case ) . 4. S IMULACIÓN 12 13 14 15 16 17 18 19 20 21 22 24 25 26 27 28 29 30 32 33 33 ( default : fft ) −f : Normalization factor to use ( lower case ) : unitary : Unitary transform . direct : Divides by N in direct transform . inverse : Divides by N in inverse transform . force <M >: Calculates normalization factor to produce a time−domain amplitude not greater than M . ( default : inverse ) −n : Noise maximum amplitude ( V ) . ( default : 0) −p : If specified , program will plot results ( gnuplot required ) . −h : This help message . Configuration file format : < frame > ( dec | hex | oct ) < number_of_subcarriers > < number_of_amplitude_values > < number_of_phase_values > < sampling_frequency > ( Hz ) < spectral_resolution > ( will be adapted ) ( Hz ) David Valero Jimenez University of Castilla − La Mancha , Ciudad Real , Spain Listado 4.1: Uso de simu-tx Uso del programa de simulación del proceso de recepción El programa debe usarse en un sistema compatible con la interfaz POSIX. En el listado 4.2 se detallan los argumentos que puede recibir el ejecutable. 1 Simulation program for DMT modem reception process . 3 Use : −i < input_file > [−a < algorithim >] [−f < normalization_factor >] [−h ] 5 6 7 8 9 10 11 12 Options : −i : Required input file . −a : DFT algorithm to use : dft or fft ( lower case ) . ( default : fft ) −f : Normalization factor to use ( lower case ) : unitary : Unitary transform . direct : Divides by N in direct transform . inverse : Divides by N in inverse transform . 34 13 14 15 16 18 19 20 21 22 23 24 25 26 27 29 30 4. S IMULACIÓN force <M >: Calculates normalization factor to produce a time−domain amplitude not greater than M . ( default : inverse ) −h : This help message . Input file format ( as generated by transmission program ) : < number_of_subcarriers > < number_of_amplitude_values > < number_of_phase_values > < sampling_frequency > ( Hz ) < spectral_resolution > ( will be adapted ) ( Hz ) < xR (0) > < xR (1) > ... < xR (N−1)> David Valero Jimenez University of Castilla − La Mancha , Ciudad Real , Spain Listado 4.2: Uso de simu-rx Uso del programa generador de estadísticas El programa debe usarse en un sistema compatible con la interfaz POSIX. En el listado 4.3 se detallan los argumentos que puede recibir el ejecutable. 1 Simulation statistics program for DMT modem . 3 Usage : −t < number_of_tests > −n < noise_peak_amplitude > [−i < configuration_file >] [−a < algorithim >] [−f < normalization_method >] [−h ] 4 6 7 8 9 10 11 12 13 14 15 16 Options : −t : Number of tests to run . −n : Noise maximum amplitude ( V ) . −i : Optional configuration file . If not specified program will ask for configuration parameters . −a : DFT algorithm to use : dft or fft ( lower case ) . ( default : fft ) −f : Normalization factor to use ( lower case ) : unitary : Unitary transform . direct : Divides by N in direct transform . 4. S IMULACIÓN 17 18 19 20 21 23 24 25 26 27 28 29 31 32 35 inverse : Divides by N in inverse transform . force <M >: Calculates normalization factor to produce a time−domain amplitude not greater than M . ( default : inverse ) −h : This help message . Configuration file format : < frame > ( dec | hex | oct ) < number_of_subcarriers > < number_of_amplitude_values > < number_of_phase_values > < sampling_frequency > ( Hz ) < spectral_resolution > ( will be adapted ) ( Hz ) David Valero Jimenez University of Castilla − La Mancha , Ciudad Real , Spain Listado 4.3: Uso de simu-stats 36 4. S IMULACIÓN 4.6 Ejecución de los casos de simulación propuestos Se procede a definir los archivos de configuración para los dos casos de simulación que se compararán, así como a especificar los comandos para lanzar la simulación. Se usará el algoritmo FFT base 2 (algoritmo por defecto) y, para cada uno de niveles de ruido que se elijan, se ejecutarán 10000 pruebas para generar las estadísticas de cada caso de simulación. Caso de simulación 1 Dados los parámetros de configuración (figura 4.1a) y eligiendo una frecuencia de muestreo de 12800Hz, se obtiene una transformada de 64 puntos. Subportadoras Rango Amplitudes Fases Bits de trama Trama 10 200-2000 Hz 2 4 30 0x1682BD39 1 2 3 4 5 6 (a) Parámetros 0 x1682BD39 10 2 4 12800 200 (b) Archivo «test1.dat» Figura 4.1: Configuración caso de simulación 1 Comandos para la ejecución de las pruebas 1 $ bin / simu−tx −i test1 . dat −o samples1 . dat Figura 4.2: Caso 1: Simulación del proceso de transmisión 1 $ bin / simu−tx −i test1 . dat −o samples1 . dat −p Figura 4.3: Caso 1: Simulación del proceso de transmisión con generación de gráfica 1 $ bin / simu−rx −i samples1 . dat Figura 4.4: Caso 1: Simulación del proceso de recepción 1 $ bin / simu−stats −i test1 . dat −n < amplitud_maxima_ruido > −t < numero_tests > Figura 4.5: Caso 1: Estadísticas de respuesta al nivel de ruido 4. S IMULACIÓN 37 Caso de simulación 2 Se simulará un esquema de modulación 8-PSK estableciendo un solo valor para la amplitud y ocho posibles para la fase. Se utilizará la misma frecuencia de muestreo y la misma trama de datos que en el caso anterior. Subportadoras Rango subportadoras Amplitudes Fases Bits de trama Trama 10 200-2000 Hz 1 8 30 0x1682BD39 1 2 3 4 5 6 (a) Parámetros 0 x1682BD39 10 1 8 12800 200 (b) Archivo «test2.dat» Figura 4.6: Configuración caso de simulación 2 Comandos para la ejecución de las pruebas 1 $ bin / simu−tx −i test2 . dat −o samples2 . dat Figura 4.7: Caso 2: Simulación del proceso de transmisión 1 $ bin / simu−tx −i test2 . dat −o samples2 . dat −p Figura 4.8: Caso 2: Simulación del proceso de transmisión con generación de gráfica 1 $ bin / simu−rx −i samples2 . dat Figura 4.9: Caso 2: Simulación del proceso de recepción 1 $ bin / simu−stats −i test2 . dat −n < amplitud_maxima_ruido > −t < numero_tests > Figura 4.10: Caso 2: Estadísticas de respuesta al nivel de ruido 38 4. S IMULACIÓN Comparación de los casos propuestos Se procede a la ejecución de simulaciones de 10000 test con los niveles de ruido indicados en la tabla para los dos casos de simulación propuestos. Ruido (V ) 2 4 6 8 SNR (dB) 37.4259 23.5746 15.4705 9.7 % éxito 100.0 % 93.4 % 52.51 % 18.48 % Ruido (V ) 2 4 6 8 (a) Caso de simulación 1 SNR (dB) 27.1353 13.2755 5.17064 -0.598219 % éxito 99.84 % 52.38 % 7.46 % 1.1 % (b) Caso de simulación 2 Figura 4.11: Resumen de estadísticas de respuesta al ruido (casos propuestos) Como se puede apreciar en las tablas, los parámetros de configuración del caso de simulación 1 ofrecen mejores resultados. Para un test individual cualquiera de cada una de las simulaciones se pueden obtener gráficas del tipo: amplitude Time-domain signal 0.5 0.4 0.3 0.2 0.1 0 -0.1 -0.2 -0.3 Noisy signal Clean signal 0 10 20 30 40 50 60 70 samples amplitude Noise signal 0.08 0.06 0.04 0.02 0 -0.02 -0.04 -0.06 Isolated noise 0 10 20 30 40 50 60 70 samples (a) Caso de simulación 1 amplitude Time-domain signal 0.25 0.2 0.15 0.1 0.05 0 -0.05 -0.1 -0.15 -0.2 Noisy signal Clean signal 0 10 20 30 40 50 60 70 samples amplitude Noise signal 0.08 0.06 0.04 0.02 0 -0.02 -0.04 -0.06 -0.08 Isolated noise 0 10 20 30 40 50 60 70 samples (b) Caso de simulación 2 Figura 4.12: Gráficas de la señal simulada en el dominio temporal (casos propuestos) 4. S IMULACIÓN Mientras que sería posible realizar un estudio más detallado de los resultados, a priori, se pueden relacionar directamente con el hecho de que el segundo caso de simulación utiliza un mayor número de valores discretos de fase, esto aumenta la posibilidad de error en el reconocimiento de símbolos. 4.7 Otros casos de simulación Con el objetivo de completar las conclusiones ya extraídas o verificadas, se toma un conjunto de pruebas mayor. Se puede observar en los resultados que, por ejemplo, el hecho de aumentar la frecuencia de muestreo mejora la respuesta al ruido. Los archivos con las configuraciones de modulación de cada caso de simulación, así como sus resultados correspondientes se pueden encontrar en el repositorio del simulador (apéndice C) y las conclusiones resumidas en el capítulo 6. 39 Capítulo 5 Prototipado E 5.1 esta fase del trabajo se se abordará de forma elemental el diseño de un prototipo en lenguaje VHDL que genere una señal analógica a partir de otra señal digital. N Modelado hardware Para estructurar el modelo hardware correctamente, en una primera aproximación sin optimizaciones, se ha utilizado el modelo software de alto nivel. El diagrama de bloques resultante puede verse en la figura 5.1. modem modulator <frame> tx_constellation_mapper <spectrum> fft_r2 (ifft) <time-domain signal> spi_master <SPI data> (to DAC) demodulator <SPI data> (from ADC) spi_master <time-domain signal> fft_r2 (fft) <spectrum> rx_constellation_mapper <frame> Figura 5.1: Esquema de bloques del modelo hardware 41 42 5. P ROTOTIPADO En el contexto de este trabajo se ha optado por modelar únicamente el subsistema encargado del proceso de modulación. Las decisiones principales de diseño de las entidades hardware que componen dicho subsistema se detallan en los siguientes apartados. Por simplicidad, y dado que la tarea de un diseño VHDL completo, genérico y sintetizable saldría del ámbito de este trabajo, en esta memoria se omiten detalles del diseño que en su lugar irán comentados en el código. Entidad «tx_constellation_mapper» La entidad tx_constellation_mapper ha sido implementada en el prototipo de forma particularizada para unos tamaños de trama y transformada determinados. Se puede ver la máquina de estados correspondiente en la figura 5.2. init zeroMatrix mapping Figura 5.2: Máquina de estados de la entidad tx_constellation_mapper Los estados quedan definidos de la siguiente manera: zeroMatrix Asignación de cero a la salida. init Estado inicial de sincronización. mapping Asignación del espectro correspondiente a la trama de entrada. Entidad «fft_r2» La entidad fft_r2 ha sido implementada de forma genérica tomando como parámetros el tamaño de la transformada y un valor lógico que indica si se debe calcular la transformada directa o la inversa. 5. P ROTOTIPADO 43 Init Compute next iteration Assign end Output Figura 5.3: Máquina de estados de la entidad fft_r2 Los estados quedan definidos de la siguiente manera: Init Estado inicial de sincronización, inicialización de los contadores y obtención de la secuencia de entrada en orden de bit invertido. Compute Cálculo de la operación correspondiente de la transformada. Assign Asignación del resultado a la señal interna y actualización de los contadores. Output Asignación del resultado a la señal de salida y normalización de la misma si procede. Para la comunicación con un conversor digital-analógico mediante el protocolo SPI, se ha optado por una implementación básica que genera estrictamente la señal requerida por el conversor digital analógico. Además de dichas entidades se han definido paquetes para la definición de un tipo de datos de coma fija (types.vhd), para el cálculo de los factores Twiddle (twiddle.vhd), para una versión particularizada de algoritmo bit-reverse (bit_reverse_8.vhd) y para la parametrización del modelo en función de los parámetros de modulación (modem_config.vhd). 5.2 Software y hardware utilizado Se ha utilizado el software Libero SoC v11.4 de Microsemi Corporation para el desarrollo en VHDL con la licencia gratuita Microsemi Libero de un año. Este software cubre tanto la simulación como la generación del bitstream para programar la FPGA. Los procesos de síntesis, compilación y generación del bitstream pueden ser completamente automatizados. 44 5. P ROTOTIPADO Por otro lado el hardware que se ha utilizado incluye la FPGA AGLP125V2 289CS fabricada por Actel Corporation y el conversor digital-analógico PmodDA4 fabricado por Diligent Inc. Aunque también se ha considerado la opción de usar un microcontrolador como Arduino, la programación para un microcontrolador no difiere ni en técnica ni en concepto de la del software de simulación, pues no se tienen que tomar en cuenta decisiones aritméticas ni estructurales a nivel del hardware. Además la potencia que, en general, brinda una FPGA es superior incluso para un diseño hardware no óptimo como el del presente trabajo. 5.3 Procesos de simulación del hardware Para verificar un diseño VHDL se llevan a cabo tres procesos de simulación. El primero es el de la simulación pre-synthesis, en la cual se verifica el diseño de forma funcional, sin considerar las restricciones del hardware. El segundo proceso de simulación, post-synthesis, se lleva a cabo con las restricciones correspondientes y a nivel de puerta lógica. Finalmente, tras la ubicación y el enrutado de los componentes (compilación), se ejecuta el proceso de simulación post-layout, de nuevo con las restricciones que se apliquen, para verificar el diseño una vez añadidos el árbol de relojes, los buffers, etc. La simulación post-layout puede ser sustituida por cálculos y estadísticas realizadas en la simulación funcional del diseño. No obstante, sigue siendo de vital importancia en casos en los que cobra mayor importancia el hecho de que existan múltiples dominios de reloj o la consideración de límites asíncronos. Las restricciones que se aplican al diseño incluyen la configuración del reloj y de los puertos de entrada y salida. 5.4 Resultados Tras depurar la implementación del diseño se puede comprobar la salida digital que debe recibir el conversor digital-analógico en la simulación presíntesis. En el repositorio del apéndice C.3 se puede encontrar el diseño en este estado de implementación. La carga del bitstream en el dispositivo de prototipado, que posibilita la verificación empírica analizando la señal generada en un osciloscopio, requiere un proceso de adaptación del diseño a los requisitos genéricos de síntesis o a los propios de la herramienta utilizada para dicho proceso y excede el propósito de este trabajo. Capítulo 6 Conclusiones y líneas futuras T la realización de este trabajo es posible extraer resultados y comprobar algunos hechos ya previstos en los fundamentos teóricos (capítulo 3) junto a otros más específicos de las condiciones del diseño y la configuración del módem. RAS El uso del algoritmo de la Transformada Rápida de Fourier (FFT) resulta vital para la viabilidad de un módem funcional en la mayoría de los ámbitos de aplicación. La técnica de modulación utilizada en los módems objeto de estudio proporciona una inmunidad al ruido considerable en comparación con otros esquemas más simples. Fijado un nivel de ruido, el tamaño de la transformada influye en la inmunidad al ruido, de tal forma que, al incrementar el tamaño de la transformada por encima de lo necesario, se reduce la influencia del ruido. El incremento del número de valores discretos de amplitud utilizados en la modulación, manteniendo o aumentando la separación de estos, puede facilitar el reconocimiento de símbolos, pero conlleva un incremento de potencia no asumible para mejoras significativas. El incremento del número de valores discretos de fase, fijado el número de valores discretos de amplitud, dificulta el reconocimiento de símbolos. Un diseño hardware óptimo requiere un estudio más exhaustivo de la aritmética utilizada y de la propia estrategia de diseño. Dicho estudio sería fundamental para lograr un hardware de complejidad asumible que proporcionase un ancho de banda y una frecuencia de funcionamiento funcionales u óptimos para un ámbito de aplicación determinado. El diseño hardware VHDL, además, debe adaptarse a las los requisitos generales o específicos de las herramientas de síntesis. 45 46 6. C ONCLUSIONES Y LÍNEAS FUTURAS Entre las líneas futuras para continuar el estudio realizado en este trabajo se encuentran: La utilización del algoritmo FFT base 4 o FFT base partida. La ampliación del programa de generación de estadísticas para encontrar defectos de comportamiento del sistema para una configuración en unas condiciones dadas. Interfaz gráfica de usuario para el simulador que facilite la integración entre el software desarrollado y Gnuplot. Utilización de un módulo SPI genérico que proporcione mayor fiabilidad y versatilidad en la comunicación. La optimización de la aritmética utilizada en el hardware. La reestructuración del diseño hardware a más bajo nivel. ANEXOS Anexo A Implementación C del algoritmo de cálculo directo de la DFT Para simplificar el código se ha utilizado una estructura csignal que almacena las matrices de números reales para la la parte real e imaginaria de las señales así como su tamaño. También se ha implementado una función para la normalización estándar de la DFT. Archivo fuente «dft.h» 1 2 #ifndef DFT_H #define DFT_H 5 #include < stdlib .h > #include < math .h > 7 #include " complex_signal . h " 4 10 11 12 13 14 15 18 19 20 22 23 24 27 28 typedef enum { DFT , FFTR2 } DFT_algorithm ; typedef enum { UNITARY , DIVN_DIRECT , DIVN_INVERSE } no rm al iz at io n_ ty pe ; /∗ Direct DFT algorithm implementation ∗/ csignal ∗ _dft_idft ( csignal ∗ input , int inv , no rm aliz at io n_ ty pe norm_method ) ; /∗ Driver functions for DFT and IDFT ∗/ csignal ∗ dft ( csignal ∗ x , n or ma li za ti on _t yp e norm_method ) ; csignal ∗ idft ( csignal ∗X , no rma li za ti on _t yp e norm_method ) ; /∗ DFT normalization function ∗/ void normalize ( csignal ∗ signal , int inv , no rma li za ti on _t yp e norm_method ) ; 49 50 31 A. I MPLEMENTACIÓN C DEL ALGORITMO DE CÁLCULO DIRECTO DE LA DFT #endif Listado A.1: Archivo fuente «dft.h» Archivo fuente «dft.c» 1 #include " dft . h " 4 csignal ∗ dft ( csignal ∗x , nor ma li za ti on _t yp e norm_method ) { return _dft_idft (x , 0 , norm_method ) ; } 5 6 8 9 10 12 13 15 16 17 18 19 20 22 23 24 25 27 28 30 31 32 33 34 35 36 37 38 39 csignal ∗ idft ( csignal ∗ X , n or ma li za ti on _t yp e norm_method ) { return _dft_idft (X , 1 , norm_method ) ; } csignal ∗ _dft_idft ( csignal ∗ input , int inv , no rm al iz at io n_ ty pe norm_method ) { unsigned int N = input −>size ; double WN__ , WN_ , WN ; csignal ∗ output ; double ∗ oR , ∗ oI , ∗ iR , ∗ iI ; double c , s ; int k , n ; /∗ Allocate output matrix memory ∗/ output = csignal_alloc ( N ) ; oR = output −>real ; oI = output −>imag ; WN__ = −2∗ M_PI / N ; WN__ = inv?−WN__ : WN__ ; for( k =0; k < N ; k ++) { ∗ oR = 0; ∗ oI = 0; WN_ = WN__ ∗ k ; iR = input −>real ; iI = input −>imag ; for( n =0; n < N ; n ++) { WN = WN_ ∗ n ; c = cos ( WN ) ; s = sin ( WN ) ; /∗ IDFT ∗/ A. I MPLEMENTACIÓN C DEL ALGORITMO DE CÁLCULO DIRECTO DE LA DFT ∗ oR += ∗ iR ∗ c − ∗ iI ∗ s ; ∗ oI += ∗ iR ∗ s + ∗ iI ∗ c ; iR ++; iI ++; 40 41 42 43 44 } 46 oR ++; oI ++; 47 48 } 50 /∗ Normalize output ∗/ normalize ( output , inv , norm_method ) ; 51 return output ; 53 54 } 57 void normalize ( csignal ∗ signal , int inv , no rma li za ti on _t yp e norm_method ) { unsigned int N = signal −>size ; double factor ; int i ; 59 60 61 switch( norm_method ) { case UNITARY : /∗ Unitary transform ∗/ factor = 1/ sqrt ( N ) ; break; case DIVN_DIRECT : /∗ Divides by N in direct transform ∗/ factor = inv ? 1 : 1/( double) N ; break; case DIVN_INVERSE : /∗ Divides by N in inverse transform ∗/ factor = inv ? 1/( double) N : 1 ; break; } 63 64 65 66 67 68 69 70 71 72 73 74 75 76 for( i =0; i < N ; i ++) { signal −>real [ i ] ∗= factor ; if( signal −>type == COMPLEX_T ) { signal −>imag [ i ] ∗= factor ; } } 78 79 80 81 82 83 85 } 51 52 A. I MPLEMENTACIÓN C DEL ALGORITMO DE CÁLCULO DIRECTO DE LA DFT Listado A.2: Archivo fuente «dft.c» Anexo B Implementación C del algoritmo FFT base 2 En esta implementación se ha utilizado un enfoque iterativo con el que será más sencillo desglosar y particularizar el cálculo al de un posterior diseño hardware en VHDL. También se han hecho otras consideraciones como el uso de la aritmética de punteros para optimizar el cálculo al tratar con matrices considerablemente grandes. Por otro lado, se ha utilizado una solución genérica, para matrices en lenguaje C estándar, para el problema del orden de bit invertido. La función es una adaptación del algoritmo definido en [AF05]. Para simplificar el código se ha utilizado una estructura csignal que almacena las matrices de números reales para la la parte real e imaginaria de las señales así como su tamaño. Archivo fuente «fft.h» 1 2 4 5 7 8 11 12 13 #ifndef FFT_H #define FFT_H #include < stdlib .h > #include < math .h > #include " complex_signal . h " #include " dft . h " /∗ Radix −2 Fast Fourier Transform algorithm implementation ∗/ csignal ∗ _fft_ifft_r2 ( csignal ∗ input , int inv , n orm al iz at io n_ ty pe norm_method ) ; 17 /∗ Driver function for radix −2 FFT and IFFT ∗/ csignal ∗ fft_r2 ( csignal ∗x , no rma li za ti on _t yp e norm_method ) ; csignal ∗ ifft_r2 ( csignal ∗ X , nor ma li za ti on _t yp e norm_method ) ; 20 /∗ BIT−REVERSE ∗/ 15 16 53 54 22 B. I MPLEMENTACIÓN C DEL ALGORITMO FFT BASE 2 /∗ 23 bi t_ re ve rs ed _i nd ex ( unsigned int ∗ bri , int N ) implements : 25 " Reverse bits in word by lookup table " 27 By Sean Eron Anderson seander@cs . stanford . edu 28 30 On July 14 , 2009 Hallvard Furuseth suggested the macro compacted table . 32 −−− 34 The function initializes the unsigned integer matrix " bri " ( size N ) with the bit reversed index value of each element . 35 37 ∗/ void bi t_ re ve rs ed _i nd ex (unsigned int ∗ bri , unsigned int N ) ; 40 /∗ 36 41 In−place complex matrix bit−reverse function 43 This function reorders the input complex matrix by using ∗ bitReversedIndex ( int N ) to calculate a bit−reversed index matrix of size N 44 46 ∗/ void bit_reverse ( csignal ∗ input ) ; 49 #endif 45 Listado B.1: Archivo fuente «fft.h» B. I MPLEMENTACIÓN C DEL ALGORITMO FFT BASE 2 Archivo fuente «fft.c» 1 #include " fft . h " 4 csignal ∗ fft_r2 ( csignal ∗x , no rma li za ti on _t yp e norm_method ) { return _fft_ifft_r2 (x , 0 , norm_method ) ; } 5 6 8 9 10 12 13 csignal ∗ ifft_r2 ( csignal ∗ X , nor ma li za ti on _t yp e norm_method ) { return _fft_ifft_r2 (X , 1 , norm_method ) ; } csignal ∗ _fft_ifft_r2 ( csignal ∗ input , int inv , n orm al iz at io n_ ty pe norm_method ) { 15 if( input == NULL ) return NULL ; 17 unsigned int N = input −>size ; double WN__ , WN_ , ∗∗ WN , ∗ WNr , ∗ WNi ; csignal ∗ output , ∗ input_br , ∗ swap ; double ∗ o1R , ∗ o1I , ∗ o2R , ∗ o2I , ∗ i1R , ∗ i1I , ∗ i2R , ∗ i2I ; double mult [2]; int i , b , k ; int S , B , Nb , MED = N > >1 , MEDb ; 18 19 20 21 22 23 26 27 28 29 30 31 32 33 34 35 36 39 40 41 43 44 /∗ PHASE FACTOR COMPUTING ∗/ WN__ = −2∗ M_PI / N ; WN__ = inv?−WN__ : WN__ ; /∗ IFFT ∗/ WN = (double ∗∗) malloc (sizeof(double ∗) ∗2) ; /∗ k ={0 ,... , N/2−1} ∗/ WN [ REAL ] = (double ∗) malloc (sizeof(double) ∗ MED ) ; WN [ IMAG ] = (double ∗) malloc (sizeof(double) ∗ MED ) ; for( k =0; k < MED ; k ++) { WN_ = WN__ ∗ k ; WN [ REAL ][ k ] = cos ( WN_ ) ; WN [ IMAG ][ k ] = sin ( WN_ ) ; } /∗ Input bitreverse ordering ∗/ input_br = csignal_clone ( input ) ; bit_reverse ( input_br ) ; /∗ Input and output matrices will swap in each stage ∗/ output = csignal_alloc ( N ) ; 55 56 47 48 49 50 51 52 53 54 55 56 58 59 60 61 62 63 64 66 67 70 71 72 74 75 76 B. I MPLEMENTACIÓN C DEL ALGORITMO FFT BASE 2 /∗ S : number of stages B : number of butterflies in each stage Nb : size of butterfly in each stage ∗/ S = round ( log ( N ) / M_LN2 ) ; B = MED ; Nb = N / B ; for( i =0; i < S ; i ++) { /∗ for each stage ∗/ MEDb = Nb > >1; if( i %2 == 0) { /∗ input and output assignment ∗/ i1R = i2R = input_br −>real ; i1I = i2I = input_br −>imag ; o1R = o2R = output −>real ; o1I = o2I = output −>imag ; } else { i1R = i2R = output −>real ; i1I = i2I = output −>imag ; o1R = o2R = input_br −>real ; o1I = o2I = input_br −>imag ; } i2R += MEDb ; i2I += MEDb ; o2R += MEDb ; o2I += MEDb ; for( b =0; b < B ;) { /∗ for each butterfly ∗/ WNr = WN [ REAL ]; WNi = WN [ IMAG ]; for( k =0; k < MEDb ; k ++) { ∗ o1R = ∗ o2R = ∗ i1R ; ∗ o1I = ∗ o2I = ∗ i1I ; if( k ==0) { ∗ o1R += ∗ i2R ; ∗ o1I += ∗ i2I ; ∗ o2R −= ∗ i2R ; ∗ o2I −= ∗ i2I ; } else { mult [ REAL ] = ∗ WNr ∗ ∗ i2R − ∗ WNi ∗ ∗ i2I ; mult [ IMAG ] = ∗ WNr ∗ ∗ i2I + ∗ WNi ∗ ∗ i2R ; ∗ o1R += mult [ REAL ]; ∗ o1I += mult [ IMAG ]; ∗ o2R −= mult [ REAL ]; ∗ o2I −= mult [ IMAG ]; } 78 79 80 81 82 83 84 85 86 i1R ++; i1I ++; i2R ++; i2I ++; o1R ++; o1I ++; o2R ++; o2I ++; 88 89 WNr += B ; WNi += B ; 91 92 } B. I MPLEMENTACIÓN C DEL ALGORITMO FFT BASE 2 b ++; i1R += MEDb ; i1I += MEDb ; i2R += MEDb ; i2I += MEDb ; o1R += MEDb ; o1I += MEDb ; o2R += MEDb ; o2I += MEDb ; 94 95 96 } 98 B = B > >1; Nb = Nb < <1; 100 101 103 } 105 if( S %2 == 0) { /∗ swap input_br and output if needed ∗/ swap = output ; output = input_br ; input_br = swap ; } 106 107 108 109 /∗ Normalize output ∗/ normalize ( output , inv , norm_method ) ; 111 112 csignal_free ( input_br ) ; free ( WN [ REAL ]) ; free ( WN [ IMAG ]) ; free ( WN ) ; 115 116 117 118 return output ; 121 122 } 125 void b it_ re ve rs ed _i nd ex (unsigned int ∗ bri , unsigned int N ) { /∗ By Sean Eron Anderson . See fft . h header file for details . ∗/ 126 127 128 130 132 133 134 135 136 137 139 140 unsigned int i ; static const unsigned char b i t _ r e v e r s e _ t a b l e 2 5 6 [256] = { #define R2 ( n ) n, n + 2∗64 , n + 1∗64 , n + 3∗64 #define R4 ( n ) R2 ( n ) , R2 ( n + 2∗16) , R2 ( n + 1∗16) , R2 ( n + 3∗16) #define R6 ( n ) R4 ( n ) , R4 ( n + 2∗4 ) , R4 ( n + 1∗4 ) , R4 ( n + 3∗4 ) R6 (0) , R6 (2) , R6 (1) , R6 (3) }; for( i =0; i < N ; i ++) { unsigned char ∗ p = (unsigned char ∗) & i ; 57 58 B. I MPLEMENTACIÓN C DEL ALGORITMO FFT BASE 2 141 unsigned char ∗ q = (unsigned char ∗) ( bri + i ) ; 143 q [3] q [2] q [1] q [0] 144 145 146 = = = = b i t _ r e v e r s e _ t a b l e 2 5 6 [ p [0]]; b i t _ r e v e r s e _ t a b l e 2 5 6 [ p [1]]; b i t _ r e v e r s e _ t a b l e 2 5 6 [ p [2]]; b i t _ r e v e r s e _ t a b l e 2 5 6 [ p [3]]; /∗ Fix position ∗/ int s = sizeof(int)∗8− round ( log (N−1)/ M_LN2 ) ; ∗( bri + i ) = ∗( bri + i ) >>s ; 148 149 150 } 151 153 } 156 void bit_reverse ( csignal ∗ input ) { unsigned int N = input −>size ; csignal ∗ output ; double ∗ oR , ∗ oI , ∗ iR , ∗ iI ; int k , i ; 157 158 159 160 163 unsigned int ∗ bri = (unsigned int ∗) malloc (sizeof(unsigned int) ∗ N ) ; bi t_ re ve rs ed _i nd ex ( bri , N ) ; 165 output = csignal_alloc ( N ) ; 167 iR iI oR oI 162 168 169 170 = = = = input −>real ; input −>imag ; output −>real ; output −>imag ; 177 for( k =0; k < N ; k ++) { i = bri [ k ]; ∗ oR = iR [ i ]; ∗ oI = iI [ i ]; oR ++; oI ++; } 179 csignal_copy ( input , output ) ; 181 free ( bri ) ; csignal_free ( output ) ; 172 173 174 175 176 182 184 } Listado B.2: Archivo fuente «fft.c» Anexo C Repositorios A continuación se proporcionan enlaces a los repositorios en los que se puede acceder al software generado en este trabajo. C.1 Comparador de algoritmos de cálculo de la DFT (lenguaje C) https://bitbucket.org/david valero jimenez/edp-dmt-modem-dft-benchmark/ C.2 Simulador del módem DMT (lenguaje C) https://bitbucket.org/david valero jimenez/edp-dmt-modem-simulator C.3 Prototipo hardware (lenguaje VHDL) https://bitbucket.org/david valero jimenez/edp-dmt-modem-prototype .tex 59 Anexo D Delta de Dirac La Delta de Dirac es una función generalizada introducida por el físico Paul Dirac. Centrada en un punto t0 , se define como: ( ∞, t = t0 0, t = 6 t0 δ(t − t0 ) = Figura D.1: Delta de Dirac Algunas propiedades importantes de la Delta de Dirac a. Cualquier integral que incluya una Delta de Dirac en su interior vale 1. Z ∞ δ(t) = 1 −∞ b. El producto de una Delta de Dirac centrada en un determinado t0 y una función x(t) cumple: x(t)δ(t − t0 ) = x(t0 )δ(t − t0 ) c. La convolución de una Delta de Dirac centrada en un determinado t0 y una función x(t) cumple: x(t) ∗ δ(t − t0 ) = x(t − t0 ) 61 Anexo E Demostración: transformada de Fourier de un pulso rectangular Sea una función rectangular x(t) de amplitud A como el representado en la siguiente figura: (t) A t 0 - /2 /2 Figura E.1: Función rectangular de amplitud A Teniendo en cuenta las expresiones 3.3, 3.6 y 3.23, su transformada de Fourier se calcula: X(f ) = Z ∞ x(t)e −∞ = = −jωt dt = A Z τ 2 − τ2 e−j2πf t dt = A −jω " e −jωt #τ 2 = − τ2 jA −jπf τ e − ejπf τ = ω jA (cos(−πf τ ) + j · sen(−πf τ ) − cos(πf τ ) − j · sen(πf τ )) = ω jA sen(πf τ ) sen(πf τ ) (−2j · sen(πf τ )) = A · =A·τ · = A · τ · sinc(f τ ) 2πf πf πf τ Siendo una representación genérica de la función «sinc» la siguiente: sinc(f) f 0 Figura E.2: Función «sinc» 63 Anexo F Demostración: transformada de Fourier de un tren de deltas Sea la función de muestreo ideal sδ (t) de periodo Ts : ∞ X sδ (t) = δ (t − kTs ) k=−∞ La función de muestreo ideal sδ (t) es un tren de Deltas de Dirac (ver anexo D) separadas por el periodo Ts . Como sδ (t) es periódica de periodo Ts , admite un Desarrollo en Serie de Fourier de la forma: sδ (t) = ∞ X Cn ejkωs t n=−∞ donde ωs = 2π . Ts Los coeficientes espectrales se calculan como: T T 1 Z 2s 1 Z 2s 1 1 −jnωs t Cn = sδ (t)e dt = δ(t)e−jnωs t dt = e−jnωs 0 = = fs Ts Ts Ts − 2 Ts − 2 Ts Ts Por tanto, la señal muestreadora ideal se puede volver a expresar como: sδ (t) = ∞ X n=−∞ Cn ejnωs t = ∞ X fs ejnωs t = fs n=−∞ ∞ X ejnωs t n=−∞ Y como la transformada de la suma es la suma de las transformadas: T F [sδ (t)] = Sδ (f ) = fs ∞ X n=−∞ 65 δ (f − nfs ) Bibliografía [AF05] Sean Eron Anderson and Hallvard Furuseth. Reverse bits in word by lookup table. Sean Eron Anderson, 2005. https://graphics.stanford.edu/ ~seander/bithacks.html#BitReverseTable. [Alv11] José Miguel Hobaica Alvarado. Señales y Sistemas en MATLAB y LabVIEW. OpenStax CNX, 2011. http://cnx.org/contents/ de9f41d4-b3b1-4842-aa1f-19b7d30e5c81@4.3. [BMO+ 94] C. S. Burrus, J. H. McClelland, A. V. Oppenheim, T. W. Parks, R. W. Schafer, and H. W. Schuessler. Computer-Based Excercises for Signal Processing using MATLAB. Prentice Hall, 1994. [CCR07] A. Bruce Carlson, Paul B. Crilly, and Janet C. Rutledge. Sistemas de comunicación, 4a edición. McGraw-Hill, 2007. [Doi11] Jonny Doin. SPI Master/Slave Interface. OpenCores, 2011. opencores.org/project,spi master slave. [Ell87] Douglas F. Elliot. Handbook of Digital Signal Processing / Engineering Applications. Academic Press, 1987. [HR80] José María Hernando Rábanos. Teoría de la comunicación, v. 1. Departamento de Publicaciones, Escuela Técnica Superior de Ingenieros de Telecomunicación, 1980. [HR06] José María Hernando Rábanos. Transmisión por radio, 5a Edición. Editorial Centro de Estudios Ramón Areces, 2006. [IJ93] E. C. Ifeachor and B. W. Jervis. Digital Signal Processing – A Practical Approach. Addison-Wesley, 1993. [Jon07] Douglas L. Jones. The DFT, FFT, and Practical Spectral Analysis. OpenStax CNX, 2007. http://cnx.org/contents/ d2c6d393-3590-403d-8a18-c892055b046b@2.2. 67 http:// 68 BIBLIOGRAFÍA [ME96] Craig Marven and Gillian Ewers. A Simple Approach to Digital Signal Processing. Wiley, 1996. [OS11] Alan V. Oppenheim and Roland W. Schafer. Tratamiento de señales en tiempo discreto. Prentice Hall, 2011. [OW98] Alan V. Oppenheim and Alan S. Willsky. Señales y sistemas. Prentice Hall, 1998. [PM03] John G. Proakis and Dimitris G. Manolakis. Tratamiento digital de señales / Principios, algoritmos y aplicaciones. Prentice-Hall, 2003. [Tom96] Wayne Tomasi. Sistemas de comunicaciones electrónicas. Prentice Hall, 1996. BIBLIOGRAFÍA 69 Este documento fue editado y tipografiado con LATEX empleando una modificación de la plantilla que se puede encontrar en: https://bitbucket.org/arco group/ [Respeta esta atribución al autor]