Come eseguire il ripristino della fase portante nel software?


13

Quali sono le opzioni per ripristinare la fase di un segnale BPSK nel software? Le uniche risorse che posso trovare online contengono schemi circuitali - sembra che nessuno sia disposto a spiegarlo a persone che non hanno familiarità con i circuiti analogici.

Vorrei una spiegazione di come funziona il recupero dell'operatore in teoria e mi piacerebbe anche pseudocodice o esempi di codice.


Normalmente non forniamo esempi di codice, specialmente per qualcosa di così complicato come un demodulatore BPSK.
Jim Clay

1
Come indicato da JimClay, è improbabile che qualcuno disponga di tempo sufficiente per fornire il codice sorgente completo per l'implementazione di un demodulatore. Tuttavia, i meccanismi di creazione di un'implementazione dovrebbero essere facili se si comprendono i concetti. In generale, un ricevitore software avrà una struttura simile alla corrispondente tecnica hardware (ad esempio un sincronizzatore feedforward basato sulla non linearità o un approccio basato sul feedback PLL). Avevi una topologia specifica che stavi pianificando come target?
Jason R,

Grazie per i tuoi commenti @JimClay e JasonR - Non intendevo chiedere un codice sorgente funzionante. Ho aggiornato la domanda per essere più specifici: sto solo cercando una spiegazione che non presupponga una comprensione dei circuiti analogici e degli schemi circuitali.
Keith

Risposte:


25

Per demodulare un segnale con chiave a sfasamento, di cui BPSK è il più semplice, è necessario ripristinare la frequenza portante, la fase e la temporizzazione dei simboli.

Segnali Bursty Alcuni segnali sono bursty e forniscono una sequenza di dati nota chiamata preambolo o mid -bleble (a seconda che si presenti all'inizio o al centro dell'esplosione). I demodulatori possono usare un filtro abbinato che "cerca" la sequenza di dati nota e usarla per capire la frequenza, la fase e il tempismo del burst. Lo fanno per ogni esplosione e non hanno bisogno di preoccuparsi della "deriva" (la distanza graduale che si accumula tra il demodulatore e il segnale ricevuto man mano che si accumulano piccoli errori) perché gli scoppi sono generalmente abbastanza brevi che la deriva non è un problema.

Segnali continui Quindi ci sono segnali continui. Sono in molti modi più difficili da recuperare rispetto ai segnali bursty perché normalmente non hai una sequenza di dati nota per aiutarti a bloccare il segnale e devi preoccuparti della deriva anche dopo aver bloccato il segnale. Proverò a descrivere ad alto livello i passaggi principali che vengono generalmente utilizzati per recuperare segnali continui.

Carrier Recovery

Di solito sai a quale frequenza sarà il segnale che stai cercando, o almeno a quale serie di frequenze potrebbe essere. Anche con questa conoscenza, tuttavia, di solito devi essere in grado di correggere l'offset di frequenza perché non esistono due trasmettitori che trasmettono alla stessa frequenza. C'è sempre qualche errore. Il solito metodo, quindi, è quello di mescolare la frequenza in cui si ritiene che il segnale sia, quindi correggere l'errore di frequenza residua. Questo può essere fatto con un Costas Loopo prendendo la quarta potenza dei dati del segnale in banda base e cercando un picco di frequenza. Dovrebbe esserci un picco di frequenza all'offset del vettore * 4 (ad es. Se si prende un FFT dei dati alla 4a potenza e si vede un picco di frequenza a 8300 Hz, ciò significa che l'offset del vettore è 8300/4 = 2075 Hz). Questo è un mezzo molto efficace per ottenere un blocco iniziale sull'offset di frequenza. Puoi anche usarlo per compensare la deriva se lo fai di tanto in tanto. C'è un altro modo per compensare la deriva che toccherò più avanti.

Fase portante

A questo punto se hai tracciato i tuoi dati complessi sul piano complesso (l'asse x è reale, l'asse y è immaginario) dovrebbe assomigliare al seguente-

BPSK ruotato

ej*π

BPSK ruotato e specchiato

ej*-ω

BPSK rumoroso

Una volta che i dati sono corretti in fase è possibile eliminare la parte immaginaria dei dati perché non aggiunge alcuna informazione.

Temporizzazione del simbolo

Normalmente dovresti conoscere, a priori, il periodo simbolo del segnale che stai cercando di demodulare. Se è necessario determinare il periodo / la frequenza del simbolo, è possibile farlo in modo simile a come è stato rilevato l'offset del vettore. È possibile quadrare i dati che causeranno un picco di frequenza al doppio della frequenza del simbolo.

Come con il corriere, dovrai correggere la fase (tempistica) e compensare la deriva. Il solito metodo per entrambi questi problemi è cercare gli incroci zero. A meno che il rumore non sia abbastanza grave, dovrebbe attraversare solo il punto zero nel mezzo di una transizione di simboli da -1 a 1 o da 1 a -1. Anche se il rumore fa sì che ciò accada nel mezzo di un simbolo, non accadrà molto spesso.

Diagramma degli occhi

L'immagine qui sopra è generalmente chiamata "diagramma degli occhi" o "schema degli occhi". È largo due periodi di simboli e ha molti simboli "impilati" uno sopra l'altro. Non so se hai familiarità con gli oscilloscopi o no, ma puoi ottenere un oscilloscopio per mostrare un'immagine come questa. Ad ogni modo, le due "X" sono transizioni di simboli. Le linee alte e basse nelle X sono quando il simbolo passa da 1 a -1, e le linee basse e alte nelle X sono quando il simbolo passa da -1 a 1. Il punto in mezzo, dove il la linea rosa è, è il posto ottimale per campionare i dati per vedere se il simbolo è 1 o -1.

Questa stessa tecnica può essere utilizzata per gestire la deriva dei tempi dei simboli. Prendi una media corrente della distanza dall'attraversamento zero precedente e dall'attraversamento zero successivo. Se le due medie sono più o meno le stesse, tutto va bene. Se uno è più grande dell'altro, devi spostarti dove stai afferrando il tuo campione.

Dopo aver campionato i simboli nei punti corretti, i punti dati dovrebbero ottenere qualcosa che assomigli ai classici punti di costellazione BPSK.

Costellazione rumorosa di BPSK

Spero che questo possa essere d'aiuto.


Per migliorare questo meraviglioso post, forse potresti aggiungere una sezione di recupero dell'orologio prima del cronometraggio dei simboli?
LWZ,

Penso di sapere cosa hai in mente, ma non ne sono sicuro. Che cosa avevi in ​​mente in particolare?
Jim Clay,

Grazie mille! Non avevo pensato di cercare zero incroci o di tracciare il reale / immaginario su x / y in questo modo. Ho appena fissato i grafici delle fasi e mi chiedevo come sincronizzare tutto. Grazie ancora!
Keith

@JimClay, all'inizio della sezione Symbol Timing , hai detto che "dovresti normalmente conoscere il periodo del simbolo del segnale che stai tentando di demodulare.", E di solito questo viene raggiunto da un'unità di recupero dell'orologio, perché normalmente hai vinto ' t invia un orologio insieme ai tuoi dati. Per il segnale BPSK questo è facile, dove puoi semplicemente quadrare il tuo segnale, che rimuove i dati. Quindi guardi lo spettro di potenza, dovrebbe esserci una frequenza di picco che si chiama tono di orologio , che ti dà il periodo del simbolo.
LWZ,

Aggiunto un paragrafo sulla frequenza dei simboli.
Jim Clay,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.