Советы по исправлению ошибок? - PullRequest
4 голосов
/ 26 февраля 2010

У меня есть приложение, которое в идеале позволяло бы исправлять 25% ошибок с помощью исходного сообщения длиной от 12 до 16 байт (8-битных). Ограничения: сообщение не может быть передано повторно, и если части сообщения не будут получены, неизвестно, какие байты не были показаны. Например, скажем, я использую что-то вроде Рида Соломона и добавляю 8 байтов кодового слова к исходному 16-байтовому сообщению, что соответствует 25% исправляемых ошибок, но что, если только 20 из 24 байты на самом деле получены? Существует ли алгоритм исправления ошибок или комбинация алгоритмов, которые позволили бы исправить такую ​​ситуацию?

Спасибо
Ben

1 Ответ

2 голосов
/ 27 февраля 2010

Вот очень неэффективная схема, о которой я только что подумал -

Предположим, ваше исходное сообщение состоит из следующих байтов a(1),a(2),a(3),...,a(n), к которым вы добавляете очень сильный код исправления ошибок a(n+1),a(n+2),a(n+3),...,a(n+m). Теперь отправьте это сообщение с чередованием с потоком 1,2,3,4,5 ..., то есть отправьте:

1, а (1), 2, (2), ..., п, (п), п + 1, а (п + 1), ..., п + т, а (п + м)

На принимающей стороне сообщения ищите блоки последовательных байтов вида k,S,k+1. Это говорит о том, что a (k) = S. Более того, если вы видите два триплета i,S,i+1...k,T,k+1 и нет j,P,j+1 между этими двумя так, что i<j<k, предположим, что вы потеряли все байты между i-м и k-м байтами в исходном сообщении и напишите нули на месте. Используя эту схему, вы можете выбросить некоторые байты, которые фактически прошли, но, по крайней мере, вы будете уверены, где разместить некоторые байты. Затем вы можете использовать свой очень сильный код исправления ошибок, чтобы заполнить потерянные байты и исправить ошибки в тех байтах, которые вы фактически записали.

(* Чтобы это работало аккуратно, вы также должны быть уверены, что байты сообщения не могут быть перепутаны с байтами чередующейся последовательности, но это легко решить с помощью преобразования - например, base64 ваших байтов перед передачей поэтому их MSB равен 0 и чередуют их с байтами, MSB которых установлен в 1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...