Demodulazione FSK, recupero temporizzazione bit


10

Attualmente sto implementando la modulazione acustica e la demodulazione di FSK. Non sono un tipo che elabora i segnali, quindi qualsiasi aiuto sul ripristino dei tempi di bit sarebbe molto apprezzato. Attualmente ho implementato il demodulatore usando due filtri abbinati per ogni tono (con una differenza di fase di per il rilevamento non coerente). Fondamentalmente l'output di ciascun filtro sono picchi con ampiezze diverse. Ho due domande:90

  • Come posso eseguire il ripristino della temporizzazione dei bit?
  • Cosa consigliate per il preambolo di sincronizzazione dei pacchetti (chirp, codice di barker, codice aureo ecc.)?

Ho cercato su Google l'algoritmo di Gardner ma non sono sicuro se sia applicabile e come. Considera che sto attualmente lavorando con 2 frequenze con bitrate di 800 bps usando la scheda audio.

Risposte:


8

Attualmente sto implementando la modulazione acustica e la demodulazione di FSK. Non sono un ragazzo che elabora segnali ...

Dal momento che dici di avere filtri abbinati e menzioni il rilevamento non coerente, penso che tu sia già praticamente una persona di comunicazione digitale - il passo per essere una persona DSP è piuttosto piccolo :)

L'approccio SDR sincronizzatore completo

2fsymbol,max

Mi sono trasformato in un rapido demod FSK con segnale passa-banda di valore reale (penso che se lo avessi fatto di nuovo, avrei sostituito i due filtri passa-banda con una traduzione di frequenza combinata e un filtro passa-basso, dandomi una banda base complessa, o avrei lanciato un banco filtro polifase al problema, ma qualunque cosa) in GNU Radio con l'aiuto del compagno GNU Radio (file del diagramma di flusso qui ):

Recv

Il punto è che probabilmente vogliamo sincronizzare il simbolo del sincronismo tra il blocco della divisione e quello della soglia. Potremmo farlo in seguito - l'approccio classico, "microcontrollore e progettazione hardware digitale" sarebbe in effetti il ​​lavello dell'orologio Muller & Mueller e funzionerebbe anche lì - ma non sprechiamo le informazioni sulla pendenza.

Quindi, aggiungerei una sincronizzazione dell'orologio polifase qui; Devo ammettere di non poterlo formulare meglio di quanto Tom, un discepolo di harris, abbia fatto nella documentazione dell'omonimo blocco GNU Radio :

Sincronizzatore di temporizzazione che utilizza banchi filtro polifase.

Questo blocco esegue la sincronizzazione della temporizzazione per i segnali PAM minimizzando la derivata del segnale filtrato, che a sua volta massimizza l'SNR e minimizza l'ISI.

sincsinc(0)=1,sinc(0)=0

di[n]ixi[n]

e[n]={xi[n]}{di[n]}+{xi[n]}{di[n]}2.0 .

xi[n]xi[n]xi[n]invece del solo segno è particolarmente utile per segnali con SNR basso.

e[n]dkdratedratedratedkdratedkdαdβdαdβgain24

Rendersi conto che questa è la frequenza audio

Quindi, parametrizzando correttamente questo blocco (e probabilmente riducendo bpf_decime lpf_decimdando al sincronizzatore più margine per spostare le fasi) è possibile creare un ripristino della temporizzazione dei simboli molto stabile, che sarebbe totalmente eccessivo per la tua applicazione 😁

Dato che stai eseguendo il campionamento con una scheda audio su entrambe le estremità, e poiché presumo che non devi avere a che fare con Doppler, la frequenza dei simboli ha una relazione fissa con le frequenze portanti (ad es. Il lato trasmittente ha un portatore più alto con un periodo di 8 campioni di schede audio e un simbolo richiede sempre diciamo 128 campioni, quindi c'è un rapporto fisso), puoi prendere una scorciatoia:

darctandt[n]

Per quanto riguarda la sincronizzazione dei pacchetti

Bene, dal momento che hai un demodulatore funzionante che probabilmente finirà troppo fuori sincrono quando non è presente alcun segnale, usa semplicemente una sequenza di dati nota fissa per trovare il tuo pacchetto.

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.