Comunicazione dati da PC a PC tramite Sound FSK / PSK / DSSS


8

Per divertimento e lavoro devo implementare un'applicazione basata su Java in grado di codificare testo o dati per il suono e la trasmissione utilizzando l'altoparlante del PC e sul lato di ricezione è presente un microfono con software di decodifica.

Stavo pensando di usare FSK (syn o async o suggest) per l'implementazione:

Testo (dati) --- modula ---> onda portante audio 10khz-20khz ---> Trasmissione aerea ---> microfono -> demodulazione ---> Visualizza testo o dati.

Le mie considerazioni principali sono:

  • ~ 200bps di larghezza di banda, se non di più
  • resiliente al rumore fino a un certo livello
  • preferibilmente onda portante da 16 kHz - 20 kHz con campionamento di 44,1 kHz (c'è meno rumore in quest'area e non è udibile per gli anziani e i microfoni, gli altoparlanti sono economici, prontamente disponibili nei laptop)
  • Logica di codifica non troppo complessa.

Quale modulazione funzionerebbe meglio con il minimo sforzo di codifica? Qualche consiglio su librerie / campioni per ottenere FSK / BFSK / PSK o DSSS usando Java?


3
Potresti semplicemente usare uno dei vecchi standard del modem, ad es. V21 che era molto semplice, 300 baud, full duplex. Dovrebbero esserci molta documentazione e codice sorgente là fuori. Puoi spostare la banda base fino a 17 kHz usando il missaggio, se necessario.
Paul R,

1
Attento a spingere la frequenza portante troppo alta. La maggior parte dei dispositivi acustici commerciali inizia ad avere caratteristiche di risposta in frequenza che non sono ben definite quando ci si avvicina a 20 Khz. Per alcuni dispositivi, 16 Khz potrebbe essere una sfida. È accettabile che il tuo schema abbia un parametro che imposta la frequenza / banda del vettore?
user2718,

1
Per aggiungere al commento di @PaulR, puoi prendere una specifica come V21 e adattarla per adattarla alla gamma di frequenza del vettore scelto. Se vuoi perseguire questo, sono sicuro che ci sia abbastanza esperienza su questo sito per aiutare con l'adattamento.
user2718,

@PaulR Puoi darmi un esempio di implementazione in Java?
Geeknizer,

1
Certo - dammi solo qualche giorno per scriverlo per te ...
Paul R

Risposte:


6

Questo è in realtà un problema davvero difficile a causa delle caratteristiche del canale. La maggior parte degli altoparlanti per computer ha una larghezza di banda abbastanza limitata, presenta significative non linearità e l'acustica della stanza è spesso una variante temporale.

La vita diventa MOLTO più semplice se riesci a far passare un cavo dall'uscita cuffie di un PC all'ingresso di linea dell'altro.


2
Ho lavorato su uno schema di comunicazione molto simile: modulazione / demodulazione audio fsk e ho appena trovato un'implementazione del modem audio linux usando fsk. Questo sw può raggiungere 300 e 1200 baud usando il canale audio come collegamento di comunicazione tra due pc e fsk. Potrebbe essere un ottimo punto di partenza (la mia implementazione raggiunge abbastanza i 200 baud in un ambiente rumoroso usando frequenze intorno a 500-4000 Hz per problemi relativi alla risposta in frequenza dei dispositivi audio per PC). link
Yozek,

@Yozek puoi indicarmi quel codice sorgente?
Geeknizer,

1
L'URL per l'implementazione del minimodem è qui: whence.com/minimodem/minimodem-0.16.1.tar.gz Sto ancora lavorando a una semplice implementazione personale di AFSK in java e obiettivo-C, ma ho dei problemi con rumore ambientale / di fondo e limite di velocità di trasmissione basso: circa 100/200 baud (o bit / sec), per niente. Ma non so se la causa sia un limite pratico / fisiologico o se sia un mio problema di implementazione non abbastanza intelligente. Penso che il secondo ...
Yozek,

1

Sì, dovresti assolutamente usare FSK ma deve essere asincrono ed ecco perché. La demodulazione di FSK in modo sincronico si chiama demodulazione coerente. La demodulazione di FSK richiede coerentemente il blocco di fase del portante in entrata (sincronizzazione di fase), che viene normalmente eseguito con loop di blocco di fase (PLL) che non funzionano bene a meno che non si abbia un rapporto segnale / rumore (SNR) di almeno 10 dB o meno. Normalmente la trasmissione audio non ha un SNR così elevato, quindi dimentica la demodulazione coerente. Inoltre, in pratica con i segnali elettromagnetici, l'FSK non coerente richiede almeno 1 dB in più di Eb / No rispetto a quello dell'FSK coerente per Pb ≤ 10−4 (ciò significa che per ottenere la stessa probabilità di errore bit Pb è necessario solo trasmettere un extra dB di potenza in ciascun bit). Tuttavia, il demodulatore FSK non coerente è notevolmente più semplice da costruire poiché non è necessario generare segnali di riferimento coerenti. Pertanto, nei sistemi pratici quasi tutti i ricevitori FSK usano una demodulazione non coerente perché tutti preferiscono trasmettere un dB di potenza in più invece di entrare in tutti quei problemi di sincronizzazione.

Rispondere alle tue considerazioni principali:

Larghezza di banda di 200 bps se non di più: ho raggiunto 200 bps utilizzando una portante ortogonale a fase continua 8 fsk, posizionando lo smartphone a 1 m di distanza dall'altoparlante.

Resilienza al rumore fino a un certo livello: ho implementato un codice di correzione degli errori BCH, con la possibilità di riparare fino a 8 errori per blocco di dati. I codici BCH hanno i loro maggiori guadagni in termini di codifica quando si aggiunge una ridondanza dal 25 al 50%

preferibilmente onda portante da 16 kHz - 20 kHz con campionamento di 44,1 kHz: suggerirei di aumentare la frequenza di campionamento fino a 48 kHz (che è abbastanza comune al giorno d'oggi negli smartphone) e di limitare la banda operativa tra 17,5 o 18 e 21,5 kHz. Se usi 44.1, devi lavorare tra 17,5 o 18 e 20,5 kHz. Ma devi stare molto attento con l'altoparlante e il microfono che selezioni poiché non tutti funzionano a queste alte frequenze. Devi fare un'analisi di risposta in frequenza di essi. Se stai usando un PC, consiglierei ARTA o Audacity o se sei un programmatore Matlab o Octave. Se stai usando uno smartphone, consiglierei qualsiasi app di analisi dello spettro audio

Logica di codifica non troppo complessa: consiglierei il demodulatore fsk di quadratura di correlazione non coerente. Molto più leggero di qualsiasi implementazione basata su fft. Soprattutto se sei a meno di 1 m di distanza da dove Doppler e Multipath non ti interessano così tanto

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.