Objectif
Concevoir un mo dulator / dem paire odulator de données avec précision transmettre le plus rapidement possible sur simulé service téléphonique ordinaire (POTS) .
Pas
- Générez des données aléatoires (
/dev/random
ou similaires) dont la transmission prendra 3 à 4 secondes - Modulez les données avec votre modulateur pour produire un fichier audio
- Faites passer le fichier audio via le simulateur POTS . Si vous n'avez pas Python / Scipy, vous pouvez télécharger un fichier avec le formulaire ou faire une demande d'API JSON.
- Démoduler le fichier audio en données binaires
- Validez que l'entrée et la sortie sont égales * (la limite 1 sur 1000 bits peut être corrompue)
- Le score est le nombre de bits transmis divisé par la longueur du fichier audio (bits / seconde)
Règles
- Le fichier d'entrée doit être de 3-4 secondes, 44,1 kHz, mono.
- Exécutez le simulateur avec un SNR de 30 dB (c'est par défaut)
- Le démodulateur doit reconstruire les données transmises avec un taux d'erreur sur les bits ne dépassant pas 10 -3 (1 pour mille bits).
- Aucune compression numérique n'est autorisée (c.-à-d. Compresser les données. Cela sort du cadre du défi.)
- Aucune tentative de pousser des données dans des fréquences supérieures à 4 kHz. (Mes filtres ne sont pas parfaits, mais ils sont raisonnablement de type POTS avec un nombre relativement faible de prises.)
- Si votre protocole de modem nécessite un préambule court (pas plus d'une seconde) pour synchroniser / calibrer le récepteur, il n'est pas pénalisé.
- Si possible, veuillez héberger le fichier audio dans un endroit accessible afin que nous puissions écouter une cacophonie de bips et de boops.
Exemple
Voici un exemple de cahier qui illustre la modulation / démodulation avec une simple "activation / désactivation" (échantillons audio inclus!).
Il marquerait 100 (bits / seconde). Notez qu'il transmet avec un SNR 5 dB bien pire.
code-challenge
audio
Nick T
la source
la source
wget wikipedia.org/Special:Random | grep title | texttospeech audio.wav
speechtotext POTSaudio.wav | wget wikipedia/wiki/$text
Réponses:
MATLAB, 1960 bps
Voici ma tentative mise à jour:
Depuis ma première tentative, j'ai joué un peu. Il y a maintenant un petit préambule au début (périodes de 18 bits, mais pourrait être plus court) qui contient juste une onde cosinus. Je l'extrait et le reproduis pour créer des porteurs de sinus et cosinus correctement phasés pour la démodulation - comme il s'agit d'un préambule très court, je ne l'ai pas compté dans le débit binaire selon vos instructions.
De plus, depuis la première tentative, j'utilise maintenant une constellation QAM8 pour obtenir 3 bits par symbole au lieu de 2. Cela double effectivement le taux de transfert. Donc, avec une porteuse ~ 2,4 kHz, j'atteins maintenant 1960 bps.
J'ai également amélioré la détection des symboles afin que la moyenne ne soit pas affectée par les temps de montée lents causés par le filtrage - en gros, seule la seconde moitié de chaque période de bit est moyenne pour supprimer l'impact des temps de montée.
Toujours loin de la bande passante théorique de 40 kbps de la théorie de Shannon-Hartley (en supposant le SNR de 30 dB)
Juste pour ceux qui aiment les sons horribles , voici la nouvelle entrée:
Et si quelqu'un est intéressé, il s'agit de l'entrée précédente à 960 bps
la source