Objetivo
Projetar um mo dulator / dem par odulator aos dados transmitem com precisão o mais rápido possível sobre simulado o serviço telefônico comum (POTS) .
Passos
- Gere alguns dados aleatórios (
/dev/random
ou similares) que levarão de 3 a 4 segundos para transmitir - Module os dados com seu modulador para produzir um arquivo de áudio
- Passe o arquivo de áudio pelo simulador de POTS . Se você não possui Python / Scipy, pode fazer upload de um arquivo com o formulário ou fazer uma solicitação de API JSON.
- Desmodule o arquivo de áudio de volta aos dados binários
- Valide se a entrada e a saída são iguais * (o limite de 1 em cada 1000 bits pode ser corrompido)
- Pontuação é o número de bits transmitidos dividido pelo tamanho do arquivo de áudio (bits / segundo)
Regras
- O arquivo de entrada deve ter 3-4 segundos, 44,1 kHz, mono.
- Execute o simulador com um SNR de 30 dB (é padrão)
- O desmodulador deve reconstruir os dados transmitidos com uma taxa de erro de bits não superior a 10 -3 (1 por mil bits).
- Nenhuma compactação digital é permitida (ou seja, compactar os dados. Está fora do escopo do desafio.)
- Nenhuma tentativa de inserir dados em frequências acima de 4 kHz. (Meus filtros não são perfeitos, mas são razoavelmente semelhantes a POTS com um número relativamente pequeno de toques.)
- Se o seu protocolo de modem exigir um preâmbulo curto (não mais que 1 segundo) para sincronizar / calibrar o receptor, ele não será penalizado.
- Se possível, hospede o arquivo de áudio em algum lugar acessível para que possamos ouvir uma cacofonia de bipes e boops.
Exemplo
Aqui está um exemplo de caderno que demonstra a modulação / desmodulação com um simples "on-off keying" (amostras de áudio incluídas!).
Marcaria 100 (bits / segundo). Observe que está transmitindo com um SNR de 5 dB muito pior.
code-challenge
audio
Nick T
fonte
fonte
wget wikipedia.org/Special:Random | grep title | texttospeech audio.wav
speechtotext POTSaudio.wav | wget wikipedia/wiki/$text
Respostas:
MATLAB, 1960 bps
Aqui está minha tentativa atualizada:
Desde a minha primeira tentativa, eu brinquei um pouco. Agora existe um pequeno preâmbulo no início (períodos de 18 bits, mas pode ser mais curto) que contém apenas uma onda cosseno. Eu extraí isso e o repliquei para criar portadores de seno e cosseno em fases corretamente para desmodulação - como é um preâmbulo muito curto, não contei na taxa de bits conforme suas instruções.
Também desde a primeira tentativa, agora estou usando uma constelação QAM8 para obter 3 bits por símbolo em vez de 2. Isso efetivamente duplica a taxa de transferência. Então, com uma operadora de ~ 2.4kHz, estou atingindo 1960bps.
Também aprimorei a detecção de símbolos para que a média não seja afetada pelos tempos de subida lentos causados pela filtragem - basicamente apenas a segunda metade de cada período de bit é calculada para remover o impacto dos tempos de subida.
Ainda longe da largura de banda do canal teórico de 40kbps da teoria de Shannon-Hartley (assumindo o SNR de 30dB)
Apenas para quem gosta de sons horríveis , esta é a nova entrada:
E caso alguém esteja interessado, esta é a entrada anterior de 960bps
fonte