Исправление ошибок с Python и Ридом Соломоном для больших входов
В настоящее время я внедряю систему обмена сообщениями. Я хочу отправить сообщение с защитой от ошибок получателю, но у меня не получается суть: вычисление кодов, исправляющих ошибки. Я использую следующую библиотеку для исправления ошибок.
Рассмотрим следующее MWE:
from reedsolo import RSCodec
with open("imageToSend.png", "rb") as pic:
picContent = pic.read()
correctionLength = int((len(picContent)/100)*20)
rs = RSCodec(correctionLength)
rs.encode(picContent)
Как видите, я хочу защитить изображение от 20% ошибок, которые могут возникнуть. Проблема здесь? Закодированный байтовый массив пуст. И мой вопрос: возможно ли защитить большие файлы от ошибок, не разбивая их на более мелкие части, а затем вычисляя коды, исправляющие ошибки?
1 ответ
Можно ли защитить большие файлы от ошибок, не разбивая их на более мелкие части?
Зависит от кода. С побочным RS, куски необходимы (но эта библиотека делает работу за вас).
Как видите, я хочу защитить изображение от 20% ошибок, которые могут возникнуть. Проблема здесь?
Да. Во-первых, число не должно быть процентным. Вы должны действительно прочитать примеры из библиотеки и немного узнать, как работает RS.
Число - это сколько байтов из 255 следует использовать для исправления ошибок. Например. 40 означает, что для каждых 215-байтовых данных будет 40-байтовый код RS (около 20%), и в этих 255-байтовых значениях он может исправить ошибку до 20 байт.
Наконец, принцип LDPC может быть чем-то, что вы хотите изучить. Немного хуже, чем RS, в исправлении ошибок, но очень много, и это намного быстрее.
Дополнение от комментариев:
Если это может быть исправлено, зависит от местоположения ошибки, да. Если полных 255 блоков нет, он не может исправить это. Чтобы увеличить интервал, можно использовать коды RS более высокого порядка (например, один независимый блок мог бы иметь 65536 байт вместо 255), но а) это снова намного медленнее, чем (уже медленный) 255-RS, и б) RS libs, я знаю, не может это сделать (твое вкл.). Вы должны написать это сами.
Опять же, LDPC может помочь, если вас не беспокоит, что это совсем другое. Например. он не имеет четких значений, сколько ошибок слишком много, чтобы их исправить / обнаружить, это также зависит от схемы ошибок. А поскольку он новее, чем RS, в сети меньше кодов / библиотек, возможно, нет для вашего случая.
((Ну, он тоже старый, но десятилетиями никто не интересовался этим, пока кто-то не понял, что это полезно)).