Re: Вопрос к специалистам по кодам коррекции ошибок
От: sz36 Россия  
Дата: 10.04.07 23:46
Оценка:
Здравствуйте, sysprg, Вы писали:

S>Привет!

S>Подскажите, пожалуйста, какой код коррекции ошибок оптимально использовать? Требования и ограничения таковы: количество информационных блоков n = степень двойки. В практическом плане интересны решения для n = 32 или 64. Количество контрольных блоков = n. То есть, rate кода = 1/2. Количество корректируемых ПОТЕРЬ = n (это важно!) или хотя бы n-1...n-2 (при n = 32). Таким образом, коды со слабой корректирующей способностью не подходят!

S>Какой код может устранить "n" потерь при "n" входных блоках и "n" контрольных? Позиции потерь известны заранее, а устранение ошибок, позиции которых неизвестны — не требуется

Никакой. Максимальное количество стираний (ошибок, позиции которых известны), исправляемых блочным кодом <= n-1, где n — количество контрольных разрядов. Равенство достигается только при использовании т.н. оптимального кода, а оптимального кода, у которого n==k, сдается мне, не существует.
При скорости кода 1/2 имеет смысл посмотреть сверточные коды, но если ошибки равновероятны в каждом блоке и независимы, выигрыша от них не будет.

S>Из известных мне кодов коррекции ошибок такими характеристиками обладают только вариации на тему кодов Рида-Соломона. Но RS-коды считаются очень медленными в software реализации.

Ну не знаю.. А какие тогда быстрыми? Коды РC являются оптимальными, но половину блока все равно исправить не смогут, а плюс к тому Вы не построите код, у которого число контрольных разрядов равно числу информационных. В плане вычислительной сложности вроде бы ничего особенного. На какой платформе это будет происходить и о каких скоростях идет речь? Если длина слова не больше 8 бит, умножение можно табличным сделать, тогда вообще быстро.

А вообще эффективный код, исправляющий ошибки, подбирают по статистике ошибок канала. Грубо говоря код должен быть ориентирован на исправление именно тех ошибок, которые возникают с наибольшей вероятностью. Наука эта довольно сложная, но литературы хватает. Из того, что помню, например здесь

Из потоковых сейчас в моде сверточные коды с декодированием по максимуму правдоподобия, с использованием информации демодулятора о вероятности ошибки в каждом символе. Они действительно требуют приличной вычислительной мощности. Из блочных — РС самые популярные.
Блочные коды имеет смысл использовать, только если канал ориентирован на блочную передачу (решен вопрос блочной синхронизации), ошибки в блоках распределены более-менее равномерно и независимо.
В реальных системах, где требуется исправление большого количества ошибок (например, GSM) используют 2 и более кодов, исправляющих разные роды ошибок.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.