Hai un buon insieme di circostanze qui; dovresti essere in grado di raggiungere il tuo obiettivo senza troppi problemi. Io non vedo nulla nella descrizione che eliminerebbe un'intera classe di modulazione (ad esempio manipolazione sfasamento , Frequency-Shift Keying , etc.). Alcuni dei fattori che andrebbero nella scelta di un formato adatto includono:
- L' efficienza spettrale richiesta (ovvero la quantità di dati che è necessaria in relazione alla larghezza di banda disponibile)
- I requisiti di complessità per il tuo ricevitore (che di solito è la parte più complicata del sistema)
- Quanti sforzi sei disposto a fare per sviluppare l'implementazione.
- Altre circostanze specifiche dell'applicazione (ad es. Se si dispone di una scarsa precisione di temporizzazione a una o entrambe le estremità, interferenze note o risposta del canale scadente)
Quindi, spuntandoli uno per uno per il tuo sistema, possiamo trovare alcune linee guida:
Sembra che il tuo più grande vincolo sia la risposta del tuo canale (che è limitata dal DAC della tua scheda audio). Se disponi di 40 kHz di larghezza di banda unilaterale disponibile, allora sarai limitato a una frequenza di simboli leggermente inferiore. Per una velocità dati target di almeno 40 kilobit al secondo, è necessario uno schema che trasmetta più bit per simbolo.
A condizione che la tua piattaforma integrata non sia caricata con troppe altre funzioni, un moderno processore ARM da 120 MHz dovrebbe essere in grado di gestire facilmente la demodulazione di quasi tutti i formati nell'intervallo di decine di kilobit al secondo.
Non sono sicuro in particolare con quale modello stai utilizzando, ma molti processori recenti forniscono un'integrazione molto stretta di ADC onboard con la memoria e il sottosistema di interruzione, forse consentendo di (senza intervento manuale della CPU) campionare automaticamente il segnale di ingresso in un determinato valutare, archiviare i campioni nella memoria integrata e attivare un interrupt del processore solo quando è disponibile un determinato blocco di campioni per l'elaborazione. So che alcuni dispositivi Atmel forniscono almeno questo tipo di funzionalità; Ho avuto un buon successo con loro in passato.
Suppongo che questo sia probabilmente un componente di un sistema più grande, quindi non devi costruire qualcosa di veramente complesso per soddisfare le tue esigenze. Fortunatamente, in base a ciò che hai detto, penso che dovresti essere in grado di implementare qualcosa che soddisfi le tue esigenze in modo abbastanza semplice. Suppongo che, poiché i due dispositivi sono collegati insieme, è probabile che si abbia un rapporto segnale-rumore molto elevato (40 dB o superiore), che per le modulazioni digitali è in genere misurato comeEbN0. Ciò semplifica la vita, poiché probabilmente potresti saltare integrazioni come la codifica della correzione degli errori (o almeno implementare uno schema molto semplice che catturerebbe gli errori molto rari che ti aspetteresti in un simile SNR).
Per quanto riguarda le circostanze speciali, per questo sistema, non mi aspetterei molto da nessuno. Mi aspetterei che la precisione dell'oscillatore sul lato PC sia abbastanza buona (con un minimo controllo a cristalli , quindi sei nel raggio di <50 ppm o giù di lì; forse molto meglio se l'oscillatore è calibrato usando un'altra fonte più precisa ). È probabile che il lato incorporato sia lo stesso; Suppongo che tu stia usando un oscillatore a cristallo come sorgente di clock. Dato che le due estremità sono cablate insieme, suppongo che tu non abbia interferenze di nota.
Quindi, suddividendo tutti questi elementi in un'unica raccomandazione, probabilmente inizierei il percorso di un approccio di quadratura con sfasamento in quadratura (QPSK) a 24 kilosimboli al secondo . A 2 bit per simbolo, ciò produce una velocità dati di 48 kilobit al secondo, che è superiore alle vostre esigenze. Questa particolare tariffa rende la tua implementazione un po 'più semplice; poiché il DAC di uscita funziona a 96 kHz, ciò comporta 4 campioni per simbolo (è sempre più facile eseguire un numero intero di campioni per tempo del simbolo). Probabilmente proverei a progettare il lato incorporato in modo che possa campionare alla stessa frequenza di 96 kHz, se possibile; questo evita la necessità di fare qualsiasi ricampionamento sull'estremità più affamata di risorse.
Per evitare problemi con la tacca DC utilizzata dalla scheda audio DAC, è possibile modulare il segnale QPSK su un vettore a 24 kHz. Quindi, lo spettro del segnale modulato avrebbe un valore nullo in DC, che si allineerebbe con la tacca. È possibile che la tacca non finisca per essere un problema (soprattutto se è davvero larga solo pochi Hz come suggerito). In tal caso, potresti potenzialmente cavartela con uno schema ancora più semplice che funziona solo in banda base, bypassando del tutto la modulazione del vettore.
QPSK è una buona scelta per la sua semplicità, sia sul trasmettitore che sul ricevitore. Al tuo SNR, potresti ottenere una maggiore efficienza spettrale usando uno schema più complicato come la modulazione di ampiezza in quadratura (QAM) , ma la proprietà dell'inviluppo costante dei segnali PSK è attraente dal punto di vista della complessità del ricevitore. Come nota, se in futuro avessi veramente bisogno di più bit per simbolo, potresti passare a una costellazione PSK di ordine superiore come 8 o 16 PSK. Tuttavia, questi non sono ottimali dal punto di vista delle prestazioni in termini di velocità di errore bit rispetto alle costellazioni QAM.
Per quanto riguarda l'implementazione di una libreria, non sono a conoscenza di nulla che si possa semplicemente inserire, soprattutto per una piattaforma integrata. L'implementazione del ricevitore è probabilmente in qualche modo legata all'interfaccia hardware. Potresti essere in grado di trovare alcune implementazioni esistenti per i vari passaggi richiesti per il demodulatore, ma dovrai almeno modificare ciò che potresti trovare per funzionare bene sulla tua piattaforma. Il progetto GNU Radio è un buon posto dove guardare se vuoi solo vedere le implementazioni C ++ di molte diverse operazioni di elaborazione del segnale di comunicazione, e potrebbe anche fornire un utile quadro per implementare il trasmettitore sul tuo PC. In sintesi, i passaggi di alto livello che il ricevitore dovrebbe fare dovrebbero includere:
Questo potrebbe sembrare un processo complicato, ma costruire un ricevitore pratico anche per una situazione semplice come questa può essere molto illuminante. Commenta se c'è qualcos'altro che ho lasciato fuori.