Quale schema di modulazione digitale sarebbe adatto per la trasmissione di dati digitali attraverso l'uscita di una scheda audio per PC


8

Devo generare un flusso di dati su 40 kbit/so più veloce da un sistema informatico la cui unica periferica di output accessibile è l'interfaccia audio. Questa interfaccia ha specifiche ragionevoli,96 kHz frequenza di campionamento, con 24-bitrisoluzione, ma lo stadio di uscita è accoppiato in CA. È disponibile solo un canale di uscita. Un buon presupposto sarebbe che si comporta come un filtro passa-banda con a4 Hz per 40 kHz banda passante con meno di 1 dBattenuazione; e che ha un90 dBSNR. Non ho altri vincoli di complessità sull'emettitore.

Non mi aspetto ulteriore rumore / attenuazione sul cavo che collega l'emettitore al ricevitore.

Il ricevitore è un sistema incorporato con a 120 MHzMCU Cortex-M3. Se necessario, si possono ipotizzare prestazioni di acquisizione audio simili. Un ulteriore chip di demodulazione dedicato (se esiste una cosa del genere per frequenze così basse) potrebbe essere un'opzione.

  • Quale schema di modulazione digitale sarebbe adatto a questa situazione?
  • Esistono già librerie di codici (software lib radio definiti dal software?) Che mi impedirebbero di reinventare la ruota?
  • Esistono applicazioni esistenti con vincoli simili a cui potrei cercare ispirazione?

Presumo che non passerà attraverso gli altoparlanti?
Jim Clay,

No, solo un breve cablaggio tra la scheda audio e il ricevitore.
Pichenettes,

Risposte:


8

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:

  • Se è stata utilizzata una frequenza portante diversa da zero:

    • Sincronizzazione della frequenza: localizza e traccia l'offset della frequenza portante a causa di disallineamenti dell'oscillatore tra il trasmettitore e il ricevitore (in molti casi, tale offset della frequenza sarà approssimativamente costante nel tempo)
    • Demodulazione portante: traduce il segnale in banda base, producendo due segnali in fase e quadratura (I / Q) (spesso espressi come segnale complesso in banda base ).
  • Filtraggio abbinato: passa il segnale in banda base attraverso un filtro abbinato alla forma dell'impulso usata sul trasmettitore (probabilmente puoi cavartela con un impulso rettangolare)
  • Sincronizzazione dei tempi: localizza e traccia i tempi che corrispondono alle transizioni dei simboli; ciò può essere fatto tenendo traccia delle posizioni dei picchi nell'output del filtro abbinato nel modulo tempo simbolo
  • Bit slicing: converte le uscite del filtro corrispondenti ai tempi di campionamento dei simboli in decisioni di bit difficili
  • Serializzazione: assicurati di scrivere più bit per simbolo nel giusto ordine!

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.


Grazie per i suggerimenti! Ho qualcosa che funziona bene in simulazione, ora per il port su piattaforme reali. Ho iniziato con QPSK e ho visto fino a che punto avrei potuto spingere verso l'alto con 256-QAM. 256-QAM sembra essere robusto per il tipo di rumore che mi aspetterei dal solo utilizzo del DAC SAR integrato nella mia MCU piuttosto che in un codec audio esterno. Userò DMA per questo, quindi sta riempiendo direttamente un buffer nella RAM e elaboro i dati per blocchi di 16 campioni alla volta. La parte più difficile stava allineando i miei segnali Q / I locali. Ho aggiunto una sequenza di sincronizzazione periodica nel protocollo per risolvere l'incertezza pi / 2 su questo.
Pichenettes,

Sono contento di sapere che hai avuto qualche successo nel simularlo. Ti avvertirò che costellazioni QAM di alto ordine possono richiedere implementazioni complesse del ricevitore a meno che tu non abbia un canale molto ben educato. I punti di costellazione sono così densi che il tuo sistema diventa molto sensibile all'accuratezza della sincronizzazione di vari tipi, come frequenza / fase portante e frequenza / fase di temporizzazione dei simboli. Avrai anche bisogno di assicurarti di avere un SNR a decisione difficile di almeno ~ 25 dB o giù di lì se vuoi un basso (meno di106) bit rate rate senza correzione errori.
Jason R,

Inoltre, se stai usando QAM (o qualsiasi altro schema che contiene la modulazione di ampiezza), c'è un altro blocco importante da aggiungere all'elenco alla fine della mia risposta: avrai bisogno di un qualche tipo di meccanismo di controllo del guadagno. Fondamentalmente, dovrai decidere dove posizionare le regioni decisionali nel piano per ciascun valore di simbolo. Un approccio consiste nell'utilizzare un circuito automatico di controllo del guadagno per forzare la potenza media del segnale a un determinato valore, quindi strutturare le regioni di decisione di conseguenza per quel livello di potenza medio.
Jason R,
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.