Area : Ломаем все... Date : Tue Feb 23, 10:31 From : Vladimir L Vasilevsky 2:5020/211.60 To : Rafael Taichov Subj : Коррекция БЧХ (31:21) ──────────────────────────────────────────────────────────────────────────────── Hello Rafael! RT> Подскажите пожалуйста, где можно найти описание на сабж ? RT> Заранее благодарен !! В очередной 1001-й раз.... Включите, пожалуйста, в FAQ. Рекомендуемая литература: Р. Блейхут. "Теория и практика кодов, контролирующих ошибки" Мир, 1989. /* Пример коррекции ошибок в расширенном коде BCH 32,21 Используется простейший итеративный алгоритм Мегитта. написано тупо в лоб. наглядность в ущерб эффективности. 32-битное BCH-слово понимается как unsigned long int, Функция исправляет до 2-x ошибок в слове и возвращает количество ошибок (0,1,2). Если исправление невозможно, слово не изменяется и возвращается -1. Гарантированно обнаруживаются любые тройные ошибки и исправляются все двойные и одинарные, т.е. исправляющая способность кода используется полностью. (с) VLV */ unsigned int const syndtable[31] = { 0x200,0x300,0x280,0x240,0x220,0x210,0x208,0x204, 0x202,0x201,0x1b4,0x3da,0x2ed,0x1c2,0x3e1,0x144, 0x3a2,0x2d1,0x1dc,0x3ee,0x2f7,0x1cf,0x053,0x09d, 0x0fa,0x37d,0x10a,0x385,0x176,0x3bb,0x169 }; void InvertBit(unsigned long int *bchword,int bit) { (*bchword)^=((unsigned long int)1)<>22); /* Вычисление четности слова */ dataword=*bchword; parity=0; while(dataword!=0) { if((dataword&1)!=0) parity^=1; dataword>>=1; } /* нулевой синдром - ошибок нет или ошибка в четности */ if(syndrom==0) { if(parity==0) return 0; /* нет ошибок */ (*bchword)^=1; /* Или исправить ошибку четности */ return 1; }; /* Если синдром не равен 0, то итеративно исправляем ошибки */ for(ci=31;ci!=0;ci--) /* Цикл по всем битам данных, кроме четности */ { for(cj=0;cj