7
votes

Algorithme de redondance pour la lecture bruyant bitstream bruyant

Je lis, je lis un flux de bits à perte et j'ai besoin d'un moyen de récupérer autant que possible des données utilisables. Il peut y avoir 1 1 à la place de 0 et de 0 à Palce of 1, mais la précision est probablement supérieure à 80%.

Un bonus serait si l'algorithme pouvait compenser également des bits manquants / trop nombreux.

La source que je lis est analogue avec du bruit (micro via FFT) et le chronométrage de lecture peut varier en fonction de la vitesse de l'ordinateur.

Je me souviens de lire sur les algorithmes utilisés dans le CD-ROM de le faire dans 3 ? Les couches, donc je suppose que l'utilisation de plusieurs couches est une bonne option. Je ne me souviens pas des détails, alors si quelqu'un peut partager des idées qui seraient super! :)

EDIT: Ajout de données d'échantillons xxx

edit2: Je suis capable de contrôler les données envoyées. Tentative actuelle de mettre en œuvre une simple vérification XOR (bien qu'elle ne soit pas suffisante).


5 commentaires

Pouvez-vous contrôler ce qui est écrit au flux? Sinon, votre exemple de CD ne s'applique pas car il exige que les données soient écrites avec des codes de correction d'erreur.


Je ne comprends pas cette question. Essayez-vous de faire une sorte de protocole de communication sur un canal peu fiable? Ou essayer de trouver une sorte d'algorithme magique, pouvant, de l'air mince, devinez ce qui ne va pas ou non?


J'essaie de communiquer sur le son (haut-parleur + microphone). J'utilise une fréquence spécifique pour envoyer des bits. L'application recherche donc cette fréquence spécifique.


Vous devez donner plus d'informations sur vos données d'entrée. Êtes-vous capable de définir la fréquence de recherche? Cela ressemble à ce que l'Euphoric ait le point de sucer des choses de l'air minces pour le moment.


La partie sonore est déjà faite. Je lis correctement les bits en analysant des fréquences et une amplitude. J'ai besoin de nettoyer le bitstream en ajoutant une correction d'erreur. Je tiens à compenser le bruit et les petits problèmes de synchronisation.


3 Réponses :



2
votes

Vous devez utiliser Correction d'erreur avant . Une vérification de la parité XOR ne détectera que lorsqu'une erreur se produit. Un algorithme de correction d'erreur simple serait d'envoyer chaque morceau de données plusieurs fois (au moins 3) et de prendre une décision majoritaire.

Le choix de l'algorithme dépend de plusieurs facteurs:

  • UTILISATION DE CANAL (Si vous avez beaucoup de temps libre, vous n'avez pas besoin d'un codage efficace)
  • Types d'erreur: Les mauvais bits sont-ils espacés de manière aléatoire ou se produisent-ils habituellement dans une rangée
  • Temps de traitement: la complexité du code est limitée si la transmission de données doit être rapide

1 commentaires

Je suis d'accord, Xor ne sera pas loin (et est un peu cher).



3
votes

Si je vous comprends correctement, vous avez deux besoins:

  1. Moduler un signal en son puis le démoduler.
  2. Appliquez la correction d'erreur car le canal n'est pas fiable.

    La modulation et la démodulation sont une application bien connue, avec plusieurs manières pour moduler les informations.

    Numéro deux, la correction d'erreur est également bien connue et a plusieurs possibilités. Lequel est applicable dépend du taux d'erreur et de savoir si vous avez une opération recto verso afin que vous puissiez demander renvoyer. Si vous avez une qualité décente et que vous pouvez demander renvoyer une approche comme le TCP utilise vaut la peine d'être explorée.

    Sinon, vous devrez passer à des algorithmes de détection d'erreur et de correction d'erreur, comme celui utilisé sur CDDoms.

    Modifier après le commentaire

    avoir la modulation / démodulation effectuée et aucune possibilité de renvoyer les possibilités rétrécit le problème. Si vous rencontrez des problèmes de synchronisation, je vous recommanderais toujours de lire les méthodes de modulation existantes (DE), car il existe des moyens de resynchroniser automatiquement avec l'expéditeur et d'augmenter le rapport signal à bruit.

    jusqu'au problème de base; Correction d'erreur Vous devrez ajouter des bits de parité à votre flux de sortie afin de pouvoir détecter les erreurs. À partir de l'article de correction d'erreur avant @Justin suggère, un schéma qui semble assez simple, mais toujours puissant est le Hamming (7,4) schéma.


1 commentaires

La modulation et la démodulation sont déjà faites. Je génère une onde sinusale de 1000Hz et utilise une transformée rapide Fourier pour lire la fréquence et l'amplitude spécifiques. Ce n'est pas une communication à double sens, donc je ne peux pas demander renvoyer ou envoyer ACK.