SATSAGEN 0.5

Puoi scaricare SATSAGEN 0.5 e le ultime versioni da questa pagina:

SATSAGEN Download Page

In breve, le novità di questa versione sono:

  • Funziona con:
    • ADALM-PLUTO
    • HackRF One
    • I dongle RTL
    • La serie dei Simple Spectrum Analyzer come D6 JTGP-1033, i Simple Spectrum Analyzer e via di seguito.
  • Trigger video, trigger in real-time e ciclo veloce
  • Tabella di guadagno personalizzata ADALM-PLUTO e tabella di linearizzazione estesa per tutti i dispositivi
  • Trasmissione di file in formato raw
  • Pannello di bilanciamento I / Q
  • Waterfall
  • Offset convertitori RX / TX
  • Video Filter average
  • Spostare i marcatori con i tasti o la rotellina del mouse
  • Display status
  • Indicatori CT e SU

Scegli il dispositivo

In Settings-> Devices selezionare il modello del dispositivo dalla lista Model.

Nel caso in cui siano presenti uno o più dispositivi del modello selezionato, questi verranno proposti nell’elenco Devices sottostante.

Se si collega un dispositivo al momento, premere il pulsante Scan per aggiornare l’elenco dei dispositivi disponibili.

In uno scenario multi-dispositivo, sono consentiti modelli diversi di dispositivi RX e TX, con l’unica eccezione che il dispositivo RTL-SDR ovviamente non può agire come dispositivo TX.

In questo esempio, è stato assegnato un RTL dongle alla funzione di ricevitore e un ADALM-PLUTO al ruolo di trasmettitore.

Video trigger, real-time trigger e fast-cycle

Il trigger Video mostra la visualizzazione dello spettro quando incontra un segnale del livello minimo selezionato con la manopola Trigger.

L’immagine mostra un impulso sporadico di 4 ms catturato dal trigger Video impostato al livello 18. Il livello del trigger video si riferisce direttamente al valore di profondità ADC del dispositivo RX e non a un livello espresso in dB.

Line ed Ext sono trigger in tempo reale, che avviano l’acquisizione quando si verifica un evento digitale esterno. Con la manopola selezionare il tipo di evento digitale desiderato tra Low, High, Chg, Neg e Pos.

  • Il tipo Low avvia l’acquisizione quando l’ingresso digitale è in uno stato basso.
  • Il tipo High avvia l’acquisizione quando l’ingresso digitale è in uno stato alto.
  • Chg avvia l’acquisizione quando l’ingresso digitale cambia stato.
  • Il tipo Neg avvia l’acquisizione sul fronte di discesa dell’ingresso digitale .
  • Il tipo Pos avvia l’acquisizione sul fronte di salita dell’ingresso digitale.

Per la funzionalità dei trigger in tempo reale è richiesto un semplice hardware esterno.

Se viene selezionata una seriale generica nel controllo del dispositivo Trigger IN in Settings-> EXT OUT, il trigger di linea viene mappato sull’ingresso DCD della seriale specificata dal controllo della porta COM e il trigger Ext viene mappato sull’ingresso RI di quella porta seriale COM.

Se viene selezionato un D / A USB albfer.com come Trigger IN device nella scheda Settings-> EXT OUT, l’interfaccia descritta in questa pagina con FW versione 2.0 può essere utilizzata come interfaccia di input in tempo reale. Gli ingressi digitali sono mappati come con la precedente Seriale generica sull’interfaccia USB D / A albfer.com, ma è possibile utilizzare una funzionalità aggiuntiva che si avvale degli ingressi analogici della scheda Arduino: il trigger di linea potrà essere mappato sull’ingresso A0 e il trigger Ext potrà essere mappato sull’ingresso A1. Per abilitare questa funzione, fare clic sul titolo sotto la manopola quando sono selezionati i trigger Line o Ext.

Ora con la manopola seleziona il livello analogico dove il trigger deve avviare l’acquisizione, con livello RE per il fronte di salita o il livello FE per il fronte di discesa.

Per utilizzare il trigger in tempo reale è necessario che Fast-Cycle sia attivato e che l’ opzione Optimize buffer size for real-time sampling sia selezionata (vedere i controlli del dispositivo RX nella scheda Settings-> Devices).

Le scritte Line ed Ext potrebbero diventare rosse lampeggianti se il trigger non risponde agli eventi in tempo utile.

Fast-Cycle

Il Cycle-Time delle acquisizioni (o Sweep-Time a seconda del modello del dispositivo RX, nel caso dei Simple Spectrum Analyzer per esempio) viene regolato automaticamente dall’applicazione per ridurre al minimo il carico della CPU in base alla frequenza di campionamento e alle dimensioni FFT selezionate dall’utente.

Se la funzione Fast-Cycle è attivata, il Cycle-time è fissato alla velocità massima di acquisizione.

È possibile ottenere prestazioni più veloci (ma con maggiore carico della CPU) selezionando la funzione SA uses CPU timestamp-based timer che si trova nella scheda Settings-> Extra.

Custom gain table per ADALM-PLUTO

La tabella del guadagno standard di ADALM-PLUTO è ottimizzata da ADI per il miglior fattore di rumore RX nell’intera gamma di frequenze. Sfortunatamente, la tabella del guadagno standard non funziona come previsto per la funzionalità dell’analizzatore di spettro a causa del guadagno non lineare dell’LNA e perché la tabella è divisa in tre diversi intervalli di frequenze.

Questo è ciò che accade con la tabella del guadagno standard, dopo la calibrazione e il passaggio da 30dB di guadagno RX a 31dB.

Una tabella di guadagno personalizzata flat viene fornita con la distribuzione SATSAGEN, si trova nella directory del programma come ad9361_CGT .

Aggiungi queste linee al file INI di linearizzazione RX per caricare all’accensione la tabella del guadagno personalizzato su Pluto:

[settings\device_0]
PathNameCustomGainTable=ad9361_CGT

In ogni caso, è necessario un file di linearizzazione RX esteso per mitigare il guadagno non lineare dell’LNA.

Un modello di file di linearizzazione RX esteso con il caricamento della tabella del guadagno personalizzato è fornito nella directory del programma come curvecorrRX_PLUTOCGT.ini .

Presto verranno pubblicate ulteriori informazioni sulla compilazione dei file di linearizzazione RX estesi.

La tabella del guadagno standard verrà ricaricata sul dispositivo Pluto allo spegnimento di SATSAGEN per garantire il funzionamento di altre applicazioni nel caso che Pluto rimanga collegato al PC, altrimenti in ogni caso è sufficiente scollegare e ricollegare Pluto al PC perché la tabella standard venga automaticamente caricata.

Trasmissione di file in formato raw

Aprire il EXT modulation panel dal menu o il pulsante EXTMOD Panel dalla barra degli strumenti.

Sono accettati solo file in formato RAW. Specificare nell’elenco Format il formato da utilizzare per riprodurre il file e con Sample rate la frequenza di campionamento in base alla capacità del dispositivo TX. Ovviamente una trasmissione conforme avverrà solo se si selezionano il formato e frequenza di campionamento utilizzati durante la registrazione del file che si va a riprodurre.

Se il controllo Loop è spuntato, il file verrà trasmesso all’infinito fino al comando di stop da parte dell’utente.

Impostare un valore Offset DC può essere un aiuto per ridurre al minimo la componente residua dell’immagine del LO. Impostalo inizialmente a zero, seleziona il controllo Apply changes to running thread e avvia lo streaming TX. Durante la riproduzione, con l’ausilio di un analizzatore di spettro esterno, modificare il valore Offset DC con la manopola fino a quando la componente dell’immagine del LO raggiunge il minimo valore.

Per avviare lo streaming TX del file sopra specificato, selezionare la modulazione EXT sul pannello Generator e avviare Generator.

La scritta EXT lampeggia in rosso quando il thread è in streaming.

Pannello di bilanciamento I / Q

Apri il pannello di bilanciamento I / Q con il menu contestuale Device IQ balance settings

Il pannello di bilanciamento I / Q è uno strumento utile per migliorare manualmente la quadratura del segnale RX / TX, soprattutto quando sono utilizzati dispositivi come RTL dongle o HackRf.

Questo è la componente LO di un dongle RTL prima dell’applicazione del bilanciamento I / Q.

Dopo aver applicato il giusto bilanciamento I / Q, la componente LO è quasi a -80dBm.

I valori del bilanciamento I / Q sono salvati nella configurazione dei dispositivi e ripristinati automaticamente quando i dispositivi sono collegati e utilizzati.

Waterfall

Quando l’analizzatore di spettro è in esecuzione, aprire Waterfall con il menu contestuale o il pulsante Waterfall dal nuovo pannello degli strumenti aperto tramite il pulsante Panels.

I controlli Min e Max regolano il contrasto della cascata in base al livello del segnale.

Fare clic sul pulsante Info per aggiungere la scala delle frequenze e le informazioni sull’ora.

RX/TX converter offset

Se il tuo dispositivo SDR ha un convertitore collegato, potrebbe essere utile impostare un offset in SATSAGEN per avere una scala di frequenze e il campo di input della frequenza congruenti.

Due campi nella scheda Settings-> Devices possono essere utilizzati per specificare l’offset dei convertitori, Converter RX e Converter TX:

Ad esempio, se si collega un down-converter come un classico LNB alla porta RX, si può impostare il campo Converter RX con la frequenza esatta del LO del LNB, specificandola con il segno meno. Per un convertitore tipo un LNB di norma dovrebbe essere -9750000 kHz.

La regola per entrambi i campi è un valore negativo per un convertitore verso il basso (down-converter) e un valore positivo per un convertitore verso l’alto (up-converter).

Video Filter average

Il filtro video normalmente visualizza il valore massimo di ciascuna misurazione per il numero di passaggi scelto dall’utente. Per ottenere un filtro video che utilizzi una media delle letture, fare clic sul piccolo LED / pulsante VF avg sopra il controllo della manopola del filtro video.

Spostare i marcatori con i tasti o la rotellina del mouse

Dopo che un marker è stato posizionato, esso può essere spostato con la rotellina del mouse o con i due tasti J e K. Questa funzionalità è attiva sia nelle operazioni SA che TSA, ma è necessario fare prima clic in un punto qualsiasi (ma non sulla traccia) della finestra dello spettro e assicurarsi che il marker che vogliamo spostare sia selezionato.

È stato posizionato un marker.

La posizione del marcatore dopo aver premuto il tasto J tre volte.

Lo stesso marcatore dopo aver premuto sei volte il tasto K.

Status Display

Il display di stato mostra alcune informazioni peculiari dei dispositivi RX e TX in uso. Per attivare questa funzione, fare clic su Status Display dal menu contestuale. Per ogni dispositivo vengono visualizzati il ​​tipo di modello, il valore dell’attenuatore e il valore di offset del convertitore.

Gli indicatori CT e SU.

L’indicatore CT mostra il tempo di ciclo dell’analizzatore di spettro. Il tempo di ciclo include il tempo di campionamento, il tempo di commutazione della frequenza se l’SA è in modalità sintonizzata (swept-tuned mode), il tempo di calcolo e formattazione dei dati e infine il tempo di aggiornamento del display. Per i dispositivi SSA come il Simple Spectrum Analyzer, il CT è sostituito dall’indicatore Sweep-Time.

L’indicatore SU mostra la percentuale di utilizzo del flusso dal dispositivo SDR. Nell’esempio dell’immagine sopra, il 7,43% del flusso di campionamento viene effettivamente utilizzato per visualizzarne lo spettro.

WSDRTEMP

WSDRTEMP nasce da un’idea di Siegfried DG9BFC come una piccola applicazione in grado di mostrare in tempo reale i valori di temperatura del transceiver e della FPGA di ADALM-PLUTO.

Nella seguente pagina è possibile scaricare l’ultima versione del programma:

WSDRTEMP download page

WSDRTEMP può essere avviato in contemporanea con altri programmi che utilizzano ADALM-PLUTO.

L’applicazione consente l’utilizzo su più istanze per il controllo contemporaneo di più dispositivi. Per ogni sessione è possibile configurare diversi parametri, tra i quali l’indirizzo IP del dispositivo da monitorare, l’intervallo in secondi tra i controlli, la preferenza per gradi Celsius o Fahrenheit, le soglie di attenzione e di surriscaldamento, eventuali file di esportazione dei dati in CSV e di script o applicazioni esterne da eseguire nel caso del raggiungimento di soglie o stati definiti di temperatura.

La finestra dell’applicazione può essere ridimensionata a piacimento e gli strumenti virtuali verranno ridimensionati di conseguenza, insieme ai valori di temperatura visualizzati su tre font size prefissati.

La posizione e dimensione della finestra e le altre configurazioni sono salvate per il ripristino nelle successive sessioni delle proprie preferenze.

Mediante i controlli Min e Max, è possibile impostare l’inizio e fine scala degli strumenti, consentendo la variazione del range delle scale a proprio piacimento.

I due indicatori posti in basso a destra nei riquadri degli strumenti, visualizzano rispettivamente eventuali allarmi e il trend delle temperature.

Stati dell’indicatore di allarme:

  • Alarm Off = La temperatura rientra nei limiti
  • Warning = Lampeggiante giallo, indica il raggiungimento della temperatura di attenzione configurata
  • Overheat = Lampeggiante rosso, il dispositivo è surriscaldato

Stati dell’indicatore di trend

  • Wait… = Il programma è stato appena avviato o la configurazione è stata modificata dall’utente. E’ in fase iniziale di verifica dell’andamento delle temperature
  • Heating = Il dispositivo è in fase di riscaldamento
  • Cooling = Il dispositivo è in fase di raffreddamento
  • Steady = Indicatore verde, la temperatura è stabile

Da menu Settings si accede al pannello di configurazione:

Poll time determina il numero di secondi tra un controllo e l’altro. Sono consentiti valori nel range tra un secondo e il tempo massimo definito per l’intervallo di verifica del trend delle temperature, che nella configurazione di default risulta essere di 59 secondi.

Temp warning e Temp max definiscono rispettivamente le soglia di attenzione, visualizzata in giallo sulla scala degli strumenti e la soglia di surriscaldamento visualizzata in colore rosso.

Nella casella CSV file può essere specificato il percorso e il nome del file dove il programma inserirà ad ogni poll time i dati rilevati sotto forma di una riga con i campi delimitati da una virgola. L’elenco dei campi delle righe del file CSV è il seguente:

  • Primo campo, data e ora di rilevazione: yyyy-mm-gg hh:mm:ss
  • Secondo campo temperatura TRX
  • Terzo campo temperatura FPGA

Esempio di riga CSV: 2020-10-31 10:12:59,32.46,30.69

Nelle caselle “Application or script to run when…” è possibile specificare percorsi e nomi degli eseguibili o script cmd esterni che il programma dovrà avviare al raggiungimento di determinati stati:

  • Steady: Verrà avviato quando entrambi i dispositivi TRX e FPGA raggiungeranno uno stato di temperatura stabile (massimo 2 gradi di variazione negli ultimi 60 secondi nella configurazione di default)
  • Warning: Verrà avviato quando uno o entrambi i dispositivi TRX o FPGA raggiungono o superano la soglia definita come warning temp in configurazione
  • Overheat: Verrà avviato quando uno o entrambi i dispositivi TRX o FPGA raggiungono o superano la soglia definita come Overheat in configurazione
  • Normal: Verrà avviato quando la temperatura dei dispositivi rientra in valori considerati normali in seguito ad una transizione da stati Warning o Overheat

WSDRTEMP mantiene il controllo delle applicazioni o script esterni, per cui non avvierà ulteriori sessioni delle suddette applicazioni o script se le precedenti sono ancora in esecuzione.

Utilizzo di WSDRTEMP su più istanze

WSDRTEMP permette il controllo di un singolo dispositivo. Se si avvia una seconda istanza, il programma rileva la configurazione bloccata da una sessione precedente e chiederà all’utente se sostituirla con la nuova istanza.

Per poter controllare più dispositivi occorre avviare WSDRTEMP con il parametro -config seguito da un numero da 0 a 7 che determina la configurazione da utilizzare.

Creare un collegamento al programma e modificare il campo destinazione aggiungendo -config numero sessione, per esempio:

L’avvio di “WSDRTEMP -config 0” corrisponde ad avviare il programma senza parametri, in quanto la configurazione 0 corrisponde a quella di default.

SATSAGEN 0.4

Scarica SATSAGEN 0.4 e versioni successive dalla seguente pagina:

SATSAGEN Download Page

Highlights:

  • Supporto doppio dispositivo SDR
  • Generatore con frequenza di uscita LO

Supporto doppio dispositivo SDR

Dalla versione 0.4.0, SATSAGEN può gestire due dispositivi. In questa modalità, il primo dispositivo funziona come RX e il secondo come TX.

Questa modalità consente di azzerare il crosstalk interno tipico di questi dispositivi, aumentando di conseguenza la dinamica del sistema.

Configurazione in modalità doppio dispositivo

Per abilitare questa modalità, specificare i due dispositivi nella scheda Devices in Settings. Il primo device funzionerà come RX e il secondo come TX. Se non verranno specificati i dispositivi e le caselle Connection string override sono lasciate vuote, allora verranno utilizzati gli URI predefiniti per la connessione ai dispositivi. L’URI predefinito per il primo dispositivo è ip:192.168.2.1 e per il secondo è ip:192.168.3.1

Se hai cambiato l’account di default dei dispositivi, è possibile salvarlo nel programma in modo sicuro. Fai click su Set credential e inserisci l’account. Questi username e password verranno utilizzati dal programma per inviare dei comandi utili ad identificare in modo univoco i dispositivi. Per esempio queste credenziali verranno usate per inviare i comandi di inversione dei LED se utilizzate le rispettive funzioni dai pulsanti LED On. Con questa funzione è possibile identificare velocemente i dispositivi, perché il normale lampeggio dei LED di attività dei dispositivi verrà invertito.

Nella configurazione del secondo dispositivo di TX, è presente una casella Discipline XO. Se selezionata, la sorgente di riferimento del TX verrà periodicamente corretta in frequenza in base alla forma e posizione del segnale ricevuto dal dispositivo RX. Queste correzioni avverranno durante le scansioni e le fasi di calibrazioni, a patto sia presente un’ampiezza in ingresso sufficiente. La funzione di Discipline XO aiuta a mitigare la naturale deriva dei TCXO di fabbrica presenti nei dispositivi. Con questa funzione disabilitata, la deriva dei TCXO standard può portare a considerevoli variazioni di ampiezza del segnale ricevuto durante le scansioni.

La funzione Discipline XO non è attiva quando:

  • La frequenza di lavoro è inferiore a 71 MHz
  • Sono stati specificati offset di RX o TX
  • E’ attiva la modalità moltiplicatore o armonica di TSA
  • L’ampiezza in RX scende sotto i -20 dBm per la correzione fine in base alla forma del segnale ricevuto
  • L’ampiezza in RX scende sotto i -60 dBm per la correzione in base alla posizione del segnale ricevuto

Nella modalità a doppio dispositivo, la scheda Level Correction ha una sezione apposta dove possono essere specificati i file di linearizzazione specifici dei dispositivi RX e TX.

Funzionamento in modalità doppio dispositivo

Il funzionamento è identico alla modalità usuale a singolo dispositivo, anche l’interfaccia utente non cambia se non per il piccolo LED posto in basso a destra del pannello TSA il quale indica lo stato della funzione di Discipline XO. Il LED diventa verde in una condizione di normale funzionamento, inoltre indica anche la correzione effettuata in Hz sulla sorgente di riferimento, nell’esempio -222 Hz.

Prima di fare una calibrazione ed eseguire delle misure, suggerisco di lasciare “girare” per un po’ di volte le scansioni con il solo cavo di loopback collegato. Questa accortezza permette alla funzione di Discipline XO di trovare il valore più giusto di correzione per ricevere al meglio il segnale.

La migliore condizione comunque si raggiunge quando i dispositivi entrano in temperatura, soprattutto se utilizzano i TCXO di fabbrica.

Generatore con frequenza di uscita LO

Selezionare DC per spegnere la modulazione della portante del generatore.

Questa funzione migliora la qualità del segnale in uscita del generatore, inoltre essendo la frequenza in uscita la stessa dell’oscillatore locale, è più semplice per l’utente calcolarne le armoniche. In questa modalità viene applicata una continua agli ingressi I e Q dei mixer TX.

plutotx

plutotx è una semplice applicazione a linea di comando che pilota ADALM-PLUTO per generare un tono CW alla frequenza e intensità specificati dall’utente.

Spero che questo articolo e il codice sorgente in C di plutotx possano essere un piccolo aiuto per chi desidera iniziare un nuovo progetto SDR.

Il file compresso che troverai qui sotto contiene anche i binari x86 per Windows e Linux, per cui potrebbero essere utili anche per chi non è programmatore, ma è solo interessato a sperimentare con Pluto:

Latest Release:

plutotx v.1.1 (16 november 2020)
File size: 705.865 Bytes
MD5 C1EC3A1D6F5A6B95B60B97C542061584
SHA1 9B79B99F70DAD241A012B64C6B2B370A8270AA0F
SHA256 BD852F72A79549053D00ABA86EE18DC9C749E62965887DCA8FE4B0685A8778DF

- F: 2,147GHz limit
- I: Output bursts issue
- I: Switching off any DDS second tone active
- A: Include, library and instruction to compile under Windows and Linux

Older versions:

plutotx (10 august 2020)
File size: 690,282 Bytes
MD5 36FEE854E3D118A153675C930BF36B18
SHA1 3905F554B962C7553264A128FD558A0A39556525
SHA256 EDD8E7D41D7DEE758F7FCFD791274688076F1C1A0B25A583DBBFC77E3F3ED62E

Il file ZIP contiene le librerie necessarie per l’esecuzione in ambiente Windows mentre per compilare ed eseguire Pluto sotto Linux occorre scaricare e installare la libreria libiio di ADI per il tuo specifico OS da qui: libiio.

plutotx richiede tre parametri: frequenza espressa in kHz, livello di uscita in dBm e opzionale, indirizzo URI del device da connettere.

Per esempio: plutotx 432410 -10

plutotx effettuerà la connessione all’indirizzo di default URI ip:192.168.2.1 se il terzo parametro non viene specificato.

Come funziona

Per migliorare la comprensione dei passaggi necessari per la generazione del tono CW, descriverò il codice in porzioni semplificate:

  • Connessione al device Pluto ed acquisizione della struttura context
  • Verifica se il modello del transceiver corrisponde a un AD9364 (richiesto per il completo range di frequenze)
  • Ricerca dei device physical transceiver e del DAC/TX output driver (FPGA)
  • Ricerca dei canali I, Q, catena TX e oscillatore locale TX
  • Applicazione di una configurazione di default del dispositivo
  • Impostazione dell’attenuatore TX
  • Impostazione della larghezza di banda TX
  • Impostazione dei parametri di scala, frequenza e phase dei canali I e Q
  • Impostazione della frequenza dell’oscillatore locale TX
  • Attivazione dei canali I e Q in modo raw per ottenere il segnale in uscita

Prima di tutto occorre effettuare la connessione al dispositivo ed acquisire la struttura context:

struct iio_context *ctx;
ctx = iio_create_context_from_uri("ip:192.168.2.1");

Verifica se il modello del transceiver corrisponde a un AD9364:

if((value=iio_context_get_attr_value(ctx, "ad9361-phy,model"))!=NULL)
  {
  if(strcmp(value,"ad9364"))
    stderrandexit("Pluto not expanded",0,__LINE__);
  }else
   stderrandexit("Error retrieving phy model",0,__LINE__);

Ricerca dei device physical transceiver e del DAC/TX output driver (FPGA):

phy = iio_context_find_device(ctx, "ad9361-phy");
dds_core_lpc = iio_context_find_device(ctx, "cf-ad9361-dds-core-lpc");

Ricerca dei canali I, Q, catena TX e oscillatore locale TX:

tx0_i = iio_device_find_channel(dds_core_lpc, "altvoltage0", true);
tx0_q = iio_device_find_channel(dds_core_lpc, "altvoltage2", true);
tx_chain=iio_device_find_channel(phy, "voltage0", true);
tx_lo=iio_device_find_channel(phy, "altvoltage1", true);

Applicazione di una configurazione di default del dispositivo. Forse questo passaggio non è necessario, ma è raccomandato nel caso di un utilizzo precedente di un altro programma SDR che potrebbe aver variato la configurazione di default del dispositivo.

//enable internal TX local oscillator
if((rc=iio_channel_attr_write_bool(tx_lo,"external",false))<0)
  stderrandexit(NULL,rc,__LINE__);

//disable fastlock feature of TX local oscillator
if((rc=iio_channel_attr_write_bool(tx_lo,"fastlock_store",false))<0)
  stderrandexit(NULL,rc,__LINE__);

//power on TX local oscillator
if((rc=iio_channel_attr_write_bool(tx_lo,"powerdown",false))<0)
  stderrandexit(NULL,rc,__LINE__);

//full duplex mode
if((rc=iio_device_attr_write(phy,"ensm_mode","fdd"))<0)
  stderrandexit(NULL,rc,__LINE__);

//calibration mode to manual
if((rc=iio_device_attr_write(phy,"calib_mode","manual"))<0)
  stderrandexit(NULL,rc,__LINE__);

La linea 18 imposta la calibrazione del TX in modo manuale, questo per evitare che l’automatismo di calibrazione generi dei picchi in uscita che potrebbero superare il livello di potenza specificato dall’utente.

Impostazione dell’attenuatore TX. Il valore dell’attenuatore si ottiene sottraendo al valore di intensità specificato dall’utente, il valore di potenza in uscita di Pluto (circa 10 dBm definito da REFTXPWR):

if((rc=iio_channel_attr_write_double(tx_chain,"hardwaregain",dBm-REFTXPWR))<0)
  stderrandexit(NULL,rc,__LINE__);

Impostazione della larghezza di banda TX:

if((rc=iio_channel_attr_write_longlong(tx_chain,"rf_bandwidth",FBANDWIDTH))<0)
  stderrandexit(NULL,rc,__LINE__);

Impostazione dei parametri di scala, frequenza e phase dei canali I e Q:

if((rc=iio_channel_attr_write_double(tx0_i,"scale",1))<0)
  stderrandexit(NULL,rc,__LINE__);

if((rc=iio_channel_attr_write_double(tx0_q,"scale",1))<0)
  stderrandexit(NULL,rc,__LINE__);

if((rc=iio_channel_attr_write_longlong(tx0_i,"frequency",FCW))<0)
  stderrandexit(NULL,rc,__LINE__);

if((rc=iio_channel_attr_write_longlong(tx0_q,"frequency",FCW))<0)
  stderrandexit(NULL,rc,__LINE__);

if((rc=iio_channel_attr_write_longlong(tx0_i,"phase",90000))<0)
  stderrandexit(NULL,rc,__LINE__);

if((rc=iio_channel_attr_write_longlong(tx0_q,"phase",0))<0)
  stderrandexit(NULL,rc,__LINE__);

Impostazione della frequenza dell’oscillatore locale TX. La frequenza dell’oscillatore locale TX è ottenuta sottraendo al valore richiesto dall’utente, la frequenza del tono CW definita da FCW:

if((rc=iio_channel_attr_write_longlong(tx_lo,"frequency",freq-FCW))<0)
  stderrandexit(NULL,rc,__LINE__);

Attivazione dei canali I e Q in modo raw per ottenere il segnale in uscita:

int rc;

if((rc=iio_channel_attr_write_bool(
        tx0_i,
        "raw",
        1))<0)
 stderrandexit(NULL,rc,__LINE__);

if((rc=iio_channel_attr_write_bool(
        tx0_q,
        "raw",
        1))<0)
 stderrandexit(NULL,rc,__LINE__);

Intero codice sorgente di plutotx:

/*
 Author: Alberto Ferraris IU1KVL - http://www.albfer.com

 This program is free software: you can redistribute it and/or modify
 it under the terms of the version 3 GNU General Public License as
 published by the Free Software Foundation.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 */
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "iio.h"

#define URIPLUTO "ip:192.168.2.1"
#define MINFREQ 50000000
#define MAXFREQ 6000000000
#define MINDBM -89
#define MAXDBM 10
#define REFTXPWR 10
#define FBANDWIDTH 4000000
#define FSAMPLING 4000000
#define FCW 1000000

struct iio_channel *tx0_i, *tx0_q;

void stderrandexit(const char *msg, int errcode, int line)
{
if(errcode<0)
  fprintf(stderr, "Error:%d, program terminated (line:%d)\n", errcode, line);
  else
  fprintf(stderr, "%s, program terminated (line:%d)\n",msg, line);
exit(-1);
}

void CWOnOff(int onoff)
{
int rc;

if((rc=iio_channel_attr_write_bool(
		tx0_i,
		"raw",
		onoff))<0)
 stderrandexit(NULL,rc,__LINE__);

if((rc=iio_channel_attr_write_bool(
		tx0_q,
		"raw",
		onoff))<0)
 stderrandexit(NULL,rc,__LINE__);
}

int main(int argc, char* argv[])
{
struct iio_context *ctx;
struct iio_device *phy;
struct iio_device *dds_core_lpc;
struct iio_channel *tx_chain;
struct iio_channel *tx_lo;
const char *value;
long long freq;
double dBm;
int rc;
int ch;

if(argc<3)
  {
  printf("Usage: plutotx kHz dBm [uri]\n");
  return  0;
  }

freq=atol(argv[1])*1000;

if(freq<MINFREQ || freq>MAXFREQ)
  stderrandexit("Frequency is not in range",0,__LINE__);

dBm=atof(argv[2]);

if(dBm<MINDBM || dBm>MAXDBM)
  stderrandexit("dBm is not in range",0,__LINE__);

if(argc>3)
  ctx = iio_create_context_from_uri(argv[3]);
  else
  ctx = iio_create_context_from_uri(URIPLUTO);

if(ctx==NULL)
  stderrandexit("Connection failed",0,__LINE__);

if((value=iio_context_get_attr_value(ctx, "ad9361-phy,model"))!=NULL)
  {
  if(strcmp(value,"ad9364"))
    stderrandexit("Pluto is not expanded",0,__LINE__);
  }else
   stderrandexit("Error retrieving phy model",0,__LINE__);

phy = iio_context_find_device(ctx, "ad9361-phy");
dds_core_lpc = iio_context_find_device(ctx, "cf-ad9361-dds-core-lpc");  
tx0_i = iio_device_find_channel(dds_core_lpc, "altvoltage0", true);
tx0_q = iio_device_find_channel(dds_core_lpc, "altvoltage2", true);
tx_chain=iio_device_find_channel(phy, "voltage0", true);
tx_lo=iio_device_find_channel(phy, "altvoltage1", true);

if(!phy || !dds_core_lpc || !tx0_i || !tx0_q || !tx_chain || !tx_lo)
  stderrandexit("Error finding device or channel",0,__LINE__);

//enable internal TX local oscillator
if((rc=iio_channel_attr_write_bool(tx_lo,"external",false))<0)
  stderrandexit(NULL,rc,__LINE__);

//disable fastlock feature of TX local oscillator
if((rc=iio_channel_attr_write_bool(tx_lo,"fastlock_store",false))<0)
  stderrandexit(NULL,rc,__LINE__);

//power on TX local oscillator
if((rc=iio_channel_attr_write_bool(tx_lo,"powerdown",false))<0)
  stderrandexit(NULL,rc,__LINE__);

//full duplex mode
if((rc=iio_device_attr_write(phy,"ensm_mode","fdd"))<0)
  stderrandexit(NULL,rc,__LINE__);

//calibration mode to manual
if((rc=iio_device_attr_write(phy,"calib_mode","manual"))<0)
  stderrandexit(NULL,rc,__LINE__);

CWOnOff(0);  

if((rc=iio_channel_attr_write_double(tx_chain,"hardwaregain",dBm-REFTXPWR))<0)
  stderrandexit(NULL,rc,__LINE__);

if((rc=iio_channel_attr_write_longlong(tx_chain,"rf_bandwidth",FBANDWIDTH))<0)
  stderrandexit(NULL,rc,__LINE__);

if((rc=iio_channel_attr_write_longlong(tx_chain,"sampling_frequency",FSAMPLING))<0)
  stderrandexit(NULL,rc,__LINE__);

if((rc=iio_channel_attr_write_double(tx0_i,"scale",1))<0)
  stderrandexit(NULL,rc,__LINE__);

if((rc=iio_channel_attr_write_double(tx0_q,"scale",1))<0)
  stderrandexit(NULL,rc,__LINE__);

if((rc=iio_channel_attr_write_longlong(tx0_i,"frequency",FCW))<0)
  stderrandexit(NULL,rc,__LINE__);

if((rc=iio_channel_attr_write_longlong(tx0_q,"frequency",FCW))<0)
  stderrandexit(NULL,rc,__LINE__);

if((rc=iio_channel_attr_write_longlong(tx0_i,"phase",90000))<0)
  stderrandexit(NULL,rc,__LINE__);

if((rc=iio_channel_attr_write_longlong(tx0_q,"phase",0))<0)
  stderrandexit(NULL,rc,__LINE__);

if((rc=iio_channel_attr_write_longlong(tx_lo,"frequency",freq-FCW))<0)
  stderrandexit(NULL,rc,__LINE__);

CWOnOff(1);

printf("TX ON! Q to exit or E to keep TX ON and exit\n");

while(1)
     {
     ch=getchar();
     if(ch=='q' || ch=='Q')
       {
       CWOnOff(0);
       break;
       }
     if(ch=='e' || ch=='E')
       break;
     };

iio_context_destroy(ctx);

return 0;
}

SATSAGEN

SATSAGEN è un’applicazione Windows che permette di utilizzare un dispositivo SDR come Spectrum Analyzer. Al momento SATSAGEN supporta solo il device ADALM-PLUTO.

E’ mio desiderio rendere disponibile in forma gratuita alla comunità dei Radioamatori questa mia realizzazione, con la speranza che SATSAGEN possa essere apprezzato come uno strumento utile per la nostra attività di sperimentazione Radio.

Le ultime novità su SATSAGEN le puoi trovare nella seguente pagina:

 http://www.albfer.com/en/satsagen-news/ 

Da qui potete scaricare l’ultima versione:

 SATSAGEN Download Page 

I prerequisiti per il garantito funzionamento dell’applicazione sono:

  • OS: Da Windows 7 in poi…
  • Driver per ADALM-PLUTO installati: PlutoSDR-M2k-USB-Drivers
  • Dispositivo ADALM-PLUTO con firmware >=0.31 (non mandatorio)

ATTENZIONE: Al primo avvio, l’applicazione effettuerà sul dispositivo l’estensione in frequenza e bandwidth prevista per l’utilizzo del range 70MHZ-6000MHZ, facendo “vedere” al firmware il transceiver AD9363 come un AD9364. L’estensione è necessaria per il funzionamento dell’applicazione, ma se non desiderate che avvenga, non avviate SATSAGEN.

Desidero ringraziare gli amici Gianni IW1EPY, Domenico I1BOC e Mauro IZ1OTT per avermi fornito l’idea, il sostegno in ogni senso, i componenti e le attrezzature necessarie per la realizzazione del progetto!

Un particolare ringraziamento va a Boian Mitov per le preziose librerie www.mitov.com utilizzate in SATSAGEN!

Di seguito trovate un altro prezioso contributo di Gianni IW1EPY scritto per l’occasione, mentre al termine dell’articolo troverete un breve video che illustra le nozioni base dell’applicazione.

Alberto IU1KVL

Posseggo un Adalm Pluto da un po’ di tempo e ho familiarizzato con l’utilizzo di diverse applicazioni (SDR console, SDRAngel) usandolo sia in RX che TX.
Con il tempo e l’uso la mia indole misuristica ha prevalso, dopo aver provato un po’ di oggetti, analizzatori scalari fino a 4,4 GHz, i vettoriali fino a 900 MHz, ho pensato che anche Pluto avrebbe potuto avere un adeguato utilizzo specialmente nella sua gamma estesa 70 MHz – 6 GHz.
Dopo alcune prove incoraggianti per i risultati a RF ottenuti, ma deludenti dal punto di vista tempi di esecuzione delle misure utilizzando Matlab, ho letteralmente preso per i capelli il mio amico Alberto che non ha saputo dirmi di no e siamo partiti in questa avventura.
Oltre allo splendido lavoro software fatto da Alberto voglio solo aggiungere alcune note hardware.
Pluto non è ovviamente uno strumento e come tale soffre di alcuni problemi.
Data l’estensione di banda, per altro forzata in quanto Pluto nasce con una gamma di utilizzo da 325 MHz a 3,8 GHz, l’impedenza di ingresso e di uscita di certo non è 50 Ohm.
Una coppia di attenuatori mitigano il problema, riducono il range dinamico di utilizzo ma per usi radioamatoriali lo ritengo accettabile.
Con una coppia di attenuatori da 10 dB che possono essere ridotti o annullati accettando il relativo disadattamento rimangono ancora 40 dB verso il basso dal livello di calibrazione e una 20 verso l’ alto per l’ inserzione di un dispositivo attivo sotto test.
Di sicuro Adalm Pluto soffre nella gamma alta di frequenze la mancanza di un contenitore metallico e del accoppiamento fra TX e RX, ma qualcosa si potrebbe fare…
La struttura attuale permette un esame diretto di funzioni di trasferimento di filtri, amplificatori, mentre per l’analisi di impedenze di ingresso è necessario un accoppiatore direzionale o un ponte riflettometrico.
In futuro pensiamo di aggiungere alcune funzionalità per quest’ultima modalità.
Tutto questo è possibile nella modalità Spectrum analyzer con Tracking, ma è possibile usare il solo Generatore o l’analizzatore di spettro.
E’ possibile inserire una curva di correzione per linearizzare l’uscita del generatore, purtroppo ogni Pluto è un po differente e andrebbe personalizzata, per ora ne ho analizzati 4 e le curve di correzione sono disponibili.
In tutti i Pluto analizzati con una adeguata curva di correzione, l’errore di potenza del generatore sta entro un dB contro i 10 dB di un Pluto non corretto, particolarmente variabili la zona da 70 a 300 MHz e da 4 a 6 GHz per altro c’era da aspettarselo essendo le zone di fuori range rispetto al prodotto originario.
E’ possibile inserire una curva di calibrazione del ricevitore, fattibile senza strumenti, una volta calibrato il generatore e accettandone gli inevitabili errori .
Il guadagno del ricevitore e l’attenuazione del generatore non introducono significativi errori per cui una sola curva di correzione permette un buon utilizzo a patto di non portare o il generatore o il ricevitore in saturazione ma la cosa diventa evidente.
Per migliorare le prestazioni dell’analizzatore di reti è possibile effettuare una calibrazione con un attenuatore da 40 dB, purtroppo questa linearizzazione corregge gli errori del livello -40 e -30 ma deteriora il responso per altro già molto compromesso per segnali inferiori es -50 in quanto a questi livelli le tipologie di errore non sono congruenti con i modelli adottati.
Tutti i livelli di ricezione e generazione nonchè le attenuazioni inserite sono programmabili permettendo di variare l’ uso del sistema.
Ogni idea di miglioramento è bene accetta e metto già in lista alcune cose che stiamo esaminando:
Calibrazione con accoppiatore direzionale o ponte riflettometrico con open corto e carico.
Possibilità di analisi con offset fra ricezione e trasmissione per verifica o taratura Transverter o qualsivogli sistema di conversione di frequenza.
Credo che Pluto coprendo 6 gamme radioamatoriali possa essere di aiuto a molti Radioamatori con un prezzo di acquisto contenuto.
IW1EPY

SA TSA GEN per ADALM-PLUTO

Il progetto consiste nella realizzazione di un’applicazione Windows per l’utilizzo di ADALM-PLUTO (recentemente ricevuto in dono da un carissimo amico) come analizzatore di spettro.

Spero a breve di creare un post con più dettagli a proposito, per il momento elenco i punti salienti dell’oggetto:

  • Analizzatore di spettro con span intero range di esercizio, 70MHz-6GHz e rappresentazione ampiezza segnali in dBm.
  • Analizzatore di spettro con tracking generator. Risoluzione fino a 1024 punti.
  • Generatore con possibilità d’impostare la frequenza a passi di 1 KHz

I requisiti per l’applicazione sono:

  • CPU: un vecchio Pentium M da 1,7GHz è più che sufficiente!
  • OS: >= Windows 7 (su necessità dei driver per ADALM-PLUTO)
  • ADALM-PLUTO esteso per far “vedere” al FW il AD9363 come un AD9364
  • Driver Analog Devices installati ( PlutoSDR-M2k-USB-Drivers )

A presto!