Buscar este blog

La medida del ruido solar de fondo con un SDR

Para la medida del ruido solar de fondo (Solar Radio Noise) durante el eclipse total de sol del 12-8-2026 se usará un dispositivo SDR y programas Phyton


Hardware

Se ha elegido un doggle o pincho SDR por ser un dispositivo muy popular y que está al alcance de todos

En las primeras pruebas por disponibilidad se ha usado un RTL-SDR V4, pero dado que se va a realizar la medida en la frecuencia de 29 MHZ puede usarse un clon como por ejemplo el NEWGEN.RTL2832SDR (NSENDATO). Los programas se han probado funcionan con ambos SDR sin problemas

Para las primeras pruebas se usó un macOS, pero una vez depurados los programas se ejecutará en una Raspberry pi


Software

Tanto para el RTL-SDR como para sus clones existen librerias que nos facilitan el desearrollo de los programas de medida del ruido de fondo

Un ejemplo de scrip en Python que usa pyrtlsdr es el siguiente

from rtlsdr import RtlSdr
import numpy as np
import time
import csv
frecuencia = 100e6  # 100 MHz
intervalo = 5       # segundos entre mediciones
duracion = 3600     # duración total, e.g. 1 hora (3600 s)
sdr = RtlSdr()
sdr.sample_rate = 2.4e6
sdr.center_freq = frecuencia
sdr.gain = 'auto'
with open("señal_ruido.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(["timestamp", "power_dB"])
    inicio = time.time()
    while time.time() - inicio < duracion:
        muestras = sdr.read_samples(256*1024)
        potencia = 10*np.log10(np.mean(np.abs(muestras)**2))
        writer.writerow([time.strftime("%Y-%m-%d %H:%M:%S"), potencia])
        print(f"{time.strftime('%H:%M:%S')} – Potencia: {potencia:.2f} dB")
        time.sleep(intervalo)

sdr.close()

Tambien existe la posibilidad de usar programs como Radio-Sky Spectrograph que funciona sobre Windows pero que se alejaba de nuestro objetivo

Se pensó en desarrollar dos programas:
  • noise_logger.py
    • Este programa que maneja el SDR para medir el ruido de fondoplot_noise.py en una frecuencia (29 MHz) con un ancho de banda (1 MHz) en intervalos (2s) durante un periodo de tiempo (2h30) que lo almacenara en un fichero en formato cvs. Durante las pruebas se vio que el nombre del fichero fuera dinamico y guardara fecha y hora de inicio
  • plot_noise.py
    • Este programa lee el fichero en formato cvs (que tambien podria importarse desde una hoja de calculo tipo excel o similar) y lo representara en una gráfica. Durante las pruebas se vio la necesidad de desarrollar un segundo programa que comparara dos ficheros uno de referencia y otro de la observación (plot_noise_dual.py)
Para la programación se uso la inestimable ayuda de la IA (Gemini y Claude)

Las versiones mas recientes de los programas estan en Las versiones actualizadas de ambos programas se pueden dscargar desde https://github.com/joanpao/solareclipse-hf-noiselogger bajo licencia MIT 

Ejecución del programa noise_logger.py en un entorno macOs

Abrir terminal

Ejecutar

pip3 install pyrtlsdr numpy

Si contesta
[notice] A new release of pip is available: 25.3 -> 26.1.2
[notice] To update, run: pip install --upgrade pip

Entonces ejecutar

pip install --upgrade pip

Crear directorio

mkdir ~/eclipse_sdr && cd ~/eclipse_sdr

Crear el fichero del script py y copiar el programa, o descargarlo directamente desde GitHub

nano noise_logger.py

Si se copia el programa, salir del editor nano con:
  • CTRL+o INTRO CRTL-X

Para macOS incluir en el principio del programa

import ctypes # Parche global para bibliotecas librtlsdr antiguas en macOS / Python 3.14 _original_getitem = ctypes.CDLL.__getitem__ def _patched_getitem(self, name_or_ordinal): try: return _original_getitem(self, name_or_ordinal) except AttributeError: # Si la función C no existe en el sistema, devuelve una función dummy que no rompe el programa return ctypes.CFUNCTYPE(ctypes.c_int)(lambda *args: 0) ctypes.CDLL.__getitem__ = _patched_getitem

Ejecutar

python3 noise_logger.py



Ejecución del programa noise_logger.py en un entorno Raspberry Pi

sudo apt update

sudo apt install python3-numpy python3-rtlsdr

pip3 install "pyrtlsdr==0.3.0" --break-system-packages

mkdir ~/eclipse_sdr && cd ~/eclipse_sdr


Crear el fichero del script py y copiar el programa, o descargarlo directamente desde GitHub

nano noise_logger.py

Si se copia el programa, salir del editor nano con CTRL+o INTRO CRTL-X

Ejecutar

python3 noise_logger.py

Detached kernel driver
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
Exact sample rate is: 1000000.026491 Hz

--- Conectado con éxito al RTL-SDR Blog V4 ---
Frecuencia central : 29.000 MHz
Ganancia fija      : 25.4 dB
Guardando datos en : ruido_29MHz_20260727_130231.csv

[2026-07-27 13:02:32] Potencia de ruido: -40.86 dB
...

Se corta la ejecucion con CTL+C


Ejecución del programa plot_noise.py en un entorno macOs / Raspberry

Para ejecutar el programa de representación grafica debemos crear un fichero para el script Python en el mismo directorio donde estén los ficheros generados por noise_logger.py y copiar el programa, o descargarlo directamente desde GitHub

nano plot_noise.py

Copiar programa, salir con CTRL+o INTRO CRTL-X.

Tras lo cual se instalan la librerias de la aplicación de representación y ejcutar

pip3 install pandas matplotlib

que en Raspberry PI lo hacemos con

pip3 install pandas matplotlib --break-system-packages

Validar el fuente

python3 plot_noise.py test

Con "ls" podemos mirar los ficheros que tenemos creados

ls *.csv

ruido_29MHz_20260727_130231.csv

Ejecutar el fuente

python3 plot_noise.py

Grafica de pruebas

En Raspberry Pi, si no tiene pantalla la guarda en un fichero

python3 plot_noise.py
Matplotlib is building the font cache; this may take a moment. [+] 23 muestras cargadas, desde 2026-07-27 13:02:32 hasta 2026-07-27 13:03:22 ¡Gráfica guardada exitosamente como 'grafica_eclipse_29MHz.png'!

Si está conectado a un terminal remoto puede transferiri la gráfica a su ordenador con el comando

scp grafica_eclipse_29MHz.png USUARIO@IP:~/Downloads/

grafica_eclipse_29MHz.png         100%  253KB 712.1KB/s   00:00    

SI se quiere se puede tranasferir el fichero csv para generara la grsafico o tratarlo en otro ordenador de la misma forma


Prueba de funcionamiento correcto de los programas

Una primera prueba que debemos ahcer es comprobamos el correcto funcionamiento de la instalación (Antena, cable de alimenación, SDR y programas) haciendo que reciba la señal de una estación de radiodifusión de FM en este caso en la frecuencia de 98 MHz, quitando la antena en algun momento.

python3 noise_logger.py
Found Rafael Micro R828D tuner RTL-SDR Blog V4 Detected Exact sample rate is: 1000000.026491 Hz --- Conectado con éxito al RTL-SDR --- Frecuencia central : 98.000 MHz Ganancia fija : 25.4 dB Guardando datos en : eclipse_ruido_29_2.csv [2026-07-24 21:34:09] Potencia de ruido: -14.96 dB [2026-07-24 21:34:29] Potencia de ruido: -15.11 dB [2026-07-24 21:34:49] Potencia de ruido: -15.09 dB [2026-07-24 21:35:10] Potencia de ruido: -36.01 dB [2026-07-24 21:35:30] Potencia de ruido: -45.10 dB [2026-07-24 21:35:50] Potencia de ruido: -45.09 dB ^C [!] Medición detenida por el usuario. [+] Dispositivo SDR liberado correctamente.
Prueba de funcionamiento del programa
Se sintoniza una emisora en FM y despues se quita la antena al SDR, viendose una caída clara del ruido

A continuación repetimos la prueba con la frecuencia de 29MHz y vemos si reacciona como en el caso anterior cuando quitamos la antena.


Prueba de funcionamiento del programa
Se sintoniza la frecuencia de 29MHz y despues es quita la antena al SDR, viendose una caida del ruido de unos 0,2 dB

Una prueba mas real es ver como varia el ruido solar de fondo en el amaencer y en el anochecer.

Prueba de funcionamiento del programa
Se sintoniza la frecuencia de 29MHz durante el amanecer viendo como el ruido aumenta durante el dia frente a la noche

Prueba de funcionamiento del programa
Se sintoniza la frecuencia de 29MHz durante el anochecer viendo como el ruido disminuye cuando entra la noche 

Para valorar el entorno de ruido artificial en el que se desarrollarán las medidas y que pueden influir en el dia del eclipse podemos hacer pruebas encendiendo luces, electrodomesticos, etc. Por ejemplo personalmente descubrí el hecho de que el nivel de ruido medido variaba según si el macBook estaba o no conectado a la red elécrica. Recuerde que las luces LED generan ruido radioeléctrico

Ejemplo de como puede modificarse el ruido recibido con una antena interior cambiando la alimentación del ordenador de externa a bateria (casi 3 dB menos ruido)  y de nuevo a externa 

Consideraciones prácticas

Frecuencia central

Se prueba con frecuencias centrales en 28,5 y 29,0 MHz para un ancho de banda de 1 MHz siendo los resultados los siguientes
fc: 28,5 MHz = -15 dB
fc: 29.0 MHz = -44.7 dB 

Parece que se tiene una banda mas limpia con la fc=29,0 MHz por lo que es la que se elige.

Esta prueba debe hacerse en cada entorno.

Antena

Se ha usado hasta el momento una End-Fed de 16,2m con UNUn 9:1 y contrantena de 2,5m

COmo es una medida relativa, no se piensa tocar

Condiciones de la medida

Durante el periodo de medida hay que mantener las condiciones del entorno fijas, para no distorsionarla.


Resolución de problemas


NO arranca

python3 noise_logger.py
usb_claim_interface error -6 [!] Error al inicializar o configurar el SDR: <LIBUSB_ERROR_BUSY (-6): Resource busy> "Could not open SDR (device index = 0)"

Otro proceso tiene el USB, por lo que hya que identificarlo y matarlo

sudo fuser -v /dev/bus/usb/*/*
USUARIO PID ACCESO ORDEN /dev/bus/usb/001/004: root 54912 F.... readsb

Parar los servicios que sepamos que se ejecutan en la raspberry que usan RTL-SDR

sudo docker stop ultrafeeder

sudo systemctl stop autorx.service


Se corta el programa cuando cae la sesión

Para evitar que se corte el programa se puede instalar TMUX

sudo apt update && sudo apt install tmux

Lanzar TMUX

tmux new -s captura

Lanzar programa
python3 noise_logger.py # Ctrl+B, luego D para "despegarte" sin matar el proceso # Para volver: tmux attach -t captura

Se sale con

tmux kill-session -t captura

Espacio libre

Cuanto ocupa el fichero que se esta escribiendo
ls -lh

total 284K -rw-rw-r-- 1 pi pi 253K jul 27 13:17 grafica_eclipse_29MHz.png -rw-rw-r-- 1 pi pi 3,8K ago 11 17:31 noise_logger.py -rw-rw-r-- 1 pi pi 3,9K jul 27 13:11 plot_noise.py -rw-rw-r-- 1 pi pi 687 jul 27 13:03 ruido_29MHz_20260727_130231.csv -rw-rw-r-- 1 pi pi 78 ago 11 17:31 ruido_29MHz_20260811_173054.csv -rw-rw-r-- 1 pi pi 9,7K ago 11 18:53 ruido_29MHz_20260811_175515.csv

Espacio libre en la carpeta

df -h .
S.ficheros Tamaño Usados Disp Uso% Montado en /dev/mmcblk0p2 15G 14G 305M 98% /

Referencias

Advertencia importante

Las modificaciones, configuraciones y procedimientos descritos en este sitio pueden implicar riesgos técnicos, legales o de seguridad. El autor no se responsabiliza del mal funcionamiento de los equipos, daños permanentes, pérdida de garantía ni de posibles infracciones legales derivadas del uso de esta información.
El lector asume plena responsabilidad por cualquier acción que decida realizar basándose en el contenido de este blog.


© 2026 EA5JTT. Queda prohibida la reproducción total o parcial sin autorización expresa del autor.

No hay comentarios:

Publicar un comentario

ENTRADAS POPULARES (ULTIMO MES)