Software GNURadio per l’Emissione a 21cm dell’Idrogeno Neutro

Abstract : dopo i post precedenti sulla antenna horn (Antenna per l’Emissione a 21cm dell’Idrogeno Neutro) e sul ricevitore (Un Ricevitore Low-Noise SDR-Based per l’Emissione a 21cm dell’Idrogeno Neutro) in questo post descriviamo brevemente l’applicazione Linux GNURadio ed il suo utilizzo per la ricezione della emissione a 21 cm dell’idrogeno neutro.

Introduzione

GNURadio è un toolkit di sviluppo software gratuito e open source che fornisce blocchi di elaborazione del segnale per l’implementazione di progetti radio software. Può essere utilizzato con hardware RF esterno per creare radio definite via software (SDR : software defined radio) oppure anche senza hardware in un ambiente di simulazione. È ampiamente utilizzato in ambienti hobbistici, accademici e commerciali per supportare sia la ricerca sulle comunicazioni wireless che i sistemi radio del mondo reale.

GNURadio è sotto licenza GNU General Public License (GPL) versione 3 o successive. Tutto il codice è copyright della Free Software Foundation.

GNURadio utilizza una combinazione di Python e C++, dove Python gestisce l’interfaccia di alto livello e C++ viene utilizzato per implementare driver e interfacce di basso livello per l’hardware. Questa combinazione consente un sistema facile da usare, ma che soddisfa comunque le prestazioni richieste per la gestione di grandi quantità di dati.
GNURadio ha anche uno strumento di sviluppo rapido chiamato GNU Radio companion (GRC). GRC è un sistema grafico semplice da usare per la progettazione e la costruzione di componenti software defined radio. GNU Radio Companion fornisce funzioni comuni, come sorgenti di segnale, elaborazione del segnale e sink di segnale, come blocchi che possono essere selezionati e posizionati sullo schermo. Una volta posizionati, i blocchi possono essere cablati, proprio come in LabView, e il flusso di dati può essere controllato in questo modo. GNU Radio Companion include anche blocchi che consentono di costruire un’interfaccia GUI, che può essere utilizzata per visualizzare i dati e controllare l’applicazione.
Se un blocco non esiste, può essere creato. Poiché GNURadio utilizza Python, gli utenti possono utilizzare questo linguaggio potente e flessibile per creare nuovi blocchi che possono essere importati in GRC.

GNURadio è un sistema molto completo, che richiede un periodo di apprendimento per apprezzarne a pieno la complessità e la ricchezza di funzionalità. Noi ci limiteremo agli aspetti che interessano più direttamente il nostro progetto. Per descrizioni, spiegazioni, esempi su GNURadio abbiamo raccolto i seguenti link.

Riferimenti su GNURadio

Digital Signal Processing in Radio Astronomy : DSPiRA
GNU Radio Wiki : wiki.gnuradio.org
GNU Radio Tutorials : Tutorials

Installazione GNURadio

L’applicazione GNURadio viene installata ed utilizzata senza problemi su Linux. Può essere utilizzata, con qualche difficoltà, anche su altri sistemi operativi ma è caldamente consigliato l’uso di Linux. Noi l’abbiamo installata sulla distribuzione Ubuntu 20.04.
Si opera da terminale e si utilizza il comando apt install. Prima si installano alcune dipendenze :

sudo apt install git
sudo apt install cmake
sudo apt install python-apt liborc-0.4-dev

Poi si procede alla installazione della applicazione gnuradio, dei driver OsmoSDR per l’hardware SDR e per Airspy :

sudo apt install gnuradio gr-osmosdr limesuite airspy python3-h5py python3-ephem

A questo punto l’installazione della ultima versione di GNURadio (attualmente la 3.8) dovrebbe essere completata. Collegando Airspy alla presa USB e digitando il comando

airspy_info

si dovrebbe verificare il riconoscimento da parte del PC ed ottenere i dati principali della scheda.
Per avviare l’applicazione GNURadio si digita, sempre da terminale, il comando :

gnuradio-companion

Questo apre l’applicazione GNU Radio Companion (GRC) :

Uno Spettrometro Base

L’applicazione GNURadio che ci serve è in pratica un radiospettrometro. Il segnale captato dalla antenna e successivamente amplificato e filtrato dai componenti RF viene inviato al ricevitore SDR che lo acquisisce in formato digitale. A questo punto il segnale va elaborato in modo da calcolare il suo spettro in potenza ed evidenziare il picco di segnale corrispondente alla emissione a 21cm.  Lo spettrometro, nella sua forma più semplice può essere descritto dal seguente diagramma a blocchi :

  • Osmocomm Source : è il driver per Airspy R2 SDR che costituisce la sorgente del segnale.
  • FFT : trasformata di Fourier FFT, determina le frequenze presenti nel segnale in ingresso.
  • Multiply Conjugate : calcola il modulo quadro della FFT per determinare la potenza del segnale ad ogni frequenza
  • Integration : effettua l’integrazione del segnale (somma) su un intervallo di tempo (0.1s – 10s) per minimizzare il rumore
  • GUI Vector Sink : visualizza su schermo lo spettro del segnale

Uno Spettrometro Avanzato : spectrometer_w_cal.grc

Per l’elaborazione del segnale RF acquisito dal ricevitore SDR airspy R2 abbiamo utilizzato il programma GNURadio spectrometer_w_cal.grc che fa parte di un più ampio progetto del gruppo di lavoro DSPiRA. Si tratta di un progetto veramente notevole del gruppo di ricerca in Radio Astronomia della Università della West Virginia che ha lo scopo di mettere a disposizione per appassionati, docenti e studenti un insieme di documentazione e strumenti per la pratica della ricerca radioastronomica.
Un grazie agli autori del software ed in particolare a Kevin Bandura, Glen Langston e Pranav Sanghavi.

Repository principale : https://github.com/WVURAIL/gr-radio_astro
Branch per Ubuntu 20.04 / GNURadio 3.8 : https://github.com/WVURAIL/gr-radio_astro/tree/gr38
Wiki per installazione : https://github.com/WVURAIL/gr-radio_astro/wiki/Installing-gr-radio_astro

Il software permette l’acquisizione del segnale e la determinazione del suo spettro in potenza. In particolare vi sono le funzionalità di calibrazione con l’acquisizione dello spettro “Hot” e di quello “Cold”. Lo spettro viene visualizzato a schermo e può essere salvato su file in formato csv. A schermo vengono visualizzati anche il guadagno e la temperatura equivalente di sistema. Inoltre il tempo di integrazione del segnale può essere scelto tra due valori, di default fissati a 0.1s e 10s.

Nello schema riportato sotto si vede l’intero diagramma a blocchi del programma così come viene visualizzato da GNURadio. GNURadio provvede a generare anche un eseguibile python. Il programma può essere eseguito lanciando il corrispondente file python oppure aprendo il sorgente .grc in GNURadio ed eseguendolo all’interno dell’ambiente GNURadio. Noi preferiamo passare per GNURadio in modo da avere un maggiore controllo del processo.

Ci sono alcune variabile da configurare in funzione dell’ambiente ed altre che possono essere variate per modificare lo spettrometro :

  • rectfile : path per scrittura file (da configurare)
  • prefix : path per scrittura file csv (da configurare)
  • integration_time1 : tempo di integrazione breve (default 0,4s)
  • integration_time2 : tempo di integrazione lunga (default 10s)
  • samp_rate : frequenza di campionamento (airspy prevede due opzioni : 10M e 2.5M)
  • freq : frequenza centrale (default 1.419G)
  • vec_length : lunghezza del vettore dei campioni (default 4096)

Per i dettagli sul software rimandiamo al sito DSPiRA ed alla documentazione che si trova sul repository, ci limitiamo qui a riportare alcune note su alcuni aspetti generali.
Il blocco osmocomm Source è l’interfaccia con l’hardware SDR Airspy R2. Nel nostro caso non utilizziamo l’opzione bias-T per cui nella stringa degli argomenti abbiamo messo “airspy=0,bias=0,pack=0“, i parametri Sample Rate e Frequency prendono il valore dalle variabili del programma. Il guadagno RF è posto a 0, mentre i guadagni IF e BB sono posti a 10dB. Abbiamo riscontrato che questa configurazione dei guadagni, con il nostro hardware RF, permette un buon utilizzo del sistema. Con catene di amplificazione diverse, questi parametri possono, naturalmente, essere variati al fine di ottimizzare le performance.

Il primo step della catena di elaborazione del segnale è un “filtro polifase”. Il filtro polifase (PFB) è una tecnica DSP che ha lo scopo di mitigare gli inconvenienti della semplice DFT. Il PFB produce una risposta piatta su tutto il canale e fornisce un’eccellente soppressione dei segnali fuori banda. Questo filtro viene realizzato spezzando lo stream dei campioni in quattro vettori, ciascuno di questi viene moltiplicato per una opportuna costante e poi sommato agli altri per produrre un unico vettore sul quale verrà poi applicata la nostra FFT. Per i dettagli su questa tecnica rimandiamo al sito DSPiRA.

A valle del “filtro polifase” il vettore con i dati viene inviato ai blocchi principali che eseguono rispettivamente :

  • FFT : trasformata di Fourier FFT, determina le frequenze presenti nel segnale in ingresso
  • Multiply Conjugate : calcola il modulo quadro della FFT per determinare la potenza del segnale ad ogni frequenza
  • Integration : effettua l’integrazione del segnale (somma) su un intervallo di tempo (0.1s – 10s) per minimizzare il rumore

Dopo le operazioni di integrazione temporale, il vettore con i valori dello spettro viene inviato al blocco custom systemp_calibration che effettua le operazioni di calibrazione. Per i dettagli sulla calibrazione del radiotelescopio rimandiamo al paragrafo successivo. Le uscite di questo blocco sono i tre vettori dello spettro, del guadagno e della temperature di sistema che vengono inviati a tre rispettivi QT GUI Vector Sink per la visualizzazione a schermo. Il vettore dello spettro viene anche inviato ad un blocco che effettua la scrittura su file in formato csv.

L’immagine seguente mostra lo screenshot del programma in esecuzione nel quale si può vedere, nella finestra con il grafico dello spettro, il nostro picco corrispondente alla emissione a 21 cm !

Calibrazione

L’intensità minima di radiazione che può essere raccolta dall’antenna di un radiotelescopio dipende dal rumore associato al sistema ricevente. Oltre al segnale utile si misurano, in generale, componenti indesiderate di varia natura e provenienza, quali rumori e disturbi. Si suddivide il rumore totale in due contributi fondamentali : rumore d’antenna e rumore degli apparati. Il segnale utile radioastronomico è anch’esso costituito da rumore a distribuzione gaussiana, questo consente di sommare in potenza tutti i contributi (segnale + rumore) in modo da ottenere un valore complessivo detto potenza media di rumore equivalente :

Pe = k*Te*B [W]

k = costante di Boltzmann
B = banda di ricezione

Che conduce ad una temperatura equivalente d’antenna :

Te = Pe / (k*B) [°K]

Per utilizzare efficientemente il nostro radiotelescopio e per ottenere misure accurate  abbiamo però la necessità di separare i contributi del segnale da quelli del rumore : questo viene fatto con la procedura di calibrazione. Se assumiamo che il comportamento del sistema sia lineare allora è sufficiente la misura  su due punti, con temperature note e sufficientemente distanti fra loro. Si effettua solitamente la misura su di un punto freddo, ad esempio puntando l’antenna allo zenit, in assenza di radiosorgenti, dove la temperatura di brillanza ha valore di 10°K; e puntando l’antenna verso un punto caldo, ad esempio il suolo, per il quale si assume una temperaura di brillanza di circa 300°K.
In dettaglio possiamo scrivere :

Pmeasured = G*(Tobject + Tsystem)   [1]

Dove

  • Pmeasured = Segnale misurato dal radiotelescopio
  • G = guadagno (costante di proporzionalità tra la potenza misurata e la temperatura di brillanza)
  • Tobject= Segnale proveniente dall’oggetto di interesse (ad esempio la galassia)
  • Tsystem= Segnale di “rumore” dovuto a sorgenti estrane

Inoltre i parametri G, Tobject e Tsystem dipendono dalla frequenza. Come abbiamo spiegato sopra la calibrazione consiste nella misurazione ed acquisizione dello spettro di potenza per due temperature note:

Tobject = Thot = 300°K
Tobject = Tcold = 10°K

Con questi dati possiamo determinare i parametri del nostro radiotelescopio G e Tsystem . Dalla relazione [1] possiamo ricavare le seguenti relazioni :

G = (Phot – Pcold)/(Thot – Tcold)   [2]

Tsystem = (Thot – Tcold(Phot/Pcold))/((Phot/Pcold)-1)   [3]

Conoscendo questi parametri possiamo facilmente ricavare il dato che ci interessa : Tobject 

Tobject = Pmeasured /G – Tsystem

I grafici sotto mostrano gli spettri di calibrazione : rosso = hot, blu = cold.

Dagli spettri di calibrazione ricaviamo l’andamento della temperatura di sistema Tsystem e del guadagno G. La temperatura equivalente di sistema si attesta su di un valore di circa 110°K. Dall’analisi del ricevitore abbiamo ricavato (nel post precedente) una temperatura equivalente di 58°K, da cui si ricava che la temperatura d’antenna vale 52°K.

I grafici sotto mostrano gli spettri ottenuti puntando l’antenna verso una zona della via lattea. In rosso lo spettro non calibrato, in blu lo stesso spettro però calibrato con i parametri G e Tsys ottenuti precedentemente : come si vede lo spettro calibrato rende molto più evidenti ed accurate le radio emissioni della galassia.

Prima Luce

Dopo la calibrazione possiamo finalmente utilizzare il nostro radiotelscopio per rilevare le emissioni a 21cm delle nubi di idrogeno presenti nella nostra galassia. Il programma GNURadio spectrometer_w_cal, consente l’utilizzo di due costanti di tempo di integrazione del segnale : 0.1s e 10s. Per una rapida visione del segnale, ad esempio mentre si sta effettuando il puntamento della antenna, può essere utile utilizzare l’integrazione veloce in modo da vedere subito l’andamento del segnale; per l’acquisizione dello spettro (e per la calibrazione) conviene però utilizzare l’integrazione lunga in modo da avere un segnale più pulito, come si vede nel grafico sotto dove compariamo, in blu l’integrazione a 0.1s ed in rosso il segnale che si ottiene con l’integrazione a 10s.

Conclusioni

Ora il nostro radiotelescopio per la rilevazione della emissione a 21cm è pronto : lo utilizzeremo per lo studio della struttura della nostra galassia e per l’analisi della sua velocità di rotazione.

Se ti è piaciuto questo articolo puoi condividerlo sui “social” Facebook, Twitter o LinkedIn con i pulsanti presenti sotto. In questo modo ci puoi aiutare ! Grazie !

Donazioni

Se vuoi contribuire allo sviluppo di questo sito ed allo sviluppo di nuove attività sperimentali puoi fare una donazione, Grazie !

Check Also

Quenching della fluorescenza ed equazione di Stern-Volmer

Abstract: in questo articolo descriviamo alcune misure di quenching della fluorescenza in alcune sostanze. Il fenomeno del quenching (smorzamento) si verifica quando alcune molecole assorbono l'energia dei fluorofori. Questo interessante fenomeno può essere utilizzato in misure quantitative per la determinazione della concentrazione del quencher ed anche, tramite il modello di Stern-Volmer, per lo studio del decadimento temporale della fluorescenza.