Comunicação de dados PC-PC através de som FSK / PSK / DSSS

8

Para me divertir e trabalhar, eu tenho que implementar um aplicativo baseado em java que pode codificar texto ou dados para soar e transmitir usando o alto-falante do PC e, no lado receptor, há um microfone com software decodificador.

Eu estava pensando em usar FSK (syn ou assíncrono ou sugerir) para a implementação:

Texto (dados) --- modular ---> onda portadora de áudio de 10khz-20khz ---> Transmissão pelo ar ---> microfone -> demodular ---> Exibir texto ou dados.

Minhas principais considerações são:

  • ~ 200bps de largura de banda, se não mais
  • resiliente ao ruído até certo nível
  • de preferência onda portadora de 16khz - 20khz com amostragem de 44.1khz (há menos ruído nessa área e não é realmente audível para pessoas mais velhas e microfones, os alto-falantes são baratos e estão disponíveis em laptops)
  • Lógica de codificação não muito complexa.

Qual modulação funcionaria melhor com menos esforços de codificação? Alguma recomendação em bibliotecas / amostras para obter FSK / BFSK / PSK ou DSSS usando java?

geeknizer
fonte
3
Você poderia usar apenas um dos padrões antigos do modem, por exemplo, o V21, que era muito simples, 300 baud, full duplex. Deve haver muita documentação e código fonte por aí. Você pode mudar a banda base até 17 kHz usando a mixagem, se necessário.
Paul R
11
Cuidado ao empurrar a frequência da portadora muito alta. A maioria dos dispositivos acústicos comerciais começa a ter características de resposta em frequência que não são bem definidas quando você se aproxima de 20Khz. Para alguns dispositivos, 16Khz pode ser um desafio. É aceitável que seu esquema tenha um parâmetro que defina a frequência / banda da portadora?
User2718
11
Para adicionar ao comentário de @PaulR, você pode pegar uma especificação como V21 e adaptá-la para corresponder à faixa de frequência da operadora escolhida. Se você quiser prosseguir com isso, tenho certeza de que há experiência suficiente neste site para ajudar na adaptação.
user2718
@PaulR Você pode me dar um exemplo de implementação em java?
Geeknizer # 03/02
11
Claro - apenas me dê alguns dias para escrever para você ... #
Paul R

Respostas:

6

Este é realmente um problema muito difícil por causa das características do canal. A maioria dos alto-falantes do computador tem largura de banda bastante limitada, não linearidades significativas e a acústica da sala geralmente varia de tempo.

A vida se torna MUITO mais fácil se você pode simplesmente conectar um cabo da saída de fone de ouvido de um PC à entrada de linha do outro.

Hilmar
fonte
2
Eu tenho trabalhado em um esquema de comunicação muito semelhante: modulação / desmodulação de áudio fsk e acabei de encontrar uma implementação de modem de áudio linux usando o fsk. Esse sw pode atingir 300 e 1200 bauds usando o canal de áudio como link de comunicação entre dois pc e fsk. Poderia ser um ponto de partida muito bom (minha implementação atinge razoavelmente 200 bauds em um ambiente barulhento usando frequências em torno de 500-4000 Hz para problemas relacionados à resposta de frequência de dispositivos de áudio para PC). link
Yozek
@Yozek, você pode me indicar esse código fonte?
Geeknizer #
11
O URL da implementação do minimodem está aqui: whence.com/minimodem/minimodem-0.16.1.tar.gz Ainda estou trabalhando em uma implementação pessoal simples do AFSK em java e no objetivo-C, mas estou tendo alguns problemas com ruído ambiental / de fundo e limite de baixa taxa de transmissão: cerca de 100/200 baud (ou bit / s), não muito. Mas não sei se a causa é uma limitação prática / fisiológica ou se é um problema meu 'não é tão inteligente o suficiente'. Eu acho que o segundo ...
Yozek 03/02
1

Sim, você definitivamente deve usar o FSK, mas ele deve ser assíncrono e aqui está o porquê. A desmodulação do FSK de forma síncrona é chamada de desmodulação coerente. A desmodulação do FSK exige coerentemente o bloqueio de fase da portadora de entrada (sincronização de fase), o que normalmente é feito com loops de bloqueio de fase (PLL) que não funcionam bem, a menos que você tenha uma relação sinal / ruído (SNR) de pelo menos 10 dB. Normalmente, a transmissão de áudio não possui um SNR tão alto; portanto, esqueça a demodulação coerente. Além disso, na prática, com sinais eletromagnéticos, o FSK não coerente exige, no máximo, apenas 1 dB mais Eb / Não do que o FSK coerente para Pb ≤ 10-4 (isso significa que, para obter a mesma probabilidade de erro de bit Pb, você só precisa transmitir um valor extra). dB de potência em cada bit). No entanto, o desmodulador FSK não coerente é consideravelmente mais fácil de construir, pois não é necessário gerar sinais de referência coerentes. Portanto, em sistemas práticos, quase todos os receptores FSK usam demodulação não coerente, porque todo mundo prefere transmitir um dB extra de energia em vez de enfrentar todos os problemas de sincronização.

Respondendo às suas principais considerações:

Largura de banda de 200bps, se não mais: atingi 200 bps usando uma fase contínua de portadoras ortogonais 8fsk, definindo o smartphone a 1 m de distância do alto-falante.

Resiliente ao ruído até um certo nível: implementei um código de correção de erros BCH, com a capacidade de reparar até 8 erros por bloco de dados. Os códigos BCH têm seus maiores ganhos de codificação quando há uma redundância de 25 a 50% adicionada

preferencialmente onda portadora de 16khz - 20khz com amostragem de 44.1khz: eu sugeriria aumentar a frequência de amostragem em até 48 kHz (o que é bastante comum hoje em dia nos smartphones) e limitar sua banda de operação entre 17,5 ou 18 e 21,5 kHz. Se você usar 44,1, precisará trabalhar entre 17,5 ou 18 e 20,5 kHz. Mas é preciso ter muito cuidado com o alto-falante e o microfone que você seleciona, pois nem todos operam nessas altas frequências. Você deve fazer uma análise de resposta de frequência deles. Se você estiver usando um PC, eu recomendaria o ARTA ou o Audacity ou se você é um programador Matlab ou Octave. Se você estiver usando um smartphone, recomendo qualquer aplicativo de análise de espectro de áudio

Lógica de codificação não muito complexa: eu recomendaria o demodulador fsk de quadratura de correlação não coerente. Muito mais leve que qualquer implementação baseada em fft. Especialmente se você estiver a menos de 1 m de distância, onde o doppler e o multicaminho não o afetam tanto

VMMF
fonte