automatizaciÓn del simulador de …bibing.us.es/proyectos/abreproy/11463/fichero... ·...

47
CAPÍTULO 4: DISEÑO EN SCILAB 4.1. AUTOMATIZACIÓN DEL SIMULADOR DE PROPAGACIÓN DE ONDAS En este capítulo se va a exponer al lector el trabajo realizado con Scilab; es decir, la estructura del programa implementado, así como el conjunto de funciones desarrolladas para conseguir automatizar un simulador de propagación de ondas. Scilab es un paquete de software numérico Open Source desarrollado por INRIA (Institut Nacional de Recherche en Informatique et en Automatique), Francia. Usa un entorno gráfico interactivo combinado con un lenguaje de programación de más alto nivel. El lenguaje Scilab puede interactuar fácilmente con programas en lenguaje C o FORTRAN usando enlaces dinámicos a través de primitivas de enlace o usando programas de conversión [15]. 56

Upload: haduong

Post on 23-Sep-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

CAPÍTULO 4: DISEÑO EN SCILAB

4.1. AUTOMATIZACIÓN DEL SIMULADOR DE PROPAGACIÓN DE ONDAS

En este capítulo se va a exponer al lector el trabajo realizado con Scilab; es decir, la estructura del programa implementado, así como el conjunto de funciones desarrolladas para conseguir automatizar un simulador de propagación de ondas.

Scilab es un paquete de software numérico Open Source desarrollado por INRIA (Institut Nacional de Recherche en Informatique et en Automatique), Francia. Usa un entorno gráfico interactivo combinado con un lenguaje de programación de más alto nivel. El lenguaje Scilab puede interactuar fácilmente con programas en lenguaje C o FORTRAN usando enlaces dinámicos a través de primitivas de enlace o usando programas de conversión [15].

56

CAPÍTULO 4: DISEÑO EN SCILAB

4.1.1. CONSIDERACIONES GENERALES

El programa simulador se ejecuta desde la pantalla de comandos de Scilab, mediante la siguiente instrucción, cuando el archivo con las funciones está ubicado en la carpeta por defecto de Scilab:

- - > principal()

De cada función se va citar qué acciones realiza y la razón de su estructura; así como los parámetros de entrada y salida que posea y las variables propias creadas para su dominio. Las funciones de Scilab utilizadas en este programa simplemente serán citadas, ya que pueden ser consultadas en la ayuda on-line; mientras que las funciones propias a las que invoque, serán detalladas en su correspondiente apartado.

El lector debe tener en cuenta que este simulador de propagación de ondas tiene una finalidad académica; de ahí que muchos parámetros del radioenlace puedan tomar valores que en la realidad no podrían tener. Este es el caso, por ejemplo, de las ganancias de las antenas transmisora y receptora y la altura de los mástiles de dichas antenas, que en el programa no tienen límite superior y pueden tomar valores muy elevados.

4.2. DESCRIPCIÓN DE LAS FUNCIONES

La Figura 4.2.1 muestra el diagrama de flujo representa la estructura general del programa desarrollado en Scilab.

4.2.1. LA FUNCIÓN principal

La sintaxis de la función es:

principal()

Como indica su nombre, esta función es el cuerpo principal del programa. Básicamente, presenta al usuario cuatro interfaces gráficas, que se irán mostrando secuencialmente y, en las que éste podrá ir eligiendo los parámetros necesarios para la simulación de la propagación de la onda.

El usuario deberá escoger la frecuencia, la potencia transmitida, las ganancias de las antenas transmisora y receptora, la ubicación del transmisor y del receptor dentro de un mapa con las curvas de nivel del terreno, las alturas de los mástiles de las antenas y las atenuaciones adicionales a las de propagación libre y atenuación en obstáculos, como son: las atenuaciones por lluvia, vegetación y/o gases y vapores atmosféricos.

Los resultados pertinentes irán siendo mostrados gráfica o analíticamente a lo largo del programa. Estos son: la atenuación en obstáculos, la pérdida básica por propagación, la atenuación por lluvia, vegetación y/o gases atmosféricos y la potencia final recibida.

57

CAPÍTULO 4: DISEÑO EN SCILAB

4.2.1.1. Variables propias

♦ Agas: variable de tipo real. Contiene el valor de la atenuación debida a la presencia de gases y vapores atmosféricos.

♦ Agasstr: variable de tipo cadena de caracteres. Contiene el valor de la atenuación debida a la presencia de gases y vapores atmosféricos.

♦ Alluv: variable de tipo real. Contiene el valor de la atenuación debida a la presencia de lluvia.

♦ Alluvstr: variable de tipo cadena de caracteres. Contiene el valor de la atenuación debida a la presencia de lluvia.

♦ altmastilmin: variable de tipo real. Contiene la altura mínima en metros que deben tener los mástiles de las antenas de transmisión y recepción, para que la propagación sea por onda espacial.

♦ Aobst: variable de tipo real. Contiene la atenuación debida a la difracción en los obstáculos del perfil del terreno.

♦ aobstcalculada: variable de tipo lógico. Tomará valor falso cuando, tras haberse calculado la atenuación debida a los posibles obstáculos, el usuario decida qué paso quiere dar a continuación.

♦ Aobststr: variable de tipo cadena de caracteres. Contiene el valor de la atenuación debida a la difracción en los obstáculos del perfil del terreno.

♦ Aveg: variable de tipo real. Contiene el valor de la atenuación debida a la presencia de vegetación.

♦ Avegstr: variable de tipo cadena de caracteres. Contiene el valor de la atenuación debida a la presencia de vegetación.

♦ continuar: variable de tipo lógico. Tendrá valor verdadero cuando se decida continuar con los datos del perfil hasta ese momento calculado.

♦ cv: matriz de dimensión 20x15. Contiene los datos topográficos de la zona en estudio.

♦ distbosquestr: variable de tipo cadena de caracteres que contiene la distancia en metros de bosque atravesado por el radioenlace.

♦ dKm: variable de tipo real. Contiene la distancia en kilómetros del radioenlace.

♦ dKmstr: variable de tipo cadena de caracteres. Contiene la distancia en kilómetros del radioenlace.

♦ dvastr: variable de tipo cadena de caracteres. Contiene el valor en g/m3 de la densidad de vapor de agua.

♦ empezar: variable de tipo lógico. Tendrá valor verdadero cuando se decida cambiar todos los parámetros de entrada, si no se desea continuar con el perfil hasta ese momento calculado.

♦ fin: variable de tipo lógico. Tendrá valor verdadero cuando se desee salir del bucle de espera de la interfaz gráfica de usuario actual.

♦ fMHz: variable de tipo real. Contiene el valor de la frecuencia de la señal en MHz.

♦ fMHzstr: variable de tipo cadena de caracteres. Contiene el valor de la frecuencia en MHz de la señal.

58

CAPÍTULO 4: DISEÑO EN SCILAB

Figura 4.2.1. Diagrama de flujo del programa.

59

CAPÍTULO 4: DISEÑO EN SCILAB

♦ Gr: variable de tipo real. Contiene la ganancia en dB de la antena receptora.

♦ Grstr: variable de tipo cadena de caracteres. Contiene la ganancia en dB de la antena receptora.

♦ Gt: variable de tipo real. Contiene la ganancia en dB de la antena transmisora.

♦ Gtstr: variable de tipo cadena de caracteres. Contiene la ganancia en dB de la antena transmisora

♦ hr: variable de tipo real. Contiene la altura en metros del mástil de la antena receptora.

♦ hrstr: variable de tipo cadena de caracteres. Contiene la altura en metros del mástil de la antena receptora.

♦ ht: variable de tipo real. Contiene la altura en metros del mástil de la antena transmisora.

♦ htstr: variable de tipo cadena de caracteres. Contiene la altura en metros del mástil de la antena transmisora.

♦ inicalcular: variable de tipo lógico inicialmente con valor verdadero. Tomará valor falso cuando se haya creado el botón “CALCULAR” en la pantalla 3, así hace que esta acción sólo se ejecute una vez, ya que se encuentra dentro de un bucle de espera.

♦ inicurvas: variable de tipo lógico inicialmente con valor verdadero. Tomará valor falso cuando se haya creado el botón ”TRAZAR CURVAS DE NIVEL” en la pantalla 1, así hace que esta acción sólo se ejecute una vez, ya que se encuentra dentro de un bucle de espera.

♦ iniperfil: variable de tipo lógico inicialmente con valor verdadero. Tomará valor falso cuando se haya creado el botón “TRAZAR PERFIL DEL TERRENO” en la pantalla 2, así hace que esta acción sólo se ejecute una vez, ya que se encuentra dentro de un bucle de espera.

♦ lab: puntero al objeto encontrado tras su búsqueda mediante la función findobj.

♦ lambdam: variable de tipo real. Contiene la longitud de onda en metros de la señal.

♦ Lb: variable de tipo real. Contiene la pérdida básica por propagación en dB sufrida por la señal.

♦ Lbf: variable de tipo real. Contiene la pérdida básica por propagación en espacio libre en dB sufrida por la señal.

♦ mastiles: variable de tipo lógico con valor inicial falso. Tomará valor verdadero cuando, aunque la comunicación sea posible con las alturas de los mástiles de las antenas transmisoras y receptoras actuales, se desee cambiar dichas alturas.

♦ nerror: variable de tipo entero. Número del error producido al evaluar una expresión mediante la función evstr. Un valor cero denota que no ha habido error.

♦ pantalla2: variable de tipo lógico. Es la llave de un bucle de espera, que siempre presenta la pantalla 2 hasta que no se decide si continuar con el programa o comenzar desde el principio.

♦ polstr: variable de tipo cadena de caracteres. Contiene el valor de la polarización de la señal seleccionada por el usuario.

♦ potRx: variable de tipo real. Contiene el valor de la potencia recibida en dBW.

♦ potRxstr: variable de tipo cadena de caracteres. Contiene el valor de la potencia recibida en dBW.

♦ potTx: variable de tipo real. Contiene la el valor de la potencia transmitida en dBW.

♦ potTxstr: variable de tipo cadena de caracteres. Contiene el valor de la potencia transmitida en dBW.

60

CAPÍTULO 4: DISEÑO EN SCILAB

♦ pstr: variable de tipo cadena de caracteres. Contiene el valor del porcentaje de tiempo en tanto por ciento de lluvia excedida.

♦ resp: variable de tipo cadena de caracteres. Contiene la respuesta dada por el usuario a una ventana de diálogo.

♦ respuesta: variable de tipo lógico con valor inicial falso. Es la llave de un bucle de espera y tomará valor verdadero cuando el usuario seleccione, aunque la comunicación sea posible, el radiobutton adecuado que le permite empezar de nuevo, variar las alturas de los mástiles de las antenas o continuar con los datos actuales.

♦ terminar: variable de tipo lógico. Tendrá valor verdadero cuando la comunicación no sea posible y se decida terminar la ejecución del programa.

♦ xRx: variable de tipo real. Contiene el valor de la abscisa del receptor dentro del mapa del terreno en unidades kilométricas del sistema de medida U.T.M.

♦ xTx: variable de tipo real. Contiene el valor de la abscisa del transmisor dentro del mapa del terreno en unidades kilométricas del sistema de medida U.T.M.

♦ xUTM: matriz de dimensión 1x20. Contiene valores equiespaciados dentro del rango de la coordenada x del mapa del terreno.

♦ yRx: variable de tipo real. Contiene el valor de la ordenada del receptor dentro del mapa del terreno en unidades kilométricas del sistema de medida U.T.M.

♦ yTx: variable de tipo real. Contiene el valor de la ordenada del transmisor dentro del mapa de terreno en unidades kilométricas del sistema de medida U.T.M.

♦ yUTM: matriz de dimensión 1x15. Contiene valores equiespaciados dentro del rango de la coordenada y del mapa del terreno.

4.2.1.2. Funciones utilizadas

buttondialog close disp eval evstr figure findobj get sleep set string uicontrol uimenu xdel

4.2.1.3. Funcionamiento

Esta función, como se ha citado, corresponde al cuerpo principal del programa. Desde ella, se irán invocando a todas las funciones necesarias para la correcta compleción del radioenlace planteado y las variables aquí definidas tendrán validez (podrán ser utilizadas) en cualquier otra función.

Como se trata de un programa interactivo, en el que el usuario es el que introduce los parámetros del radioenlace, consta de cuatro interfaces gráficas de usuario, que se irán mostrando secuencialmente, y que siempre constan de uno o varios bucle de espera, con el fin de que dicho usuario disponga del tiempo necesario para introducir y elegir los parámetros que desee que tenga el radioenlace. Así pues, el fin de la ejecución de una interfaz de usuario, una vez cerrada ésta, dará paso al comienzo de la ejecución de la siguiente. Los resultados que se vayan obteniendo se mostrarán en estas interfaces gráficas de usuario, en ventanas gráficas y también en la pantalla de comandos; esto último permite consultar en todo instante los valores relevantes del radioenlace.

61

CAPÍTULO 4: DISEÑO EN SCILAB

Se introduce, a continuación, el funcionamiento de una interfaz de usuario y, posteriormente, la descripción detallada de cada uno de los interfaces concretos que componen esta función.

En términos generales, una interfaz gráfica de usuario en Scilab se establece con la función de biblioteca figure, que crea una figura (también llamada pantalla o ventana). En dicha figura, se pueden crear menús contextuales (con la función uimenu), y también se pueden crear los denominados objetos de una interfaz de usuario. Estos objetos son creados con la función uicontrol y pueden tener diversas propiedades. Entre ellas, la que los diferencia es el estilo: un objeto puede ser un botón rectangular usado para realizar una llamada a una función (pushbutton), un botón con dos estados posibles (radiobutton), un cuadro de texto que se puede editar (edit), un cuadro de texto estático (text), una lista de elementos (listbox), etcétera.

Los objetos, con estas citadas propiedades, son utilizados en este programa para interactuar con el usuario, dando paso al siguiente evento, ya que, como se indicó, en Scilab, a menos que se declare una variable como global, las funciones sólo admiten el paso de parámetros por valor. De ahí que la invocación a una determinada función, o la aparición de un nuevo objeto, se haga tras haber sido escrito un dato en un cuadro de texto, o tras haber pulsado el usuario un pushbutton o tras haber sido rellenado por otra función unos determinados cuadros de textos estáticos.

Una descripción más detallada de estas funciones, objetos y propiedades se realizará en la definición de cada una de esas funciones. A continuación, se detalla cada una de las interfaces o pantallas de las que se compone esta función.

4.2.1.3.1. Pantalla 1

El primer paso es crear esta interfaz, mediante la función de biblioteca figure, que devuelve un puntero para su manejo, f1. Luego, se crean un menú contextual mediante la función uimenu, para cerrar esta pantalla o salir de Scilab, que devuelve el puntero m, y los objetos (radiobuttons, cuadros de textos, cuadros editables, etcétera) necesarios.

La Figura 4.2.1.3.1.1 indica los nombres de los objetos que son utilizados en esta interfaz. A grandes rasgos, se pueden distinguir:

♦ los objetos ti, i=1,...,16, representan cuadros de texto estáticos y son creados o rellenados por el propio programa,

♦ los objetos ei, i=1,...,4, representan cuadros de texto editables y son rellenados por el usuario (el color blanco da una visión intuitiva de su función),

♦ los objetos fri, i=1, 2, representan zonas de agrupación de otros objetos,

♦ el objeto r1, representa un radiobutton, botón con dos posibles valores: on o off,

♦ los objetos bi , i=1,...,3, representan pushbutton, botones que ejecutan una función.

Dado que se trata de un programa de ejecución secuencial, no todos los objetos son mostrados inicialmente. Éste es el caso de los pushbuttons y los radiobuttons. En esta pantalla, una vez que el usuario ha introducido los primeros parámetros de entrada, debe pulsar el botón con la etiqueta “Capturar datos”, lo que provoca la ejecución de la función nueva_captura. Cuando termina la ejecución, el radiobutton “Hecho” se pone automáticamente a 1, lo que hace aparecer el botón “TRAZAR CURVAS DE NIVEL”. Si el usuario pulsa este nuevo botón, se ejecuta la función curvas_de_nivel y, tras ésta, aparece el botón “PERFIL DEL TERRENO”,

62

CAPÍTULO 4: DISEÑO EN SCILAB

que da pie a la finalización de esta primera interfaz y al comienzo de la segunda. De esta manera, se obliga al usuario a seguir el orden establecido en el cálculo del radioenlace sin saltarse ningún paso o alterar el orden de éstos.

Aunque se describan posteriormente todas las funciones con detalle, se citan aquí las principales características de las funciones que desde la pantalla 1 se invocan. La función nueva_captura recoge los parámetros de entrada introducidos por el usuario de frecuencia, potencia transmitida, ganancia de transmisión y ganancia de recepción y provoca la aparición del siguiente botón de ejecución, comprobando que el tipo de dato es correcto y que se encuentran, según el caso, dentro del rango permitido.

Figura 4.2.1.3.1.1. Objetos de la pantalla 1.

La función curvas_de_nivel crea una pantalla gráfica en la que serán representadas las curvas de nivel del terreno y pide al usuario que introduzca los emplazamientos del transmisor y del receptor en dicho mapa. Además de mostrar dichos emplazamientos gráficamente, muestra en la pantalla 1 sus coordenadas y la distancia que los separa. De nuevo, provoca la aparición del siguiente botón de ejecución que cierra esta pantalla y abre la nueva. La ventana gráfica con las curvas del terreno y un ejemplo de ubicación del transmisor y receptor se muestra en la Figura 4.2.1.3.1.2.

4.2.1.3.2. Pantalla 2

63

CAPÍTULO 4: DISEÑO EN SCILAB

De nuevo, el primer paso es crear la nueva interfaz gráfica de usuario, f2, así como el menú contextual, m, y los objetos necesarios, detallados más adelante. Pero en este caso hay una novedad, todo este proceso está dentro de un bucle, sujeto a la variable lógica pantalla2, debido a que en esta interfaz no sólo se espera a que el usuario introduzca los datos pertinentes, aquí las alturas de los mástiles de las antenas de transmisión y recepción; sino que también se espera, una vez que se ha calculado el perfil, la pérdida básica por propagación y la atenuación debida a los posibles obstáculos, a que decida si quiere continuar (se cierra la pantalla 2 y se ejecuta la pantalla 3) si se quiere modificar la altura de los mástiles (vuelve a ejecutarse la pantalla 2), tras ver que no son adecuadas; o si se quiere volver a empezar (se cierra la pantalla 2 y se ejecuta la pantalla 1), introduciendo todos los datos de nuevo.

Figura 4.2.1.3.1.2. Ventana gráfica con las curvas de nivel del terreno.

La Figura 4.2.1.3.2.1 muestra los nombres de los objetos que son utilizados en esta interfaz. Como la interfaz anterior ya fue cerrada, se reutilizan los nombres de las variables, para reducir el gasto de recursos. A grandes rasgos, se pueden distinguir:

♦ los objetos ti, i=1,...,20, representan cuadros de texto estáticos y son creados o rellenados por el propio programa,

♦ los objetos ei, i=1, 2, representan cuadros de texto editables y son rellenados por el usuario (el color blanco da una visión intuitiva de su función),

♦ los objetos fri, i=1,...,4, representan zonas de agrupación de otros objetos,

♦ los objetos ri, i=1,...,4, representan radiobuttons, botones con dos posibles valores: on o off,

♦ los objetos bi , i=1, 2, representan pushbuttons, botones que ejecutan una función.

Al igual que en la pantalla 1, el botón de ejecución “TRAZAR PERFIL DEL TERRENO” y los radiobuttons “Variar alturas de los mástiles”, “Variar todos los parámetros de entrada” y

64

CAPÍTULO 4: DISEÑO EN SCILAB

“Continuar” no aparecen hasta que se hayan ejecutado las funciones pertinentes, esto es, nueva_captura2 y perfil.

La función nueva_captura2, invocada por el botón “Capturar datos”, captura los valores de las alturas de los mástiles de las antenas transmisora y receptora introducidas por el usuario. Comprueba que el tipo de datos es correcto y si son superiores a la altura mínima que deben tener para considerar propagación por onda espacial, dada la frecuencia de la señal.

La función perfil, invocada por el botón “TRAZAR EL PERFIL DEL TERRENO”, a grandes rasgos, calcula el perfil del terreno existente entre el transmisor y el receptor y lo muestra en una nueva ventana gráfica, junto con el rayo directo que une transmisor y receptor. Además, calcula la posible pérdida por difracción en obstáculos del perfil, discriminando si son redondeados o no dichos obstáculos.

Figura 4.2.1.3.2.1. Objetos de la pantalla 2.

Además, indica mediante ventanas de diálogo las necesarias divisiones del perfil en subvanos debido a la existencia de obstáculos, si se produce o no difracción en ellos y si es posible o no el radioenlace. Si no fuese posible, tras notificárselo al usuario, se le indica, mediante una ventana de diálogo como la de la Figura 4.2.1.3.2.2, que puede decidir si cambiar los datos de entrada o finalizar el programa.

65

CAPÍTULO 4: DISEÑO EN SCILAB

Figura 4.2.1.3.2.2.

En la Figura 4.2.1.3.2.3 se muestra un ejemplo de perfil del terreno, junto con el trazado del rayo directo entre transmisor y receptor:

Figura 4.2.1.3.2.3. Ventana gráfica con el perfil del terreno.

4.2.1.3.3. Pantalla 3

Si en la pantalla 2 se decidió continuar con los datos introducidos hasta el momento, se crea la pantalla 3, f3, el menú contextual y los objetos necesarios.

La Figura 4.2.1.3.3.1 indica los nombres de los objetos utilizados en esta interfaz. Como se viene haciendo hasta ahora, se reutilizan los nombres de las variables, ya que la interfaz anterior fue ya cerrada. A grandes rasgos, se pueden distinguir:

♦ los objetos ti, i=1,...,8, representan cuadros de texto estáticos y son creados o rellenados por el propio programa,

♦ los objetos fri, i=1,...,4, representan zonas de agrupación de otros objetos,

66

CAPÍTULO 4: DISEÑO EN SCILAB

♦ los objetos ri, i=1,...,5, representan radiobuttons, botones con dos posibles valores: on o off,

♦ los objetos bi , i=1, 2, representan pushbuttons, botones que ejecutan una función.

Existen tres cuadros de texto, t6, t7 y t8, que aunque aparecen en la Figura 4.2.1.3.3.1 con el fin de que se sepa dónde están, están ocultos para el usuario, ya que sólo sirve de almacenamiento temporal de las atenuaciones calculadas, que sirve para dar paso a la siguiente pantalla.

Figura 4.2.1.3.3.1. Objetos de la pantalla 3.

En esta pantalla 3 se pide al usuario que elija qué factores quiere que afecten a la señal. Para ello, se emplea una ventana de diálogo como la de la Figura 4.2.1.3.3.2. Se espera a que el usuario elija los factores, así como los parámetros necesarios para el cálculo de la atenuación que producen.

Una vez que el usuario pulse “Capturar datos”, se comprobarán que los datos seleccionados son correctos mediante la función nueva_captura3 y, si no lo son, se pide que se vuelvan a introducir y que se ejecute de nuevo su captura. Cuando los datos sean correctos, aparece el botón “CALCULAR”, que invoca a la función perdidas2 que se encarga de calcular las atenuaciones que crean los fenómenos elegidos, de cerrar esta interfaz y de abrir la siguiente y última interfaz gráfica de usuario del programa.

67

CAPÍTULO 4: DISEÑO EN SCILAB

Figura 4.2.1.3.3.2.

4.2.1.3.4. Pantalla 4

Esta es la última interfaz gráfica del programa. En ella se muestran los datos introducidos por el usuario y los resultados más relevantes del cálculo del radioenlace, como son la potencia recibida y las atenuaciones que ha sufrido la señal en su trayectoria desde el transmisor hasta el receptor.

En la Figura 4.2.1.3.4.1 se muestra los nombres de los objetos utilizados, como son:

♦ los objetos ti, i=1,...,36, representan cuadros de texto estáticos y son creados o rellenados por el propio programa,

♦ los objetos fri, i=1, 2, representan zonas de agrupación de otros objetos,

♦ el objeto b1, representa pushbutton, botón que le da valor verdadero a la variable fin.

Figura 4.2.1.3.4.1. Objetos de la pantalla 4.

4.2.2. LA FUNCIÓN nueva_captura

La sintaxis de la función es:

68

CAPÍTULO 4: DISEÑO EN SCILAB

nueva_captura()

Esta función captura las variables de entrada introducidas por el usuario en los cuadros de texto de la primera interfaz gráfica de usuario dispuestos para tal efecto. Además, comprueba si el tipo de datos es correcto o no, y si la frecuencia se encuentra dentro del rango permitido para que se pueda considerar propagación por onda espacial. En caso de que el tipo de datos sea incorrecto o de que la frecuencia esté fuera de dicho rango, se muestra un mensaje en una ventana de diálogo pidiendo que sean introducidas de nuevo.

4.2.2.1. Variables propias

♦ fMHz: variable local de tipo cadena de caracteres, en principio vacía. Almacena el valor capturado en la pantalla 1 de la frecuencia en MHz.

♦ Gt: variable local de tipo cadena de caracteres, en principio vacía. Almacena el valor capturado en la pantalla 1 de la ganancia de transmisión en dB.

♦ Gr: variable local de tipo cadena de caracteres, en principio vacía. Almacena el valor capturado en la pantalla 1 de la ganancia de recepción en dB.

♦ nerror: matriz de ceros de dimensión 1x4. Almacena los números de error devueltos por la función de biblioteca evstr.

♦ potTx: variable local de tipo cadena de caracteres, en principio vacía. Almacena el valor capturado en la pantalla 1 de la potencia transmitida en dBw.

4.2.2.2. Funciones utilizadas buttondialog evstr find get set

4.2.2.3. Funcionamiento

Esta función es llamada desde el bucle de espera de la primera interfaz gráfica de usuario o pantalla 1. De modo que interactúa con ella mediante las variables propias de dicha interfaz, que siguen vigentes.

Inicialmente, esta función captura los datos de entrada introducidos por el usuario en los cuadros de texto de la interfaz, cuando todos los cuadros dejan de estar vacíos. De este modo, se evaluarán a la vez las cuatro cadenas introducidas en lugar de hacerlo por separado, ahorrando tiempo de evaluación.

Posteriormente, se evalúan las cadenas y se realiza el tratamiento de errores de las cuatro a la vez. Por una parte, se comprueba que las cadenas ya evaluadas componen una secuencia numérica, invocando cuatro veces a la función evstr. Esta función devuelve la evaluación de la cadena y un número de error, que en caso de ser distinto de cero, denota que ha habido error; y, por tanto, que no era una secuencia numérica. Los números de error devueltos cada vez que se invoca a la función se recopilan en una matriz de dimensión 1x4, denominada nerror; tras lo cual, se invoca a la función interna find, a la que se le pasa la evaluación de una condición: que compruebe si los elementos de la matriz nerror son distintos de cero. Si hubiese alguno que cumpla esa condición, se muestra un mensaje notificándolo en

69

CAPÍTULO 4: DISEÑO EN SCILAB

una ventana de diálogo como la de la Figura 4.2.2.3.1, y las cadenas de los cuadros de texto pasan a ser cadenas vacías (visualmente, se borra el contenido de los cuadros).

Si no hubiese error, a continuación, se comprueba si la frecuencia está en el rango permitido, es decir, si se posee un valor dentro del rango 30 MHz y 30 GHz. De no ser así, se muestra un mensaje, en una ventana de diálogo como la de la Figura 4.2.2.3.2, y se borran de nuevo los datos de la interfaz. En cambio, si la frecuencia sí está dentro de dicho rango, se entiende que todos los datos son correctos y se interactúa con la pantalla 1 poniendo a 1 el radiobutton “Hecho”, tras lo cual termina la ejecución de esta función y se devuelve el control a la función principal.

Figura 4.2.2.3.1.

Figura 4.2.2.3.2.

4.2.3. LA FUNCIÓN curvas_de_nivel

La sintaxis de la función es:

curvas_de_nivel (xUTM, yUTM, cv)

Esta función crea una ventana gráfica en la que se representan los datos topográficos del terreno elegido en el programa. En este caso, corresponde a una parte del Parque Nacional Sierra de Grazalema (Cádiz, Málaga) [16]. La Figura 4.2.3.1 muestra un paisaje típico de la zona. Los datos pertinentes se han obtenido de los fondos topográficos del Instituto Geográfico Nacional, perteneciente al Ministerio de Fomento, concretamente de la hoja número 1050, que corresponde a un mapa a escala 1:50.000 (MTN50) [17].

El usuario, entonces, debe elegir dónde quiere que estén ubicados el transmisor y el receptor dentro del mapa. Para ello, simplemente debe pinchar en el mapa dos veces. A continuación, esta función presenta en la pantalla 1, en los cuadros de textos oportunos, las coordenadas en unidades kilométricas del sistema U.T.M. del transmisor y del receptor y la distancia en kilómetros que los separa.

70

CAPÍTULO 4: DISEÑO EN SCILAB

Figura 4.2.3.1. Vista de la sierra desde el pueblo de Grazalema.

4.2.3.1. Parámetros de entrada

♦ cv: matriz de dimensión 20x15. Contiene los datos topográficos de la zona en estudio.

♦ xUTM: matriz de dimensión 1x20. Contiene valores equiespaciados dentro del rango de la coordenada x del mapa del terreno.

♦ yUTM: matriz de dimensión 1x15. Contiene valores equiespaciados dentro del rango de la coordenada y del mapa del terreno.

4.2.3.2. Variables propias

♦ a: puntero entero a los ejes actuales de la ventana gráfica creada.

♦ dKm: variable de tipo real. Contiene la distancia en kilómetros entre transmisor y receptor.

♦ dKmstr: variable de tipo cadena de caracteres. Contiene la distancia en kilómetros entre transmisor y receptor.

♦ f: puntero entero a la ventana gráfica creada. Con él se pueden manejar las propiedades de la ventana.

♦ i: variable de tipo entero. Es utilizada como índice.

♦ j: variable de tipo entero. Es utilizada como índice.

♦ legends_axes: puntero entero a la leyenda de las curvas de nivel.

♦ niveles: matriz de ceros de dimensión 1x16. El rango de alturas del mapa será dividido equitativamente en 16 niveles que serán guardados en esta matriz.

♦ nivelesimag: matriz de dimensión 1x16. Es utilizada para crear la matriz imagen de la matriz niveles.

♦ numbot: variable de tipo entero. Contiene el número del botón del ratón pulsado cuando se ejecuta la función xclick.

♦ t: puntero entero al título de la ventana gráfica actual.

71

CAPÍTULO 4: DISEÑO EN SCILAB

♦ xRx: variable de tipo real. Contiene el valor de la abscisa del receptor dentro del mapa del terreno en unidades kilométricas del sistema de medida U.T.M.

♦ xRxstr: variable de tipo cadena de caracteres. Contiene el valor de la abscisa del receptor dentro del mapa del terreno en unidades kilométricas del sistema de medida U.T.M.

♦ xTx: variable de tipo real. Contiene el valor de la abscisa del transmisor dentro del mapa del terreno en unidades kilométricas del sistema de medida U.T.M.

♦ xTxstr: variable de tipo cadena de caracteres. Contiene el valor de la abscisa del transmisor dentro del mapa del terreno en unidades kilométricas del sistema de medida U.T.M.

♦ yRx: variable de tipo real. Contiene el valor de la ordenada del receptor dentro del mapa del terreno en unidades kilométricas del sistema de medida U.T.M.

♦ yRxstr: variable de tipo cadena de caracteres. Contiene el valor de la ordenada del receptor dentro del mapa del terreno en unidades kilométricas del sistema de medida U.T.M.

♦ yTx: variable de tipo real. Contiene el valor de la ordenada del transmisor dentro del mapa de terreno en unidades kilométricas del sistema de medida U.T.M.

♦ yTxstr: variable de tipo cadena de caracteres. Contiene el valor de la ordenada del transmisor dentro del mapa de terreno en unidades kilométricas del sistema de medida U.T.M.

4.2.3.3. Funciones utilizadas

buttondialog contour2d gca gcf legends plot2d round sqrt string toolbar set xclick xname xselect xset xstring zeros

4.2.3.4. Funcionamiento

Esta función crea una ventana gráfica y establece las características que debe tener, como por ejemplo, el tamaño y el formato de las etiquetas de los ejes y del título de la propia ventana. A continuación, representa en ella las curvas de nivel del terreno, con un rango de colores adecuado, y las entidades locales y vértices geodésicos representativos de la zona. Crea la legenda del mapa y le da formato.

Además, se encarga de pedir al usuario que seleccione dentro del mapa los puntos que serán considerados el transmisor y receptor del radioenlace. Para ello invoca dos veces a la función xclick, que espera a que el usuario seleccione un punto dentro de los límites del mapa. Si seleccionase un punto fuera de dichos límites, se mostraría un mensaje de error como el de la ventana de diálogo 4.2.3.4.1, pidiendo que introduzca los puntos dentro del mapa y esperaría de nuevo la elección del usuario. Cuando los puntos seleccionados son válidos, traza una línea en el mapa para que pueda reconocerse cuál sería el rayo directo que une transmisor y receptor.

Posteriormente, se calcula la distancia en kilómetros del radioenlace y se refleja en los cuadros de texto de pantalla 1 junto con las coordenadas del transmisor y del receptor en unidades kilométricas del sistema de medida U.T.M.

72

CAPÍTULO 4: DISEÑO EN SCILAB

Figura 4.2.3.4.1.

4.2.4. LA FUNCIÓN nueva_captura2

La sintaxis de la función es:

nueva_captura2()

Esta función captura las alturas de los mástiles introducidas por el usuario en pantalla 2. Si el tipo de datos no fuese correcto, da un mensaje de error y borra el contenido de los cuadros de texto editables. Si las alturas de los mástiles no son adecuadas para considerar propagación por onda espacial, se muestra un mensaje en un cuadro de diálogo indicando el valor mínimo que deben tener dichas alturas. Cuando los datos introducidos son válidos, esta función interacciona con la función principal poniendo el radiobutton con la etiqueta “Hecho” a uno.

4.2.4.1. Variables propias

♦ hr: variable local de tipo cadena de caracteres, en principio vacía. Almacena el valor capturado en la pantalla 2 de la altura en metros del mástil de recepción.

♦ ht: variable local de tipo cadena de caracteres, en principio vacía. Almacena el valor capturado en la pantalla 2 de la altura en metros del mástil de transmisión.

♦ nerror: matriz de ceros de dimensión 1x2. Almacena los números de error devueltos por la función de biblioteca evstr.

4.2.4.2. Funciones utilizadas buttondialog evstr find get set zeros

4.2.4.3. Funcionamiento

De forma similar a la función nueva_captura, esta función pide al usuario que introduzca las alturas de los mástiles de las antenas de transmisión y recepción, como indica la Figura 4.2.4.3.1, y captura estos datos de entrada haciendo una evaluación continua de lo escrito en los cuadros de texto de la segunda interfaz gráfica de usuario, hasta que ambos cuadros dejan de estar vacíos, y así se puedan evaluar a la vez las cadenas de caracteres capturadas.

73

CAPÍTULO 4: DISEÑO EN SCILAB

Posteriormente, se evalúan las cadenas y se comprueba si componen una secuencia numérica. Para ello, se utiliza la función interna find a la que se le pasa la evaluación de una condición: que los elementos de la matriz nerror sean distintos de cero, es decir, que haya habido error.

Si hubiese error, se muestra un mensaje notificándolo y las cadenas de los cuadros de texto pasan a ser cadenas vacías (visualmente, se borra el contenido de los cuadros). Si no lo hubiese, se comprueba si las alturas de los mástiles son superiores al valor mínimo necesario para considerar propagación por onda espacial, es decir, cinco veces la longitud de onda de la señal radioeléctrica (dato empírico).

Figura 4.2.4.3.1.

Si no supera ese mínimo, se muestra un mensaje mediante un cuadro de diálogo, como se muestra en la Figura 4.2.4.3.2, y se borran los datos de la interfaz. En cambio, si los valores son válidos, se considera que los datos capturados son correctos y se establece el radiobutton “Hecho” de la pantalla 2 a 1, finalizando así la función.

Figura 4.2.4.3.2.

4.2.5. LA FUNCIÓN perfil

La sintaxis de la función es:

perfil()

Esta función traza el perfil del radioenlace partiendo de las cotas del terreno, de las coordenadas del transmisor y receptor seleccionadas en las curvas de nivel y de las alturas de los mástiles de las antenas transmisora y receptora. Además, traza el rayo directo, calcula la atenuación en los posibles obstáculos y representa, de darse el caso, los distintos subvanos en los que se divide el radioenlace debido a la presencia de dichos obstáculos que interfieren en la comunicación.

4.2.5.1. Variables propias

74

CAPÍTULO 4: DISEÑO EN SCILAB

♦ comunicacion: variable de tipo lógico con valor inicial verdadero. Indicará si es posible o no la comunicación.

♦ cotas: matriz de ceros de dimensión 1x101. Cotas en metros de los puntos del perfil del radioenlace tras considerar la contribución de las flechas debido a la curvatura de la Tierra.

♦ cotasvano: matriz de ceros de dimensión 1x101. Variable auxiliar que contiene las cotas en metros de los puntos del perfil y que se usa como variable intermedia en el cálculo de los posibles subvanos en los que se divide el perfil.

♦ cp: matriz de ceros de dimensión 1x101. Cotas iniciales en metros de los puntos del perfil del radioenlace.

♦ cpn: matriz de dimensión 19x14. Cotas en metros de los puntos notables del mapa del terreno. Puede haber un o ningún punto notable en cada retícula en las que está divido el mapa. Si un elemento de esta matriz vale cero, es que no existe un punto notable en esa retícula.

♦ d: matriz de ceros de dimensión 5x101. Distancias en metros entre cada punto del perfil y los cuatro vértices y el punto notable, de la retícula del mapa en la que se encuentra dicho punto.

♦ delta: variable de tipo real. Distancia en metros de un intervalo de medición.

♦ dm: variable de tipo real. Distancia en metros entre el transmisor y el receptor.

♦ f: matriz de ceros de dimensión 1x101. Flecha medida en metros de los puntos del perfil del radioenlace.

♦ h: matriz de ceros de dimensión 1x101. Despejamiento medido en metros de los puntos del perfil del radioenlace.

♦ hnorm: matriz de ceros de dimensión 1x99. Despejamiento normalizado de los puntos del perfil entre el transmisor y el receptor, excluyendo estos extremos del perfil.

♦ k: variable de tipo real. Factor de corrección del radio terrestre debido a la curvatura de la Tierra.

♦ nabla: variable de tipo real. Paso de la retícula de datos medido en metros.

♦ numinterv: variable de tipo entero. Número de intervalos en los que se dividirá el perfil del terreno. Se ha elegido como número de intervalos 100, por considerarse suficiente para nuestro programa. Por supuesto, cuántos más intervalos de medición se elijan, más preciso será el cálculo de la atenuación en obstáculos.

♦ numobst: variable de tipo entero con valor inicial cero. Número de obstáculos dentro del perfil que interfieren en la comunicación.

♦ puntos: variable de tipo entero. Número de muestras del perfil del terreno. Se considera 101 muestras, como consecuencia del número de intervalos de medición elegido.

♦ RD: matriz de ceros de dimensión 1x101. Contendrá las cotas en metros del rayo directo entre el transmisor y el receptor.

♦ R1: matriz de ceros de dimensión 1x101. Contendrá el valor del radio de la primera zona de Fresnel en metros de los puntos del perfil entre el transmisor y el receptor.

♦ teta: variable de tipo real. Pendiente sobre el plano XY de la línea que une transmisor y receptor.

♦ x: matriz de ceros de dimensión 1x101. Contendrá las abscisas de los puntos del perfil entre el transmisor y el receptor en unidades del sistema de medida U.T.M.

♦ y: matriz de ceros de dimensión 1x101. Contendrá las ordenadas de los puntos del perfil entre el transmisor y el receptor en unidades del sistema de medida U.T.M.

75

CAPÍTULO 4: DISEÑO EN SCILAB

4.2.5.2. Funciones utilizadas

atan cos disp floor gca gcf log10 max min plot2d plot2d3 set sin sqrt string title xname xselect zeros

4.2.5.2.1. Funciones propias

calculo_obstaculos

4.2.5.3. Funcionamiento

Esta función, siguiendo el procedimiento expuesto en el Apartado 3.3.6.2 del Capítulo 3, traza el perfil del terreno existente entre el transmisor y el receptor, teniendo en cuenta la protuberancia de la Tierra. A continuación, presenta en la pantalla 2 las cotas máximas y mínimas del perfil y crea una ventana gráfica en la que se representa el perfil del terreno y el rayo directo inicial, con el formato adecuado, como el ejemplo mostrado en la Figura 4.2.5.3.1.

Figura 4.2.5.3.1. Ejemplo de trazado del perfil del terreno y del rayo directo.

Después, llama a la función calculo_obstaculos que indica si es posible o no la comunicación y, si lo fuese, nos da el valor final de la atenuación debida a todos los obstáculos encontrados. Además, la función perfil calcula la pérdida básica por propagación en espacio libre y muestra en la pantalla 2 el balance de potencia hasta el momento, indicando la potencia transmitida (dato introducido por el usuario), la pérdida básica de propagación en espacio libre,

76

CAPÍTULO 4: DISEÑO EN SCILAB

la atenuación debida a los obstáculos y la potencia actual recibida, si no se tuvieran en cuenta más factores.

El motivo de que la función perfil llame a la función calculo_obstaculos es el de aprovechar la figura creada por la primera, para mostrar gráficamente los distintos obstáculos que afectan a la comunicación, así como la posible división en subvanos del radioenlace.

Cuando el balance de potencia es mostrado en la pantalla 2, haya sido posible o no la comunicación, se termina la ejecución de esta función y se devuelve el control a la función principal.

4.2.6. LA FUNCIÓN calculo_obstaculos

La sintaxis de la función es:

[At,comunicacion]=calculo_obstaculos(dm,delta,cotas)

Esta función calcula la posible atenuación debida a los obstáculos que haya en el perfil del radioenlace e indica si es posible o no la comunicación. Para ello, se basa en la existencia o no de un obstáculo en la primera zona de Fresnel alrededor del rayo directo, como se expuso en el Apartado 3.3.6.1. del Capítulo 3, y va dividiendo el radioenlace en hasta 15 subvanos, a medida que se vayan encontrando obstáculos que interfieran en la señal.

El procedimiento que se sigue en la búsqueda de los obstáculos es el siguiente. Se busca el obstáculo más perjudicial para la señal en el vano original del radioenlace. En caso de que exista, se divide el vano en dos, el subvano 1 y el subvano 2, ya que el efecto del obstáculo es el de actuar como un nuevo receptor (un receptor ficticio) para el transmisor original y como un nuevo transmisor (un transmisor ficticio) para el receptor original. Entonces, se repite el procedimiento en cada uno de los nuevos subvanos, de modo que, si existiese un obstáculo en ellos, dichos subvanos quedarían divididos en sendos subvanos: subvanos 11 y 12 para el caso del subvano 1, y subvanos 21 y 22 para el caso del subvano 2. De nuevo se repite, una última vez, el procedimiento de búsqueda en dichos subvanos de un obstáculo, pudiendo llegar a generar los subvanos 111, 112, 121, 122, 211, 212, 221 y 222. De ahí que el estudio se haga en quince subvanos. Se ha estimado que es suficiente esta aproximación para la presente situación.

La Figura 4.2.6.1 muestra un ejemplo de división del vano original del radioenlace en dos subvanos y, cada uno de éstos en sendos nuevos subvanos.

Por supuesto, en cualquier momento estudiando el vano original o cualquier subvano, puede existir un obstáculo que impida la comunicación, en cuyo caso, termina la ejecución de esta función y se devuelve el control a la función principal, que lo notificará al usuario.

4.2.6.1. Parámetros de entrada

♦ cotas: matriz de ceros de dimensión 1x101. Sus elementos son las alturas en metros de los puntos del perfil del radioenlace, tras considerar la contribución de las flechas debido a la curvatura de la Tierra.

77

CAPÍTULO 4: DISEÑO EN SCILAB

♦ delta: variable de tipo real. Distancia en metros de un intervalo de medición.

♦ dm: variable de tipo real. Distancia en metros del radioenlace.

4.2.6.2. Parámetros de salida

♦ At: variable de tipo real. Atenuación total debida a los posibles obstáculos, medida en dB.

♦ comunicacion: variable de tipo lógico. Toma valor verdadero si es posible la comunicación, aunque existan pérdidas.

Figura 4.2.6.1. División del vano original del enlace en subvanos.

4.2.6.3. Variables propias

♦ altmax: matriz de ceros inicialmente de dimensión 1x15. Sus elementos contendrán las alturas en metros de los mayores obstáculos de los quince posibles subvanos en estudio, o cero si no existe ningún obstáculo en su correspondiente subvano.

♦ altorden: matriz de ceros inicialmente de dimensión 1x15. Sus elementos contendrán las alturas en metros de los obstáculos reales ordenadas por su proximidad al transmisor original.

♦ distabs: matriz de ceros inicialmente de dimensión 1x15. Sus elementos contendrán las distancias en metros de los mayores obstáculos de los quince posibles subvanos en estudio al transmisor original del perfil, o cero si no existe ningún obstáculo en su correspondiente subvano.

78

CAPÍTULO 4: DISEÑO EN SCILAB

♦ distanciam: matriz de ceros de dimensión 1x99. Sus elementos contendrán las distancias en metros de todas las muestras al transmisor original.

♦ distanciamsub1: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán las distancias en metros de todas las muestras del subvano1 a su transmisor relativo.

♦ distanciamsub11: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán las distancias en metros de todas las muestras del subvano11 a su transmisor relativo.

♦ distanciamsub111: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán las distancias en metros de todas las muestras del subvano111 a su transmisor relativo.

♦ distanciamsub112: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán las distancias en metros de todas las muestras del subvano112 a su transmisor relativo.

♦ distanciamsub12: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán las distancias en metros de todas las muestras del subvano12 a su transmisor relativo.

♦ distanciamsub121: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán las distancias en metros de todas las muestras del subvano121 a su transmisor relativo.

♦ distanciamsub122: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán las distancias en metros de todas las muestras del subvano122 a su transmisor relativo.

♦ distanciamsub2: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán las distancias en metros de todas las muestras del subvano2 a su transmisor relativo.

♦ distanciamsub21: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán las distancias en metros de todas las muestras del subvano21 a su transmisor relativo.

♦ distanciamsub211: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán las distancias en metros de todas las muestras del subvano211 a su transmisor relativo.

♦ distanciamsub212: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán las distancias en metros de todas las muestras del subvano212 a su transmisor relativo.

♦ distanciamsub22: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán las distancias en metros de todas las muestras del subvano22 a su transmisor relativo.

♦ distanciamsub221: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán las distancias en metros de todas las muestras del subvano221 a su transmisor relativo.

♦ distanciamsub222: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán las distancias en metros de todas las muestras del subvano222 a su transmisor relativo.

♦ distmax: matriz de ceros inicialmente de dimensión 1x15. Sus elementos contendrán las distancias en metros del mayor obstáculo de cada subvano en estudio a su transmisor relativo, o cero si no existe dicho obstáculo.

♦ distorden: matriz de ceros inicialmente de dimensión 1x15. Sus elementos contendrán las distancias en metros de los obstáculos reales al transmisor original ordenadas por su proximidad al mismo.

79

CAPÍTULO 4: DISEÑO EN SCILAB

♦ distvanom: matriz de ceros de dimensión 1x15. Sus elementos contendrán las distancias en metros de los quince subvanos posibles, o cero si no ha sido necesario crear ese subvano.

♦ hn: matriz de ceros de dimensión 1x15. Sus elementos contendrán el máximo despejamiento normalizado de los quince subvanos posibles, o cero si no ha sido necesario crear ese subvano.

♦ i: variable de tipo entero. Es utilizada como contador.

♦ indinicotas: variable de tipo entero. Representa el índice absoluto en el que empiezan las muestras del subvano en estudio.

♦ indmax: matriz de dimensión 1x15. Sus elementos contienen el índice relativo de los obstáculos dentro de sus correspondientes subvanos.

♦ hnorm: matriz de ceros de dimensión 1x99. Sus elementos contendrán el despejamiento normalizado de todas las muestras del vano original.

♦ hnormsub1: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán el despejamiento normalizado de todas las muestras del subvano1.

♦ hnormsub11: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán el despejamiento normalizado de todas las muestras del subvano11.

♦ hnormsub111: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán el despejamiento normalizado de todas las muestras del subvano111.

♦ hnormsub112: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán el despejamiento normalizado de todas las muestras del subvano112.

♦ hnormsub12: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán el despejamiento normalizado de todas las muestras del subvano12.

♦ hnormsub121: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán el despejamiento normalizado de todas las muestras del subvano121.

♦ hnormsub122: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán el despejamiento normalizado de todas las muestras del subvano122.

♦ hnormsub2: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán el despejamiento normalizado de todas las muestras del subvano2.

♦ hnormsub21: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán el despejamiento normalizado de todas las muestras del subvano21.

♦ hnormsub211: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán el despejamiento normalizado de todas las muestras del subvano211.

♦ hnormsub212: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán el despejamiento normalizado de todas las muestras del subvano212.

♦ hnormsub22: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán el despejamiento normalizado de todas las muestras del subvano22.

♦ hnormsub221: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán el despejamiento normalizado de todas las muestras del subvano221.

♦ hnormsub222: matriz de ceros inicialmente de dimensión 1x99. Sus elementos contendrán el despejamiento normalizado de todas las muestras del subvano222.

♦ nrd: variable de tipo entero. Representa el número del rayo directo que se está estudiando, correspondiente al subvano en estudio.

♦ obstaculoreal: matriz de tipo lógico de dimensión 1x15. Sus elementos tomarán valor verdadero si en el subvano en estudio hay un obstáculo real.

♦ puntos: variable de tipo entero. Es el número de muestras del perfil.

80

CAPÍTULO 4: DISEÑO EN SCILAB

♦ Rxprima: matriz de dimensión 1x15. Sus elementos contienen las alturas en metros de los receptores de cada subvano.

♦ Txprima: matriz de dimensión 1x15. Sus elementos contienen las alturas en metros de los transmisores de cada subvano.

♦ w: matriz de tipo lógico. Recoge los elementos que cumplen una determinada condición que es pasada a la función find.

♦ xfunic: matriz de tipo real. Sus elementos contienen las abscisas necesarias para trazar la recta funicular del perfil.

♦ yfunic: matriz de tipo real. Sus elementos contienen las ordenadas necesarias para trazar la recta funicular del perfil.

4.2.6.4. Funciones utilizadas

buttondialog ceil disp find length max plot2d plot2d3 string toolbar zeros

4.2.6.4.1. Funciones propias

despejamiento_norm solo_reales elimina_ceros perdidas ordena

4.2.6.5. Funcionamiento

Se expone ahora el método seguido para calcular la posible atenuación en obstáculos con un poco más de detalle. Inicialmente, se comprueba si en el vano original existen muestras que supongan un obstáculo para la comunicación. Puede ser que directamente haya un obstáculo que no permita tal comunicación, en cuyo caso se termina la ejecución del programa y se entiende que la atenuación es infinita. También puede darse el caso, de que ninguna muestra suponga un obstáculo, y por tanto, la atenuación sería nula. Y, el último caso es que existan muestras que sí supongan un obstáculo. En tal caso, se toma la muestra más perjudicial para la comunicación y se guardan sus datos (altura y distancia al transmisor) para el cálculo que posteriormente se hará de la atenuación que produce.

Como se indicó anteriormente, se hace un estudio de hasta quince subvanos, en el orden siguiente: vano original, subvano 1, subvano 11, subvano 111, subvano 112, subvano 12, subvano 121, subvano 122, subvano 2, subvano 21, subvano 211, subvano 212, subvano 22, subvano 221 y subvano 222, siempre que existan los subvanos subyacentes. A medida que se vayan estudiando los subvanos pertinentes, se van mostrando en ventanas de diálogos si hay o no difracción en obstáculos en ellos.

La Figura 4.2.6.5.1 muestra gráficamente el orden en el que se buscarían los obstáculos.

Como es obvio, si un vano o subvano no tiene obstáculos, no se divide en dos subvanos. De modo que el cálculo de las atenuaciones que producen los obstáculos se hace conjuntamente, ahorrando tiempo de ejecución, cuando se sepa cuántos hay.

81

CAPÍTULO 4: DISEÑO EN SCILAB

Para ello, los datos relevantes se almacenan en matrices de ceros de dimensión 1x15, de manera que si, por ejemplo, altmax (2) tiene un valor distinto de cero es que hay un obstáculo en el subvano 1. El índice 2 denota el segundo vano que se ha creado, implícitamente también se ha creado el tercero al dividir el vano original en dos. Si tuviese un valor nulo, no habría obstáculo, no se dividiría este subvano en dos y, consecuentemente, altma x(i) con i=4, 5, 8, 9, 10 y 11 (es decir, todos los subvanos posibles que saldrían de la división del subvano 1) tendrían valor 0.

Figura 4.2.6.5.1. Esquema del orden de búsqueda de los obstáculos

en los diferentes subvanos.

La Figura 4.2.6.5.2 muestra la correspondencia entre los subvanos y los números de los obstáculos que se podrían encontrar en ellos.

Otra cuestión es cómo se determina si una muestra se considera o no obstáculo, para ello nos basamos en el cálculo del despejamiento normalizado de cada muestra con respecto al rayo directo. Para ello, se interpela a la función despejamiento_norm que da, para el subvano en estudio, el despejamiento normalizado de todas las muestras del subvano. El máximo será el obstáculo que más afecta a la comunicación.

Posteriormente, cuando se hayan estudiado los como máximo quince subvanos, se eliminan de las variables que contienen los datos relevantes, los obstáculos en estudio que no suponen realmente un obstáculo para la comunicación y aquellos que nunca fueron obstáculos (los elementos con valor cero). Para ello utilizamos las funciones solo_reales y elimina_ceros.

La función solo_reales se basa en la matriz de tipo lógico obstaculoreal, cuyos elementos tienen valor verdadero sólo si en el subvano que representan hay un obstáculo, para sustituir por cero los datos de los obstáculos que estaban en estudio y, por tanto, se estaban guardando sus datos relevantes y que, finalmente, no constituyen un obstáculo.

82

CAPÍTULO 4: DISEÑO EN SCILAB

La función elimina_ceros, como indica su nombre, elimina los ceros de la matriz que se le pasa como parámetro. Esto implica que elimina los no obstáculos de las matrices de datos relevantes, modificando el tamaño de éstas. De este modo, cuando calculemos las pérdidas en obstáculos nos quedaremos sólo con los obstáculos reales de todo el perfil y con sus datos relevantes en matrices con tamaño el número real de obstáculos existentes.

Figura 4.2.6.5.2. Esquema de numeración de subvanos y obstáculos existentes en ellos.

La función perdidas calcula las pérdidas que producen los obstáculos cuyos datos relevantes se le pasa como parámetros. Internamente, comprueba si el obstáculo es redondeado o no. Si lo fuese, se aplicaría una corrección a la atenuación que produciría ese obstáculo si fuese agudo. Los métodos y criterios seguidos para calcular la atenuación final producida por la difracción en obstáculos son los expuestos en el Apartado 3.3.6.3 del Capítulo 3.

La función ordena, ordena los datos relevantes de los obstáculos según su proximidad al transmisor original, para la representación de la línea funicular.

4.2.7. LA FUNCIÓN despejamiento_norm

La sintaxis de la función es:

hnorm=despejamiento_norm(Txprima,Rxprima,dvanom,cotas,indinicotas,distanciam)

Esta función calcula el despejamiento normalizado de todas las muestras del subvano en estudio, definido en el Apartado 3.3.6.3.

4.2.7.1. Parámetros de entrada

83

CAPÍTULO 4: DISEÑO EN SCILAB

♦ cotas: matriz de dimensión 1x101. Sus elementos son las alturas en metros de los puntos del perfil del radioenlace, tras considerar la contribución de las flechas debido a la curvatura de la Tierra.

♦ distanciam: matriz de dimensión variable. Sus elementos serán las distancias absolutas en metros de todas las muestras del subvano en estudio al transmisor original.

♦ dvanom: variable de tipo entero. Contiene la longitud en metros del subvano en estudio.

♦ indinicotas: variable de tipo entero. Representa el índice absoluto de la primera muestra del subvano en estudio.

♦ Rxprima: variable de tipo real. Contiene la altura del receptor del subvano en estudio.

♦ Txprima: variable de tipo real. Contiene la altura del transmisor del subvano en estudio.

4.2.7.2. Parámetro de salida

♦ hnorm: matriz de dimensión 1xnpuntos. Sus elementos contienen los despejamientos normalizados de todas las muestras.

4.2.7.3. Variables propias

♦ dvanoKm: variable de tipo entero. Contiene la longitud en kilómetros del subvano en estudio.

♦ h: matriz de ceros de dimensión 1xnpuntos. Sus elementos contienen los despejamientos de las muestras del subvano en estudio.

♦ i: variable de tipo entero. Se utiliza como índice.

♦ npuntos: variable de tipo entero. Contiene el número de muestras del subvano en estudio.

♦ pendRD: variable de tipo real. Contiene la pendiente del rayo directo del subvano en estudio.

♦ RD: matriz de ceros de dimensión 1xnpuntos. Sus elementos contienen las cotas del rayo directo en cada muestra del subvano en estudio.

♦ R1: matriz de ceros de dimensión 1xnpuntos. Sus elementos contienen los valores del radio de la primera zona de Fresnel en cada muestra del subvano en estudio.

4.2.7.4. Funciones utilizadas

length sqrt zeros

4.2.7.5. Funcionamiento

Esta función toma las muestras del perfil que pertenecen al subvano en estudio y, en esos mismos puntos se toma el mismo número de muestras del rayo directo de dicho subvano. A partir de estos datos, calcula el radio de la primera zona de Fresnel que le corresponde a

84

CAPÍTULO 4: DISEÑO EN SCILAB

todas esas muestras y el despejamiento normalizado que les corresponde y los devuelve en la matriz hnorm.

4.2.8. LA FUNCIÓN solo_reales

La sintaxis de la función es:

cad=solo_reales(cadena,obstreal)

Como se expuso en la función calcula_obstaculos, los datos relevantes de los obstáculos que se han ido hallando se almacenan en matrices de dimensión 1x15. Si un elemento tiene valor no nulo es porque, o hay realmente un obstáculo en el subvano que representa, o porque está aún en estudio. Un elemento de valor nulo indica que en ese subvano no hay obstáculo.

Pues bien, la función solo_reales elimina el dato relevante, sustituyéndolos por cero, de los obstáculos en estudio que finalmente sí se pueden considerar como tales. Para ello se basa en la matriz de tipo lógica obstreal cuyos elementos son verdaderos si sí existen obstáculos en los vanos que representan.

4.2.8.1. Parámetros de entrada

♦ cadena: matriz de dimensión 1x15. Contiene datos relevantes de los obstáculos de los distintos subvanos, en estudio o no, o cero si no existe el obstáculo en dichos subvanos.

♦ obstreal: matriz de dimensión 1x15 de tipo lógico. Sus elementos tiene valor verdadero cuando en el subvano que representan existe un obstáculo.

4.2.8.2. Parámetro de salida

♦ cad: matriz de dimensión 1x15. Contiene datos relevantes de los obstáculos reales de los distintos subvanos, o cero si no existe el obstáculo en dichos subvanos.

4.2.8.3. Variables propias

♦ i: variable de tipo entero. Es utilizada como índice.

♦ long: variable de tipo entero. Contiene la longitud de la cadena que se le pasa como parámetro a la función.

4.2.8.4. Funcionamiento

Esta función pone a cero los elementos de la matriz cadena que se encuentren en la misma posición que los elementos de la matriz de tipo lógico obstreal que tengan valor falso.

85

CAPÍTULO 4: DISEÑO EN SCILAB

4.2.9. LA FUNCIÓN elimina_ceros

La sintaxis de la función es:

cad=elimina_ceros(cadena)

Esta función elimina los ceros de la cadena que se le pasa como parámetro, de este modo, sólo nos queda una cadena con los datos relevantes de los obstáculos encontrados.

4.2.9.1. Parámetro de entrada

♦ cadena: matriz de dimensión 1x15. Contiene datos relevantes de los obstáculos de los distintos subvanos, o cero si no existe el obstáculo en dichos subvanos.

4.2.9.2. Parámetro de salida

♦ cad: matriz de dimensión uno por el número de obstáculos reales. Contiene datos relevantes de los obstáculos reales de los distintos subvanos.

4.2.9.3. Variables propias

♦ i: variable de tipo entero. Es utilizada como índice.

♦ long: variable de tipo entero. Contiene inicialmente la longitud de la cadena que se le pasa como parámetro a la función, pero se irá reduciendo a medida que se eliminen ceros de dicha cadena.

4.2.9.4. Funcionamiento

Esta función devuelve una copia de la cadena que se le ha pasado como parámetro, pero eliminándole los ceros que posea, por lo tanto, la cadena devuelta tendrá como máximo la longitud de la de entrada. La longitud final de la cadena devuelta será el número de obstáculos que hay en el perfil.

4.2.10. LA FUNCIÓN perdidas

La sintaxis de la función es:

at=perdidas(cotas,dist,distmax,alt,delta,hn,Txprima,Rxprima)

Esta función calcula las pérdidas producidas por difracción en los obstáculos reales, ya sean redondeados o de cuchillo, que haya en el perfil. Hay que tener en cuenta que si se ha llegado a invocar a esta función es porque, aunque haya obstáculos, la comunicación es posible.

86

CAPÍTULO 4: DISEÑO EN SCILAB

4.2.10.1. Parámetros de entrada

♦ alt: matriz de dimensión 1xnumobst. Sus elementos contienen las alturas de los obstáculos reales del radioenlace.

♦ cotas: matriz de dimensión 1x101. Contiene las cotas de todos los puntos del perfil del terreno.

♦ delta: variable de tipo real. Representa la distancia en metros de un intervalo de medición del perfil.

♦ dist: matriz de dimensión 1xnumobst. Sus elementos contienen las distancias absolutas en metros al transmisor original de los obstáculos reales del radioenlace.

♦ distmax: matriz de dimensión 1xnumobst. Sus elementos contienen las distancias en metros de los obstáculos reales a su transmisor relativo.

♦ hn: matriz de dimensión 1xnumobst. Sus elementos contienen los despejamientos normalizados de los obstáculos reales del radioenlace.

♦ Rxprima: matriz de dimensión 1xnumobst. Sus elementos contienen las alturas de los receptores relativos de los subvanos en los que existen obstáculos.

♦ Txprima: matriz de dimensión 1xnumobst. Sus elementos contienen las alturas de los transmisores relativos de los subvanos en los que existen obstáculos.

4.2.10.2. Parámetro de salida

♦ at: variable de tipo real. Contiene la atenuación producida por todos los obstáculos, ya sean redondeados o no.

4.2.10.3. Variables propias

♦ i: variable de tipo entero. Es utilizada como índice.

♦ numobst: variable de tipo entero. Contiene el número de obstáculos reales que existen en el radioenlace.

♦ redondeado: variable de tipo lógico. Toma valor verdadero si el obstáculo en estudio es redondeado.

♦ sumAobstagu: variable de tipo real. Representa la suma de las contribuciones de todos los obstáculos a la atenuación por difracción.

♦ sumcorreccionT: variable de tipo real. Representa la suma de las contribuciones de todos los obstáculos redondeados a la atenuación por difracción.

♦ z0: variable de tipo real. Contiene la altura del transmisor original, incluyendo la altura del mástil de transmisión.

♦ zd: variable de tipo real. Contiene la altura del receptor original, incluyendo la altura del mástil de recepción.

4.2.10.4. Funciones utilizadas

length

87

CAPÍTULO 4: DISEÑO EN SCILAB

4.2.10.4.1. Funciones propias

atenuacion_agudos es_redondeado calculo_tangente atenuacion_redondeados

4.2.10.5. Funcionamiento

Esta función calcula la atenuación global que producen todos los obstáculos que interfieren en la comunicación. Para ello, se basa en el método y criterios expuestos en el Apartado 3.3.6.3 del Capítulo 3.

En primer lugar, se calcula a partir de los despejamientos normalizados de los obstáculos las atenuaciones que producirían si fuesen todos obstáculos agudos, ya que, a aquellos que fuesen redondeados, se le añade posteriormente un término de corrección. Por este motivo, se hace el cálculo de la atenuación de manera conjunta a todos los obstáculos, invocando a la función atenuacion_agudos.

A continuación, individualmente se comprueba si los obstáculos son redondeados, mediante la función es_redondeado y, de ser así, se calculan los parámetros necesarios para definitivamente calcular el factor de corrección que se le aplica a cada uno de ellos, mediante la función atenuacion_redondeados.

Esos parámetros necesarios son los puntos de tangencia de las visuales trazadas desde el transmisor y el receptor a sus respectivos horizontes y las alturas de dichos puntos de tangencia. Para ello se utiliza la función calculo_tangente. El hecho de que estos cálculos se realicen obstáculo a obstáculo se debe simplemente, a que no todos los obstáculos serán redondeados y es innecesario calcular el factor de corrección de todos, por defecto. Además, de esta manera se da claridad al procedimiento.

4.2.11. LA FUNCIÓN atenuacion_agudos

La sintaxis de la función es:

sumAobstagu=atenuacion_agudos(hn)

Esta función calcula la atenuación por difracción que producen los obstáculos, considerándolos aislados, cuyos despejamientos normalizados son pasados como parámetros. Utiliza el método expuesto en el Apartado 3.3.6.3.1.1.

4.2.11.1. Parámetro de entrada

♦ hn: matriz de dimensión 1xnumobst. Contiene los valores de los despejamientos normalizados de los obstáculos del perfil.

4.2.11.2. Parámetro de salida

88

CAPÍTULO 4: DISEÑO EN SCILAB

♦ sumAobstagu: variable de tipo real. Contiene la atenuación total creada por todos los obstáculos existentes.

4.2.11.3. Variables propias

♦ Aobstagu: matriz de ceros de dimensión 1xnumobst. Sus elementos contendrán los valores de las atenuaciones creadas por los obstáculos.

♦ i: variable de tipo entero. Se usa como índice.

♦ nu: matriz de ceros de dimensión 1xnumobst. Sus elementos contendrán los valores que toma la variable adimensional ν para cada obstáculo, es decir, raíz de dos por el despejamiento normalizado.

♦ numobst: variable de tipo entero. Representa el número de obstáculos reales del perfil.

4.2.11.4. Funciones utilizadas

length sqrt sum zeros

4.2.11.5. Funcionamiento

Esta función a partir de los despejamientos normalizados de los obstáculos reales calcula el parámetro ν, necesario para el cálculo de la atenuación en obstáculos agudos aislados. Para aquellos obstáculos cuyo parámetro ν sea mayor que -0,78, se calcula la atenuación mediante la Ecuación (3.3.6.3.1.1.8) del Apartado 3.3.6.3.1.1 del Capítulo 3. Una vez calculadas esas atenuaciones, esta función suma las contribuciones de todos los obstáculos y devuelve esta suma.

4.2.12. LA FUNCIÓN es_redondeado

La sintaxis de la función es:

redondo=es_redondeado(cotas,distTxm,delta)

Con esta función se determina si un obstáculo es redondeado o no. El criterio de rugosidad del obstáculo seguido es experimental y está recogido en el Apartado 3.3.6.3.1.2 del Capítulo 3: se toman muestras del perfil alrededor del obstáculo y se comprueba si la pendiente es pronunciada. Concretamente, se toman tres muestras anteriores y tres muestras posteriores al obstáculo y la muestra que representa a éste, y se hallan las diferencias de cotas entre estas siete muestras. Si alguna de las seis diferencias de cotas supera los 100 metros, el obstáculo se considera agudo y, de lo contrario, redondeado.

4.2.12.1. Parámetros de entrada

89

CAPÍTULO 4: DISEÑO EN SCILAB

♦ cotas: matriz de dimensión 1x101. Contiene las cotas de todos los puntos del perfil del terreno. delta: variable de tipo real. Representa la distancia en metros de un intervalo de medición del perfil.

♦ distTxm: variable de tipo real. Representa la distancia en metros del obstáculo al transmisor original.

4.2.12.2. Parámetro de salida

♦ redondo: variable de tipo lógico. Toma valor verdadero cuando el obstáculo se considera redondeado.

4.2.12.3. Variables propias

♦ dcotas: matriz de dimensión 1xnmuestras. Sus elementos contienen las diferencias de cota de las muestras alrededor del obstáculo.

♦ indice: variable de tipo entero. Representa el índice absoluto del obstáculo en el perfil del terreno.

♦ nmuestras: variable de tipo entero. Representa el número de muestras que han podido tomarse alrededor del obstáculo.

4.2.12.4. Funciones utilizadas

find zeros

4.2.12.5. Funcionamiento

Para calcular las diferencias de cotas entre las siete muestras que se escogen como representativas del obstáculo, primero se determina el índice absoluto de la muestra a la que corresponde el obstáculo. Según este índice, se discrimina unos casos particulares, en los que no se pueden tomar las tres muestras a la derecha y/o a la izquierda, por estar el obstáculo cerca de los extremos, y en los que se cogen las muestras que sean posibles. Por ejemplo, si a la derecha del obstáculo sólo se pudiese tomar una muestra, porque se encuentra muy cerca del receptor, se toma esa muestra y las tres a la izquierda.

Tras esto, se busca una diferencia de cotas superior a 100 metros (criterio experimental) y, si existiese, el parámetro de salida redondo tomará el valor falso. Para ello, se usa la función interna find que evalúa la condición de que algún elemento de la matriz diferencia de cotas sea mayor que cien.

4.2.13. LA FUNCIÓN calculo_tangente

La sintaxis de la función es:

[dht,dhr,zht,zhr]=calculo_tangente(cotas,Txprima,Rxprima,delta,altmax,distmax)

90

CAPÍTULO 4: DISEÑO EN SCILAB

Esta función, dados un transmisor, un receptor y un obstáculo considerado redondeado pertenecientes al subvano en estudio, determina las rectas tangentes al obstáculo que parten del transmisor y del receptor hasta el horizonte del obstáculo. En concreto, busca las longitudes de esas rectas hasta los puntos de tangencia y las cotas de dichos puntos de tangencia. Estos datos son necesarios para calcular, a posteriori, la atenuación que produce dicho obstáculo redondeado. En la Figura 4.2.13.1 se representan estos datos buscados en un obstáculo redondeado.

Figura 4.2.13.1. Parámetros del obstáculo redondeado necesarios

para el cálculo de la atenuación que produce.

4.2.13.1. Parámetros de entrada

♦ altmax: variable de tipo real. Contiene la altura en metros del obstáculo.

♦ cotas: matriz de dimensión 1x101. Contiene las cotas de todos los puntos del perfil del terreno. delta: variable de tipo real. Representa la distancia en metros de un intervalo de medición del perfil.

♦ distmax: variable de tipo real. Contiene la distancia en metros del obstáculo al transmisor.

♦ Rxprima: variable de tipo real. Contiene la altura en metros del receptor del subvano en estudio.

♦ Txprima: variable de tipo real. Contiene la altura en metros del transmisor del subvano en estudio.

4.2.13.2. Parámetros de salida

♦ dhr: variable de tipo real. Representa la longitud en metros de la línea que va desde el receptor hasta el horizonte del obstáculo redondeado. Tiene valor el valor inicial negativo -1,ilógico en una longitud, para tratar posibles errores.

♦ dht: variable de tipo real. Representa la longitud en metros de la línea que va desde el transmisor hasta el horizonte del obstáculo redondeado. Tiene valor el valor inicial negativo -1, ilógico en una longitud, para tratar posibles errores.

♦ zhr: variable de tipo real. Representa la altura en metros del punto de tangencia de la línea trazada desde el receptor. Tiene valor el valor inicial negativo -1, ilógico en una altura, para tratar posibles errores

91

CAPÍTULO 4: DISEÑO EN SCILAB

♦ zht: variable de tipo real. Representa la altura en metros del punto de tangencia de la línea trazada desde el transmisor. Tiene valor el valor inicial negativo -1, ilógico en una altura, para tratar posibles errores.

4.2.13.3. Variables propias

♦ a: matriz de ceros de dimensión 1x(np-1). Sus elementos contienen los valores de los términos independientes de los segmentos que conforman el obstáculo redondeado, según f(x)=a+bx.

♦ altrectaRx: variable de tipo real. Representa la altura en metros de la recta tangente que parte del receptor en la vertical del obstáculo.

♦ altrectaTx: variable de tipo real. Representa la altura en metros de la recta tangente que parte del transmisor en la vertical del obstáculo.

♦ aRx: variable de tipo real. Representa el término independiente de la recta tangente que parte del receptor.

♦ aTx: variable de tipo real. Representa el término independiente de la recta tangente que parte del transmisor.

♦ b: matriz de ceros de dimensión 1x(np-1). Sus elementos contienen los valores de las pendientes en rad de los segmentos que conforman el obstáculo redondeado, según f(x)=a+bx.

♦ bRx: variable de tipo real. Representa la pendiente en rad de la recta tangente que parte del receptor.

♦ bTx: variable de tipo real. Representa la pendiente en rad de la recta tangente que parte del transmisor.

♦ cotafinal: matriz de ceros de dimensión 1x(np-1). Sus elementos recogen las alturas en metros de la muestra más alejada del transmisor que representa al obstáculo redondeado.

♦ dm: variable de tipo real. Representa la longitud del radioenlace en metros.

♦ extremoimagen: variable que recoge la distancia en metros al receptor imagen, del punto de corte de la recta tangente que parte del mismo, si coincide esta distancia con alguna de las distancias de los puntos que forman el perfil del obstáculo. Si no coincidiese, esta variable estaría vacía.

♦ extremo: variable que recoge la distancia en metros al transmisor, del punto de corte de la recta tangente que parte del mismo, si coincide esta distancia con alguna de las distancias de los puntos que forman el perfil del obstáculo. Si no coincidiese, esta variable estaría vacía.

♦ fin: variable de tipo lógico. Es la llave de los dos bucles que existen en la función.

♦ hpi: variable de tipo real. Representa la altura en metros del punto de intersección de las dos rectas tangentes.

♦ i: variable de tipo entero. Es utilizada como índice.

♦ indinf: variable de tipo entero. Contiene el índice de la muestra inferior que representa al obstáculo redondeado.

♦ indinv: variable de tipo entero. Contiene el índice de la muestra que representa al obstáculo, empezando por el receptor.

♦ indmax: variable de tipo entero. Contiene el índice de la muestra que representa al obstáculo.

♦ indsup: variable de tipo entero. Contiene el índice de la muestra superior que representa al obstáculo redondeado.

92

CAPÍTULO 4: DISEÑO EN SCILAB

♦ liminfbRx: variable de tipo real. Representa el límite inferior de la pendiente en rad de la recta tangente que parte desde el receptor.

♦ liminfbTx: variable de tipo real. Representa el límite inferior de la pendiente en rad de la recta tangente que parte desde el transmisor.

♦ limsupbRx: variable de tipo real. Representa el límite superior de la pendiente en rad de la recta tangente que parte desde el receptor.

♦ limsupbTx: variable de tipo real. Representa el límite superior de la pendiente en rad de la recta tangente que parte desde el transmisor.

♦ ncortes: variable de tipo entero. Contiene el número, en un momento dado, de cortes de la recta tangente con el perfil del obstáculo.

♦ np: variable de tipo entero. Contiene el número de muestras que representan al obstáculo redondeado.

♦ segmento: variable de tipo entero. Representa el segmento del perfil del obstáculo con el que corta la recta tangente que parte desde el transmisor.

♦ segmentoimagen: variable de tipo entero. Representa el segmento del perfil del obstáculo con el que corta la recta tangente que parte desde el receptor imagen.

♦ xcorte: variable de tipo real. Contiene la distancia al transmisor en metros del punto de corte de las dos rectas tangentes.

♦ xhr: variable de tipo real. Contiene la distancia al transmisor en metros del punto tangente de la recta que parte desde el receptor.

♦ xhrimagen: variable de tipo real. Contiene la distancia al receptor imagen en metros del punto tangente de la recta que parte desde el receptor imagen.

♦ xht: variable de tipo real. Contiene la distancia al transmisor en metros del punto tangente de la recta que parte desde el transmisor.

♦ xpuntosalr: matriz de ceros de dimensión 1xnp. Sus elementos contienen las distancias en metros al transmisor de las muestras que representan al obstáculo redondeado.

♦ xpuntosimagen: matriz de ceros de dimensión 1xnp. Sus elementos contienen las distancias en metros al receptor imagen de las muestras que representan al obstáculo redondeado.

♦ xRxcorte: matriz de ceros de dimensión 1x(np-1). Sus elementos contienen las distancias en metros al receptor imagen de los puntos de corte de la recta que parte desde el receptor imagen con los distintos segmentos que forman el perfil del obstáculo, o -1 si no existe tal punto de corte.

♦ xTxcorte: matriz de ceros de dimensión 1x(np-1). Sus elementos contienen las distancias en metros al transmisor de los puntos de corte de la recta que parte desde el transmisor con los distintos segmentos que forman el perfil del obstáculo, o -1 si no existe tal punto de corte.

♦ ypuntosalr: matriz de ceros de dimensión 1xnp. Contendrá las alturas en metros de las muestras que presesentan al obstáculo redondeado.

♦ ypuntosimagen: matriz de ceros de dimensión 1xnp. Sus elementos contienen las alturas en metros al receptor imagen de las muestras que representan al obstáculo redondeado.

4.2.13.4. Funciones utilizadas

find plot2d sqrt zeros

93

CAPÍTULO 4: DISEÑO EN SCILAB

4.2.13.5. Funcionamiento

Como representante del obstáculo redondeado se toma la muestra en la que se encuentra el obstáculo y, si es posible, tres muestras anteriores y tres posteriores, ya que este número de muestras se ha considerado suficiente, en relación con el número de muestras total. Con ellas, se calculan los segmentos que unen estos puntos y que forman el perfil del obstáculo, según la ecuación de primer orden f(x)=a+bx, es decir, se calculan el término independiente y la pendiente de cada segmento. Al igual que en otras funciones, se recogen todos estos datos en dos vectores, para un uso más eficiente.

La función, entonces, trata de hallar el punto tangente al perfil del obstáculo de una recta trazada desde el transmisor y el de otra trazada desde el receptor. Para ello, se toman dos rectas auxiliares, denominadas aquí rectas de prueba, que también siguen la misma ley, y que parte, una del transmisor y otra del receptor. La recta de prueba que parte del transmisor tiene como parámetros aTx y bTx. La recta de prueba que parte del receptor, tiene como parámetros aRx y bRx. Una representación del perfil del obstáculo y de las rectas tangentes se muestra en la Figura 4.2.13.5.1.

Figura 4.2.13.5.1. Representación del obstáculo y de las rectas tangentes al mismo.

La función, por tanto, tiene dos partes bien diferenciadas, para el cálculo de las dos rectas tangentes. Sin embargo, para hallar la recta tangente que parte del receptor, se ha aprovechado el algoritmo creado para hallar la recta tangente que parte del transmisor, creando una “imagen especular” del obstáculo y del receptor, como puede apreciarse en la Figura 4.2.13.5.2.

El procedimiento seguido para el cálculo de la recta tangente que parte del transmisor, consiste en utilizar como tal, inicialmente el rayo directo y, a continuación, se itera modificando la pendiente de dicha recta hasta que se encuentre un único punto de tangencia. El punto de tangencia con el perfil del obstáculo se obtiene hallando la intersección de dicha recta de

94

CAPÍTULO 4: DISEÑO EN SCILAB

prueba con los segmentos del perfil. Para ello, se igualan las dos ecuaciones de primer grado y se calcula la abscisa del punto de corte, si lo hubiera, de la recta tangente que parte desde el transmisor con cada segmento, que es recogida en la variable xTxcorte, que contiene la distancia en metros del punto de corte al transmisor o -1, si no existiese intersección.

Figura 4.2.13.5.2. Representación del obstáculo, receptor y recta tangente imagen.

En este algoritmo se tiene en cuenta, primero, que el número de segmentos es variable, np-1, en función de las muestras representativas del obstáculo que hayamos utilizado y, segundo, que estamos trabajando con segmentos de longitud finita, delimitados en el eje de abscisa por la longitud del intervalo entre muestras, y no con rectas infinitas. Con ello, se quiere decir que la solución a la ecuación resultante de igualar las dos rectas, nos puede dar un punto de intersección no real, si se encuentra fuera de los límites del segmento. En tal caso, ese punto de corte no sería válido.

Una vez hallado los puntos de corte con todos segmentos, se discrimina según el número de éstos. Si hay dos puntos de corte o no hay ninguno por quedar la recta de prueba 1 “por debajo” del obstáculo, hay que aumentar la pendiente de la recta de prueba y, hay que disminuirla, si no hay intersección, quedando la recta de prueba por encima del obstáculo. Tras esta modificación de la pendiente se vuelve a iterar calculando los posibles nuevos puntos de corte.

Se explica aquí qué se quiso decir con que puede darse el caso de que no haya intersección por quedar la recta de prueba por debajo del obstáculo. El lector debe tener en cuenta que, según como se ha representado al obstáculo redondeado, pueden darse situaciones en las que la recta de prueba quede por debajo el perfil del obstáculo habiendo o no punto de tangencia, como se puede ver en la Figura 4.2.13.5.3. Estas situaciones, claramente, no se corresponden con situaciones reales, y esta función las detecta y actúa en consecuencia, no disminuyendo la pendiente de la recta de prueba, sino aumentándola.

95

CAPÍTULO 4: DISEÑO EN SCILAB

La búsqueda del punto de tangencia termina cuando se encuentra un único punto de corte. Entonces, se mira con qué segmento intersecta y a qué distancia del transmisor, que es recogida en la variable xht, y se calcula la altura de dicho punto de tangencia, zht.

Figura 4.2.13.5.3. Situaciones no reales en el cálculo de la recta tangente.

El procedimiento seguido para el cálculo de la recta tangente que parte del receptor, como se ha indicado, se realiza, primero, invirtiendo el perfil del obstáculo y del receptor, tras lo cual, se siguen los pasos descritos anteriormente. Al final, debe tenerse en cuenta que las coordenadas del punto de tangencia calculado deben ser también invertidas.

A continuación, se calcula la longitud que va desde el transmisor y el receptor y sus respectivos puntos de tangencia con el horizonte del obstáculo. Para ello, es necesario calcular la altura de la intersección de las dos rectas tangentes, h, que, si coinciden los dos puntos de tangencia, no es más que la altura de dichos puntos. Con estos datos, ya se puede hallar el factor de corrección de la atenuación que produce un obstáculo por considerarse redondeado.

4.2.14. LA FUNCIÓN atenuacion_redondeados

La sintaxis de la función es:

T=atenuacion_redondeados(dht,dhr,zht,zhr,z0,zd)

Esta función calcula la corrección que debe hacerse a la atenuación que produce un obstáculo agudo debido a que el obstáculo se ha considerado redondeado.

96

CAPÍTULO 4: DISEÑO EN SCILAB

4.2.14.1. Parámetros de entrada

♦ dhr: variable de tipo real. Representa la distancia en metros de la visual trazada desde el receptor hasta el horizonte del obstáculo redondeado.

♦ dht: variable de tipo real. Representa la distancia en metros de la visual trazada desde el transmisor hasta el horizonte del obstáculo redondeado.

♦ z0: variable de tipo real. Representa la altura en metros del transmisor, incluyendo la altura del mástil de la antena de transmisión.

♦ zd: variable de tipo real. Representa la altura en metros del receptor, incluyendo la altura del mástil de la antena de recepción.

♦ zhr: variable de tipo real. Representa la altura en metros del punto de tangencia de la recta que parte del receptor y el obstáculo redondeado.

♦ zht: variable de tipo real. Representa la altura en metros del punto de tangencia de la recta que parte del transmisor y el obstáculo redondeado.

4.2.14.2. Parámetro de salida

♦ T: variable de tipo real. Representa el factor de corrección en dB que debe añadírsele a la atenuación en obstáculo agudo, por ser considerado el obstáculo redondeado.

4.2.14.3. Variables propias

♦ betam: variable de tipo real. Ángulo en mrad necesario para el cálculo de la difracción.

♦ h: variable de tipo real. Representa la altura en metros del punto de intersección de las dos rectas tangentes.

♦ m: variable de tipo real. Es, junto con n, uno de los parámetros radioeléctricos necesarios para el cálculo de la difracción.

♦ n: variable de tipo real. Es, junto con m, uno de los parámetros radioeléctricos necesarios para el cálculo de la difracción.

♦ R0: variable de tipo real. Representa el radio en metros de la Tierra.

♦ r: variable de tipo real. Representa el radio de curvatura en kilómetros del obstáculo redondeado.

♦ tetam: variable de tipo real. Representa el ángulo de difracción en mrad.

♦ xp: variable de tipo real. Representa la abscisa en metros del punto de intersección de las dos rectas tangentes al obstáculo.

4.2.14.4. Funciones utilizadas

exp log10

4.2.14.5. Funcionamiento

97

CAPÍTULO 4: DISEÑO EN SCILAB

Los pasos seguidos para el cálculo del factor de corrección son los expuestos en el Apartado 3.3.6.3.1.3 del Capítulo 3. Básicamente consiste en el cálculo de un término T(m, n) que depende de la geometría del obstáculo redondeado.

4.2.15. LA FUNCIÓN ordena

La sintaxis de la función es:

[distord,altord]=ordena(d,alt)

Ordena los obstáculos hallados según su proximidad al transmisor original, utilizando el método de inserción.

4.2.15.1. Parámetros de entrada

♦ alt: matriz de tipo real. Sus elementos contienen las alturas en metros de los obstáculos.

♦ d: matriz de tipo real. Sus elementos contienen las distancias en metros de los obstáculos al transmisor original.

4.2.15.2. Parámetros de salida

♦ altord: matriz de ceros de dimensión 1x15. Sus elementos contendrán las alturas en metros de los obstáculos ordenados por su proximidad al transmisor original.

♦ distord: matriz de ceros de dimensión 1x15. Sus elementos contendrán las distancias en metros de los obstáculos al transmisor original ordenadas de menor a mayor.

4.2.15.3. Variables propias

♦ elemalt: variable de tipo real. Irá recogiendo los elementos de la matriz altord.

♦ elemdist: variable de tipo real. Irá recogiendo los elementos de la matriz distord.

♦ i: variable de tipo entero. Es utilizada como índice.

♦ j: variable de tipo entero. Es utilizada como índice.

4.2.15.4. Funciones utilizadas

length zeros

4.2.15.5. Funcionamiento

98

CAPÍTULO 4: DISEÑO EN SCILAB

El método de ordenación por inserción toma cada elemento del arreglo para ser ordenado y lo compara con los que se encuentran en posiciones anteriores a la de él dentro del arreglo. Si resulta que el elemento con el que se está comparando es mayor que el elemento a ordenar, se recorre hacia la siguiente posición superior. Si por el contrario, resulta que el elemento con el que se está comparando es menor que el elemento a ordenar, se detiene el proceso de comparación pues se encontró que el elemento ya está ordenado y se coloca en su posición, que es la siguiente a la del último número con el que se comparó.

Este método tiene fácil implementación y requerimientos mínimos de memoria.

4.2.16. LA FUNCIÓN nueva_captura3

La sintaxis de la función es:

nueva_captura3()

En la pantalla 3 el usuario puede elegir qué situaciones, de entre las siguientes, quiere considerar: que haya vegetación, gases atmosféricos y/o lluvia, para calcular, a posteriori, las atenuaciones que producen. Para la atenuación por vegetación, el usuario debe seleccionar la polarización (horizontal o vertical) de la señal e introducir los metros de bosque atravesado; para la atenuación por gases y vapores atmosféricos, debe seleccionar la densidad de vapor de agua; y para la atenuación por lluvia, debe hacer lo propio con la polarización de la señal y el tiempo en tanto por ciento de lluvia excedida.

Pues bien, esta función captura las atenuaciones seleccionadas y comprueba que los parámetros necesarios para dichas atenuaciones han sido seleccionados (no comprueba su valor, sino sólo que ha sido seleccionado un valor en cada caso procedente) y, de haber seleccionado la atenuación por vegetación, que los datos introducidos en los metros de bosque sean correctos. Una vez comprobado que los datos son válidos el radiobutton con la etiqueta “Hecho” se pone a uno.

4.2.16.1. Variables propias

♦ bosque: variable de tipo cadena de caracteres, en principio vacía. Recogerá la distancia en metros de bosque atravesado, si se seleccionase la atenuación por vegetación.

♦ gas: variable de tipo lógico. Tendrá valor verdadero cuando se haya seleccionado la atenuación por gases y vapores atmosféricos.

♦ lluv: variable de tipo lógico. Tendrá valor verdadero cuando se haya seleccionado la atenuación por lluvia.

♦ veg: variable de tipo lógico. Tendrá valor verdadero cuando se haya seleccionado la atenuación por vegetación.

4.2.16.2. Funciones utilizadas

buttondialog evstr get set

99

CAPÍTULO 4: DISEÑO EN SCILAB

4.2.16.3. Funcionamiento

Esta función espera a que el usuario seleccione qué situaciones quiere tener en cuenta, que haya vegetación, gases y/o lluvia, seleccionando los radiobuttons correspondientes, así como los parámetros necesarios en cada caso.

La función avisa mediante ventanas de diálogo de la falta de alguno de estos parámetros o de su incorrección, en el caso de los metros de bosque atravesados, como se muestra con varios ejemplos en la Figura 4.2.16.3.1. Si todo está correcto, pone a uno el radiobutton “Hecho”, que permite que se continúe con el programa, con el siguiente paso que es el cálculo de las atenuaciones que crean esas situaciones.

Se ha permitido que, aunque la polarización sólo puede tener un único valor, se pueda elegir independientemente con la atenuación por vegetación y por lluvia. En caso de que se elijan estas dos atenuaciones y los valores de la polarización no sean iguales, se avisa al usuario mediante una ventana de diálogo. De este modo, se hace énfasis en que sólo puede tener un único valor.

Figura 4.2.16.3.1.

4.2.17. LA FUNCIÓN perdidas2

La sintaxis de la función es:

perdidas2()

Esta función calcula las atenuaciones producidas por las tres situaciones posibles: vegetación, gases atmosféricos y lluvia y presenta los resultados en la pantalla 4, donde se resumen los datos de entrada y salida relevantes del radioenlace. Si alguna de estas situaciones no hubiese sido seleccionada, el valor mostrado será 0 dB.

100

CAPÍTULO 4: DISEÑO EN SCILAB

Los procedimientos seguidos para el cálculo de estas atenuaciones están recogidos en los apartados 3.3.7, 3.3.8 y 3.3.9 del Capítulo 3. En concreto, para la atenuación debida a la presencia de vegetación se han utilizado los valores de las curvas de la Figura 3.3.7.1. Para la atenuación debida a los gases y vapores atmosféricos se ha usado una presión de 1013 hPa y 15 ºC como temperatura media de la zona. Y, con respecto a la atenuación debida a la lluvia, la intensidad de lluvia correspondiente a la zona en estudio es de 42 mm/h y se han utilizado la Tabla 3.3.9.1.6 para calcular los coeficientes necesarios para el cálculo de la atenuación.

4.2.17.1. Variables propias

♦ A001: variable de tipo real. Representa la atenuación en dB debido a la lluvia, si el tiempo en tanto por ciento de lluvia excedida es de 0.01

♦ Agas: variable de tipo real. Representa la atenuación en dB debido a gases y vapores atmosféricos.

♦ Agasstr: variable de tipo cadena de caracteres. Contiene la atenuación en dB debido a gases y vapores atmosféricos.

♦ alfa: variable de tipo real. Parámetro que depende de la frecuencia y de la polarización, necesario, junto a k, para el cálculo de la atenuación específica por lluvia.

♦ Alluv: variable de tipo real. Representa la atenuación en dB debido a la lluvia.

♦ Alluvstr: cadena de caracteres que contiene la atenuación en dB debido a la lluvia.

♦ Atespeciflluv: matriz de dimensión 28x5. Recoge la tabla de la atenuación específica en dB/km debida a la lluvia. La primera columna contiene las posibles frecuencias; la segunda y cuarta contienen los valores de k y alfa para polarización horizontal y la tercera y quinta, los valores de k y alfa para polarización vertical.

♦ Atespecifv: matriz de dimensión 28x3. Recoge una tabla de la atenuación específica por vegetación. La primera columna contiene las posibles frecuencias; la segunda, la atenuación si la polarización es vertical y la tercera, la atenuación si la polarización es horizontal.

♦ Aveg: variable de tipo real. Representa la atenuación en dB debido a la vegetación.

♦ Avegstr: variable de tipo cadena de caracteres. Contiene la atenuación en dB debido a la vegetación.

♦ cont: variable de tipo entero. Es utilizada como contador.

♦ distbosque: variable de tipo real. Representa la distancia en metros de bosque atravesado.

♦ d0: variable de tipo real. Parámetro necesario para el cálculo de la longitud efectiva del radioenlace.

♦ dva: variable de tipo entero. Representa la densidad de vapor de agua en g/m3.

♦ fGHz: variable de tipo real. Contiene la frecuencia en GHz de la señal.

♦ gamma001: variable de tipo real. Representa el valor de la atenuación específica por lluvia en dB/Km, cuando el tiempo en tanto por ciento de lluvia excedida es de 0.01

♦ gammao: variable de tipo real. Representa el valor de la atenuación específica por gases atmosféricos en dB/km.

♦ gammav: variable de tipo real. Representa el valor de la atenuación específica por vegetación en dB/m.

101

CAPÍTULO 4: DISEÑO EN SCILAB

♦ gammaw: variable de tipo real. Representa el valor de la atenuación específica por vapores atmosféricos en dB/km.

♦ i: variable de tipo entero. Es utilizada como índice.

♦ j: variable de tipo entero. Es utilizada como índice.

♦ k: variable de tipo real. Parámetro que depende de la frecuencia y de la polarización, necesario, junto a alfa, para el cálculo de la atenuación específica por lluvia.

♦ Lef: variable de tipo real. Representa la longitud efectiva del radioenlace en metros, debido a la atenuación por lluvia.

♦ p: tiempo en tanto por ciento de lluvia excedida.

♦ R001: variable de tipo real. Representa la intensidad de lluvia en mm/h cuando el tiempo en tanto por ciento de lluvia excedida es de 0.01

4.2.17.2. Funciones utilizadas

buttondialog eval exp get log10 set string

4.2.17.3. Funcionamiento

Esta función parte de que se han seleccionado las atenuaciones que se quieren calcular y que los parámetros necesarios para ello son correctos.

Si se ha seleccionado la atenuación por vegetación, se captura el valor de la polarización y los metros de bosque atravesado y, con estos datos, se busca en la matriz de la atenuación específica por vegetación el valor correspondiente a la frecuencia dada. Si no se encontrase esa frecuencia exacta en la matriz, se interpola logarítmicamente para conseguir un valor más exacto. Luego se calcula la atenuación final multiplicando por los metros de bosque atravesado.

Si se ha seleccionado la atenuación por gases y vapores atmosféricos, lo primero que se comprueba es si la frecuencia es mayor o no a 10 GHz. Si es mayor, se captura el valor de la densidad de vapor de agua, introducido por el usuario, y se procede a calcular la atenuación específica por gases y por vapores atmosféricos por separado y la atenuación final. Si de lo contrario, la frecuencia fuese menor o igual a 10 GHz, se indica en una ventana de diálogo que la atenuación por gases y vapores atmosféricos no tiene importancia a esa frecuencia, en relación con la atenuación básica por propagación y el valor que tendrá esa atenuación será 0dB.

Si se ha seleccionado la atenuación por lluvia, lo primero que se comprueba, de forma similar al caso de la atenuación por gases y vapores atmosféricos, es si la frecuencia es mayor que 5 GHz. Si es mayor, se captura el tiempo en tanto por ciento de lluvia excedida y el valor de la polarización. Si no fuese mayor que 5 GHz, se indica en una ventana de diálogo que la atenuación por lluvia no tiene importancia a esa frecuencia, en relación con la atenuación básica por propagación y el valor que tendrá esa atenuación será 0dB.

Finalmente, se muestran estas atenuaciones calculadas, junto con los valores de los parámetros introducidos por el usuario, en la pantalla 4.

102