2011-03-12 4 views
5

J'ai un projet où je teste un appareil très sensible au bruit (électromagnétique, radio, etc ...). L'appareil génère 5-6 octets par seconde de données binaires (ressemble à du charabia à un œil non formé) sur la base d'une entrée donnée (audio).Algorithme pour l'appariement de données

En fonction du bruit, il arrive que l'appareil manque des caractères, parfois il insère des caractères aléatoires, parfois des multiples des deux.

J'ai écrit une application qui donne à l'utilisateur la possibilité de voir à la volée les erreurs qu'il génère (par rapport au fichier maître [par exemple ce que le périphérique devrait sortir dans des conditions idéales]). Mon algorithme prend fondamentalement chaque octet dans les données en direct et le compare à l'octet dans la même position dans le fichier maître connu. Si les octets ne correspondent pas, j'ai une fenêtre de 10 caractères dans les deux sens à partir de la position actuelle, où je chercherai un match à proximité. Si cela correspond (plus une validation ou deux), je marque visuellement l'emplacement dans l'interface utilisateur et enregistrer une erreur.

Cette approche fonctionne raisonnablement bien et, en fait, compte tenu de la vitesse des données entrantes, fonctionne également en temps réel. Cependant, j'ai l'impression que ce que je fais n'est pas optimal et que l'approche s'effondrerait si les données circulaient à des taux plus élevés.

Y a-t-il d'autres approches que je pourrais prendre? Y a-t-il des algorithmes connus pour ce genre de chose? J'ai lu il y a de nombreuses années que la collection de données de la NASA (par exemple celles qui communiquent avec l'artisanat dans l'espace et sur la Lune/Mars) avait une perte de données de 0,00001% malgré une énorme interférence dans l'espace.

Des idées?

Répondre

2

Je suppose que le principal intérêt est le signal généré par le périphérique? Qu'est-ce qui est plus important? Détecter quand une erreur s'est produite ou rendre le signal 'robuste' contre de telles erreurs? Je fais beaucoup de traitement de signal dernièrement et débruiter un signal fait partie de ma routine, j'essaie fondamentalement d'estimer le signal réel et d'enlever tous les contaminants. Je ne sais pas comment le signal généré par l'appareil est encore utilisé ... s'il est enregistré sur un ordinateur, alors vous pouvez facilement appliquer du débruitage, essayez par exemple le débruitage par ondelettes. Vous trouverez des paquets pour le faire dans plusieurs langues de votre choix.

Questions connexes