Как применить алгоритм Рида-Соломона, используя zxing в C#

Я хочу передавать двоичные данные по шумному каналу.

Я читал, что хорошим алгоритмом ECC для обнаружения ошибок является Рид-Соломон. Проблема в том, что я не понимаю входные данные для этого алгоритма.

вот моя наивная неудачная попытка с zxing.net:

int[] toEncode = { 123,232,432};
var gf = GenericGF.AZTEC_DATA_12;
ReedSolomonEncoder rse = new ReedSolomonEncoder(gf);
rse.encode(toEncode, 2);

ReedSolomonDecoder rsd = new ReedSolomonDecoder(gf);
rse.encode(toEncode, 2);

Пожалуйста, объясните мне вход для кодера и декодера.

1 ответ

Решение

Это реализация, которую вы используете здесь: ReedSolomonEncoder.cs?

Если это так, чтобы кодировать N целых чисел с помощью M целых чисел для исправления данных, вам нужно передать массив длиной N+M. Ваши данные должны быть в первых N индексах, а коды должны быть добавлены в конце в последних M записях.

Также обратите внимание на следующее ограничение в кодере:

Обновление: более свежая версия находится здесь: http://zxingnet.codeplex.com/. Его последняя версия ReedSolomonEncoder.cs не имеет этого ограничения.

Этот класс реализует схемы кодирования Рида-Соломона, используемые при обработке QR-кодов. Краткое описание кодировки Рида-Соломона приведено здесь: коды Рида-Соломона.

Выбор кодировки "QR_CODE_FIELD_256" (что, вероятно, является разумным выбором для вас) означает, что коды исправления ошибок генерируются на кусках размером в байт ("символы") вашего сообщения, что означает максимальную длину сообщения (данные для кодирования плюс коды исправления ошибок) длиной 255 байт. Если вы отправляете больше данных, вам нужно разбить их на куски.

Обновление 2: используя QR_CODE_FIELD_256, ваши целые числа также должны быть в диапазоне от 0 до 255, поэтому для кодирования общего потока байтов необходимо поместить каждый байт в отдельное целое число в массиве целых чисел, передать массив int (плюс пробел для ошибки кодов коррекции) через кодировщик, затем преобразуйте в (больший) байтовый массив. И наоборот для декодирования.

Другие вопросы по тегам