Qual esquema de modulação digital seria adequado para transmitir dados digitais através da saída de uma placa de som de PC

8

Preciso enviar um fluxo de dados a ou mais rápido de um sistema de computador cuja única periférica de saída acessível é a interface de áudio. Este interface tem características razoáveis, 96  kHz taxa de amostragem, com 24 - bits de resolução, mas a fase de saída é acoplado em AC. Apenas um canal de saída está disponível. Uma boa suposição seria que ele se comporte como um filtro passa-banda com uma faixa passa-banda de 4  Hz a 40  kHz com menos de - 1  dB de atenuação; e que possui um SNR de 90  dB . Não tenho nenhuma outra restrição de complexidade no emissor.40 kbit/s96 kHz24bit4 Hz40 kHz1 dB90 dB

Não espero ruído / atenuação adicionais no cabo que conecta o emissor ao receptor.

O receptor é um sistema embutido com um MCU Cortex-M3 de . Se necessário, pode ser assumido um desempenho semelhante de aquisição de áudio. Um chip de desmodulação dedicado adicional (se existe algo para essas frequências baixas) pode ser uma opção.120 MHz

  • Qual esquema de modulação digital seria adequado para essa situação?
  • Já existem bibliotecas de código (bibliotecas de rádio definidas por software?) Que me impediriam de reinventar a roda?
  • Existem aplicativos existentes com restrições semelhantes nas quais eu poderia buscar inspiração?
pichenettes
fonte
Presumo que não passará pelos alto-falantes?
Jim Clay
Não, apenas cabos curtos entre a saída da placa de som e o receptor.
Pichenettes # 18/12

Respostas:

8

Você tem um bom conjunto de circunstâncias aqui; você deve conseguir atingir seu objetivo sem muita dificuldade. Não vejo nada na sua descrição que elimine toda uma classe de modulação (por exemplo , chaveamento de mudança de fase, chaveamento de mudança de frequência etc.). Alguns dos fatores que escolheriam um formato adequado incluem:

  • A eficiência espectral necessária (ou seja, quanto você precisa de throughput de dados em relação à largura de banda disponível)
  • Os requisitos de complexidade para o seu receptor (que geralmente é a parte mais complicada do sistema)
  • Quanto esforço você está disposto a colocar no desenvolvimento da implementação.
  • Outras circunstâncias específicas da sua aplicação (por exemplo, se você tiver uma precisão de tempo ruim em uma ou ambas as extremidades, interferência conhecida ou uma resposta de canal ruim)

Assim, marcando-as uma a uma para o seu sistema, podemos apresentar algumas diretrizes:

  • Parece que sua maior restrição é a resposta do canal (que é limitada pelo DAC da sua placa de som). Se você tiver 40 kHz de largura de banda unilateral disponível, ficará limitado a uma taxa de símbolos um pouco abaixo disso. Para uma taxa de dados alvo de pelo menos 40 kilobits por segundo, convém um esquema que transmita vários bits por símbolo.

  • Desde que sua plataforma incorporada não seja carregada com muitas outras funções, um moderno processador ARM de 120 MHz deve ser capaz de lidar com a desmodulação de quase todos os formatos na faixa de dezenas de kilobits por segundo.

    Não tenho certeza especificamente de qual modelo você está executando, mas muitos processadores recentes fornecem uma integração muito estreita de ADCs integrados com o subsistema de memória e interrupção, talvez permitindo (sem intervenção manual da CPU) amostrar automaticamente o sinal de entrada em um especificado , armazene as amostras na memória interna e acione a interrupção do processador apenas quando um bloco de amostras de determinado tamanho estiver disponível para ser processado. Eu sei que alguns dispositivos Atmel, no mínimo, fornecem esse tipo de funcionalidade; Eu tive um bom sucesso com eles no passado.

  • EbN0

  • No que diz respeito a circunstâncias especiais, para este sistema, eu não esperaria muito. Eu esperaria que a precisão do oscilador no lado do PC fosse muito boa (no mínimo controlado por cristal , então você está na faixa de <50 ppm ou mais; possivelmente muito melhor se o oscilador for calibrado usando outra fonte mais precisa ) O lado incorporado provavelmente será o mesmo; Suponho que você esteja usando um oscilador de cristal como fonte do relógio. Como as duas extremidades estão conectadas, presumo que você não tenha interferência.

Então, juntando tudo isso em uma única recomendação, eu provavelmente começaria o caminho de uma abordagem de mudança de fase em quadratura (QPSK) a 24 quilos de símbolos por segundo . Com 2 bits por símbolo, isso gera uma taxa de dados de 48 kilobits por segundo, que excede seus requisitos. Essa taxa específica facilita a sua implementação; como o DAC de saída está funcionando a 96 kHz, isso resulta em 4 amostras por símbolo (é sempre mais fácil executar em um número inteiro de amostras por tempo de símbolo). Eu provavelmente tentaria projetar o lado incorporado para que ele amostrasse na mesma taxa de 96 kHz, se possível; isso evita a necessidade de fazer qualquer reamostragem na extremidade com menos recursos.

Para evitar problemas com o entalhe DC que o DAC da placa de som emprega, você pode modular o sinal QPSK em uma operadora a 24 kHz. Então, o espectro do sinal modulado teria um valor nulo em DC, o que seria alinhado com o seu entalhe. É possível que o entalhe possa acabar não sendo um problema (especialmente se tiver apenas alguns Hz de largura, como sugerido). Nesse caso, você poderia se dar bem com um esquema ainda mais simples que funciona apenas na banda base, ignorando completamente a modulação da operadora.

O QPSK é uma boa escolha devido à sua simplicidade, tanto no transmissor quanto no receptor. No seu SNR, você pode obter maior eficiência espectral usando um esquema mais complicado, como modulação em amplitude em quadratura (QAM) , mas a propriedade de envelope constante dos sinais PSK é atraente do ponto de vista da complexidade do receptor. Como uma observação, se você realmente precisa de mais bits por símbolo no futuro, poderá passar para uma constelação de PSK de ordem superior como 8 ou 16-PSK. No entanto, eles são abaixo do ideal do ponto de vista do desempenho da taxa de erros de bits quando comparados às constelações QAM.

No que diz respeito à implementação de uma biblioteca, não estou ciente de nada que você possa ir e vir, especialmente para uma plataforma incorporada. É provável que a implementação do seu receptor esteja ligada à interface de hardware até certo ponto. Você pode encontrar algumas implementações existentes para as várias etapas necessárias para o demodulador, mas precisará pelo menos ajustar o que pode funcionar para funcionar bem em sua plataforma. O projeto GNU Radio é um bom lugar para procurar se você só deseja ver implementações em C ++ de muitas operações diferentes de processamento de sinais de comunicação e pode até gerar uma estrutura útil para implementar o transmissor a bordo do seu PC. Como um resumo, as etapas de alto nível que seu receptor precisaria executar incluiriam:

  • Se uma frequência portadora diferente de zero foi usada:

    • Sincronização de frequência: localize e rastreie o deslocamento de frequência da portadora devido a diferenças de oscilador entre o transmissor e o receptor (em muitos casos, esse deslocamento de frequência será aproximadamente constante ao longo do tempo)
    • Desmodulação de portadora: converta o sinal em banda base, produzindo dois sinais em fase e quadratura (I / Q) (geralmente expressos como um sinal complexo de banda base ).
  • Filtragem correspondente: transmita o sinal da banda base através de um filtro correspondente à forma de pulso usada no transmissor (é possível que você se afaste com um pulso retangular)
  • Sincronização de tempo: localize e rastreie os horários que correspondem às transições de símbolos; isso pode ser feito rastreando os locais de pico no módulo de saída do filtro correspondente, o tempo do símbolo
  • Fatiamento de bits: converta as saídas de filtro correspondentes nos tempos de amostra dos símbolos em decisões de bits difíceis
  • Serialização: escreva os vários bits por símbolo na ordem certa!

Pode parecer um processo complicado, mas construir um receptor prático para uma situação simples como essa pode ser muito esclarecedor. Apenas comente se há mais alguma coisa que eu deixei de fora.

Jason R
fonte
Obrigado pelas indicações! Eu tenho algo que funciona bem em simulação, agora para portar para as plataformas reais. Comecei com o QPSK e vi até que ponto conseguia avançar com o 256-QAM. O 256-QAM parece ser robusto ao tipo de ruído que eu esperaria apenas usando o SAR DAC embutido no meu MCU, em vez de um codec de áudio externo. Vou usar o DMA para isso, então ele está preenchendo diretamente um buffer na RAM e processo os dados por blocos de 16 amostras por vez. A parte mais difícil foi alinhar meus sinais locais de Q / I. Adicionei uma sequência de sincronização periódica no protocolo para resolver pi / 2.
Pichenettes #
106
Além disso, se você estiver usando o QAM (ou qualquer outro esquema que contenha modulação de amplitude), há outro bloco importante a ser adicionado à lista no final da minha resposta: você precisará de algum tipo de mecanismo de controle de ganho. Basicamente, você terá que decidir onde no plano colocar as regiões de decisão para cada valor de símbolo. Uma abordagem é usar um loop de controle de ganho automático para forçar a potência média do sinal para um determinado valor e estruturar as regiões de decisão de acordo com esse nível de potência médio.
Jason R