REDES NEURONALES APLICADAS A LA DEMODULACIÓN EN CANAL GAUSIANO Luis Recuenco Pérez José Romero Huertas Alejandro Rivera Lavado C/ Miguel Hernández 3 Bajo B +34666072558 C\ Hermanos García Noblejas No 188 +34635337299 C\ Pocilla No 7, 2ºA +34666906622 100039144 @alumnos.uc3m.es 100039159@alumnos.uc3m.es 100039347@alumnos.uc3m.es ABSTRACT En este documento hablaremos de las posibilidades ofrecidas por las redes neuronales en la demodulación digital en canal gausiano Categoría y descripción del tema. D.0 [General] Términos generales Viabilidad. Keywords reinformación que se vayan a transmitir deben tener su equivalente en el alfabeto de símbolos para la comunicación digital. A menudo, estos símbolos se agrupan formando constelaciones de símbolos. Existen muchos tipos de constelaciones, las más conocidas son N-QAM, cuya representación se puede observar en la figura 1 para unos valores de N iguales a 4 y 6. Esta modulación transporta log2N bits de información en cada símbolo transmitido. Así, para las constelaciones de la figura, se transmiten 2 y 4 bits por cada símbolo respectivamente. Red neural, canal gausiano, demodulación, probabilidad de error. 1.INTRODUCCIÓN A LOS SISTEMAS DE COMUNICACIÓN. Un sistema de comunicación es aquel método o conjunto de métodos a través de los cuales se puede establecer una comunicación satisfactoria. Múltiples ejemplos de sistemas de comunicación pueden ser fácilmente encontrados en todos los ámbitos de la vida. Existen, además, muchos tipos de sistemas de comunicación, que pueden clasificarse de múltiples formas. Así, por ejemplo, algunos son propios de los seres humanos, como el lenguaje o en código morse, y otros propios de los animales, como los hábitos de cortejo del pavo real. Todos ellos tienen la misión de transmitir una cierta información de un individuo a otro, y se diferencian en la forma en la que son transmitidos, el canal en que son transmitidos, y la forma de ser recibidos. Nosotros centraremos nuestro análisis en un tipo de sistemas de comunicación relativamente reciente, llamado comunicación digital. 1.1Introducción a sistemas de comunicación digitales. Un sistema de comunicaciones digitales basa su funcionamiento en que la información a transmitir se codifica previamente para traducir el alfabeto original en un alfabeto de símbolos finito que constituyen los símbolos digitales. Todos los símbolos Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Figura 1. Esquema de modulaciones 4-QAM y 16-QAM Otras modulaciones cuyo uso está muy extendido son las N-PSK, en la que la información de los símbolos no va contenida en la amplitud de estos en la modulación como es el caso de las modulaciones N-QAM, si no que está contenida en su fase. Así mismo existen muchos otros tipos de constelaciones y de variantes de las expuestas. La información codificada y modulada, es transmitida a través de un cierto canal. Dicho canal puede comportarse de muy diversas formas en cuanto a la atenuación y distorsión sufridas por la señal atraviesa dicho canal. Un ejemplo de canal es el canal gausiano, el cual se descibirá a continuación. 1.2Breve repaso histórico de las comunicaciones digitales Se puede considerar que las primeras transmisiones digitales se llevan acabo tras la invención, por parte de Alfred Vail y Samuel Morse en 1835, de lo que se llamó código morse [1]. Este sistema permitía codificar las letras del alfabeto por medio de puntos y rayas que se distinguían en transmisión por medio de la duración de los tonos. Este es efectivamente un sistema digital, puesto que cumple con las especificaciones antes mencionadas. Dicho sistema se usó, inicialmente, en el telégrafo. De esta forma, el sistema de comunicaciones se basó en un sistema de transmisión de pulsos eléctricos por los tendidos eléctricos dispuestos a tal efecto. Podemos ver en la figura 2 como es el alfabeto del código morse, compuesto por puntos y rayas. Además, dicho canal gausiano distorsiona la señal introduciendo en ella una cierta interferencia intersimbólica (ISI), cuyo principio se basa en la adición de muestras retrasadas de la señal en un instante dado. En la figura 3 podemos apreciar el efecto de la ISI sobre una señal conformada por pulsos distorsionados por el canal. Se puede apreciar como la contribución de símbolos anteriores suma o resta potencia de señal al símbolo actual, lo que dificulta la tarea de detección de la señal. Figura 3. Efecto de la ISI sobre una señal Figura 2. Alfabeto del código morse A partir de aquí, tiene lugar un desarrollo de las comunicaciones analógicas, con importantes aportaciones como el teléfono, aun en el S. XIX. Con el paso al S. XX, tiene lugar la invención de los teletipos, los cuales empiezan a usarse para transmitir datos con códigos de 5 bits, lo que limitaba el número de caracteres a 32. La evolución de las comunicaciones digitales experimentó un gran auge con el desarrollo de los protocolos TCP/IP por parte de DARPA, así como las comunicaciones móviles y la televisión y la radio. El aporte social que las comunicaciones digitales han tenido en nuestra sociedad es evidente. Terminales móviles con capacidades en constante evolución ofreciendo todo tipo de servicios multimedia, televisiones con cada vez mejor calidad de visión gracias a los códigos MPEG desarrollados a lo largo de los años y por supuesto, Internet, cuyo filosofía de funcionamiento es intrínsecamente digital, sobre redes digitales en el tronco y analógicas en lo puntos terminales de la red. Actualmente, la gran mayoría de la inversión para el desarrollo de las comunicaciones está dirigida a la evolución de las comunicaciones digitales, sobre todo para las grandes aplicaciones de consumo descritas anteriormente. Quedando las comunicaciones analógicas utilizadas para aplicaciones de más específicas. 1.3Canal gaussiano El efecto de un canal gaussiano se basa en añadir un ruido con distribución gausiana de media nula y una cierta varianza N0. Dicha distribución tiene la forma: fN = 1 2π N 0 e − x2 N0 Estos dos efectos son perjudiciales a la hora de recuperar la información transmitida. Aunque los efectos de la ISI son notorios, el peor efecto de los descritos es el del ruido gausiano. Así, para modelar el proceso de comunicación digital en un canal gausiano, necesitamos un esquema, bastante simplificado, como el que se muestra en la figura 4. Figura 4. Esquema simplificado de sistema de comunicación digital gausiano En dicho esquema podemos apreciar tres partes diferenciadas. La parte del transmisor que comprende todos los mecanismos para acondicionar la señal transmitida descritos anteriormente. También se define la parte del canal, donde encontramos un elemento aditivo de ruido, y otro cuya función de transferencia temporal llamamos f(t). Dicha función temporal describe los efectos de interferencia intersimbólica descritos anteriormente. Típicamente, dicha función de transferencia podrá ser modelada como un tren finito de deltas desplazadas, y típicamente decayendo en amplitud. Así, f(t), podría ser una señal de la forma siguiente: f (t) = N ∑ n= 0 a n δ ( t − nT ( n ) ) Donde se ha supuesto una duración de efecto de canal de N símbolos. Como se puede apreciar en la relación anterior, cada delta está multiplicada por un coeficiente de escala an, el cual irá decreciendo a medida que n aumente. Como puede apreciarse, se ha supuesto que teóricamente los intervalos entre las deltas pueden ser variables, y por tanto, dependientes de n. Se ha de notar que el modelado propuesto de la función de transferencia para el canal es bastante simplificado y solo contempla la adición de muestras retardadas. Aun así, este canal incluye efecto de memoria, el cual es muy importante a la hora de analizar el funcionamiento de sistemas de comunicación digitales sobre canal real. menor error cuadrático medio (MMSE). Otra técnica utilizada, a menudo en conjunción con las anteriores, es la detección de secuencias mediante el algoritmo de viterbi [2], ya sea en su versión de decisor duro, como la versión de decisor blando (la cual reduce apreciablemente la probabilidad de error con respecto a la versión dura, por lo cual se paga un precio en coste computacional). EN la figura 5 se puede observar un ejemplo de este algoritmo decidiendo sobre una secuencia decidida: Los coeficientes an tienen un comportamiento de decaimiento exponencial. Se ha escogido este modelo por ser el que más se ajusta al comportamiento real de ciertos canales. Cualquier otra distribución sería válida para nuestro estudio. La suma de los efectos de la función de transferencia de canal y la adición de ruido gausiano conforma un esquema, simplificado, de canal gausiano. La última parte del esquema de la figura 4, se corresponde con la parte receptora del sistema. Esta parte comprende la detección de la señal procedente del medio, su acondicionamiento y posteriormente, la señal se demodula y decodifica. Este proceso debe hacerse de tal forma que se minimice la probabilidad de error. En es punto, hacemos la distinción entre probabilidad de error de bit, y probabilidad de error de bloque. La probabilidad de error de bloque define la probabilidad de que un bloque se reciba de forma incorrecta. Se considera que un bloque se ha recibido de forma incorrecta cuando uno o más de los bits que lo componen ha sido recibido de forma incorrecta. La probabilidad de error de bit define la probabilidad de que se reciba un bit de forma incorrecta. Así, la probabilidad de recibir un bloque de forma incorrecta es: PeB = 1 − (1 − Peb ) L Siendo PeB la probabilidad de error de bloque, Peb la probabilidad de error de bit y L, la longitud (en bits) del bloque. Notar que siempre (a menos que Peb sea idénticamente 0) la probabilidad de error de bloque va a ser mayor que la probabilidad de error de bit. Sabiendo esto, y dándonos cuenta de que en las comunicaciones digitales reales, los mensajes mandados tienen incluso centenas de miles de bits, podemos llegar a imaginar lo crítico que resulta reducir al máximo Peb. Para acometer esta tarea, existen multitud de técnicas que consiguen reducir esta probabilidad en gran medida, haciendo posible que las comunicaciones sean cada vez a mayor velocidad. Alguna de estas técnicas se basan en filtros igualadores que intentan modelar la señal de forma que el efecto del canal sea amortiguado. Estas técnicas ofrecen un buen resultado, pero necesitan tener cierta información del canal en el cual se van a establecer las comunicaciones. Las dos técnicas de igualación más extendidas son los filtros forzador de ceros (ZF) y el filtro de Figura 5. Ejemplo de decisión de secuencia por medio del algoritmo de viterbi Esta técnica consigue reducir mucho la probabilidad de error, dado que utiliza teoría de estados para decidir sobre la secuencia más probable aunque se haya producido un error en algún bit. Dicha técnica también se utiliza a menudo con otra que consiste en introducir modulaciones TCM en el canal, mediante la introducción de códigos convolucionales. Dichos códigos protegen con la constelación los símbolos que tienen más probabilidad de ser confundidos durante la transmisión. Dicha protección se realiza de forma que dichos símbolos se encuentren muy separados en la constelación, de forma que la energía que el canal debe aportar para hacernos cometer un error sea lo más elevada posible, reduciendo así la probabilidad de que dicho suceso ocurra. 1.4Canal implementado Para nuestro estudio, utilizaremos un modelo de canal gausiano, cuyos efectos son la adición de ruido gausiano de media nula y una cierta varianza. El canal también introducirá una interferencia intersimbólica tal la señal se vea afectada por muestras anteriores al instante actual. Un sistema de comunicaciones completo, debería ser capaz de tratar en este caso, un canal que tuviera una respuesta temporal que pudiese expresarse como f(t) antes definida. Sin embargo, y puesto que en este estudio representamos un espectro reducido de las posibilidades que este sistema presenta, nos limitaremos a introducir una interferencia intersimbólica tal que los retardos introducidos por el canal en cada una de las deltas de la función f(t) sean constantes y además, múltiplos enteros de un período de bit. Dicha función de transferencia puede por tanto quedar expresada como sigue: f1 ( t ) = N ∑ n= 0 a nδ ( t − nTbit ) Donde hemos denominado a este subconjunto de las funciones abarcadas por f(t) como f1(t). De ahora en adelante, se define la función de transferencia temporal del canal utilizado en este estudio como la señal f1(t) indicada. Recordamos que esta no es una limitación del sistema utilizado, si no una limitación del estudio realizado. Esta simplificación hace que el canal presente una interferencia intersimbólica tal que solo tengamos pulsos centrados en los instantes coincidentes con múltiplos enteros del periodo de bit de la señal, omitiendo las variaciones temporales de este. Para la realización del estudio, además, se ha implementado toda la parte del transmisor tal como se esquematiza en la figura 4. Se ha realizado esta tarea para disponer de unas simulaciones fiables según el canal escogido. El modulador escogido es capaz de servir la señal modulada de dos formas distintas: Figura 6. Esquema de modulación binaria FSK 1.4.1Modulaciones implementadas Así, las modulaciones implementadas por nuestro programa son las siguientes: FSK: (Frequency shift keying) [3] Señal modulada en frecuencia. En los sistemas de modulación por salto de frecuencia, FSK, la señal moduladora hace variar la frecuencia de la portadora, de forma que la señal modulada resultante codifica la información asociándola a valores de frecuencia diferentes. Para este tipo de modulación hemos implementado un conmutador que selecciona entre dos portadoras distintas a frecuencia f 0 y f1, lo cual conforma el modulador más simple para este tipo de moduladora. En la figura 6 podemos apreciar un esquema de esta modulación. ASK: (Amplitude shift keying). En La modulación por desplazamiento de amplitud se representan los datos digitales como variaciones de amplitud de la onda portadora. Para este estudio hemos optado por una modulación ASK simple que se basa en un conmutador que hace variar la amplitud de la señal conforme a los símbolos transmitidos. Las variaciones en la señal moduladora producen una variación en la señal portadora haciendo que su amplitud varíe entre dos amplitudes arbitrarias, sean A0 y A1. Podemos ver un esquema de modulación ASK en la figura 7. Una vez más, la elección de señales moduladas de forma binaria responde a la conveniente simplicidad de este estudio, más que a imposiciones del proyecto en sí. Podríamos haber escogido cualquier otro tipo de señal modulada, o podríamos haber escogido constelaciones con más símbolos. Este estudio simplificado, se aborda con las señales descritas. Figura 7. Esquema de modulación binaria ASK 1.5Receptor implementado Este estudio presenta una forma alternativa para establecer una comunicación digital. En nuestro caso, tratamos de reducir la probabilidad de error de símbolo mediante la demodulación y decodificación de la señal recibida mediante el uso de una red neural debidamente entrenada. Previamente a la descripción del proyecto, en la siguiente sección se expondrá un ligero repaso al concepto de red neural. 2.Redes neuronales Las redes neuronales intentan imitar el funcionamiento del sistema nervioso de los animales, en los cuales, las neuronas son excitadas mediante impulsos eléctricos en sus entradas y ofrecen otro impulso eléctrico a su salida. Se trata de imitar este comportamiento debido a la robustez ofrecida por el sistema nervioso biológico. La salida de cada neurona vendrá definida por tres funciones: La función de excitación, que por lo general consiste en el sumatorio de cada una de las entradas multiplicada por el peso de esa entrada. Este peso puede ser positivo (excitatorio), o negativo (inhibitorio). [4] Función de activación, que modifica la anterior. si no existiera esta función, la salida sería idénticamente la salida de la función de excitación. Por último se define la función de transferencia que se aplica al valor devuelto por la función de activación. Su función es la de acotar la salida de la neurona y suele venir determinada por la función que se le desee dar a dicha neurona. En oposición al paradigma clásico de programación en ingeniería software, al aproximación al problema basada en redes neurales parte de un conjunto de datos a la entrada suficientemente expresivo de dicho problema. El objetivo último es conseguir que la red aprenda de forma totalmente automática las propiedades que se desea que tenga el sistema. Desde este punto de vista, el diseño de una red neuronal está más basado en cuestiones como la elección del tipo de red, variables a tener en cuenta y la selección de los datos previos que componen los datos de entrenamiento. Dichos datos, como se ha mencionado tienen que ser lo suficientemente expresivos como para lograr con ellos un entrenamiento suficientemente expresivo para garantizar un funcionamiento óptimo del sistema. Las características de las redes neuronales las hacen notablemente apropiadas para aquellas aplicaciones en las cuales no se dispone de un modelo identificable que pueda ser programado, pero por el contrario sí que se dispone de un cierto número de muestras de esa entrada. Se las considera especialmente robustas frente al ruido, lo que las hace particularmente atractivos para la aplicación que queremos estudiar en este trabajo. Otra característica de las redes neuronales es que son fácilmente paralelizables. Las redes neurales son muy utilizadas en campos como la clasificación y reconocimiento de patrones tanto de voz como de imágenes. Se han utilizado para predecir y encontrar patrones de fraude económico, hacer predicciones en el mercado financiero, del tiempo atmosférico, y otras muchas aplicaciones de este tipo de complejidad. Incluso algunos tipos especiales de redes neurales han sido aplicadas en conjunción con algoritmos genéticos para implementar controladores para robots. Dentro de este campo, se ha creado una disciplina para tratar la evolución de redes neurales mediante algoritmos genéticos, cuyo nombre es robótica evolutiva. Ciertos parámetros de la red tales como la topología de dicha red, algoritmo de aprendizaje, etc. constituyen en estos casos el genoma utilizado por el algoritmo genético. [5] La adecuación de la red viene dada por la propia del comportamiento que se observe en el robot que está siendo controlado. Cmo resultado de estas actividades podemos encontrar cosas como programas que simulan la actividad de un ser humano dentro de un juego, para hacer la experiencia más realista para el jugador real. Un pequeño esquema de red neural se puede observar en la figura 8, en el cual, existen tres capas de neuronas. Esta configuración de red neuronal, es una de las más conocidas y se denomina perceptrón multicapa. Figura 8. Esquema de red neural conocido como perceptrón multicapa 3.Consecuencias del uso de red neuronal en sistema de comunicación digital en canal gausiano. La utilización de una red neural dentro del campo de las comunicaciones digitales va a conllevar una serie de ventajas frente al uso de los sistemas tradicionales. Algunas de estas ventajas van a ser descritas a continuación: 3.1Autodetección de modulación digital En las secciones anteriores se ha venido introduciendo el hecho de que una red neuronal se adapta a la resolución del problema si ésta ha sido debidamente entrenada. En nuestro caso vamos a explotar dicha característica para conseguir un receptor universal para códigos digitales. Esto quiere decir que si teniendo una serie de datos expresivos de una cierta modulación digital, vamos a ser capaces de ajustar la red neuronal para hacer que funcione con dicha modulación sin la necesidad de hacer un cambio ni de hardware ni de software. Gracias a esto, un posible sistema real implementado con esta técnica podría abaratar costes a la hora de trabaja con una u otra modulación digital. El sistema también es capaz de adaptarse, por esta misma razón a los cambios de modulación como por ejemplo el cambio de una 4ASK a una 16ASK. Como hemos especificado anteriormente, nuestra implementación ha sido pensada solo para las dos modulaciones más simples de implementar, ASK y FSK. Como también ha sido expresado con anterioridad, esta simplificación solo responde a términos de simplicidad en la implementación. Un análisis más profundo debería conducir a la determinación de señales de todo tipo sin más que aplicando un entrenamiento neuronal adecuado para dicha modulación. 3.2Autodetección de periodo Otra de las propiedades que pueden ser derivadas de la utilización de una red neuronal para la realización de un sistema de comunicaciones digital es que va a proveer a nuestro sistema de autodetección de periodo. Esta no es una propiedad intrínseca de la técnica utilizada pero se puede conseguir mediante técnicas de entrenamiento especializado de la red neural, o técnicas de detección de repetitividad del periodo. Esta tarea puede simplificarse sustancialmente si las frecuencias utilizadas son múltiplo entero de alguna frecuencia fundamental, como podría ser la máxima frecuencia permitida por el teorema de Nyquist. La técnica de usar entrenamiento especializado, supone enviar una secuencia del estilo “10000…” representada en bits, y realizar las observaciones de las entradas del primer grupo de neuronas y seleccionar aquellas cuya salida es ‘1’. También podemos utilizar una técnica que nos permita recuperar el periodo de muestreo por medio de la detección de repetición en las secuencias. El método es entrenar con una secuencia del tipo “101010101…” Al entrenar con esta secuencia, los pesos neuronales deberían tener una cierta correlación de forma de forma que se repitieran de forma secuencial. El siguiente paso es anular los pesos de las entradas que excedan del periodo. De esta forma, cuando la red neuronal lea la señal lo hará de N en N muestras (siendo N el periodo de la señal en muestras por bit). Esto se realiza contando los pesos de las entradas consecutivas que contribuyen a que la salida total de la red sea ‘1’. En nuestro desarrollo, no hemos implementado esta funcionalidad, y hemos introducido tener una tasa de 1000 muestras por bit. Esto es: muestras N = 1000 bit Una vez más, se ha decidido no implementar esta funcionalidad por razones de simplicidad, quedando patente la posibilidad de un desarrollo más profundo que contemple estas posibilidades. usuaria es capaz de recuperar la señal x(t) que se transmitió por el canal gausiano. Esto es así gracias al carácter adaptativo de la red neuronal, que una vez entrenada es capaz de decidir de una forma robusta frente a entradas con un cierto ruido. Cualitativamente, la red se encarga de buscar el patrón conocido que más se adecue a la señal que le llega. La red utilizará entonces la ponderación efectuada sobre los pesos para penalizar aquellas entradas que en los entrenamientos hubiesen inducido a errores mientras que se premia a aquellas entradas que contribuyeran a escoger la opción correcta. Por lo tanto, nuestro sistema se opone a los efectos perjudiciales del canal gausiano, sin más que conocer una serie de datos de entrenamiento. Tales datos podrían ser obtenidos mediante el envío de mensajes de referencia conocidos por el canal a utilizar. El sistema también reaccionaría ante los cambios de canal sin más que actualizando los pesos de las neuronas. Gracias a todos los puntos anteriormente expuestos, observamos que gracias a la elección de un sistema inteligente como es la red neuronal, somos capaces de establecer un sistema de comunicaciones factible, y con unas especificaciones a priori muy interesantes. A continuación se expone la forma en la que se ha realizado el estudio. Más concretamente se indica como ha sido creada la red neuronal para acometer el estudio del sistema de comunicaciones digital sobre canal gausiano que se ha explicado en las secciones anteriores. 4.Descripción de la red neuronal como demodulador Suponiendo que el canal ha sido implementado como se describió en las secciones anteriores, pasaremos a describir el funcionamiento de la red neural. Inicialmente, podemos observar un esquema de la misma, con el que poder comenzar su descripción. Dicho esquema puede observarse en la figura 9. 3.3Cancelación de ruido es ISI Este modelo de sistema de comunicaciones basado en detección por medio de red neural, tiene su mayor ventaja a la hora de analizar el comportamiento del mismo frente al canal definido como: y ( t ) = x ( t ) ∗ f1 ( t ) + N ( t ) y ( t ) = x( t ) ∗ y( t ) = N ∑ n= 0 N ∑ n= 0 anδ ( t − nTbit ) + N ( t ) an x( t − nTbit ) + N ( t ) El comportamiento del sistema frente la señal de llegada y(t) tiene ventajas en lo que a calidad de la señal se refiere. Gracias al entrenamiento sufrido por las neuronas en la red, el sistema de comunicaciones es capaz de oponerse a la interferencia intersimbólica y al ruido aditivo de tal forma que la aplicación Figura 9. Esquema de la red neural implementada Donde podemos apreciar un esquema incluso más simplificado que el del perceptrón multicapa al no disponer de capas ocultas en la red. Aun así, nuestra red dispone de la capa de entrada, la cual dispone de un número configurable de neuronas. En realidad, el parámetro a configurar es el número de entradas de cada neurona. Una vez seleccionado este parámetro, la propia red selecciona el número de neuronas de la primera capa. En total, se tiene que tener un número de entradas igual que el número de muestras por periodo de la señal. En nuestro caso hemos escogido una cifra de 1000 muestras por periodo de bit. Eso significa, por tanto, que tenemos 1000 entradas a la red neuronal. − El proceso es el siguiente. Cada periodo de bit se introducen todas las muestras recibidas dentro de la red neural. Cada neurona efectúa una suma de los valores que llegan a sus entradas. A Dichas entradas, se le han asignado previamente un peso, que no hace sino detectar las zonas de la señal sobre las cuales ha tenido un efecto más notable e inhibirlas, así como a las muestras sobre las cuales el canal no ha tenido un efecto importante, las premia. De esta forma, nuestra red neural se va a oponer al ruido y la interferencia intersimbólica. El programa principal comienza en el fichero main.m. Éste Muestra por pantalla información sobre el estado de la ejecución. Utilizar otras funciones para operar con las señales. Para evitar un fichero main masivo menos comprensible, se ha distribuido en varios ficheros .m. Éstos no se definen como función: son parte del código de main. Forman parte del mismo ámbito de validez de variables (a diferencia de las funciones). Los ficheros definidos son: Si se supera un cierto umbral en la neurona, dicha neurona pondrá a su salida un ‘1’. Dicha salida, se dirige hacia la segunda capa de la red neural, que solo dispone de una única neurona y contribuirá de esta forma a que en la salida total de la red haya un ‘1’ para el periodo de bit actual. Al contrario sucedería si en la salida de la neurona inicial hubiese un ‘0’. Por simplicidad no implementamos la autodetección de tasa binaria. Tampoco consideramos otras modulaciones digitales en las que se transmiten varios bits en cada símbolo. Queda como posible ampliación introducir en la segunda capa una neurona por cada símbolo de la constelación. Bastaría con elegir de todas las salidas de la capa dos la de mayor amplitud. En estas condiciones, también sería posible redefinir el entrenamiento para poder autodetectar la constelación. 5.Descripción del programa El programa ha sido diseñado en Matlab. Se escogió este programa por su versatilidad a la hora de realizar operaciones matemáticas. El código se ha realizado de forma secuencial, para simplificar la implementación. modelo de ejecución es un script principal llamando a funciones. − − − − − − La funcionalidad de la aplicación es la siguiente: − − − Inicialización de las variables que definen la red neuronal. Creación de mensajes para el entrenamiento de la red. Modulación y transmisión de los mensajes: simulación del canal. − Entrenamiento de la red. − Creación de un mensaje transmisión de prueba. − Modulación y transmisión del mensaje: simulación del canal. Adicionalmente, puede mostrar estadísticas o gráficas El programa está distribuido en varios ficheros .m, ejecutables todos desde la línea de comandos de MatLab. Éstos constan de los siguientes apartados: − Si es función, en la primera línea se incluye su definición. Documentación: incluye fecha y versión, descripción de su funcionalidad e información sobre cómo se utiliza. Se puede consultar desde el intérprete de MatLab escribiendo “help nombre_del_fichero”. Inicialización. Se definen aquí las constantes utilizadas. main.m: Inicia la ejecución. Para ejecutar el programa, basta con escribir “main” en el intérprete de MatLab. En su apartado de configuración se puede hacer que el programa muestre o no gráficas con las señales. inicializacionRedNeuronal.m: Inicializa la red de neuronas definiendo las variables pertinentes. En su apartado de configuración se puede definir, entre otras cosas, el número de neuronas de la primera capa, sin que ello implique modificar nada del resto del código. entrenamientoRedNeuronal.m: Entrena los pesos de la red de neuronas con el mensaje de entrenamiento y su correspondiente señal, modulada y modificada en el canal. Llama al siguiente fichero: evaluarRedDeNeuronas.m: Habiendo introducido las muestras de la señal en el vector que representa las entradas de la red neuronal, escribe en la variable de salida el resultado de evaluar neurona a neurona. Se utiliza tanto en el entrenamiento como en el uso sucesivo de la red para demodular mensajes. demodular.m: Demodula la señal contenida en la variable “transmision”, escribiendo el resultado (mensaje binario) en la variable “mensajeDemodulado”. Para ello, evalúa en cada periodo de bit la red neuronal con evaluarRedDeNeuronas.m. estadisticas.m: Adicionalmente se pueden incluir aquí cálculos sobre la probabilidad de error de bit, calculados a partir del número de bit demodulados que difieren de los modulados sobre el número de bits totales transmitidos. No obstante, en la versión entregada se ha optado por otro medio más intuitivo de evaluar la calidad de nuestro sistema: se transmite un mensaje escrito, se convierte a binario, se transmite y se recuperan los caracteres. Si el resultado es legible, el sistema demodula correctamente. Las funciones implementadas son las siguientes. Constan de argumentos de entrada y variables de salida. Se adjunta más información sobre ellas en la documentación de la propia aplicación: − − − Configuración. En diversos ficheros se permite cambiar la funcionalidad sin reescribir partes del código. Basta con modificar los flag's de configuración. En los comentarios de éstos se explica lo que se consigue con los distintos valores aceptados. Código ejecutable: que implementa la funcionalidad. − generarMensajeCuadrado.m: genera una señal binaria de longitud la especificada alternando ceros y unos. El primer bit es cero. Se utiliza como secuencia de entrenamiento. generarMensajePulso.m: genera una señal binaria de longitud la especificada en donde todos los bits valen cero menos el central, que vale uno. Se utiliza como secuencia de entrenamiento. En la versión entregada no es necesaria para entrenar. − − − − generarMensajeEnBinario.m: genera una señal binaria a partir de un mensaje de texto (array de caracteres). Se utiliza para mostrar el funcionamiento de la red. modular.m: Modula el mensaje binario devolviendo las muestras de la señal a transmitir. En su apartado de configuración se pueden definir los parámetros de la modulación: frecuencia de portadora, amplitud, tipo de modulación (información contenida en la amplit ud o en la frecuencia,...), etc. transmitir.m: modela el canal de transmisión digital equivalente. Esto es, el canal real muestreado. Permite introducir a la señal transmitida ruido aditivo blanco, ISI (interferencia inter-simbólica) y un retardo. En las opciones de configuración se pueden definir los parámetros de todos éstos efectos no deseados. decodificarMensajeEnBinario.m: toma el array de caracteres demodulado y devuelve el array de caracteres correspondientes. Ejecutamos el programa con la siguiente configuración: DEBUG=1; (main.c) MODULACION_EN_AMPLITUD=1; (modular.m) ISI=1; (transmitir.m) RUIDO_BLANCO=1; (transmitir.m) RETARDO=100; (transmitir.m) Con el resto de opciones con sus valores por defecto. Obtenemos las siguientes gráficas: Un ejemplo de ejecución es el siguiente. El programa muestra por pantalla lo siguiente: >> main INTELIGENCIA EN REDES DE COMUNICACIONES. Deteccion en canales gausianos mediante algoritmos neuronales. Version: 2.00.01_15/01/08 FINAL - (01/06) Inicializamos la red de neuronas: -> OK. - (02/06) Generamos la secuencia de entrenamiento: -> OK. - (03/06) Entrenamos la red de neuronas: -> Entrenando pesos de las referencias neuronales... -> Entrenando pesos de las entradas de las capas 1 y 2. -> OK. - (04/06) Generamos una transmision de prueba: -> OK. - (05/06) Demodulacion/decodificacion con la red de neuronas: -> OK. - (06/06) Estadisticas: -> Enviando el mensaje: Si con fuego arrancase una sonrisa de tu ser, con cerillas y gasolina el RED volvía a arder... -> Se obtiene lo siguiente: Si con fuego arrancase una sonrisa de tu ser, con cerillas y gasolina el RED volvía a arder... -> OK. Figura 11. Señal transmitida (entrenamiento) >> Poniendo a '1' el flag DEBUG definido en el fichero main.m, la aplicación muestra gráficamente: – – – – Figura 10. Secuencia de entrenamiento La secuencia de entrenamiento. La señal de entrenamiento transmitida. La señal de entrenamiento recibida (con los efectos de ISI, ruido y retardo introducidos por el canal), que se introducirá en la red neuronal. La secuencia binaria decidida. Figura 12. Señal obtenida del canal (entrenamiento) Figura 13. Secuencia decidida (entrenamiento). Figura 14. Secuencia de entrenamiento Figura 15. Señal transmitida (entrenamiento) En la figura 13 se puede observar como la red ha tardado 4 símbolos en converger a una salida aceptable. Esto no siempre es así. Dado que el ruido generado es aleatorio no en todas las iteraciones converge al mismo tiempo. Ejecutamos el programa modulando en frecuencia: MODULACION_EN_AMPLITUD=0; (modular.m) Con el resto de opciones como en la ejecución anterior. Obtenemos las siguientes gráficas: Figura 16. Señal obtenida del canal (entrenamiento) Figura 17. Secuencia decidida (entrenamiento). El sistema converge en la undécima muestra. En la figura 16 se pueden observar los efectos del canal sobre la señal: el ruido, que la hace tener un contorno irregular, el retardo de 100 muestras y la ISI. Para ésta serie de ejemplos, la ISI tenía coeficientes constantes. 6.Referencias Figura 17. Secuencia decidida (entrenamiento). El sistema ha convergido otra vez en la cuarta muestra. No obstante, ejecutando otra vez con idéntica configuración obtenemos la siguiente secuencia decidida: [1] [1] Wikipedia, la enciclopedia libre. Edición en castellano [en línea]: ttp://es.wikipedia.org/wiki/C%C3%B3digo_Morse [Consulta 10 enero 2008] [2] [1] Wikipedia, la enciclopedia libre. Edición en castellano [en línea]: http://es.wikipedia.org/wiki/Algoritmo_de_Viterbi [Consulta 10 enero 2008] [3] [1] Wikipedia, la enciclopedia libre. Edición en castellano [en línea]: http://es.wikipedia.org/wiki/fsk [Consulta 10 enero 2008] [4] [1] Wikipedia, la enciclopedia libre. Edición en castellano [en línea]: es.wikipedia.org/wiki/Red_neuronal_artificial [Consulta 10 enero 2008] [5] [1] Wikipedia, la enciclopedia libre. Edición en castellano [en línea]: http://www.usp.edu.pe/~jc.gutierrez/IA_/MLP.pdf [Consulta 10 enero 2008]