2009-06-15 5 views
4

Есть ли библиотека CRC, которая позволяет пользователю не только обнаруживать ошибки, но и исправлять их? Я ищу библиотеку C/C++ или Java, идеально с открытым исходным кодом.CRC библиотека коррекции ошибок?

+0

Просто проверка, но CRC жестким требованием здесь, или это более общее требование для коррекции ошибок/обнаружения? – skaffman

+0

Общее требование для исправления ошибок/обнаружения, если это имеет смысл для протоколов связи низкого уровня. В прошлый раз, когда я проверял, кто-то использовал CRC32 для них. – Gili

+0

Вы должны указать больше о данных, с которыми работаете. Вы потоки данных или хранения? Насколько шумно передается передача? – heyitsme

ответ

6

Я считаю, что CRCs может обнаруживать ошибки, а не исправлять их. Это, безусловно, относится к наиболее распространенной реализации. Вы хотите какой-то метод error correction, а не CRC. Я не знаю каких-либо библиотек для этого, но их должно быть достаточно легко найти, как только вы знаете, что ищете.

+2

Звучит не так. Согласно http://www.cs.nmsu.edu/~pfeiffer/classes/573/notes/ecc.html: «Любой код проверки ошибок, который всегда может обнаружить двухбитную ошибку, всегда может исправить любую однобитовую ошибку» , И http://www.dsprelated.com/showmessage/107079/1.php: «Чтобы иметь возможность делать единую коррекцию ошибок, размер слова с ECC бит должен быть меньше или равен 2 ** N, где N - номер бит ECC « – Gili

+3

Это верно на общем уровне, но алгоритм CRC не выполняет коррекцию. – skaffman

+2

Вы, безусловно, можете выполнить коррекцию ошибок с помощью CRC. Используйте тот факт, что CRC (A XOR B) = CRC (A) XOR CRC (B) ... пусть B - ошибка, A переданное сообщение, A XOR B - это принятое сообщение. Тогда CRC (B) = CRC (A XOR B) XOR CRC (A). Это правда, что доказательство расстояния Хэмминга не особенно применимо ко всем кодам проверки ошибок (примером могут быть безопасные хэш-коды, которые нельзя зарезервировать без особых усилий), но CRC не имеет такой трудности. Затем вам нужна таблица поиска, чтобы перейти от CRC (B) обратно к B (для однократной коррекции ошибок таблица поиска будет содержать индекс одиночного бита ошибки). –

0

Я не думаю, что CRC часто используется для исправления ошибок, однако если вы хотите проверить и восстановить наборы файлов, вы всегда можете попробовать par2, который часто используется в usenet. Вы можете найти много документации и реализаций в Интернете, например, win32 library.

6

Вы не хотите CRC, но FEC (исправление ошибок). Вы можете найти реализацию с открытым исходным кодом в libfec.

3

Лучшее техническое решение об исправлении ошибок называется турбокодом. См. http://en.wikipedia.org/wiki/Turbo_code для получения дополнительной информации.

Но я боюсь, что вы не найдете много свободных реализаций.

Если вы действительно хотите один свободный, дать попробовать на http://rscode.sourceforge.net/

+0

Турбокоды довольно сложны для достижения высокой эффективности кодирования. –

1

В ссылке на следующее: Я считаю, что ЗПК может обнаружить только ошибки, но не исправлять их.

Автор дезинформирован. CRC могут использоваться для исправления ошибок одного бита. C/C++ Журнал пользователя - Июнь 2003 - стр.6

http://www.drdobbs.com/an-algorithm-for-error-correcting-cyclic/184401662?queryText=Bill%2BMcDaniel

+2

Было бы неплохо иметь ссылку на онлайн-источник. – Gili

Смежные вопросы