Вы, наверное, сталкивались со случаями, когда вставляешь сильно царапанный диск, а привод его читает. Так вот, это не что иное, как восстановление блоков информации при помощи знаменитых кодов Рида-Сломона. Достигается это небольшой избыточностью информации, записанной на диск в довескок к данным, и эта избыточная информаци, есть не что иное, как контрольные суммы вашей информации. По этому же смому принципу построены все жесткие диски и все Raid массивы. Все они используют коррекцию данных кодами Рида-Соломона. Вся представленная в нэте инфа по программным кодам, основана на С. Я постарался восполнить этот пробел и переделал код С на Delphi. Этого кода на Delphi вы не найдете нигде, его просто нет.
Представлю прототип кодера/декодера кодов Рида-Соломона на IC, может пощупать всю прелесть его работы. Представленный кодер использует коды РС следующей схемы -- 255, 231, 12, где 255 -- общая длина блока, 231 -- длина ваших данных, 12 -- количество байтовых ошибок (не битовых, а именно байтовых)
hiasm_rs_encode_decode_full.sha
Этот топик читают: Гость
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
карма: 22 |
| ||
файлы: 1 | hiasm_rs_encode_decode_full.sha [20.6KB] [385] |
Ответов: 1321
Рейтинг: 37
|
|||
Не все данные восстанавливает, но всё-же восстанавливает ,например 132432 число не восстанавливает
|
|||
карма: 0 |
|
Ответов: 8921
Рейтинг: 823
|
|||
nesco, молодец!
Восстанавливает при изменении порядка следования и символов, при одновременном изменении количества принятых символов -- не доставляет справа столько же символов, а изменение количества (ну не прочёлся один, или два) тоже распространённая ошибка. |
|||
карма: 19 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Я же написал, что это -- прототип. Не вся концепци упихивания и восстановления блоков меньшей длины проработана
Roma писал(а): например 132432 число не восстанавливаетконкретнее можно, интересует последовательность действий Да, действительно, количество символов меньше 12, вот потому и не восстанавливает, это ошибка не кодера, а схемы |
|||
карма: 22 |
|
Ответов: 1321
Рейтинг: 37
|
|||
nesco, писал(а): конкретнее можно, интересует последовательность действийГовори |
|||
карма: 0 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Roma писал(а): ГовориЯ тебя хотел спросить, но догадался сам |
|||
карма: 22 |
|
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
Roma писал(а): ГовориЭто тебя спросили nesco, подтверждаю, вводим 132432 в Исходная строка, жмем Encrypt, потом Decrypt, "коррекция невозможна" ------------ Дoбавленo в 14.30: nesco опередил |
|||
карма: 10 |
|
Ответов: 1321
Рейтинг: 37
|
|||
[flood]Запутался [/flood]
|
|||
карма: 0 |
|
Ответов: 3349
Рейтинг: 233
|
|||
nesco, А как это может помочь, когда исходная строка неизвестна?
|
|||
карма: 1 |
|
Ответов: 8921
Рейтинг: 823
|
|||
Iva-a-ann, она и неизвестна
|
|||
карма: 19 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Ivann писал(а): когда исходная строка неизвестна?Ты че, сбрендил Ну причем здесь исходная строка, и как она может быть неизвестна На этапе приема/передачи данных происходит порча информации, код ее пытается восстановить ------------ Дoбавленo в 14.51: Assasin писал(а): подтверждаю, вводим 132432 в Исходная строка, жмем Encrypt, потом Decrypt, "коррекция невозможна"Бывают случаи, когда код не может решить уравнения и не находит его корни |
|||
карма: 22 |
|
Ответов: 1321
Рейтинг: 37
|
|||
Я немогу понять принцип работы программы, как восстанавливаются данные?
|
|||
карма: 0 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Roma писал(а): Я немогу понять принцип работы программы, как восстанавливаются данные?Молча На основе высшей булевой алгебры и полей Галуа конечной разрядности |
|||
карма: 22 |
|
Ответов: 3349
Рейтинг: 233
|
|||
nesco писал(а): Ну причем здесь исходная строка, и как она может быть неизвестнаВсе, понял |
|||
карма: 1 |
|
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
nesco, да ведь на основе этого кода можно делать архиватор, передаем первыми двумя байтами первые два байта исходной строки, потом в 4 следующих длину исходной строки, приемщик дополняет всю строку до нужной длинны пробелами и расшифровывает Пример: 123456789ABC, (crypted: ) 12[00 00 00 0C] (лень переводить в символы по HEX коду), прога=приемщик дополняет: "12[пппппппппп]" и вуаля, данные тут! В два раза меньше исходных
Вопрос только в том, всегда ли сможет код решить систему уравнений Научи его комплексным числам ------------ Дoбавленo в 15.06: Хехехе, что-то я совсем, на сам код Рида тоже надо байты |
|||
карма: 10 |
|