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 ):
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]=R{xi[n]}⋅R{di[n]}+I{xi[n]}⋅I{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_decim
e lpf_decim
dando 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.