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