[an error occurred while processing this directive]
Помогите реализовать на IAR C оптимальный код для восстановления данных в коде Хэмминга...(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено SOIC 02 апреля 2003 г. 17:23

Храним во флеше данные в 2х байтах 1-н, т.е. код Хэмминга [7,4]

Смысл кода таков:

На входе 4 бита, на выходе 7, дополнительные 3бита получаются следующим образом:

Доп.битФункция
I4I2 xor I2 xor I0
I5I3 xor I2 xor I1
I6I3 xor I1 xor I0

Где I0,I1,I2,I3 - биты входного потока, I4,I5,I6 - дополнительные биты на выходе.

Вход D3..D0Дополнение D6..D4
0000000
0001101
0010111
0011010
0100011
0101110
0110100
0111001
1000110
1001011
1010001
1011100
1100101
1101000
1110010
1111111

Восстанавливаем следующим образом:

Бит кода ошибкиФункция
D0I4 xor I2 xor I1 xor I0
D1I5 xor I3 xor I2 xor I1
D2I6 xor I3 xor I1 xor I0

Где I0...I3 - биты данных кода Хэмминга, I4...I6 - доп биты кода Хэмминга, D0...D3 - код ошибки

Затем коррекция данных по коду ошибки:

код ошибкиЗначение
000нет ошибки
001ошибка бита I6 (доп бит)
010ошибка бита I5 (доп бит)
011ошибка бита I3
100ошибка бита I4 (доп бит)
101ошибка бита I0
110ошибка бита I2
111ошибка бита I1

реализация кодера:


const unsigned char Tet2Ham[] = {
0x00, 0x51, 0x72, 0x23, 0x34, 0x65, 0x46, 0x17,
0x68, 0x39, 0x1A, 0x4B, 0x5C, 0x0D, 0x2E, 0x7F
};

void WriteFlash(unsigned short Adr, unsigned char Value)
{
LowLevelWriteFlash(Adr*2, Tet2Ham[Value&0x0F]);
LowLevelWriteFlash(Adr*2+1, Tet2Ham[Value>>4]);
}

Помогите реализовать оптимальный код декодера...
В случае если код ошибки говорит что ошибка в битах I4...I6 (в доп битах) -
игнорировать (выдавать вход на выход)

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru