У меня есть проект, в котором я тестирую устройство, очень чувствительное к шуму (электромагнитное, радио и т. Д.). Устройство генерирует 5-6 байтов в секунду двоичных данных (выглядит как бред для неопытного глаза) на основе входного сигнала (аудио).
В зависимости от шума, иногда устройство пропускает символы, иногда оно вставляет случайные символы, иногда кратные обоим.
Я написал приложение, которое дает пользователю возможность видеть на лету ошибки, которые он генерирует (по сравнению с мастер-файлом [например, что устройство должно выводить в идеальных условиях]). Мой алгоритм в основном берет каждый байт в живых данных и сравнивает его с байтом в той же позиции в известном главном файле. Если байты не совпадают, у меня есть окно из 10 символов в обе стороны от текущей позиции, где я буду искать совпадение поблизости. Если это соответствует (плюс проверка или два), я визуально размечаю местоположение в пользовательском интерфейсе и регистрирую ошибку.
Этот подход работает достаточно хорошо и на самом деле, учитывая скорость входящих данных, работает и в режиме реального времени. Тем не менее, я чувствую, что то, что я делаю, не является оптимальным, и подход потерпит крах, если данные будут передаваться с более высокой скоростью.
Могу ли я использовать другие подходы? Существуют ли известные алгоритмы для такого типа вещей?
Много лет назад я читал, что оборудование для сбора данных НАСА (например, связывающееся с космическими аппаратами в космосе и на Луне / Марсе) потеряло 0,00001% данных, несмотря на огромные помехи в космосе.
Есть идеи?