home | area personale         schemi | tutorial | robotica | pic micro | recensioni         forum | chat irc         faq | contatti         store | Ordina PCB
username
password
cerca

 
FORUM: Elettronica Generale
Qui si parla di tutto....dall'analogico al digitale, dal software all'hardware, dal semplice crepuscolare al computer.


SDR e FM
     
Autore Messaggio opzioni
pippodue




una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
05.07.2021, alle ore 09:08
SDR e FM 

La domanda è: quali tecniche è possibile adoperare per rivelare la modulazione di frequenza, nei ricevitori Software Defined.
Ho provato a pensare qualcosa, rimanendo nell'ambito delle tecniche strettamente digitali, ma mi sembra che venga fuori un carico di istruzioni assurdamente elevato per il processore, diversamente dal caso della modulazione di ampiezza o anche SSB. E' così?



anche i grandi uomini, come gli uomini comuni, possono talvolta cadere in errore (Voltaire)
double_wrap




una ogni 100 livelli
una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
05.07.2021, alle ore 14:25
Non ho la piu' pallida idea di come sia fatto il codice di un sw di demodulazione (che quindi lavora a valle di un campionamento digitale). Non so se il codice di <sdr#> sia open o meno, ma lo lo fosse ci ci potrebbe dare uno sguardo.

A sentimento e se la demodulazione fosse fatta DOPO il passaggio attraverso una FFT, si potrebbe valutare lo shift di frequenza rispetto alla frequenza della portante non modulata. Lavorando nel dominio delle frequenze (post FFT) i conti dovrebbero semplificarsi anche se lo spettro di un segnale FM e' tuttaltro che semplice (c'entrava un certo Carson con la sua banda assieme a Tex Willer...)

Quindi stai scrivendo a mano il codice di un demodulatore sw? Tienici informati!



"se peso cado, ma se cado non peso"
adamatj.altervista.org
pippodue




una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
06.07.2021, alle ore 10:55
double_wrap:
Tienici informati!

Pensavo di fare un tutorial ma ci ho ripensato perchè un tutorial dovrebbe dare delle certezze e non delle ipotesi. Comunque gli appunti fin quì presi sono i seguenti:
L'antefatto
Nel corso degli anni ho realizzato e sperimentato diverse versioni di un telecomando ad onde convogliate, tutte aventi delle funzioni molto semplici destinate alle comuni reti domestiche. In un primo tempo ho realizzato le unità riceventi con una circuiteria analogica, poi sono passato all'uso di microcontrollori sia per filtrare la frequenza della portante che per decodificare i comandi.
Adesso infine ho pensato di evolvere il sistema passando all'impiego della modulazione di frequenza. Quindi mi si è posto il problema di programmare un discriminatore di frequenza digitale.

Il contenuto dell'articolo
Non allego disegni nè listati (comunque tengo dei listati a disposizione di chi dovesse chiedermeli) perchè voglio fare una semplice discussione qualitativa e non quantitativa. Un demodulatore digitale FM è un argomento delicato e la soluzione che vado ad esporre è frutto di una certa improvvisazione, a me sembra buona come idea ma certamente ci sarà qualche ingenuità ed è perfettibile. Mi propongo soltanto di essere chiaro ed elementare per mettere in evidenza il nucleo essenziale di un ragionamento che si è formato con l'aiuto della sperimentazione.

Il funzionamento dell'algoritmo
Dopo qualche tentativo e qualche ripensamento ho potuto riadattare un programma che avevo già sperimentato per la ricezione della modulazione di ampiezza, nel modo che adesso vengo a spiegare.
Il segnale della portante modulata in arrivo viene campionato dallo Analog-to-Digital Converter del microcontrollore ad una frequenza, o meglio ad un sample rate, pari a 4 volte la frequenza centrale della portante non modulata.
Possiamo idealmente pensare che gli istanti di campionamento rappresentino le creste di due oscillazioni locali in quadratura fra loro, ambedue alla frequenza centrale. E ancora che dette oscillazioni siano le componenti seno e coseno di una ipotetica portante locale fissa.
L'istante 1 è le cresta positiva della componente seno, l'istante 2 è le cresta positiva della componente coseno, l'istante 3 è le cresta negativa della componente seno, l'istante 4 è le cresta negativa della componente coseno, e così via per i successivi.
Ad ogni campionamento, il programma ricalcola la differenza fra i due più recenti segnali campionati in concomitanza con la cresta positiva e quella negativa della componente interessata. Esaminando il segno di tale differenza possiamo stabilire se il segnale in arrivo si trova in fase o in controfase rispetto a quella componente locale. Basandoci soltanto sul segno non possiamo valutare esattamente l'angolo di sfasamento, ma soltanto se più vicino a zero cioè in fase, o a 180 gradi cioè in controfase.
Adesso vi sono 4 possibilità:
Se ambedue le componenti risultano in fase col segnale, lo sfasamento fra il segnale in arrivo e la portante locale appartiene al quadrante numero 1.
Se ambedue in controfase, appartiene al quadrante numero 3.
Se seno in fase e coseno in controfase, quadrante numero 2.
Se coseno in fase e seno in controfase, quadrante numero 4.
Il programma salva il numero di quadrante già determinato, e determina quello attuale.
Se riscontra che è avvenuta una variazione, i casi sono due:
Se la variazione è in aumento, oppure il numero è passato da 4 ad 1, vuol dire che lo sfasamento aumenta cioè la frequenza in arrivo è maggiore di quella locale.
Se la variazione è in diminuzione, oppure il numero è passato da 1 a 4, vuol dire che lo sfasamento diminuisce cioè la frequenza in arrivo è minore di quella locale.

La demodulazione
Abbiamo visto come rivelare se la deviazione di frequenza è positiva o negativa, e per alcuni tipi di apparecchiature questa demodulazione on-off potrebbe già essere sufficiente. Per ottenere invece una uscita analogica approssimata, ad ogni variazione di quadrante possiamo aggiornare il valore dell'angolo complessivo di sfasamento, sommando uno se la deviazione è positiva e sottraendo uno se la deviazione è negativa.
In tal modo abbiamo una uscita demodulata in fase con risoluzione pari ad un angolo retto. Ne consegue un inconveniente: basta un piccolissimo spostamento permanente di frequenza e l'angolo di fase rivelato andrà sicuramente in overflow. Per evitare ciò, al valore rivelato si applica un filtraggio taglia-basso del primo ordine che lo riporta verso lo zero e gli conferisce il carattere di una rivelazione di frequenza e non più di fase, entro la banda interessata dal taglio.

La selettività
Se arriva un segnale con una frequenza molto diversa da quella locale, quelle differenze fra i campioni, da cui ha preso inizio l'elaborazione, cambiano di segno più frequentemente. Filtrare tali differenze con una o più celle passa-basso equivale ad attenuare il segnale al di fuori di una certa banda passante.



anche i grandi uomini, come gli uomini comuni, possono talvolta cadere in errore (Voltaire)
pippodue




una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
07.07.2021, alle ore 06:14
Adesso aspetterei qualche commento, anche dal punto di vista filosofico sul perché la demodulazione FM fatta a software sia tanto più onerosa che quella in AM



anche i grandi uomini, come gli uomini comuni, possono talvolta cadere in errore (Voltaire)
double_wrap




una ogni 100 livelli
una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
07.07.2021, alle ore 18:38
pippodue:

Il segnale della portante modulata in arrivo viene campionato dallo Analog-to-Digital Converter del microcontrollore ad una frequenza, o meglio ad un sample rate, pari a 4 volte la frequenza centrale della portante non modulata.
Possiamo idealmente pensare che gli istanti di campionamento rappresentino le creste di due oscillazioni locali in quadratura fra loro, ambedue alla frequenza centrale. E ancora che dette oscillazioni siano le componenti seno e coseno di una ipotetica portante locale fissa.
L'istante 1 è le cresta positiva della componente seno, l'istante 2 è le cresta positiva della componente coseno, l'istante 3 è le cresta negativa della componente seno, l'istante 4 è le cresta negativa della componente coseno, e così via per i successivi.

fin qui sembra simile ad un mixer di Tayloe che genera due flussi IQ, uno in fase ed uno in quadratura, da dare poi in pasto ad una scheda audio da PC

Per ottenere invece una uscita analogica approssimata, ad ogni variazione di quadrante possiamo aggiornare il valore dell'angolo complessivo di sfasamento, sommando uno se la deviazione è positiva e sottraendo uno se la deviazione è negativa.
In tal modo abbiamo una uscita demodulata in fase con risoluzione pari ad un angolo retto.


DAi segnali I e Q ricavi il quadrante e poi con la somma algebrica fra il quadrante di x(t) e il quadrante di x(t-1) riconosci un salto di fase di 90 gradi, e fin qui sembra OK.

Poi mi sono perso perche' non capisco come puoi ricavare tutti gli angoli intermedi semplicemnte facendo passare il segnale somma in un filtro passabasso. Ma e' un mio limite.

Domani vado a cerca qualcosa sulla demodulazione di fase partendo da due segnali IQ



"se peso cado, ma se cado non peso"
adamatj.altervista.org
pippodue




una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
08.07.2021, alle ore 08:29
double_wrap:
come puoi ricavare tutti gli angoli intermedi semplicemnte facendo passare il segnale somma in un filtro passabasso

Secondo me col filtro si ottiene una interpolazione che aumenta il numero dei valori possibili ma non aggiunge nulla come contenuto di informazione. In pratica, una fonia demodulata con questo sistema risulterebbe incomprensibile.
Per ottenere una demodulazione più fedele non basta confrontare il segno delle componenti IQ ma probabilmente occorrerebbe farne il rapporto fra i valori e poi applicare una funzione circolare inversa, arcotangente. Il carico di istruzioni del processore, che già era elevatissimo, diventerebbe del tutto proibitivo per ricevere una modesta fonia in tempo reale. Forse converrebbe tabellare tutti i valori in una grande matrice anzichè calcolare di volta in volta.
Se ciò è corretto, mi verrebbe da scantonare nella filosofia e chiedermi da cosa dipenda questa enorme disparità fra AM e FM, forse l'approccio informatico soffre di una cecità o eccessiva rigidità verso la natura del segnale FM? In effetti basta un circuitino analogico e lo stesso problema si risolove in quattro e quattr'otto.



anche i grandi uomini, come gli uomini comuni, possono talvolta cadere in errore (Voltaire)
double_wrap




una ogni 100 livelli
una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
08.07.2021, alle ore 14:32
pippodue:
probabilmente occorrerebbe farne il rapporto fra i valori e poi applicare una funzione circolare inversa, arcotangente. Il carico di istruzioni del processore, che già era elevatissimo, diventerebbe del tutto proibitivo per ricevere una modesta fonia in tempo reale. Forse converrebbe tabellare tutti i valori in una grande matrice anzichè calcolare di volta in volta.


Per ridurre il carico del calcolo di funzioni trigonometriche dirette (seni e coseni) ed inverse (atan2) e' bene non usare variabili ed operazioni in virgola mobile. Sono piu' efficienti gli algoritmi CORDIC che usano variabili intere e lookup tables ridotte.
https://www.eit.lth.se/fileadmin/eit/courses/eitf35/2017/COR…
Con una lookup table di 8 elementi si ottiene risoluzione di 1/256 di 45 gradi, circa 0,1 gradi
Ovviamente tutti gli angoli sono in 1/2^n di 45 gradi e non in decimali come negli esempi dimostrativi.

In merito alle <considerazioni filosofiche> della pesantezza del calcolo per la demodulazione FM, una prospettiva potrebbe essere quella di considerare le operazioni matematiche necessarie ma anche se sia meglio eseguire tali operazioni nel dominio del tempo (segnale campionato) o nel dominio delle frequenze (spettro del segnale). Ed ancora se sia indispensabile usare la virgola mobile (pesantissima senza coprocessore matematico) oppure se sia possibile usare le operazioni con interi. Non so dare una risposta, sto ancora cercando fra le vecchie dispense....





"se peso cado, ma se cado non peso"
adamatj.altervista.org
gabe





postato il:
09.07.2021, alle ore 10:01
scusa intromissione, non voglio fare esperto ma volevo scrivere programmi in js che facevano da socket per sdr, tipo sdr online, quindi mi ero informato su tante cose


l'utilizzo della cpu è dato dal campionamento che utilizzi al momento, la modulazione ne è una gran quantità, ma è anche il campionamento, mi sono fatto una radio portatile a batterie e ho dovuto fare i conti con questo problema, per via della cpu sempre a palla, ed ho visto questo inizialmente come buon programma per demodulare il segnale:
https://github.com/ha7ilm/csdr

se tu fai con la riga di comando e basta, vedrai che utilizzo della cpu e minore rispetto a quello che vedi ora probabilmente, ma tutto dipende dal sample rate che imposti, più è alto più la cpu fatica, io mettendolo al mino, su un orange pi arm da pochi core ho una radio portatile a batteria di riciclo di due cellulari e posso aprire più canali per ascoltare due o tre anche quattro conversazioni in varie modulazioni

quella che ho visto appunto che fa più fatica e la wfm, radio normale, ma anche quella dipende dal software come è scritto, ma con le altre lo uso senza problemi, unica cosa che ho rallentamenti e se uso alimentatori da pochi A, perché e anche alimentabile attraverso corrente di casa sia per la ricarica che per utilizzo


ci sono online software scritti a meta per dimostrazione, messi a metta come test per utilizzare quelle chiavette, ce di tutto online, alcuni vanno bene con wfm ma poi lo spentro non va bene ecc ecc, per questo volevo prendere un mix di tutto e scrivermi un software mio personale leggero e che occupa poche risorse
come dicevo all'inizio

ma per il momento per arm portatile uso questo: https://www.openwebrx.de/ con sample rate al minimo, che l'unica cosa che influisce e la qualità spetro questa riduzione, ma non di molto, è funzionale comunque, se mai un giorno lo posto online e te lo faccio provare, puoi utilizzare anche software di decodifica e anche la radio digitale su onde lunghe, ft8 ecc ecc, c'è scrittto tutto comunque sul sito, si segna le chiamate che decodifica con un mappa con la varie modalità, e tutto gira su un: https://www.ebay.it/itm/Orange-Pi-PC-Linux-android-Allwinner…

la mappa consiste nel segnare le chiamate con la sigla dei radioamatori in una mappa geografica di google segnandosi la banda, la modalità la sigla, la potenza del segnale in db. e dividendolo in legenda con vari colori, in base all'indice che metti cambiabile al momento


tutto in tempo reale su un dispositivo che ti assicuro, se lo usi come pc ti viene la barba lunga solo per andare in internet, quindi credo che su un pc normale viaggi e puoi anche aumentare il sample rate, ho utilizzato sw anche di windows ma mangiano un casino di cpu, per via delle tante funzionalità che hanno, ma se diminuisci i valori anche loro vanno meglio

dopo ho conosciuto altre cose, ma ore non mi viene in mente altro, perché non ci sono andato più dentro da un bel po di tempo e quindi ho perso molte informazioni al riguardo
double_wrap




una ogni 100 livelli
una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
09.07.2021, alle ore 15:06
double_wrap:
[CUT]sto ancora cercando fra le vecchie dispense....

qualcosa mi diceva che c'era un modo relativamente semplice di demodulare la FM partendo dal segnale in forma complessa IQ. Qui spiegano la faccenda
http://www.deltabeta.it/portale/3ot/modulazioni/FM.pdf
https://studylibit.com/doc/5412252/demodulatore-fm---ettore-…

Invece di usare un sfasatore LC (che sfasa di 90 gradi solo alla frequenza di lavoro) c'e' il mixer Tayloe (o circuito analogo) che fornisce le due uscite IQ a qualunque frequenza (in ragione del fatto che si lavora a 4 volte la frequenza operativa).

Lo schema di principio di pagina 6 (limitatore, gate e filtro PB) potrebbe essere traslato tutto in digitale senza eccessivo carico della cpu (filtraggio a parte).

Una altra via, sempre partendo dai segnali IQ potrebbe essere quella di calcolare l'arcotangente (ATAN2 che fornisce anche il segno) dei valori istantanei dei segnali I e Q. L'angolo che si trova e' la fase corrente e valutandone la variazione di demodula il segnale. (La modulazione di fase e la modulazione di frequenza differiscono solo per il fatto che nella prima la modulante e' la derivata temporale della modulante usata nella seconda). Come detto prima i clacoli andrebbero fatti con variabili intere ed algoritmi CORDIC.
qui a pagina 30
https://areeweb.polito.it/didattica/corsiddc/01NVD/ATLCE14/L…

E qui mi fermo perche' i teorici si stanno gia' stracciando le vesti lanciando anatemi a chi mi fece passare al corso di comunicazioni.....



"se peso cado, ma se cado non peso"
adamatj.altervista.org
pippodue




una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
10.07.2021, alle ore 09:11
double_wrap:
Come detto prima i clacoli andrebbero fatti con variabili intere ed algoritmi CORDIC.
qui a pagina 30
https://areeweb.polito.it/didattica/corsiddc/01NVD/ATLCE14/L…

Sì grazie. Ritengo che la funzione ATAN debba avere qualcosa in più rispetto alla tradizionale funzione circolare perchè dovrebbe fornire anche valori maggiori di un angolo giro.




anche i grandi uomini, come gli uomini comuni, possono talvolta cadere in errore (Voltaire)
segui questo thread con grixFC, per questa funzione devi aver installato il software grixFC

torna su
     

Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito




 

 
 
indietro | homepage | torna su copyright © 2004/2021 GRIX.IT - La community dell'elettronica Amatoriale