84
Equation Chapter 1 Section 1 Proyecto Fin de Carrera Ingeniería de Telecomunicación INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA NORMAL EN PYTHON Autor: Carlos Luis Cantón Marín Tutor: Antonio Jesus Sierra Collado Dpto. Ingeniería Telemática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2018

Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Equation Chapter 1 Section 1

Proyecto Fin de Carrera Ingeniería de Telecomunicación

INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA NORMAL EN PYTHON

Autor: Carlos Luis Cantón Marín Tutor: Antonio Jesus Sierra Collado

Dpto. Ingeniería Telemática Escuela Técnica Superior de Ingeniería

Universidad de Sevilla Sevilla, 2018

Page 2: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos
Page 3: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

iii

Proyecto Fin de Carrera Ingeniería de Telecomunicación

INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

Autor:

Carlos Luis Cantón Marín

Tutor:

Antonio Jesús Sierra Collado Profesor titular

Dpto. de Ingeniería Telemática Escuela Técnica Superior de Ingeniería

Universidad de Sevilla Sevilla, 2018

Page 4: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos
Page 5: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

v

Proyecto Fin de Carrera: INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA NORMAL EN PYTHON

Autor: Carlos Luis Cantón Marín

Tutor: Antonio Jesús Sierra Collado

El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:

Presidente:

Vocales:

Secretario:

Acuerdan otorgarle la calificación de:

Sevilla, 2018

El Secretario del Tribunal

Page 6: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos
Page 7: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

vii

A mi familia

A mis maestros

Page 8: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos
Page 9: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

ix

Agradecimientos

En primer lugar, me gustaría agradecer a mi familia su apoyo y paciencia. Sin ellos nunca hubiera acabado.

También me gustaría agradecer a Miguel Larrañeta su ayuda para sacar este proyecto adelante. El tiempo y

conocimiento que ha compartido conmigo han sido fundamentales en la realización y redacción del mismo.

Por último, a Antonio Jesús Sierra Collado, que siempre ha estado disponible y dispuesto a ayudarme.

Carlos Luis Cantón Marín

Sevilla, 2018

Page 10: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos
Page 11: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

xi

Resumen

En este proyecto se implementa un software para la incrementación de resolución de series temporales de

irradiancia directa. La implementación se realizará en el lenguaje de programación Python, utilizando varias

librerías enficadas al tratamiento de datos científicos.

Para la implementación se hará uso de varias bases de datos de irradiancia que posee el Grupo de Investigación

de Termodinámica y Energías Renovables (GTER). Como base para el desarrollo se ha tomado el articulo

“Methodology to synthetically downscale DNI time series from 1-h to 1-min temporal resolution with

geographic flexibility” de M. Larrañeta, C. Fernandez-Peruchena, M.A. Silva-Pérez y I. Lillo-Bravo [1].

Como entrada del algoritmo necesitaremos una serie de datos de irradiancia directa normal e irradiancia global

horizontal en intervalos horarios, y la longitud y la latitud de la localización origen de los datos. Como salida

del algoritmo tendremos una serie de datos de irradiancia directa normal e irradiancia global horizontal en

intervalos minutales generadas sintéticamente. Para la generación de las series se usarán días reales de una

base de datos preparada para el algoritmo, seleccionados a partir de varios índices que caracterizan la

irradiancia diaria.

Para los test y el desarrollo se ha utilizado una serie anual (año 2016) horaria y minutal de la estación de

Sevilla de GTER proporcionada por el grupo. Para los resultados se han utilizado cinco series anuales (2004-

2008) horarias y minutales de una estación localizada en Adelaida(Australia), cuyos datos han sido

proporcionados también por GTER.

Page 12: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos
Page 13: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

xiii

Abstract

This project pursues the implementation in software of an algorithm for the incrementation of resolution of

time series of direct irradiance. It is intended that the software is easily integrated with other solutions and that

distribution is free, so it has been decided to implement it in Python.

For the implementation, several irradiance databases will be used by the Research Group on Thermodynamics

and Renewable Energies (GTER). As a basis for development the article "Methodology to synthetically

downscale DNI time series from 1-h to 1-min temporal resolution with geographic flexibility" of M. Larrañeta,

C. Fernandez-Peruchena, M.A. Silva-Pérez and I. Lillo-Bravo [1].

As input of the algorithm we will need a series of data of normal direct irradiance and horizontal global

irradiance at time intervals, and the longitude and latitude of the data source location. As an output of the

algorithm we will have a series of data of normal direct irradiance and global horizontal irradiance in

synthetically generated minute intervals. For the generation of the series, real days of a database prepared for

the algorithm will be used, selected from several indices that characterize the daily irradiance.

For the tests and the development, an annual hourly and minutal series of the Seville station of GTER provided

by the group was used. For the results, three annual hour and minute series of a station located in Adelaide

(Australia) have been used, whose data have also been provided by GTER

Page 14: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos
Page 15: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

xv

Índice

Agradecimientos ix

Resumen xi

Abstract xiii

Índice xv

Índice de Tablas xvii

Índice de Figuras xix

Notación xxi

1 Introducción 1

2 Objetivo 3

3 Fundamentos 5 3.1 La radiación Solar 5

3.1.1 El recurso solar 5 3.1.2 La radiación solar 5 3.1.3 Radiación directa normal 8 3.1.4 Sistemas termosolares 10

3.2 Incremento en resolución temporal en series de irradiancia 11 3.2.1 Metodos de incremento de resolución temporal en series de irradiancia. 12 3.2.2 Modelo no-dimensional (ND) de incremento de resolución temporal de DNI. 13

3.3 Python para la computación científica 17 3.3.1 Lenguaje de programación Python 17 3.3.2 Scipy 18 3.3.3 Numpy 18 3.3.4 Matplotlib 19 3.3.5 Scikit-learn 19

4 Implementación 21 4.1 Mejoras de la implementación 21 4.2 Datos de origen 21 4.3 Implementación 22

4.3.1 Calculo de datos meteorológicos 23 4.3.2 Generación de curva de cielo despejado 25 4.3.3 Caracterización de los días 28 4.3.4 Selección de días sintéticos 34 4.3.5 Ajuste de variables AB y desempaquetado 34 4.3.6 Resultados serie de prueba 38

5 Resultados 43 5.1 Software desarrollado 43 5.2 Análisis de resultados obtenidos 44

6 Conclusiones y líneas futuras 51 Referencias 53

Page 16: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

ANEXO A Código Script 55

Page 17: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

xvii

ÍNDICE DE TABLAS

Tabla 4–1 Estación utilizada para datos empaquetados y desarrollo 22 Tabla 4–2 Parametros A y B obtenidos para la serie horaria 26 Tabla 4–3 kbmáximo, mímino y medio calculado 28 Tabla 4–4 VI máximo, mínimo y medio calculado 30 Tabla 4–5 Fm máximo, mínimo y medio calculado 31 Tabla 4–6 kt máximo, mínimo y medio calculado 33 Tabla 4–7 Características de días de la serie horaria frente a características del día mas similar de la serie minutal 34 Tabla 4–8 Parámetros A y B y resultado de la función de coste de inicio y optimizados 36 Tabla 4–9 KSIs obtenido para la serie de la estación de Sevilla de 2016 39 Tabla 5–1 Estación utilizada para datos empaquetados y desarrollo 44 Tabla 5–2 KSIs obtenido para la serie de la estación de Adelaida 2004-2008 50

Page 18: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos
Page 19: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

xix

ÍNDICE DE FIGURAS

Figura 3-1. Caracterización de la radiación solar mostrando la irradiancia espectral para las diferentes longitudes de onda del espectro solar. 6 Figura 3-2. Diferentes componentes de la radiación solar. 7 Figura 3-3. Representación de las diferentes componentes de la radiación solar para un día claro. 8 Figura 3-4. Representación de las diferentes tipos de nubes y su altura característica. 9 Figura 3-5. Representación gráfica de un día con niebla matutina. 9 Figura 3-6. Representación gráfica de un día con bancos de nubes medias y estratos. 10 Figura 3-7. Representación gráfica de un día cubierto. 10 Figura 3-8. Colector solar parabolico. 11 Figura 3-9. Irradiancia directa diaria en paso minutal normalizada en tiempo e irradiancia. 14 Figura 3-10. Irradiancia directa diaria en paso minutal desnormalizada. 14 Figura 4-1. Altura solar por hora para los días 1, 90, y 180. 25 Figura 4-2. Altura solar por hora para los días 1, 90, y 180. 26 Figura 4-3. DNI y curva cielo despejado para dia 1 de la serie horaria. 27 Figura 4-4. DNI y curva cielo despejado para dia 60 de la serie horaria. 27 Figura 4-5. DNI y curva cielo despejado para dia 90 de la serie horaria. 28 Figura 4-6. DNI y curva cielo despejado con kb máximo. 29 Figura 4-7. DNI y curva cielo despejado con kb mínimo. 29 Figura 4-8. DNI y curva cielo despejado con VI máximo. 30 Figura 4-9. DNI y curva cielo despejado con VI mínimo. 31 Figura 4-10. DNI y curva cielo despejado con VI medio (1.0263). 31 Figura 4-11. DNI y curva cielo despejado con Fm máximo. 32 Figura 4-12. DNI y curva cielo despejado con Fm minimo. 32 Figura 4-13. GHI y extraterrestre con kt máximo. 33 Figura 4-14. GHI y extraterrestre con kt mínimo. 34 Figura 4-15. kb del día 4033 de la base de datos de días empaquetados 35 Figura 4-16. kb del día 4033 desempaquetado sobre el día 1 de la serie sintética 36 Figura 4-17. DNI y envolvente del día 1 de la serie sintética 37 Figura 4-18. GHI y extraterrestre del día 1 de la serie sintética 38 Figura 4-19. Distribución de frecuencia acumulada para la DNI sintética y real de la serie de Sevilla 38 Figura 4-20. Diferencia entre la distribución de frecuencia acumulada para la DNI sintética y real de la serie de Sevilla 39 Figura 4-21. Ibn sintético y real día 61 39 Figura 4-22. Ig0 sintético y real día 61 39 Figura 4-23. Ibn sintético y real día 62 40

Page 20: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Figura 4-24. Ig0 sintético y real día 62 40 Figura 4-25. Ibn sintético y real día 63 40 Figura 4-26. Ig0 sintético y real día 63 40 Figura 4-27. Ibn sintético y real día 64 40 Figura 4-28. Ig0 sintético y real día 64 40 Figura 4-29. Ibn sintético y real día 65 40 Figura 4-30. Ig0 sintético y real día 65 40 Figura 4-31. Ibn sintético y real día 66 41 Figura 4-32. Ig0 sintético y real día 66 41 Figura 5-1. Ejemplo ejecución script desarrollado 44 Figura 5-2. Distribución de frecuencia acumulada para la DNI sintética y real de la serie de Adelaida del año 2004 45 Figura 5-3. Diferencia entre la distribución de frecuencia acumulada para la DNI sintética y real de la serie de Adelaida del año 2004 45 Figura 5-4. Distribución de frecuencia acumulada para la DNI sintética y real de la serie de Adelaida del año 2005 46 Figura 5-5. Diferencia entre la distribución de frecuencia acumulada para la DNI sintética y real de la serie de Adelaida del año 2005 46 Figura 5-6. Distribución de frecuencia acumulada para la DNI sintética y real de la serie de Adelaida del año 2006 47 Figura 5-7. Diferencia entre la distribución de frecuencia acumulada para la DNI sintética y real de la serie de Adelaida del año 2006 47 Figura 5-8. Distribución de frecuencia acumulada para la DNI sintética y real de la serie de Adelaida del año 2007 48 Figura 5-9. Diferencia entre la distribución de frecuencia acumulada para la DNI sintética y real de la serie de Adelaida del año 2007 48 Figura 5-9. Distribución de frecuencia acumulada para la DNI sintética y real de la serie de Adelaida del año 2008 49 Figura 5-11. Diferencia entre la distribución de frecuencia acumulada para la DNI sintética y real de la serie de Adelaida del año 2008 49

Page 21: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

xxi

Notación

h Hora min Minuto Ӷ Angulo diario n Ordinal del día del año Et Ecuación del tiempo TSV Tiempo solar verdadero 𝐸( Corrección distancia tierra sol δ Declinación sen Función seno cos Función coseno α Altura solar I0 Irradiancia extraterrestre Ibn Irradiancia normal directa Ig0 Irradiancia global horizontal Isc Cuva de cielo despejado Ics Constante solar A Parámetro que modela los fenómenos de absorción en la atmosfera B Parámetro que modela los fenómenos de dispersión en la atmosfera mR Masa óptica relativa de aire 𝑘* Indice de fracción directa diaria 𝐹, Índice de fracción de mañana VI Índice de variabilidad 𝑘- Índice de claridad DNI Irradiación solar directa normal GHI Iradiandia global horizontal

Page 22: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos
Page 23: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

1 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

1 INTRODUCCIÓN

l sistema energético actual es insostenible. Necesitamos centrar nuestros esfuerzos en crear un modelo

energético sostenible, cuyos patrones de producción y consumo sean compatibles con el desarrollo

económico, social y ambiental, que satisfaga las necesidades energéticas de las generaciones

presentes, pero que no comprometa las posibilidades de las generaciones futuras para atender sus propias

necesidades. Este cambio de modelo pasa por el uso de energías renovables, ya que presentan las ventajas de

ser limpias, y especialmente, inagotables. Dentro de estos recursos destaca el solar, por ser el más abundante.

Las directrices de la unión europea en materia energética apuestan por la generación distribuida mediante

recursos energéticos renovables. El objetivo es crear una red de centrales eléctricas a pequeña escala. Estas

aprovecharán los recursos energéticos locales (viento, sol, mareas…) con sistemas de generación de pequeña

y mediana potencia. Este planteamiento presenta diversos retos, como es el almacenamiento energético

eficiente y el sistema de ajuste de generación/demanda. Para resolver estos retos se nos presentan dos áreas

donde debemos profundizar, la predicción meteorológica y la estimación de producción.

Centrándonos en la Centrales Termo Solares (CTS), para obtener una estimación de producción precisa,

necesitamos una predicción de radiación lo más realista posible. Como la componente principal de la radiación

(la radiación directa) se ve afectada por la nubosidad, está tiene una alta variabilidad temporal. Pasar por alto

estos efectos transitorios conlleva graves errores en las estimaciones de producción, por lo que es necesario

disponer de predicciones de alta resolución temporal.

Normalmente los datos históricos de irradiancia tienen una resolución temporal horaria, la cual no es suficiente

para las estimaciones de producción. En la actualidad existen métodos para obtener datos de irradiancia con

resolución temporal de 15-min a partir de fotos de satélite, pero esa resolución sigue sin ser suficiente.

Se han publicado diversos métodos para la generación de datos de alta resolución temporal. En este proyecto

vamos a implementar el propuesto en el artículo “Methodology to synthetically downscale DNI time series

from 1-h to 1-min temporal resolution with geographic flexibility” [1]. Este modelo se ha elegido por ser

preciso, simple y de utilización global.

En el siguiente capitulo se expondrán con claridad los objetivos y motivaciones del proyecto.

En el capitulo 3 explicaremos los fundamentos para entender la radiación solar, y la tecnología que hemos

empleado en la implementación.

En el capitulo 4 explicaremos detalladamente la implementación del modelo.

En el capitulo 5 presentaremos los resultados del modelo implementado, generando series sintéticas de un

emplazamiento determinado y comparándolas con la real. También explicaremos el uso del software

desarrollado.

E

Page 24: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Introducción

2

2

Finalmente, en el capitulo 6 expondremos las conclusiones y plantearemos las futuras líneas de trabajo.

Page 25: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

3 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

2 OBJETIVO

l objetivo del proyecto es la implementación en software de un algoritmo para el incremento de

resolución de series temporales de irradiancia directa. Se persigue que el software pueda ser usado por

otros usuarios sin necesidad de licencias, poder integrarlo en otros desarrollos y que otros usuarios

puedan extenderlo.

El proyecto viene motivado por la necesidad de las centrales termosolares de disponer de predicciones de

radiación directa normal en alta frecuencia. Estas son necesarias en las estimaciones de la producción a corto

plazo. Una segunda motivación es que esta necesidad pueda ser cubierta de una manera sencilla y rápida, sin

necesidad de recurrir en arduas implementaciones. Por ello se plantea como objetivo el desarrollo con

herramientas de software libre, que permita su fácil y libre distribución.

Para completar nuestro proyecto con éxito, se analizará el estado del arte del incremento de resolución de

series temporales de irradiancia directa, y se seleccionará el modelo más actual y preciso. También se evaluará

que su uso no signifique un alto coste computacional, ya que iríamos en contra del objetivo de buscar una

amplia distribución.

E

Page 26: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Objetivo

4

4

Page 27: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

5 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

3 FUNDAMENTOS

n este capítulo explicaremos que es la radiación solar y sus componentes y la importancia de su

predicción y simulación en las centrales termosolares. Después pasaremos a analizar el estado del arte

en los modelos de incremento de resolución temporal de series de irradiancia, y entraremos en detalle

en el modelo seleccionado para la implementación. En la última sección, se describirá la tecnología que se usa

para la implementación y las librerías utilizadas para desarrollar el algoritmo.

3.1 La radiación Solar

3.1.1 El recurso solar

El Sol es la fuente de energía más importante y abundante que existe en la Tierra. Aunque solo una pequeña

parte de la energía generada en el Sol llega a nuestro planeta, la energía que llega en un solo año es superior a

toda la energía que podríamos obtener de los recursos fósiles de la tierra, y es 10.000 veces superior al

consumo de la población mundial (datos de 2007). Además de su abundancia, es una fuente de energía

gratuita, limpia, y que podemos suponer ilimitada, ya que esta garantizada para los próximos 6000 millones de

años. Como principales desventajas habría que destacar su discontinuidad y la dispersión, factores que han

influido negativamente en su desarrollo.

Por sus ventajas, y por las desventajas bien conocidas de otras fuentes limitadas y contaminantes, es nuestro

deber seguir trabajando en el desarrollo y perfeccionamiento de las tecnologías de captación, acumulación y

distribución de la energía solar.

3.1.2 La radiación solar

La radiación solar es el conjunto de radiaciones electromagnéticas emitidas por el Sol. Como consecuencia del

movimiento elíptico de la tierra alrededor del Sol, la radiación que llega a la tierra varía. Los datos de

referencia de la radiación solar, que son la constante solar y la distribución espectral, se establecen para las

condiciones de distancia media Sol-Tierra.

E

Page 28: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Fundamentos

6

6

Figura 3-1. Caracterización de la radiación solar mostrando la irradiancia espectral para las diferentes longitudes de onda del espectro solar.

Se denomina constante solar a la energía que incide por unidad de área y en la unidad de tiempo sobre una

superficie orientada normalmente a la dirección de la propagación de la radiación solar y situada en el exterior

de la atmósfera terrestre. Este valor varía ligeramente y equivale en valor promedio a 1367 W/m2.

La radiación emitida por el Sol se distribuye en un amplio espectro de longitudes de onda correspondiendo la

mayor parte de la energía radiada a la porción comprendida entre 0.2 y 3.0 µm, con una distribución espectral

muy similar a la producida por un cuerpo negro a 5777 K. Alrededor de la mitad de dicha energía se encuadra

dentro de la banda visible, 0.39 a 0.77 µm. El resto corresponde casi por completo a radiación infrarroja, con

un pequeño porcentaje de radiación ultravioleta, tal y como se puede observar en la Figura 3-1.

En su camino a la superficie de la tierra la radiación solar ha de atravesar la atmósfera terrestre. En ese

recorrido la radiación sufre una atenuación que depende de la longitud del camino, y de la composición de la

atmósfera. El primer factor se puede determinar en función de la altura y posición del sol, utilizando

ecuaciones básicas de radiación solar. El segundo factor varía tanto en el tiempo como en el espacio. Los

componentes atmosféricos más influyentes son las moléculas de ozono, de dióxido de carbono, vapor de agua

y aerosoles.

0,0 0,5 1,0 1,5 2,0 2,5 3,0

0

500

1000

1500

2000

2500

0,0 0,5 1,0 1,5 2,0 2,5 3,0

0

500

1000

1500

2000

2500

lnI 0

×

(W·m-2 ·µm-1)

l (µm)

Cuerpo negro a 5777 K(tamaño = radio solar,distancia = 1 U.A.)

Espectro solar(fuera de la atmósfera)

Visible

l (nm)

UV IR UV C UV B UV A Visible IR A IR B IR C400 30001400760315280100 106

0.3 µm(300 nm)

3 µm(3000 nm)

Radiación solar (onda corta) Onda larga

Page 29: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

7 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

Figura 3-2. Diferentes componentes de la radiación solar.

La radiación global, que es la medición más común de la radiación solar, es la suma de las radiaciones directa

y difusa sobre una superficie.

La radiación directa es la recibida del Sol que no ha sido absorbida ni dispersada. La radiación solar que se

mide fuera de la atmósfera es en su totalidad radiación directa, ya que no hay presencia de cuerpos o

fenómenos que modifiquen su trayectoria. Sin embargo, y tal como se ha comentado antes, cuando los rayos

del Sol cruzan la atmósfera parte son absorbidos o dispersados. Solo los que no sufren este proceso, forma la

componente directa. Para su medición deben utilizarse sistemas de seguimiento del movimiento del Sol, ya

que siempre hay que medir apuntando al disco solar.

La radiación difusa es la que llega después de que su dirección haya sido modificada. Esto puede ser debido al

paso por la atmósfera o por reflejarse en otras superficies. La radiación difusa que llega a la superficie de

captación tras ser reflejada por el suelo se llama radiación de albedo.

Para medir la radiación directa normal se requiere de un sistema de seguimiento solar que esté continuamente

siguiendo la trayectoria del sol y de un dispositivo que capte los rayos en una superficie normal a su dirección

(pirheliómetro). La componente difusa se mide generalmente con un sensor en posición horizontal

(piranómetro) y un dispositivo acoplado que lo mantiene constantemente sombreado. La radiación global que

generalmente se mide a nivel horizontal, se mide con el mismo sensor que la radiación difusa (piranómetro)

pero sin sistema de sombreamiento acoplado. Para hacer un correcto balance energético a partir de las

componentes de la radiación, es necesario proyectar la componente directa sobre el mismo plano en el que se

determinan la radiación global y la componente difusa, proyección que se realiza mediante una simple relación

trigonométrica.

Page 30: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Fundamentos

8

8

Figura 3-3. Representación de las diferentes componentes de la radiación solar para un día claro.

3.1.3 Radiación directa normal

La radiación directa es la recibida del Sol que no ha sido absorbida ni dispersada. Debido a su naturaleza es la

componente de que se puede concentrar, y, además, es la de mayor energía. Su principal desventaja es el

efecto atenuador que provocan las nubes. Según el tipo de nube, el tamaño y su densidad la atenuación será

distinta, provocando una alta variabilidad temporal. El Instituto Nacional de Meteorología (INM) define el

término nube como una porción de aire enturbiada por el vapor de agua condensado en forma de cristales de

hielos, esferas congeladas o gotas liquidas, pequeñas y numerosas. Para caracterizar la nubosidad es necesario

realizar una clasificación previa de la tipología existente en la naturaleza. A continuación, se agrupan las nubes

según sus formas más habituales de presentarse en la naturaleza:

• Cirrus: Presentan una forma definida como de “mechón de pelo”.

• Stratus: Se encuentran divididas en capas o láminas.

• Cumulus: Se trata de nubes acumuladas o amontonadas.

• Nimbus: Son nubes cargadas de lluvia.

En la siguiente figura (Figura 3-4) podemos ver estos tipos de nubes y ver a la altura que ocupan.

Page 31: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

9 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

Figura 3-4. Representación de las diferentes tipos de nubes y su altura característica.

Las siguientes figuras muestran la Irradiancia Directa Normal (DNI), la Irradiancia Difusa Horizontal (DHI) y

la Irradiancia Global Horizontal (GHI) para tres días distintos. La frecuencia de las muestras es 10-minutal, es

decir, corresponden a muestras tomadas cada 10 minutos. En la primera figura (Figura 3-5) se observa el paso

de una nube matutina, que atenúa totalmente la DNI durante las primeras horas del día, en consecuencia, la

GHI será igual a la DHI en las primeras horas del día. En la figura 3-6 se observa el paso de bancos poco

densos de nubes que atenúan ligeramente la DNI a la par que aumentan la componente difusa. Debido a que la

directa es la componente más energética, la GHI (que recordemos, es la suma de las otras dos componentes a

nivel horizontal) se ve reducida por el paso de las nubes. En la figura 3-7 se observan bancos de nubes más

densos en los que la DNI varía del orden de 600 W/m2 en menos de 10 minutos. Por último, en la figura 3-7 se

observa un estrato de altura media y de alta densidad.

Figura 3-5. Representación gráfica de un día con niebla matutina.

Page 32: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Fundamentos

10

10

Figura 3-6. Representación gráfica de un día con bancos de nubes medias y estratos.

Figura 3-7. Representación gráfica de un día cubierto.

Un concepto que utilizaremos mucho en el proyecto es la curva de cielo despejado (𝐼/0). Esta es una curva

teorica equivalente a una DNI en un día sin ninguna nube. Es un concepto importante ya que nos permite tener

una idea de los máximos de DNI para el día en cuestión. También se la puede denominar envolvente.

3.1.4 Sistemas termosolares

Bajo la denominación genérica de sistemas termosolares de concentración se agrupan una serie de sistemas

Page 33: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

11 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

basados en distintas tecnologías concebidas para la conversión de la componente directa de la radiación solar

en otra forma de energía, apta para su utilización inmediata o para su almacenamiento, mediante el uso de

concentradores. Son cuatro las tecnologías que destacan por su grado de desarrollo, los sistemas de colectores

cilindro parabólicos, los sistemas Fresnel, los sistemas de receptor central y los discos parabólicos. Los

primeros concentran la radiación solar en un eje mientras que los dos últimos lo hacen en un punto, pudiendo

alcanzar por ello mayores relaciones de concentración.

Figura 3-8. Colector solar parabolico.

El propósito principal del modelado de sistemas termosolares es simular el comportamiento las centrales

eléctricas termosolares. Por un lado, estas simulaciones podrían utilizarse para predecir el comportamiento de

las centrales en operación, mejorando su gestionabilidad y aumentando su rendimiento económico, y por otro,

para generar resultados que permitan tomar decisiones en cuanto al diseño y el dimensionado de los

principales sistemas de la central, tales como el campo solar, sistema de almacenamiento o los sistemas de

combustión auxiliar.

Existen varios programas en el mercado para el estudio de las distintas componentes de los sistemas

termosolares [2] entre los que destaca el System Advisor Model (SAM) [3] debido a que se trata de un

software libre bien documentado y constantemente actualizado.

Para un buen rendimiento en la simulación del comportamiento de las Centrales Termo Solares (CTS), se ha

de enfatizar en el empleo de datos meteorológicos válidos, que incluyen información detallada sobre la

distribución estadística de la irradiancia directa y altas resoluciones temporales y espaciales [4]. El uso de

valores promediados horarios empobrece la información de interés en el sistema termosolar bajo estudio ya

que no se tienen en cuenta los transitorios debidos al paso de las nubes, de ahí que, al simular un mismo año,

aumenten los errores al aumentar la resolución temporal [5]. La importancia del presente proyecto radica en la

necesidad de las CTS de predicciones de DNI de alta resolución temporal con un horizonte desde unas horas

hasta unos días para así incrementar sus beneficios económicos.

3.2 Incremento en resolución temporal en series de irradiancia

En esta sección vamos a desarrollar el estado de arte en el ámbito del incremento de resolución temporal de

Page 34: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Fundamentos

12

12

series de irradiancia, y se describirá el método implementado en el presente proyecto y los motivos para su

elección. También se presentarán las mejoras que se proponen realizar en la implementación.

3.2.1 Metodos de incremento de resolución temporal en series de irradiancia.

A lo largo del tiempo ha habido varios intentos de generación de series temporales de valores de irradiancia de

alta resolución, es decir, conjuntos de medidas de irradiancia muestreadas en intervalos cortos de tiempo (de

10 minutos o menos). Ha continuación vamos a enumerar los estudios sobre el tema que se han ido

publicando, y los avances y mejoras que se han ido produciendo.

Aunque hubo artículos anteriores (Skartveit and Olseth 1992 [6]), el primer ejemplo de relevancia lo

encontramos en el articulo de Polo (2011) [7], donde el autor expone un método de generación basado en una

componente determinista y otra estocástica. La componente determinista se obtiene en base a los datos

horarios. La componente estocástica se obtiene en base al histórico de la localización. El método genera

sintéticamente series diezminutales, tanto de GHI como de DNI. La generación de las dos componentes se

realiza de manera separada, lo que significa que la generación sintética de un mismo día de ambas

componentes no tiene porque parecerse, siendo ésta una desventaja importante del método. Otra desventaja

importante es que para la generación se nesitan datos históricos de la zona, siendo difícil su uso en otras

localizaciones. Una primera evolución de este método se propone en el artículo de Larrañeta (2015) [8], donde

se consigue que éste no dependa de datos de la localización. La última actualización del método se propone en

el artículo de Granthan (2017), donde además de conseguir una generación de mayor resolución temporal, en

intervalos de 5 minutos, la generación de las componentes se realiza de manera emparejada. Esto significa que

ambas componentes generadas para un mismo día estarán correlacionadas, tal como lo harían las reales.

Otro enfoque para la generación se inicio en el artículo de Nakoto (2014) [9], donde se presenta un método

basado en Matrices de Transición de Markov (MTM) de segundo orden. Las MTM indican la probabilidad de

que ocurra un evento en función de los anteriores (en el caso de las de segundo orden, de los dos anteriores). El

algoritmo consigue la generación de la componente GHI en series de 1-min. La principal desventaja es que

para su funcionamiento son necesarios datos de la localización. Evoluciones de este método se han presentado

en el artículo de Bright (2015) [10], consiguiendo generar las componentes GHI y DNI de forma emparejada;

o en el artículo de Bright (2017) [11], donde se amplia el área (centrada en la localización) donde es posible

generación.

El método que hemos implimetado en este proyecto fue inicialmente propuesto en el artículo de Fernández-

Peruchena (2014) [12]. El algoritmo se basa en una base de datos de series minutales normalizadas. La

normalización en tiempo se realiza pasando los datos entre el orto y el ocaso a una serie pasos de numero fijo.

La normalización de la irradiancia se realiza quedándonos con la diferencia entre la irradiancia minutal y la

envolvente a cielo despejado. Se han realizado evoluciones de este método, siendo la última la propuesta en el

articulo de Larrañeta (2018) [1]. En está se consigue la generación de la componente DNI en intervalos de 1-

min a partir de datos horarios, sin depender de datos locales. Es en este artículo en el que nos hemos basado en

la implementación del presente proyecto. Hemos optado por este método por ser el más reciente, preciso,

Page 35: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

13 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

simple y no necesitar ninguna adaptación local.

A continuación, se describe el método que vamos a implementar, y las mejoras que se proponen.

3.2.2 Modelo no-dimensional (ND) de incremento de resolución temporal de DNI.

El modelo ND de incremento de resolución temporal, generá series de datos en paso minutal de DNI en base a

series en paso horario de DNI. Como datos de la localización a la que se corresponde la serie horaria, solo

necesita su latitud y logitud.

Para realizar la generación de la serie minutal, se parte de una base de datos de series minutales de irradiancia

normalizada en tiempo e irradiancia, donde cada día se encuentra caracterizado por una serie de índices. El

método sigue los siguientes pasos:

• Caracteriaza los días en función de la serie horaria.

• Encuentra el día más similar al día del que queremos incrementar la resolución.

• Desempaqueta el día normalizado, utilizando para ello las horas del orto y el ocaso, y la curva de cielo

despejado.

• Ajusta el año desempaquetado en términos de energía.

En los siguientes apartados vamos a extender estos puntos y explicar la validación de los resultados obtenidos.

3.2.2.1 Normalización de series minutales

Para la aplicación del modelo necesitamos una base de datos de irradiancia directa diaria normalizada en

tiempo e irradiancia. De aquí en adelante también nos referiremos esos datos como días empaquetados, y

desempaquetar, al proceso de convertilos en días de la serie sintética. Para obtener estos días empaquetados se

transforma cada curva diaria de DNI de 1 minuto en una curva adimensional donde la escala de tiempo y la

escala DNI van de 0 a 1. Para la normalización de DNI usaremos el índice de fración directa diaria (𝑘*), que

detallaremos en el apartado 3.2.2.3. A modo de resumen, diremos que es la relación entre la irradiancia directa

medida (𝐼*2) y la teórica que existiría en condiciones de cielo despejado (𝐼/0). Como el 𝐼/0 es un valor

máximo, el 𝑘* siempre será un valor comprendido entre 0 y 1. En las siguientes figuras podemos ver un dia no

normalizado (Figura 3-9), y ese mismo día normalizado (Figura 3-10).

Page 36: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Fundamentos

14

14

Figura 3-9. Irradiancia directa diaria en paso minutal normalizada en tiempo e irradiancia.

Figura 3-10. Irradiancia directa diaria en paso minutal desnormalizada.

3.2.2.2 Obtención de curva de cielo despejado

Tanto para obtención de los índices que nos permiten encontrar el día más similar, como para el

desempaquetado de los días, necesitamos la curva de cielo despejado. Para la obtención de la curva se

implememta el modelo de cielo despejado A-B (Larrañeta, 2017 [1])

Page 37: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

15 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

𝐼*234 = 𝐼0/ ×𝐸( ×𝐴

1 + 𝐵 ×𝑚< (3–1)

donde 𝒎𝑹 es la masa relativa de aire, 𝑰𝒔𝒄es la constante solar, 𝑬𝟎 es la corrección de la distacia Tierra-Sol, y

A y B son parámetros empíricos que modelan la turbiedad de la atmósfera. Este modelo calcula de manera

teórica la irradiancia directa máxima que se puede obtener en un emplazamiento según su localización y los

dos parámetros empíricos A y B.

Para la obtención de los parámetros A y B de la localización en el año de la serie que se quiere incrementar, se

utiliza los valores máximos de la relación DEFGH

para cada hora solar con un angulo de elevación superior a 5º.

Estos valores se suponen puntos donde la irradiancia directa coincide con la curva de cielo despejado. Una vez

obtenidos estos puntos, utilizamos un algoritmo de optimización para ajustar A y B a los valores obtenidos.

3.2.2.3 Caracterización de los días

Para la selección del día mas similar de los empaquetados, se necesita caracterizar cada día medido, buscando

tener una serie de características que permitan su comparación. Tomado como base en el articulo de Moreno-

Tejera (2017) [13], se caracterizan las curvas diarias de DNI en función de energía, variabilidad y distribución.

Para la caracterización de la energía diaria se usa el índice de fracción directa diaria, utilizando la siguiente

formula

𝑘* = 𝐻*2J

𝐻/0J

(3–2)

donde 𝐻*2J es el DNI diario acumulado, y 𝐻/0J es el DNI bajo condiciones de cielo despejado acumulado. El

índice será mayor cuanto mayor sea la componente DNI, es decir, cuanto más despejado sea el día.

Para la caracterización de la variabilidad se usa el índice de veriabilidad (VI), definido el el articulo de Stein

(2012) [14]. El índice se define como la relación entre la longitud de la curva DNI y la longitud de la curva

máxima envolvente del día claro, y se calcula mediante la siguiente formula

𝑉𝐼 = ∑ M(𝐼*2O − 𝐼*2OQR)S + Δ𝑡S2VWS

∑ M(𝐼/0O − 𝐼/0OQR)S + Δ𝑡S2VWS

(3–3)

donde 𝐼*2 es la irradiancia directa medida en la serie, 𝐼/0 es la irradiancia directa a cielo despejado, Δ𝑡 es el

intervaklo de tiempo de la serie, y n es el numero de intervalos.

Para la caracterización de la distribución temporal se usa el índice de fracción de mañana (𝐹,). El índice se

define la relación entre el DNI acumulado en la primera mitad del día y el DNI acumulado durante todo el día.

Se calcula utilizando la siguiente formula

Page 38: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Fundamentos

16

16

𝐹, = 𝐻*2,J

𝐻*2J

(3–4)

Donde 𝐻*2,J es el DNI diario acumulado en la primera mitad del día, y 𝐻*2J es el DNI diario acumulado.

3.2.2.4 Selección de día similar

Una vez caracteriazado cada uno de los días de la serie horaria, obtendremos el dia más similar a partir del

algoritmo de clasificación de k vecinos mas cercanos (en ingles, k-nearest neighbors, abreviado k-nn).

El k-nn es un algoritmo de aprendizaje supervisado, es decir, que a partir de un juego de datos inicial su

objetivo será el de clasificar correctamente todas las instancias nuevas. El juego de datos típico de este tipo de

algoritmos está formado por varios atributos descriptivos y un solo atributo objetivo (también llamado clase).

Para poder utilizar el algoritmo, se entrena el mismo con los datos de los días empaquetados. Se utilizarán las

características kb, VI y Fm (definidas en el apartado 3.2.2.3) como atributos, y cada día será una clase. Una

vez entrenado, se utilizará para predecir el día mas similar a partir de los tres predictores calculados de cada dia

de la serie horaria.

3.2.2.5 Desempaquetado y optimización

Una vez seleccionados los días más similares se realiza el desempaquetado. Para ello hace falta la curva de

cielo despejado, necesitando los parámetros A-B. Se partirá de los parámetros A-B calculados a partir de la

serie horaria (apartado 3.2.2.2). Luego se utiliza un proceso iterativo donde se iran modificando los parámetros

de forma aleatoria hasta obtener que el acumulado de la serie horaria no difiera mas de un 0.2% del acumulado

de la serie sintetica generada.

3.2.2.6 Validación de resultados

Para evaluar la calidad de la serie sintética generada, se utilizará el índice KSI (test de Kolmogorov-Smirnov).

Este índice se define como la integral de la diferencia entre las funciones de distribución acumuladas (CDFs)

de dos series. El índice tiene las mismas unidades que la magnitud correspondiente, y se calcula mediante la

formula

𝐾𝑆𝐼 = Z 𝐷2\]^_

\]`F

𝑑𝑥 (3–5)

Donde 𝑥,c\ y 𝑥,d2son los valores extremos de la variable, y 𝐷2 son las diferencias entre CDFs de las

medidas y los datos sintéticos.

Se utiliza el KSI porque las diferencias entre CFDs tienen gran impacto en la producción de las plantas.

Page 39: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

17 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

3.3 Python para la computación científica

Para la implementación del algoritmo se ha elegido lenguaje de programación Python. Python nos proporciona

todas las ventajas de un lenguaje de programación multipropósito; sus librerías científicas nos aportan gran

facilidad en el procesado y la representaciópn gráfica de los resultados; y posee una licencia de código abierto,

lo que nos permite usar y distribuir el programa sin coste para nosotros ni para el usuario final. En las

siguientes subsecciones vamos a ver las características y ventajas del lenguaje, los motivos de su elección, y

explicaremos las librerías científicas que vamos a utilizar.

3.3.1 Lenguaje de programación Python

Python es un lenguajen de programación interpretado creado a finales de los ochenta en el Centro para las

Matemáticas y la Informatica, en los Países Bajos. Su creador fue Guido van Rossum, y se creo como un

sucesor del lenguaje de programación ABC. Posee una licencia de código abierto, denominada Python

Software Foundation License. En el momento de escribir este proyecto, la ultima versión es la 3.6.5, que es la

que se utilizado en este desarrollo.

Es un lenguaje de programación moderno, de alto nivel, ideal para pequeñas aplicaciones, así como para

proyectos de gran envergadura. Se trata de un lenguaje de programación multiparadigma, soportando

programación orientada a objetos, programación imperativa y programación funcional. Tiene una amplia

comunidad de usuarios, prueba de ello es su primer puesto en el ranking de popularidad que IEES Spectrum

realiza cada año [15]. Entre sus principales ventajas cabe destacar:

• Al ser de alto nivel permite una implemetación rápida de aplicaciones con poco código.

• Es un lenguaje interpretado, por lo que es multiplataforma.

• Es un lenguaje dinámico, pudiendose añadir nuevas funciones y clases a un objeto existente, incluso

en tiempo de ejecución.

• Existen librerías científicas escritas en Phython maduras y con gran capacidad.

• Como ya se ha comentado, tiene una comunidad muy grande de usuarios y debido a la filosofía

abierta, los desarrolladores son mucho más proclives a compartir su código con otros.

• Es de propósito general, el código que se genera se puede aprovechar de las ventajas de otros módulos

(como comprimir archivos, enviar datos, automatizar procesos, enlazar nuestros datos con bases de

datos, con servidores web....

Python, en un principio, no se pensó para aplicaciones científicas. Con los años, siguiendo la filosofía GNU, se

han desarrollado multitud de módulos científicos, que permiten realizar numerosas tareas de tratamiento de

datos, visualización, cálculo simbólico y aplicaciones científicas específicas. Dentro de esos módulos cabe

destacar los siguientes:

• Numpy: Generación de tipos de datos científicos. http://www.numpy.org/

Page 40: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Fundamentos

18

18

• Scipy: Funciones científicas de uso general. http://www.scipy.org/

• Matplotlib: Gráficas en 2D y 3D. http://matplotlib.org/

• Opencv: Biblioteca libre de visión artificial en C cuyas librerías se han adaptado a

Python. http://opencv.willowgarage.com/documentation/python/

• Scikit-learn: Biblioteca libre para trabajar con algoritmos de “machine learning”. http://scikit-learn.org

Los motivos para la elección de este lenguaje se han sido:

• Las potentes librerias para cálculo de datos científicos. Estas librerías nos permiten una impletación

rápida y fiable, ya que nos permite utilizar potentes algoritmos, difíciles de implementar y de

optimizar.

• Su uso de propósito general, que nos permite integrarlo en el futuro en otras soluciones. Ejemplo de

ello es la intención de integralo en un sistema web que permita a grupos de investigación generar sus

series sintéticas desde la web de GTER.

• Su licencia de código abierto, requisito indispensable para distribuirlo sin coste para el usuario final y

ayudar a su evolución por parte de terceros.

3.3.2 Scipy

Es una biblioteca de código libre de herramientas y algoritmos matemáticos para Python. Se puede utilizar

para tareas de optimización, algebra lineal, integración, interpolación, procesamiento de señales y de imágenes

y otras tareas para la ciencia e ingeniería.

En la implementación del algoritmo hemos utilizado funciones de optimización una para encontrar la curva de

mejor ajuste, y otra para encontrar los mejores valores de dos parámetros en la minimización de una función.

El método scipy.optimize.curve_fit usa mínimos cuadrados no lineales para ajustar una función, f, a los datos.

Los parámetros son la función de curva (debe recibir como primer parametro los valores de entrada y luego los

parámetros a ajustar), las entradas de la función, las posibles salidadas de la función, posibles valores de inicio

de partametros, el método de optimización, y otros que no entraremos a detallar [16].

El método scipy.optimize.minimize realiza la minimización de la función escalar de una o más variables. Los

parámetros son la función objeto (llamada en este proyecto funciñon de coste), los valores iniciales de las

variables a minimizar, el método de minimización, limites en los valores de las variables y y otros que no

entraremos a detallar [17].

3.3.3 Numpy

Es una extensión de Python que le agrega una mayor capacidad para operar con matrices y vectores, aportando

funciones matemáticas de alto nivel para operar con ellos. Incorpora operaciones tan básicas como la suma o la

multiplicación u otras mucho más complejas como la transformada de Fourier o el álgebra lineal.

Page 41: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

19 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

Numpy es la base del desarrollo de este proyecto, ya que, debido a la naturaleza del algoritmo a implementar,

el cálculo matricial nos permite un desarrollo más sencillo y claro.

3.3.4 Matplotlib

Biblioteca para la generación de gráficos 2D. Puede ser usada en scripts de Python, y en otros entornos como

cuadernos Jupyter y aplicaciones web. Permite generar graficos, histogramas, espectros de potencia, gráficos

de barras, diagramas de error, diagramas de dispersión...

En el proyecto hemos hecho un uso intensivo de esta biblioteca, para ir comprobando y visualizando tanto los

resultados intermedios de la impelmentación, como el resultado final.

3.3.5 Scikit-learn

Es una biblioteca de algoritmos de aprendizaje automático para Python. Cuenta con varios algoritmos de

clasificación, regresión y agrupación, incluyendo máquinas de vectores de soporte, bosques aleatorios,

aumento de gradiente, k-means y DBSCAN, y está diseñado para interoperar con las bibliotecas numéricas y

científicas de Python, NumPy y SciPy.

En el desarrollo se ha utilizado el algoritmo “k vecimos más cercanos” que implementa la librerá.

sklearn.neighbors.KNeighborsClassifier es la clase que implementa el algoritmo. En la inicialización permite

indicar en número de vecinos que queremos que nos devuelva el método, la métrica, los pesos, el algoritmo y

otros parámetros. Una vez inicializada la clase, mediante el método fit le pasamos los datos de entrenamiento y

sus clases, y mediante el método predict, obtenemos los vecimos mas cercanos un array de puntos. La clase

posee otros métodos que no vamos a detallar en este proyecto.

Page 42: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Fundamentos

20

20

Page 43: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

21 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

4 IMPLEMENTACIÓN n este capítulo se describirá la implementación del modelo no-dimensional de incremento de resolución

temporal. El modelo ya fue explicado en la subsección 3.2.2 del presente documento.

En primer lugar, detallaremos las mejoras que vamos a introducir al modelo respecto al descrito en en la

subsección 3.2.2. Despues pasaremos a ver los datos de origen que utilizaremos para la implementación y las

pruebas, así como detalles de la estación origen.

En la siguiente sección desarrollaremos la implementación.

4.1 Mejoras de la implementación

Respecto al modelo descrito en la subsección 3.2.2, vamos a introducir varias mejoras.

Por un lado, vamos a añadir una nueva característica a los días, el índice de claridad (𝑘-). Este índice es la

relación entre la radiación global en el plano horizontal y la radiación extra-atmosférica en el plano horizontal,

y se calcula con la siguienede formula

𝑘- = 𝐻e(J

𝐻(J

(4–1)

donde 𝐻e(J es el GHI diario acumulado, y 𝐻(J es la irradiancia extraterrestre diaria acumulada. Se piensa que

esta nueva carcateristica va a mejorar el KSI, que como vimos en el 3.2.2.6 es el índice que usaremos para

evaluar el algoritmo.

Por otro lado, vamos a utilizar un algotitmo de optimización (introducido en la subsección 3.3.2) para el

cálculo de las variables A y B. El modelo original describia un algoritmo donde de forma iterativa se iban

modificando los parámetros hasta llegar a un límite establecido. Gracias a la implementación basada en cálculo

matricial y la libreria Scipy, podemos simplificar este paso, hacerlo más eficiente en tiempos de computación y

mejorar los resultados de ajuste.

Por último, el algoritmo va a dar como salida tanto la serie minutal sintética de DHI, como la de GHI. Ademas

ambas series están emparejadas, ya que los días empaquetados que las forman son los mismos.

4.2 Datos de origen

Tal como se especifico en el apartado 3.2.2.1, el modelo necesita de una base de datos de días normalizados en

tiempo e irradiancia. Estos días serán los que sustituirán al día del que queremos incrementar su resolución

temporal, y serán seleccionados en función de sus características de energía, variabilidad y distribución.

E

Page 44: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Implementación

22

22

Para la presente implemetación se ha utilizado una base de datos minutales de irradiancia directa y global ya

normalizada. El origen de los datos es la estación meteorológica del Grupo Termodinámica y Energías

Renovables (GTER). Los datos de la estación se detallan en la siguiente tabla:

Tabla 4–1 Estación utilizada para datos empaquetados y desarrollo

Latitud(°N) Longitud(°W) Altitud(m) Tipo clima (clasificación Köpper)

Sevilla 37.4 6.0 12 Mediterráneo

Los datos se corresponden a medidas que van desde el año 2002 hasta el año 2014. Gracias a esta base de

datos, contamos con 4745 días normalizados con los que poder comparar. Como se detallará en la sección 6

(Conclusiones y líneas futuras) del proyecto, una de las mejoras más importantes que se plantean para esta

implementación es ampliar la base de datos incluyendo datos de estaciones con otro tipo de clima. Al

limitarnos a datos de una sola estación, nos encontramos que días con carcateristicas de energía, variabilidad y

distribución muy comunes en determinados climas, no están presentes en nuestra base de datos normalizada.

Ejemplo de este son días con alta variabilidad y alta energía, muy comunes en determinados climas.

Como mejora de la implementación, tal como se comentó en la sección 4.1, vamos a utilizar la columna de

irradiancia global normalizada, para generar una serie sintetica minutal de GHI emparejada a la DNI sintética.

Para la selección del día más similar, tal como se describia en el apartado 3.2.2.4, se necesita un conjunto de

datos con el que entrenar al algoritmo k-nn. Para ello se cuenta con una base datos de las carcaterizaciones de

los mismos días que tenemos en la base de datos de días empaquetados. Para cada día tenemos los índices

descritos en el apartado 3.2.2.2, es decir, el índice de fracción directa diaria (𝑘*), el índice de variabiliada (VI)

y el índice de fracción de mañana (𝐹,), mas el índice de claridad diaria (𝑘-).

Como mejora de la implementación, tal como se comentó en la sección 4.1, vamos a utilizar este nuevo índice

para mejorar la selección del día más similar, añadiendo un nuevo predictor al algoritmo k-nn.

Para las pruebas de la implementación se utilizará una serie anual (2016) en paso horario correspondiente a la

misma estación origen de los datos empaquetados, y una serie minutal del mismo año. En la subsección 4.3.6,

compararemos la serie sintética generada y la serie minutal real según el método descrito en el apartado

3.2.2.6.

4.3 Implementación

En las subsecciones siguientes se describirán los pasos en la implentación del modelo, y se mostrarán

resultados parciales de dicha impemantación. Estos cálculos intermedios son importantes para verificar la

correcta implementación.

Page 45: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

23 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

4.3.1 Calculo de datos meteorológicos

Lo primero que necesitamos es el cálculo de varios datos meteorológicos relactivos al emplazamiento de la

localización donde queremos incrementar la resolución. Para los cálculos son necesarios la latitud y logitud del

emplazamiento.

Los cálculos meteorológicos que se realizan son los siguientes:

• Angulo del día (Γ)

Γ = 2 × 𝜋 ×(𝐷𝐼𝐴_𝐴Ñ𝑂 − 1)

365 [𝑟𝑎𝑑] (4–2)

• Corrección distancia tierra sol (𝐸()

𝐸( = 1.000110 + 0.034221 cos Γ + 0.001280 sin Γ + 0.000719 cos 2Γ +

0.000077 sin2Γ[rad]

(4–3)

• Constante solar (𝐼/0)

𝐼/0 = 1367[𝑤/𝑚S] (4–4)

• Ecuación de tiempo (𝐸-)

𝐸- = (0.000075 + 0.001868 cos Γ − 0.032077 sinΓ − 0.014615 cos 2Γ −

0.04089 sin 2Γ)(229.18) [h]

(4–5)

• Declinación solar (d)

𝛿 = 0.006918 − 0.399912 cos Γ + 0.070257 sin Γ + 0.006758 cos 2Γ +

0.000907 sin2Γ + 0.002697 cos 3Γ + 0.00148 sin3Γ [rad]

(4–6)

• Tiempo solar verdadero (TSV)

𝑇𝑆𝑉 = 𝐻𝑂𝑅𝐴 −60

2 ∗ 60 +(𝐿𝑂𝑁𝐺G����D�� − 𝐿𝑂𝑁𝐺�G<D�D����G<�)

15 + 𝐸- − 12 (4–7)

• Ángulo horario (w)

𝜔 = 𝜋𝜋180 × 15 × 𝑇𝐷𝑉[𝑟𝑎𝑑]

(4–8)

Page 46: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Implementación

24

24

• Angulo cenital solar (q)

𝜃 = cos��((sin𝛿 × sin𝐿𝐴𝑇𝐼𝑇𝑈𝐷G����D��)

+ (cos 𝛿 × cos 𝐿𝐴𝑇𝐼𝑇𝑈𝐷G����D�� × cos𝜔))[𝑟𝑎𝑑]

(4–9)

• Altura solar (a)

𝛼 = sin��((sin𝛿 × sin𝐿𝐴𝑇𝐼𝑇𝑈𝐷G����D��)

+ (cos 𝛿 × cos 𝐿𝐴𝑇𝐼𝑇𝑈𝐷G����D�� × cos𝜔))[𝑟𝑎𝑑]

(4–10)

• Altura solar en grados

𝑎𝑙𝑡𝑢𝑟𝑎 =𝛼 × 180

𝜋 [∘] (4–11)

• Irradiancia extraterrestre (𝐼()

𝐼( = 𝐼0/ ×𝐸( × cos 𝜃[𝑤/𝑚S] (4–12)

De los cálculos anteriores los más importantes son la altura solar, que nos permiten saber cuando es

el orto y el ocaso del día, dato necesario para el desempaquetado de los días como se verá mas

adelante; y la irradiancia extraterrestre, necesaria para el calculo del índice de claridad diaria

(sección 4.2).

A modo de ejemplo en la siguiente figura (Figura 4-1) se muetra como serían las alturas calculadas

para tres días (dia 1, 90 y 180):

Page 47: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

25 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

Figura 4-1. Altura solar por hora para los días 1, 90, y 180.

4.3.2 Generación de curva de cielo despejado

Una vez obtenida la altura solar, el siguiente paso es cálculo de la curva de cielo despejado. Tal como se

introdujo en el apartado 3.2.2.2, para la obtención de la curva se usa el modelo de cielo despejado A-B

(Larrañeta, 2017 [19])

𝐼*234 = 𝐼0/ ×𝐸( ×𝐴

1 + 𝐵 ×𝑚< (4–13)

donde 𝑚< es la masa relativa de aire, 𝐼0/ es la constante solar, 𝐸( es la corrección de la distacia Tierra-Sol, y A

y B son parámetros empericos que modelan la turbiedad de la atmosfera. Para utilizar el modelo se necesitan

los parámetros A y B, ya que 𝑚< lo podemos calcular en relación con la altura solar siguiendo la siguiente

formula:

𝑚< = 1

sin(𝑎𝑙𝑡𝑢𝑟𝑎 × 𝜋180 ) (4–14)

Vamos a calcular un A y B para el año completo siguiendo el siguiente algoritmo:

• Tomamos las alturas superiores a 5º. En alturas inferiores la irradiancia no tiene apenas valor y tomar

datos solo empobrecería el algoritmo.

• Tomamos los valores de la serie horaria que, para las alturas anteriores, maximicen la relación DEFGH

. Es

Page 48: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Implementación

26

26

decir, tomamos puntos que suponemos coinciden con la curva a cielo despejado, dando por hecho que

para una determinada altura, durante en año, ha habido algún día que el cielo estaba totalmente

despejado.

• Con esas alturas y valores DEFGH

, utlizamos un algortimo de optimización que encuentre los mejores

valores de A y B para la función

𝑓(𝑎𝑙𝑡𝑢𝑟𝑎) = 𝐼0/ ×𝐴

1 + 𝐵 × 1sin(𝑎𝑙𝑡𝑢𝑟𝑎 × 𝜋180 )

(4–15)

Para la optimazación se ha utilizado la función curve_fit, que se explico en la subsección 3.3.2. En la siguiente

figura (Figura 4-2) se puede ver una representación de los puntos de partida de la optimización, y la curva que

genera la función con los parámetros A y B optimizados.

Figura 4-2. Altura solar por hora para los días 1, 90, y 180.

Como recultado se obtienen los siguientes parámetros A y B

Tabla 4–2 Parametros A y B obtenidos para la serie horaria

A B Error Estandar A Error Estandar B

0.8565 0.1601 0.0066 0.0053

Con estos valores pordemos calcular la envolvente para la serie horaria, que será necesaria para el calculo de

los índices de la carcaterización del día. A modo de muestra y valdiación, en las siguientes figuras (Figuras 4-

Page 49: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

27 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

3, 4-4, 4-5) mostramos como serían las envolventes frente a los datos de irradiancia horaria relales en los días

1, 60 y 90. Se observa como en los días despejados, como el 60, las curvas coinciden, mientras que en días no

despejados la curva de irradiancia siempre es menor.

Figura 4-3. DNI y curva cielo despejado para dia 1 de la serie horaria.

Figura 4-4. DNI y curva cielo despejado para dia 60 de la serie horaria.

Page 50: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Implementación

28

28

Figura 4-5. DNI y curva cielo despejado para dia 90 de la serie horaria.

4.3.3 Caracterización de los días

En la caracterización de los días utilizaremos el índice de fracción directa diaria (𝑘*), el índice de variabiliada

(VI) y el índice de fracción de mañana (𝐹,), definidos en el apartado 3.2.2.3, y el índice de claridad (𝑘-)

diaria, definido en la sección 4.1.

Respecto del índice de fracción directa se ha obtienen los siguientes datos.

Tabla 4–3 𝑘*máximo, mímino y medio calculado

𝑘* maximo 𝑘*mínimo 𝑘*medio

Día 16 95 ----------- 𝑘* 1.0288 0.0011 0.5856

Page 51: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

29 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

Figura 4-6. DNI y curva cielo despejado con 𝑘* máximo.

Como vemos en la figura superior (Figura 4-6) correspondiente al 𝑘* máximo, la directa es superior en

muchos puntos a la curva de cielo despejado. Esto se debe a que los parámetros A y B que calculan la curva

han sido optimizados para todo el año, quedando días donde la curva es inferior a lo que debería ser.

En la siguiente figura (Figura 4-7) vemos el día correspondiente al 𝑘* minimo, que como podemos observar se

corresponde con un día con irradiancia directa casi cero.

Figura 4-7. DNI y curva cielo despejado con 𝑘* mínimo.

Page 52: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Implementación

30

30

Respecto al índice de variabilidad (VI) se obtienen los siguientes datos:

Tabla 4–4 VI máximo, mínimo y medio calculado

VI máximo VI mínimo VI medio

Día 258 21 ----------- VI 2.5003 0.0145 1.0031

En la figura 4-8 se muestra la DNI del día con mayor variabilidad, observando como hay importantes caídas

producidas por la nubosidad. En la figura 4-9 se muestra el día con menor VI, ya que es un día sin apenas DNI.

Y para finalizar, en la figura 4-10, se muestra una curva correspondiente a un VI cercano a 1. Se observa que

la curva coincide con la curva de cielo despejado.

Figura 4-8. DNI y curva cielo despejado con VI máximo.

Page 53: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

31 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

Figura 4-9. DNI y curva cielo despejado con VI mínimo.

Figura 4-10. DNI y curva cielo despejado con VI medio (1.0263).

Respecto al índice de fracción de mañana (𝐹,), se obtienen los siguientes datos:

Tabla 4–5 𝐹, máximo, mínimo y medio calculado

𝐹, máximo 𝐹, mínimo 𝐹, medio

Día 350 131 ----------- 𝐹, 1 0.0054 0.4487

Page 54: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Implementación

32

32

En la figura 4-11 se muestra el día con mayor índice de fracción de mañana. Se puede observar como la

energía se concentra en la primera parte del día. Justo lo contrario se observa en la figura 4-12, correspondiente

al menor índice de fracción de mañana.

Figura 4-11. DNI y curva cielo despejado con 𝐹, máximo.

Figura 4-12. DNI y curva cielo despejado con 𝐹, minimo.

Respecto al índice de claridad (𝑘-), se obtienen los siguientes datos:

Page 55: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

33 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

Tabla 4–6 𝑘- máximo, mínimo y medio calculado

𝑘-máximo 𝑘- mínimo 𝑘- medio

Día 124 349 ----------- 𝑘- 0.7912 0.1029 0.6074

En las siguientes figuras se observa la GHI y la extraterrestre en sus días máximos (Figura 4-13) y mínimos

(Figura 4-14).

Figura 4-13. GHI y extraterrestre con 𝑘- máximo.

Page 56: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Implementación

34

34

Figura 4-14. GHI y extraterrestre con 𝑘- mínimo.

4.3.4 Selección de días sintéticos

El paso siguiente a la caracterización de los días de la serie horaria es su paso por el algoritmo de clasificación

k-nn (detallado en el apartado 3.2.2.4), el cual se ha entrenado previamente con la base de datos de

características de los días empaquetados.

Tal como explicamos en la subsección 3.3.5, usaremos la clase KNeighborsClassifier de la librería Scikit-

learn. Todos los predictores tienen el mismo peso, como métrica de distancia se utiliza la distancia euclidea, y

se inicializa la clase para que devuelva solo un elemento (el vecino más cercano)

A modo de ejemplo y comprobación, se muestran los días similares obtenidos para 3 días determinados de la

serie horaria:

Tabla 4–7 Características de días de la serie horaria frente a características del día mas similar de la serie minutal

Día /Día similar 𝑘*/𝑘*similar VI/VI similar 𝐹,/𝐹,similar 𝑘-/𝑘- similar

16/390 1.0289/1 1.0173/1.016 0.5552/0.5473 0.7244/0.7191 95/2538 0.0011/0.0007 0.0149/0.0182 0.5330/0.5246 0.1329/0.1282 258/4156 0.6333/0.5921 2.5000/2.4234 0.5127/0.5777 0.6178/0.6353

4.3.5 Ajuste de variables AB y desempaquetado

Una vez obtenidos los días similares se desempaquetan y se forma la serie. Tal como se comento en el

Page 57: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

35 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

apartado 3.2.2.1, los días se encuentran normalizados en tiempo e irradiancia. Para el desempaquetado por

tiempo se sigue el siguiente proceso para cada día:

• El día empaquetado esta formado por 1000 pasos de tiempo, que tienen los datos de irradiancia del

día entre el orto y el ocaso.

• Para cada día sobre el que queremos desempaquetar obtenemos los minutos que hay entre en orto y el

ocaso (𝑚𝑖𝑛��-���/c0�).

• Utilizado como incremento la relación entre 1000/𝑚𝑖𝑛��-���/c0� vamos recorriendo el vector del dia

empaquetado y asignando a cada minuto del dia sobre en que queremos desempaquetar el valor

correspondiente.

• A los minutos fuera del orto y ocaso le asignamos el valor 0.

En las siguientes figuras vemos una DNI diaria empaquetada (Figura 4-15) y el resultado de desempaquetarla

sobre un día real (Figura 4-16).

Figura 4-15. kb del día 4033 de la base de datos de días empaquetados

Page 58: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Implementación

36

36

Figura 4-16. kb del día 4033 desempaquetado sobre el día 1 de la serie sintética

Respecto al desempaquetado de la irradiancia directa, necesitamos la curva de cielo despejado de cada día, ya

que el valor que tenemos en la serie empaquetada es el índice de fracción directa (𝑘*). Como ya comentamos

en la subsección 4.3.2, para obtener la curva necesitamos de los parámetros empíricos A y B. En la subsección

obtuvimos esos parámetros a partir de la serie horaria, pero ahora necesitamos optimizarlos para que el

acumulado de la serie horaria coincida lo mas posible con el acumulado de la serie minutal generada. Para ello

creamos una función de coste, que consiste en la diferencia entre el acumulado de la serie horaria y el de la

serie minutal generada, y que tiene como parámetros A y B. Esta función de coste se minimiza utilizando el

método minimize de la librería Scipy, introducida en la subsección 3.3.2. Para la minimización se utiliza el

algoritmo TNC (Método de Newton Truncado), porque nos permite introducir limites a los parámetros que

queremos optimizar. Se pone como parámetros de partida los obtenidos anteriormente, y se marcan unos

limites empíricos para A y B.

A continuación, se muestran los parámetros A y B obtenidos, así como una comparación del resultado de la

función de coste con respecto a los parámetros A y B de partida.

Tabla 4–8 Parámetros A y B y resultado de la función de coste de inicio y optimizados

A B Resultado función de coste

Parámetros de inicio

0.8565 0.1601 95.2267

Parámetros optimizados

0.8684 0.1391 2.19 ×10��

Page 59: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

37 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

La siguiente figura (Figura 4-17) muestra como quedaría el DNI del día desempaquetado sobre el día objeto.

Figura 4-17. DNI y envolvente del día 1 de la serie sintética

Para desempaquetar la GHI usaremos la 𝐼( obtenida en los cálculos solares. La formula seria

𝐼e( = 𝐼( × 𝑘- (4–16)

donde 𝑘-es el valor que tenemos en la serie empaquetada. La siguiente figura (Figura 4-18) muestra como

quedaría la GHI del día desempaquetado sobre el día objeto.

Page 60: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Implementación

38

38

Figura 4-18. GHI y extraterrestre del día 1 de la serie sintética

4.3.6 Resultados serie de prueba

A continuación, mostramos los resultados obtenidos con la serie de prueba. Como introducimos en el apartado

3.2.2.6, para evaluar la calidad de la serie sintética generada, se utilizará el índice KSI (test de Kolmogorov-

Smirnov). En las siguientes figuras se muestra la grafica de distribución de frecuencia acumulada para la DNI

sintética y real (Figura 4-19), y las diferencias entre ellas (Figura 4-20).

Figura 4-19. Distribución de frecuencia acumulada para la DNI sintética y real

Page 61: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

39 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

de la serie de Sevilla

Figura 4-20. Diferencia entre la distribución de frecuencia acumulada para la DNI sintética y real de la serie de Sevilla

En la siguiente tabla se muestra el KSI obtenido en la generación de la serie de Sevilla de 2016, comparando el algoritmo con índice de claridad y sin ese índice.

Tabla 4–9 KSIs obtenido para la serie de la estación de Sevilla de 2016

Estación KSI sin 𝑘- KSI con 𝑘-

Sevilla 4.2 8.5

A continuación, mostramos la DNI y la GHI de los días sintéticos frente a los reales generados mediante el algoritmo con 𝑘- . Se han tomado 6 días consecutivos del año.

Figura 4-21. Ibn sintético y real día 61

Figura 4-22. Ig0 sintético y real día 61

Page 62: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Implementación

40

40

Figura 4-23. Ibn sintético y real día 62

Figura 4-24. Ig0 sintético y real día 62

Figura 4-25. Ibn sintético y real día 63

Figura 4-26. Ig0 sintético y real día 63

Figura 4-27. Ibn sintético y real día 64

Figura 4-28. Ig0 sintético y real día 64

Figura 4-29. Ibn sintético y real día 65

Figura 4-30. Ig0 sintético y real día 65

Page 63: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

41 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

Figura 4-31. Ibn sintético y real día 66

Figura 4-32. Ig0 sintético y real día 66

Page 64: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Implementación

42

42

Page 65: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

43 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

5 RESULTADOS En este capítulo vamos a ver los resultados a nivel de software, es decir, veremos como utiliza el software

desarrollado y sus tiempos de ejecución; y los resultados relativos a las series generadas.

5.1 Software desarrollado

El resultado final en un script en Python y dos archivos de texto. El primero, minutal_empaquetada.csv,

almacena los datos relativos a los días empaquetados. Esta formado por 5110000 filas de 3 valores separados

por comas. El primer valor es un entero identificador del día, el segundo es el índice de fracción directa, y el

tercero el índice de claridad. El segundo archivo, indices_dias.csv, almacena los índices calculados de los días

empaquetados. Esta formado por 4745 filas de 5 valores separados por comas. El primer valor es un entero

identificador del día, el segundo el índice de fracción directa diaria, el tercero el índice de variabilidad diario,

el cuarto es el índice de fracción de mañana diario, y el quinto es el índice de claridad diario.

Para el uso del script, el sistema deberá tener instalada la versión de Python 3.6.5 o superior, y los paquetes

numpy (versión 1.14.2 o superior), scikit-learn (versión 0.19.1 o superior) y scipy (versión 1.0.1 o superior).

Respecto al uso del script, para su uso hacen falta una serie horaria anual de irradiancia directa y global, y los

datos de localización del emplazamiento origen de la serie. Los datos de localización se introducirán en un

fichero denominado datos_estacion.csv, que deberá estar en la misma carpeta que el archivo de script. El

archivo es una fila de tres valores separados por punto y coma. El primer valor es la latitud en grados, el

segundo es la longitud en grados, y el tercero es la longitud respecto al meridiano cero en grados. El archivo de

la serie horaria deberá ser un archivo de texto, donde cada línea contendrá los valores de irradiancia de una

hora del día. Los valores deberán estar separados por coma y deberá tener 8760 líneas. El primer valora será

un entero que representa el día. Irá de 1 a 365. El segundo valor será un entero que representa la hora. Ira de 1

a 24, repitiéndose el ciclo 365 veces. El tercer valor será la irradiancia directa normal horaria. El cuarto valor

será la irradiancia global horizontal horaria. El archivo se pasará como argumento al script.

A continuación, se presenta una figura (Figura 5-1) de ejemplo de uso del script:

Page 66: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Resultados

44

44

Figura 5-1. Ejemplo ejecución script desarrollado

Como se observa en la figura, el script se lanza pasándole como argumento el nombre del archivo de la serie

horaria. Previamente se había completado el archivo datos_estación.csv. El script va lanzando las tareas y

mostrando los tiempos de ejecución. En script tarda unos 30 segundos de media en su ejecución. La tarea que

más tiempo consume es la carga del archivo de días empaquetadas, debido a su tamaño.

5.2 Análisis de resultados obtenidos

El desarrollo se ha ejecutado en un emplazamiento con características climáticas diferentes al utilizado en la

etapa de desarrollo, buscando demostrar su aplicabilidad global. Los datos del emplazamiento son:

Tabla 5–1 Estación utilizada para datos empaquetados y desarrollo

Latitud(°N) Longitud(°W) Altitud(m) Tipo clima (clasificación Köpper)

Adelaida -34.95 -138.51 2 Mediterráneo Cálido

Se utilizará como indicador de la calidad de la serie sintética generada el índice KSI (test de Kolmogorov-

Smirnov). Se utilizarán series de DNI y GHI de 5 años consecutivos en paso horario, y se calculará el KSI

respecto a las series de DNI los mismos años en paso minutal.

A continuación, mostramos las graficas de distribución de frecuencia acumulada para la DNI sintética y real, y

Page 67: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

45 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

la diferencia entre la distribución de frecuencia acumulada para la DNI sintética y real de cada año.

Figura 5-2. Distribución de frecuencia acumulada para la DNI sintética y real de la serie de Adelaida del año 2004

Figura 5-3. Diferencia entre la distribución de frecuencia acumulada para la DNI sintética y real de la serie de Adelaida del año 2004

Page 68: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Resultados

46

46

Figura 5-4. Distribución de frecuencia acumulada para la DNI sintética y real de la serie de Adelaida del año 2005

Figura 5-5. Diferencia entre la distribución de frecuencia acumulada para la DNI sintética y real de la serie de Adelaida del año 2005

Page 69: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

47 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

Figura 5-6. Distribución de frecuencia acumulada para la DNI sintética y real de la serie de Adelaida del año 2006

Figura 5-7. Diferencia entre la distribución de frecuencia acumulada para la DNI sintética y real de la serie de Adelaida del año 2006

Page 70: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Resultados

48

48

Figura 5-8. Distribución de frecuencia acumulada para la DNI sintética y real de la serie de Adelaida del año 2007

Figura 5-9. Diferencia entre la distribución de frecuencia acumulada para la DNI sintética y real de la serie de Adelaida del año 2007

Page 71: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

49 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

Figura 5-10. Distribución de frecuencia acumulada para la DNI sintética y real de la serie de Adelaida del año 2008

Figura 5-11. Diferencia entre la distribución de frecuencia acumulada para la DNI sintética y real de la serie de Adelaida del año 2008

En la siguiente tabla se presentan los KSI obtenidos para los cinco años analizados:

Page 72: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Resultados

50

50

Tabla 5–2 KSIs obtenido para la serie de la estación de Adelaida 2004-2008

Año 2004 2005 2006 2007 2008

KSI 38.1983 35.8680 36.0018 31.1362 38.7738

En las gráficas de distribución de frecuencia acumulada para la DNI sintética y real se observan desviaciones

que no aparecen en la gráfica de distribución de Sevilla. Esto se debe a las diferencias entre la variabilidad de

los días en los distintos climas. Para corregir esos errores es necesario disponer de una base de datos de días

empaquetados para cada tipo de clima.

Los KSI obtenidos para los distintos años están son bastante estables, moviéndose siempre en el mismo orden

de magnitud. Esto es indicativo de la robustez del modelo, y su independencia de fenómenos climáticos

particulares de cada año.

Page 73: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

51 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

6 CONCLUSIONES Y LÍNEAS FUTURAS Podemos concluir que se ha implementado con éxito el algoritmo de incremento de resolución en series de

tiempo de DNI. Se ha conseguido el objetivo de desarrollar una implementación de software distribuible,

integrable con otros sistemas y libre de licencias.

Para evaluar la implementación se han utilizado cinco años de datos de irradiancia de una estación

meteorológica de Adelaida (Australia). La diferencia de clima de esta estación con respecto a los datos que

utiliza el modelo ha permitido validar la aplicación global de la implementación. Como indicador de la calidad

de la serie sintética generada, se ha utilizado el índice KSI (test de Kolmogorov-Smirnov). En las pruebas

realizadas se han obtenido valores de KSI del orden de magnitud de los KSI del artículo en el que se basa esta

implementación. Los valores de KSI se han comportado de forma bastante estable, indicando la robustez del

modelo. En las graficas de distribución de frecuencia acumulada para la DNI sintética y real, se observan

problemas de diferencia de variabilidad entre las series. Para reducir estos problemas y mejorar la KSI se

marca como línea futura de trabajo la ampliación de la base de datos de series empaquetadas usada en las

series sintéticas. Una base de datos empaquetada para cada tipo de clima podría solucionar los problemas de

variabilidad, acercando el índice KSI de cualquier emplazamiento al obtenido actualmente para la estación de

Sevilla. También se propone la búsqueda o desarrollo de un índice distinto para modelar la variabilidad.

Como mejora del algoritmo se proponía la inclusión de índice de claridad (𝑘-) en la caracterización de los días,

con el objetivo de mejorar la selección del día más similar de los empaquetados. En las pruebas realizadas no

se ha conseguido una mejora del índice KSI. Como línea futura a este respecto, queda pendiente el análisis del

KSI para la serie GHI en función de la inclusión de este índice.

Se ha introducido como nueva salida del algoritmo la serie GHI minutal sintética. Esta mejora dota de mayor

potencia y versatilidad a la implementación.

Respecto al sript se propone como línea futura de trabajo, intentar reducir los tiempos de carga de los archivos

de datos, y mejorar la captura de excepciones para dar más información al usuario sobre los posibles

problemas encontrados en las series de entrada.

Con la intención de facilitar el uso de la implementación, se marca como objetivo la creación de un portal y

servicio web donde los usuarios puedan subir sus datos en resolución horaria, y obtener esos mismos en

resolución minutal. Esto permitiría a los usuarios utilizar la herramienta de una manera sencilla, incluso

integrarlo en procedimientos automáticos enfocados a la predicción.

Page 74: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Conclusiones y líneas futuras

52

52

Page 75: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

53 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

REFERENCIAS [1] M. Larrañeta, C. Fernandez-Peruchena, M.A. Silva-Pérez, I. Lillo-Bravo, “Methodology to synthetically downscale DNI time series from 1-h to 1-min temporal”, Solar Energy, Volume 162, 2018, Pages 573-584

[2] Software and Codes for Analysis of Concentrating Solar Power Technologies. SANDIA REPORT. SAND2008-8053. Unlimited Release. Printed December 2008

[3] Nate Blair, Aron P. Dobos, Janine Freeman, Ty Neises, and Michael Wagner. System Advisor Model, SAM General Description. Technical Report. NREL/TP-6A20-61019. February 2014

[4] Meyer, R., Beyer, H.G., Fanslau, J., Geuder, N., Hammer, A., Hirsch, T., Hoyer-Click, C., Schmidt, N., Schwandt, M., 2009. Towards standardization of CSP yield assessments. Proceedings of SolarPACES 2011, Granada (Spain).

[5] Juan Bellerín. Manuel Silva. Estudio de la influencia del promediado de un conjunto de datos meteorológicos en la simulación de sistemas termosolares de concentración. PFC 2004.

[6]Skartveit, A., Olseth, J.A., 1992. The probability density and autocorrelation of short-term global and beam irradiance. Sol. Energy 49, 477–487.

[7]Polo, J., Zarzalejo, L.F., Marchante, R., Navarro, A.A., 2011. A simple approach to the synthetic generation of solar irradadiance time series with high temporal resolution. Sol. Energy 85, 1164–1170.

[8] Larrañeta, M., Moreno-Tejera, Silva-Pérez, M.A., Lillo-Bravo, I., 2015. An improved model for the synthetic generation of high temporal resolution direct normal irra- diation time series. Sol. Energy 122, 517–528.

[9] Ngoko, B.O., Sugihara, H., Funaki, T., 2014. Synthetic generation of high temporal re-solution solar radiation data using Markov models. Sol. Energy 103, 160–170.

[10] Bright, J.M., Smith, C.J., Taylor, P.G., Crook, R., 2015. Stochastic generation of synthetic minutely irradiance time series derived from mean hourly weather observation data. Sol. Energy 115, 229–242.

[11]Bright, J.M., Babacan, O., J Taylor Kleissl, P.G., Crook, R., 2017. A synthetic, spatially decorrelating solar irradiance generator and application to a LV grid model with high PV penetration. Sol. Energy 115, 229–242.

[12] Fernández-Peruchena, C.M., Blanco, M., Bernardos, A., 2014. Generation of series of high frequency DNI years consistent with annual and monthly long-term averages using measured DNI data. Energy Procedia 49, 2321–2329.

[13]Moreno-Tejera, S., Silva-Pérez, M.A., Lillo-Bravo, I., Ramírez, L., 2017. Classification of days according to DNI profiles using clustering techniques. Sol. Energy 146, 319–333.

[14] Stein, J., Hansen, C., Reno, M., 2012. The variability index: a new and novel metric for quantifying irradiance and PV output variability. World Renew. Energy 1–7.

[15] https://spectrum.ieee.org/computing/software/the-2017-top-programming-languages

[16] https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html

[17] https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html

Page 76: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

Referencias

54

54

Page 77: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

55 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

ANEXO A CÓDIGO SCRIPT

script.py

# CARGAMOS LAS LIBRERIAS

import numpy as np

import matplotlib.pyplot as plt

from scipy.optimize import curve_fit

from sklearn.neighbors import KNeighborsClassifier

from scipy.optimize import minimize

from time import time

import sys

try:

nombre_archivo = sys.argv[1]

print("Inicio")

start = time()

start_seccion = time()

print("Cargamos los datos de entrada...")

# CARGAMOS LA BASE DE DATOS HORARIA. Las columnas son [DIA,HORA,GOLBAL,NORMAL]

horario = np.genfromtxt(nombre_archivo,delimiter=',')

datos_estacion = np.genfromtxt('datos_estacion.csv',delimiter=';')

print("Carga datos entrada: %.2f seconds" % (time() - start_seccion))

#Cargamos los indices

start_seccion = time()

print("Cargamos los indices...")

indices_dias = np.genfromtxt('indices_dias_v3.csv',delimiter=',')

print("Carga indices: %.2f seconds" % (time() - start_seccion))

#Cargamos la mital empaquetada

start_seccion = time()

Page 78: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

ANEXO A Código Script

56

56

print("Cargamos los dias empaquetados...")

minutal = np.genfromtxt('minutal_empaquetada.csv',delimiter=',')

print("Carga dias empaquetados: %.2f seconds" % (time() - start_seccion))

start_seccion = time()

# Creamos los datos del emplazamiento ( en radianes )

lat = datos_estacion[0] * np.pi / 180 #LATITUD (RADAIANES)

long_grados = datos_estacion[1] #LONGITUD (RADIANES)

long = long_grados * np.pi / 180 #LONGITUD (RADIANES)

long_mc = datos_estacion[2] #LONGITUD DEL MERIDIANO CERO (GRADOS)

# CALCULOS SOLARES

print("Calculos solares...")

#ANGULO DEL DIA (RADIANES)

gamma = 2 * np.pi * ( horario[:,0] - 1) / 365

#Corrección distancia Tierra-Sol[rad]

Eo = (1.000110 + 0.034221 * np.cos(gamma)) + (0.001280*np.sin(gamma))+ (0.000719 * np.cos(2*gamma) ) + (0.000077 * np.sin(2*gamma))

#costante solar [w/m2]

Ics = 1367

#Ecuación del tiempo[h]

Et=(1/60)*229.18*(0.000075 + 0.001868*np.cos(gamma) - 0.032077*np.sin(gamma) - 0.014615*np.cos(2*gamma) - 0.04089*np.sin(2*gamma))

#DECLINACION SOLAR

delta=0.006918 - 0.399912*np.cos(gamma) + 0.070257*np.sin(gamma) + 0.006758*np.cos(2*gamma) + 0.000907*np.sin(2*gamma) + 0.002697*np.cos(3*gamma) + 0.00148*np.sin(3*gamma)

TSV=(horario[:,1]-((60/2)/60)+((long_grados-long_mc)/15)+Et-12); #TIEMPO SOLAR VERDADERO

omega=(np.pi/180)*15*TSV #Ángulo horario[rad]

teta=np.arccos((np.sin(delta)*np.sin(lat))+(np.cos(delta)*np.cos(lat)*np.cos(omega))) #Ángulo cenital solar [rad]

alfa=np.arcsin(np.sin(delta)*np.sin(lat)+np.cos(delta)*np.cos(lat)*np.cos(omega)) #Altura solar [rad]

altura=alfa*180/np.pi #Altura [º]

I0=Ics*Eo*np.cos(teta) #Irradiancia extraterrestre

# Hacemos varias mascaras que nos ayudarán en el algoritmo

altura_positiva_mask = (altura > 0)

altura_negativa_mask = (altura <= 0)

altura_menor_10_mask = (altura < 10)

Page 79: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

57 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

altura_positiva = np.maximum(altura,0)

alfa_positiva = np.maximum(alfa,0)

altura_mayor_10 = np.copy(altura)

altura_mayor_10[altura_menor_10_mask] = 0

antes_mediodia_mask = (omega<0)

# Vamos a representar la altura

# Obtenemos un array de alturas en "integer"

altura_int = np.around(altura)

# Obtenemos la altura máxima del array de enteros

altura_maxima_int = altura_int.max()

# Creamos un iterador, para recorrerlo y obtener máximos para distintas alturas, maximizando Ibn/Eo. Intentamos obtener posibles puntos donde la curva toque la envolvente.

iterador_alturas = np.arange(5,altura_maxima_int + 1)

start_seccion = time()

print("Calculo envolvente...")

#Obtenemos los puntos de la envolvente

puntos_envolvente = []

Ibn_div_Eo = horario[:,2] / Eo

for altura_i in np.nditer(iterador_alturas):

alturas_coincidentes_mask = (altura_int == altura_i)

Ibn_div_Eo_coincidentes = Ibn_div_Eo[alturas_coincidentes_mask]

if Ibn_div_Eo_coincidentes.size > 0:

puntos_envolvente.append([np.asscalar(altura_i),Ibn_div_Eo_coincidentes.max()])

puntos_envolvente = np.array(puntos_envolvente)

#Definimos la función de envolvente

def func_ab(x, a, b):

return Ics * ( a /(1+b*(1/(np.sin(x*np.pi/180)))))

popt, pcov = curve_fit(func_ab, puntos_envolvente[:,0], puntos_envolvente[:,1])

A_envol = popt[0]

B_envol = popt[1]

# CALCULAMOS LA ENVOLVENTE

Page 80: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

ANEXO A Código Script

58

58

Ibcd_AB_hor = np.zeros(horario[:,2].size)

Ibcd_AB_hor[altura_positiva_mask]=Ics*Eo[altura_positiva_mask]*( A_envol/(1+ B_envol*(1/(np.sin(alfa[altura_positiva_mask])))))

print("Tiempo cálculo envolvente: %.2f seconds" % (time() - start_seccion))

print("Calculo indices...")

# ### CALCULO DE VARIABILIDAD

altura_negativa_mask_2d = np.copy(altura_negativa_mask)

altura_negativa_mask_2d.shape = (365,24)

Ibcd_AB_hor_matriz = np.copy(Ibcd_AB_hor)

Ibcd_AB_hor_matriz.shape = (365,24)

Ibcd_AB_hor_matriz[altura_negativa_mask_2d] = 0

Ibcd_hor_matriz = np.copy(horario[:,2])

Ibcd_hor_matriz.shape = (365,24)

Ibcd_hor_matriz[altura_negativa_mask_2d] = 0

altura_negativa_mask_2d_k = np.delete(altura_negativa_mask_2d,0,1)

Ibcd_AB_hor_matriz_k = np.delete(Ibcd_AB_hor_matriz,0,1)

Ibcd_AB_hor_matriz_k[altura_negativa_mask_2d_k] = 0

Ibcd_AB_hor_matriz_k_menos_1 = np.delete(Ibcd_AB_hor_matriz,23,1)

Ibcd_AB_hor_matriz_k_menos_1[altura_negativa_mask_2d_k] = 0

Ibcd_hor_matriz_k = np.delete(Ibcd_hor_matriz,0,1)

Ibcd_hor_matriz_k[altura_negativa_mask_2d_k] = 0

Ibcd_hor_matriz_k_menos_1 = np.delete(Ibcd_hor_matriz,23,1)

Ibcd_hor_matriz_k_menos_1[altura_negativa_mask_2d_k] = 0

dividendo = (np.power( np.power(Ibcd_hor_matriz_k-Ibcd_hor_matriz_k_menos_1,2) + 1 , 1/2 )).sum(1)

divisor = (np.power( np.power(Ibcd_AB_hor_matriz_k-Ibcd_AB_hor_matriz_k_menos_1,2) + 1 , 1/2 )).sum(1)

indice_de_variabilidad = dividendo/divisor

# ### CALCULO INDICE FRACCION DIRECTA DIARIA

Page 81: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

59 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

Kb = Ibcd_hor_matriz.sum(1) / Ibcd_AB_hor_matriz.sum(1)

# ### CALCULO INDICE FACCIÓN DE MAÑANA

despues_mediodia_mask = np.logical_not(antes_mediodia_mask)

despues_mediodia_mask_2d = np.copy(despues_mediodia_mask)

despues_mediodia_mask_2d.shape = (365,24)

Ibcd_hor_matriz_antes_mediodia = np.copy(Ibcd_hor_matriz)

Ibcd_hor_matriz_antes_mediodia[despues_mediodia_mask_2d] = 0

Fm = Ibcd_hor_matriz_antes_mediodia.sum(1) / Ibcd_hor_matriz.sum(1)

Fm = np.nan_to_num(Fm)

# ### CALCULO INDICE DE CLARIDAD

I0_matriz = np.copy(I0)

I0_matriz.shape = (365,24)

I0_matriz[altura_negativa_mask_2d] = 0

Ig0_hor_matriz = np.copy(horario[:,3])

Ig0_hor_matriz.shape = (365,24)

Kt = Ig0_hor_matriz.sum(1) / I0_matriz.sum(1)

# ## ENCONTRAMOS LOS DIAS SIMILARES EMPAQUETADOS

start_seccion = time()

print("Busqueda de dias similares...")

indices_calculados = np.zeros((365,4))

indices_calculados[:,0] = Kb

indices_calculados[:,1] = indice_de_variabilidad

indices_calculados[:,2] = Fm

indices_calculados[:,3] = Kt

neigh = KNeighborsClassifier(n_neighbors=1)

neigh.fit(indices_dias[:,1:5],indices_dias[:,0])

dias_similares = neigh.predict(indices_calculados)

Page 82: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

ANEXO A Código Script

60

60

print("Tiempo busqueda de días similares: %.2f seconds" % (time() - start_seccion))

# ## FUNCION DE DESEMPAQUETADO

hora_ano_minuto = np.tile(np.arange(0,24,1/60),365)

dias = np.arange(1,366)

dias_ano_minuto = np.repeat(dias,24*60)

gamma_minuto = 2 * np.pi * ( dias_ano_minuto - 1) / 365

Eo_minuto = (1.000110 + 0.034221 * np.cos(gamma_minuto)) + (0.001280*np.sin(gamma_minuto))+ (0.000719 * np.cos(2*gamma_minuto) ) + (0.000077 * np.sin(2*gamma_minuto))

Et_minuto=(1/60)*229.18*(0.000075 + 0.001868*np.cos(gamma_minuto) - 0.032077*np.sin(gamma_minuto) - 0.014615*np.cos(2*gamma_minuto) - 0.04089*np.sin(2*gamma_minuto))

delta_minuto=0.006918 - 0.399912*np.cos(gamma_minuto) + 0.070257*np.sin(gamma_minuto) + 0.006758*np.cos(2*gamma_minuto) + 0.000907*np.sin(2*gamma_minuto) + 0.002697*np.cos(3*gamma_minuto) + 0.00148*np.sin(3*gamma_minuto)

omegaS_minuto= np.arccos((-np.tan(delta_minuto))*(np.tan(lat)))

Hsol_minuto=((omegaS_minuto*(180/np.pi))/15)

orto_minuto=(-Hsol_minuto+12)-((long-long_mc)/15)-Et_minuto

ocaso_minuto=Hsol_minuto+12-((long-long_mc)/15)-Et_minuto

horas_sol_dia_minuto=ocaso_minuto-orto_minuto

TSV_minuto=(hora_ano_minuto-((1/2)/60)+((long_grados-long_mc)/15)+Et_minuto-12);

omega_minuto=(np.pi/180)*15*TSV_minuto #Ángulo horario[rad]

teta_minuto=np.arccos((np.sin(delta_minuto)*np.sin(lat))+(np.cos(delta_minuto)*np.cos(lat)*np.cos(omega_minuto))) #Ángulo cenital [rad]

alfa_minuto=np.arcsin(np.sin(delta_minuto)*np.sin(lat)+np.cos(delta_minuto)*np.cos(lat)*np.cos(omega_minuto)) #Altura [rad]

ws_minuto=np.arccos(-np.tan(delta_minuto)*np.tan(lat))

wp_minuto=-ws_minuto;

cenit_minuto=teta_minuto*180/np.pi #Ángulo cenital [º]

altura_minuto=alfa_minuto*180/np.pi #Altura [º]

I0_minuto=Ics*Eo_minuto*np.cos(teta_minuto) #Irradiancia extraterrestre

altura_minuto_positiva_mask = (altura_minuto > 0)

altura_minuto_positiva = np.maximum(altura_minuto,0)

Page 83: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

61 INCREMENTO EN RESOLUCIÓN EN SERIES DE TIEMPO DE LA IRRADIANCIA DIRECTA

NORMAL EN PYTHON

altura_minuto_positiva_mask_2d = np.copy(altura_minuto_positiva_mask)

altura_minuto_positiva_mask_2d.shape = (365,24*60)

altura_minuto_positiva_mask_2d[0]

# OBTENEMOS EL DIA QUE QUEREMOS DESEMPAQUETAR

start_seccion = time()

print("Carga de dias similares y desempaquetado temporal...")

minutal_kb_sintetico = []

minutal_kt_sintetico = []

for i in range(0,365):

dia_empaquetado = minutal[np.where( minutal[:,0] == dias_similares[i] )]

dia_sintetico = np.zeros((24*60,2))

indices = np.around(1000 * np.arange(1,np.sum(altura_minuto_positiva_mask_2d[i])+1)/np.sum(altura_minuto_positiva_mask_2d[i]))

dia_sintetico[altura_minuto_positiva_mask_2d[i]] = dia_empaquetado[indices.astype(int)-1][:,1:3]

minutal_kb_sintetico = np.append(minutal_kb_sintetico, dia_sintetico[:,0])

minutal_kt_sintetico = np.append(minutal_kt_sintetico, dia_sintetico[:,1])

minutal_kb_sintetico.shape

print("Tiempo carga de dias similares y desempaquetado temporal : %.2f seconds" % (time() - start_seccion))

# OPTIMIZACIÓN DE PARAMETROS A Y B

start_seccion = time()

print("Optimización de A y B...")

acumulado_horario_real = horario[:,2].sum()/1000

def funcion_de_coste(x):

return np.absolute(acumulado_horario_real - ( minutal_kb_sintetico[altura_minuto_positiva_mask] * ( Ics * Eo_minuto[altura_minuto_positiva_mask] * ( x[0] /(1+x[1]*(1/(np.sin(alfa_minuto[altura_minuto_positiva_mask]))))) ) ).sum()/(1000*60))

bnds = ((0.7, 1.1), (0.11, 0.58))

res = minimize(funcion_de_coste, [A_envol,B_envol], method='TNC', bounds=bnds, tol=1e-10)

print("Tiempo optimización: %.2f seconds" % (time() - start_seccion))

Page 84: Proyecto Fin de Carrera Ingeniería de Telecomunicaciónbibing.us.es/proyectos/abreproy/12440/fichero/PFC-2440-CANTON.pdf · librerías enficadas al tratamiento de datos científicos

ANEXO A Código Script

62

62

print("Desempaquetamos la irradiancia...")

Ibn_minutal_sintetico = ( minutal_kb_sintetico * ( Ics * Eo_minuto * ( res.x[0] /(1+res.x[1]*(1/(np.sin(alfa_minuto))))) ) )

Ig0_minutal_sintetico = ( minutal_kt_sintetico * I0_minuto )

start_seccion = time()

print("Creamos los archivos...")

np.savetxt('dni_out.csv', Ibn_minutal_sintetico, delimiter=',')

np.savetxt('ghi_out.csv', Ig0_minutal_sintetico, delimiter=',')

print("Tiempo creación archivos: %.2f seconds" % (time() - start_seccion))

print("Ejecución finalizada: %.2f seconds" % (time() - start))

except Exception as e:

print(e)