sábado, 6 de julio de 2019

Estudio de propagación en 14 MHz basada en WSPR


Revisando los reportes reflejados en WSPRNet para mi baliza WSPR busqué una forma de representar gráficamente esa información de manera que pudiera visualizarse el patrón de propagación que representa. Encontré útil hacer un pequeño programa en Python con uso extensivo de la librería Matplotlib para generación de mapas. En realidad dibujar mapas con cualquier proyección necesaria (e imaginable, diría) es bastante sencillo con esa librería.
Lamentablemente la base de datos de WSPRNet no tiene una forma ágil de exportar datos de los reportes, solo provee la posibilidad de bajar de a mes entero, el archivo respectivo se va actualizando diariamente o sea que su tamaño es incremental a medida que pasa el mes. Hacia el final del mes es un archivo de casi 1 GByte comprimido y de casi 7 GBytes expandido. Para hacer un proceso recurrente (¿diario?) que realice el análisis hay que ver alguna forma de bajar y digerir esos datos, pero para una prueba simplemente hice una consulta a la base para los reportes a mi estación durante la última semana (con un límite de 1000 reportes, que no se alcanzaron). Y esa información la bajé en formato CSV (Comma Separated Values), tal como se corta y pega desde la página Web no son datos separados por comas sino por "Tab" (\t en Python, 0x09 en Hex) pero que pueden ser procesados con facilidad mediante la librería Python CSVReader. Una vez procesados y "parseados" los datos de cada spot se tiene la fecha, hora, estación reportada (indicativo, locator, potencia) y estación reportante (indicativo, locator) además de otros datos como la relación señal a ruido, el error de tiempo y la frecuencia del spot. Para el análisis solo uso por ahora la existencia o no de contacto por lo que solo utilizo la hora (UTC) y los QTH locators de origen y destino. Supongo que se puede hacer un análisis mas fino en tiempo y alguna forma de representar la potencia o la intensidad del reporte (cuantas veces una estación es reportada por otra), pero ese es un análisis que queda para otro momento.
Una vez disponible el spot solo queda traducir los QTH locators (maidenhead) a su equivalente en Latitud y Longitud. Finalmente dibujar un trazo que una ambas locaciones (lo que nuevamente es representado con facilidad usando funciones de la librería Matplotlib.
El resto es simplemente acumular los spots por hora, e ir generando un gráfico con todos los reportes a una hora dada. La sucesión de gráficos representa como cambia la propagación según la hora. Para hacerlo un solo archivo "GIF" animado uso la librería imageio, el cual dada una sucesión de archivos gráficos permite generar un archivo GIF animado (como el que se muestra mas arriba. La librería permite aparte generar mapas con distintas perspectivas, por ejemplo el primer mapa utiliza el denominado dataset NASA bluemarble (mármol azul) mientras que el segundo se denomina "shaded relief" (relieve con sombras), que equivalen groseramente a una vista "símil satélite" o de mapa "geodésico", hay otras variantes y simplemente es una cuestión de gusto cual se utiliza.
Se ve que la propagación a larga distancia es mayoritariamente dominante durante el mediodia y el atardecer, siendo durante el resto del día mayormente regional (con alguna excepción); es raro no tener reporte de estaciones de USA los que son habituales al anochecer, pero se nota que la propagación en el período medido no lo permitió.