
Il Pi Pico Rx è un ricevitore SDR open source, realizzato attorno al Raspberry Pi Pico, e capace di coprire le bande relative alle onde lunghe, medie e corte. Nell'articolo "Ricevitore radio SDR con il Raspberry Pi Pico - Parte 1" abbiamo descritto il suo funzionamento generale e il design hardware. In questo articolo, termineremo il discorso parlando del firmware che permette al dispositivo di operare.
Introduzione
Prima di descrivere il design del software che gestisce il ricevitore, andiamo a ricordare quelle che sono le sue caratteristiche chiave:
- copertura radio da 0 a 30 MHz
- larghezza di banda di 250 kHz
- ricezione delle modulazioni CW/SSB/FM/AM
- display OLED
- cuffie/altoparlante
- alimentato da 3 batterie AAA
- consumo di corrente inferiore a 50 mA
Design software
Il Raspberry Pi Pico contiene un processore dual-core. Il primo core gestisce l'interfaccia utente, pilotando il display, l'encoder rotativo, i pulsanti e l'interfaccia flash. Il secondo core è dedicato all'implementazione delle funzioni DSP. I core comunicano tramite strutture di controllo e stato, queste strutture sono protette da mutex. I dati di controllo e stato vengono passati periodicamente tra i due core.
Interfaccia ADC
L'interfaccia ADC è configurata in modalità round-robin. Due canali DMA sono utilizzati per trasferire blocchi da 4000 campioni dall'ADC alla memoria. La scelta di 4000 campioni è arbitraria, blocchi più lunghi danno un margine extra quando il tempo di esecuzione, nel caso peggiore, è significativamente più lungo della media (a scapito di memoria extra). I canali DMA sono configurati in modalità ping-pong utilizzando il concatenamento DMA. Quando un canale DMA è completato, l'altro canale DMA si avvia automaticamente. Il concatenamento DMA consente agli ADC di essere letti in modo autonomo, senza caricare la CPU.
Elaborazione in tempo reale
Quando ogni trasferimento DMA viene completato, viene chiamata la funzione process_block. La funzione process_block prende un blocco di campioni I/Q e restituisce un blocco di campioni audio. Ad una frequenza di campionamento (fs) di 500 kS/s, con un blocco di 4000 campioni (Ncamp), si ottiene una deadline in tempo reale (Tb) di 8 ms per elaborare ogni blocco:
Tb = Ncamp / fs = 4000 / 500•103 = 8 ms
Alla frequenza della CPU (fCL) di 125 MHz, significa avere esattamente 1 milione di cicli di clock per ogni blocco:
Ncicli = Tb / (1/fCL) = 8•10-3 / 8•10-9 = 1•106
Elaborato un blocco, un timer misura il tempo di inattività (idle_time) fino al completamento del blocco successivo. L'utilizzo della CPU può essere calcolato come (8 ms - idle_time)/8 ms; è utile monitorare l'utilizzo della CPU durante lo sviluppo in modo da poter valutare l'impatto di ogni modifica. La funzione process_block è l'unica parte del software che è temporalmente critica e questa parte del software utilizza l'aritmetica a virgola fissa ed è eseguita dalla RAM per massimizzare le prestazioni. Le altre parti del software non sono particolarmente critiche, quindi vengono eseguite dalla memoria Flash e le operazioni a virgola mobile sono utilizzate liberamente.
Rimozione DC
La prima operazione da fare è rimuovere la componente in continua. Ciò si ottiene facendo la media dei campioni in ogni blocco, il valore medio rappresenta il livello DC e questo valore viene quindi sottratto dal blocco successivo, che risulta essere leggermente più veloce rispetto all'utilizzo di un filtro di blocco DC. A questo punto, nella catena DSP, il processo di rimozione DC non è così critico. Il ricevitore utilizza una frequenza intermedia (IF) bassa, quindi il segnale desiderato è sempre distanziato alcuni kHz dalla componente DC. Una volta traslato in frequenza il segnale, qualsiasi componente continua rimanente è al di fuori della banda passante e viene rimossa dai filtri di decimazione.
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2394 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.
