Двухмерный контроль паритета
Двухмерный контроль паритета позволяет:
1. Обнаруживать и исправлять одиночные ошибки.
2. Обнаруживать двойные ошибки.
Способность приемника обнаруживать и исправлять ошибки называют прямым исправлением ошибок (Forward Error Correction, FEC). Двухмерный контроль паритета применяются в устройствах хранения данных. Такие методы При двухмерном контроле вычисляются множественные биты паритета четности.
Кодирование данных и передача по линии связи :
1. Данное, состоящее из (n∙m)-разрядов разбивается на n-фрагментов, состоящих из m-разрядов.
Например, данное, состоящее из 16-разрядов, разбивается на 4 фрагмента длиной по 4 разряда (n = 4 фрагмента, m = 4 разряда).
Фрагмент 3 | Фрагмент 2 | Фрагмент 1 | Фрагмент 0 | ||||||||||||
2. Фрагменты образуют прямоугольную матрицу, содержащую 4 строки и 4 столбца.
J3 | J 2 | J 1 | J 0 | |||
I3 | ||||||
I2 | ||||||
I1 | ||||||
I0 | ||||||
где , , , – номера строк; , , , – номера столбцов.
Соответствие прямоугольной матрицы и исходного сообщения приведено в таблице.
Фрагмент 3 (строка I3) | Фрагмент 2 (строка I2) | Фрагмент 1 (строка I1) | Фрагмент 0 (строка I0) | ||||||||||||
3. Для каждой строки и столбца вычисляются биты паритета четности.
J3 | J 2 | J 1 | J 0 | PI | |
I3 | РI3 | ||||
I2 | РI2 | ||||
I1 | РI1 | ||||
I0 | РI0 | ||||
PJ | РJ3 | РJ2 | РJ1 | РJ0 | |
где РI3, РI2, РI2 , РI0 - паритеты строк; РJ3, РJ2, РJ1, РJ0 - паритеты столбцов.
4. Для всех битов паритета строк и столбцов вычисляется дополнительный бит паритета паритетов РIJ строк и столбцов паритета .
J3 | J 2 | J 1 | J 0 | PI | |
I3 | РI3 | ||||
I2 | РI2 | ||||
I1 | РI1 | ||||
I0 | РI0 | ||||
PJ | РJ3 | РJ2 | РJ1 | РJ0 | РIJ |
5. Из фрагментов и битов паритета, содержащих (n+1)∙(m+1)-разрядов, образуется сообщение:
РI3 РI2 РI2 РI0 РJ3РJ2РJ1РJ0РIJ.
6. Передающий узел посылает по линии связи сообщение:
РI3 РI2 РI2 РI0 РJ3РJ2РJ1РJ0РIJ.
.
Прием и проверка данных:
1. Приемный узел принимает сообщение:
РI3 РI2 РI2 РI0 РJ3РJ2РJ1РJ0РIJ.
2. Сообщение разбивается на (n + 1) - фрагментов, состоящих из (m + 1) - разрядов:
J3 | J 2 | J 1 | J 0 | PI | |||||||
I3 | РI3 | ||||||||||
I2 | РI2 | ||||||||||
I1 | РI1 | ||||||||||
I0 | РI0 | ||||||||||
PJ | РJ3 | РJ2 | РJ1 | РJ0 | РIJ | ||||||
3. Для каждой строки вычисляются синдромы SI3, SI2, SI1, SI0, SР. Для каждого столбца вычисляются синдромы SJ3, SJ2, SJ1, SJ0, SР
J3 | J 2 | J 1 | J 0 | PI | SI | |
I3 | РI3 | SI3 | ||||
I2 | РI2 | SI2 | ||||
I1 | РI1 | SI1 | ||||
I0 | РI0 | SI0 | ||||
PJ | РJ3 | РJ2 | РJ1 | РJ0 | РIJ | SРIJ |
SJ | SJ3 | SJ2 | SJ1 | SJ0 | SРJI |
3. Проверка на наличие ошибок:
- если все синдромы равны нулю, то ошибки нет;
- если синдром строки и синдром столбца содержат только по одной единице, то есть одна ошибка, которая находится на пересечении соответствующих строк и столбца.
Например, если синдромы SI2 = 1 и РJ0 =1, то на пересечении строки I2 и столбца J0 находится испорченный бит D8, который может быть исправлен.
J3 | J 2 | J 1 | J 0 | PI | SI | |
I3 | РI3 | SI3 | ||||
I2 | РI2 | SI2 | ||||
I1 | РI1 | SI1 | ||||
I0 | РI0 | SI0 | ||||
PJ | РJ3 | РJ2 | РJ1 | РJ0 | РIJ | SРIJ |
SJ | SJ3 | SJ2 | SJ1 | SJ0 | SРJI |
- если обнаруживается более двух синдромов равных единице, то выявляется наличие множественных ошибок.
Например, если синдромы строк SI2 = 1, SI0= 1 и столбцов SJ3 = 1, РJ0 =1, то на пересечении строк I2, I0 и столбцов J3, J0 находятся биты , D8, , ,которые не могут быть идентифицированы, а поэтому и исправлены.
J3 | J 2 | J 1 | J 0 | PI | SI | |
I3 | РI3 | SI3 | ||||
I2 | РI2 | SI2 | ||||
I1 | РI1 | SI1 | ||||
I0 | РI0 | SI0 | ||||
PJ | РJ3 | РJ2 | РJ1 | РJ0 | РIJ | SРIJ |
SJ | SJ3 | SJ2 | SJ1 | SJ0 | SРJI |
Сборка исходного сообщения:
1. При отсутствии ошибки из принятого сообщения собирается исходное данное .
2. При наличии одной ошибки:
- собирается исходное сообщение
;
- для синдромов SI3, SI2, SI1, SI0, SJ3, SJ2, SJ1, SJ0 в таблице приведены идентификаторы ошибок:
Синдромы строк | Идентификатор ошибки строки | Синдромы столбцов | Идентификатор ошибки столбца | ||||||
SI3 | SI2 | SI1 | SI0 | SJ3 | SJ2 | SJ1 | SJ0 | ||
Ошибки нет | Ошибки нет | ||||||||
Ошибка строки 0 | Ошибка столбца 0 | ||||||||
Ошибка строки 1 | Ошибка столбца 1 | ||||||||
Ошибка строки 2 | Ошибка столбца 2 | ||||||||
Ошибка строки 3 | Ошибка столбца 3 |
Для синдромов SI3, SI2, SI1, SI0, SJ3, SJ2, SJ1, SJ0 рассчитывается идентификатор ошибки, который является номером N ошибочного бита данного:
N = 4∙KI + KJ = 4∙ log2 (WI) + log2 (WJ),
где WI - вес синдромов строк SI3, SI2, SI1, SI0; WJ - вес синдромов столбцов SJ3, SJ2, SJ1, SJ0.
Например. Рассчитать номер ошибочного бита N для синдрома строк SI3SI2SI1SI0 = 01002 = 410 и синдрома столбцов SJ3SJ2SJ1SJ0 = 00012 = 110:
N = 4∙ log2 (410) + log2 (110) = 4∙ 2 + 0 = 8.
Получаем ошибку в восьмом бите . Местонахождения ошибочного бита показано в таблице.
Фрагмент 3 (строка I3) | Фрагмент 2 (строка I2) | Фрагмент 1 (строка I1) | Фрагмент 0 (строка I0) | ||||||||||||
J3 | J 2 | J 1 | J 0 | J3 | J 2 | J 1 | J 0 | J3 | J 2 | J 1 | J 0 | J3 | J 2 | J 1 | J 0 |
Пример. Применить двухмерный контроль паритета для исходного сообщения 0001 0010 0100 1100.
Кодирование данных и передача по линии связи :
1. Сообщение разбивается на четыре фрагмента, для которых вычисляются паритеты четности
J3 | J 2 | J 1 | J 0 | PI | |
I3 | |||||
I2 | |||||
I1 | |||||
I0 | |||||
PJ |
2. Передающий узел собирает из фрагментов сообщение 00011 00101 01001 11000 10111 и посылает его по линии связи.
Прием и проверка данных:
1. Приемный узел принимает сообщение 00011 00101 01001 11000.
2. Сообщение разбивается на фрагменты, для которых рассчитываются синдромы 0001 0010 0100 1100
J3 | J 2 | J 1 | J 0 | PI | SI | |
I3 | ||||||
I2 | ||||||
I1 | ||||||
I0 | ||||||
PJ | ||||||
SJ |
2. Выполняется анализ синдромов: все синдромы равны нулю, следовательно ошибок нет.
3. Исходное сообщение равно 0001 0010 0100 1100.
Прием и проверка данных (с одной ошибкой):
1. Приемный узел принимает сообщение 00011 00101 11001 11000.
2. Сообщение разбивается на фрагменты, для которых рассчитываются синдромы
J3 | J 2 | J 1 | J 0 | PI | SI | |
I3 | ||||||
I2 | ||||||
I1 | ||||||
I0 | ||||||
PJ | ||||||
SJ |
4. Расчет номера ошибочного бита N для синдрома строк SI3SI2SI1SI0 = 00102 = 210 и синдрома столбцов SJ3SJ2SJ1SJ0 = 10002 = 810:
N = 4∙ log2 (210) + log2 (810) = 4∙ 1 + 3 = 7.
Получаем ошибку в восьмом бите .
5. Восстановление данного 0001 0010 1100 1100.
6. Исправление ошибки, выполняется инверсией бита :
0001 0010 100 1100 = 0001 0010 0100 1100.
Код Хемминга
Помехоустойчивое кодирование методом Хемминга позволяет:
- обнаруживать одиночные ошибки;
- исправлять одиночные ошибки.
Метод основан на перекрестном вычислении битов паритета.
Основными свойствами кода Хемминга являются:
- расстояние по Хеммингу;
- минимальное расстояние по Хеммингу;
- вес Хемминга.
Расстоянием по Хеммингу d(x,y) называется число позиций, в которых различаются два n-разрядных кода.
Минимальным расстоянием d* называется наименьшее из всех расстояний по Хеммингу между различными парами всех n-разрядных кодов.
Весом Хемминга w(x) называется число ненулевых компонент n-разрядного кода.
Пример.Определить расстояние по Хеммингу d(x,y) для кодов х = 0110 и y = 1011:
Код х | ||
Сумма по модулю два | ||
Код y | ||
Результат |
В результате 1101 единицы отражают число позиций, в которых различаются коды 0110 и 1011. Количество единиц равно 1 + 1 + 0 + 1 = 3.
Ответ. Расстояние по Хеммингу d(0110, 1011) = 3.
Пример.Определить минимальное расстояние d* для кодов 0110, 1011, 1101:
d(0110, 1011) = 3;
d(1011, 1101) = 2;
d(0110, 1101) = 2.
Ответ. Минимальное расстояние d* = 2.
Пример.Определить вес Хемминга w(x) для кода х = 0110.
Ответ. Вес Хемминга w(0110) = 0 + 1 + 1 + 0 = 2.
Помехоустойчивые коды характеризуется выражениями:
(n, k, d) или (n, k),
где n – общее число разрядов в передаваемом сообщении; k – число информационных разрядов (k = n - r); r – число проверочных разрядов; d* – минимальное кодовое расстояние между разрешенными кодовыми комбинациями.
Дополнительным показателями избыточности являются:
- относительная избыточность ;
- относительная скорость передачи .
Рассмотрим работу метода на примере кода Хемминга (7,4) для данного D3D2D1D0 (n =7, k = 4).
Кодирование данных и передача по линии связи :
1. Вычисление для данного D3D2D1D0 поверочных битов Р2Р1Р0 по формулам:
Р0 = D2 Å D1 Å D0;
Р1 = D3 Å D1 Å D0;
Р2 = D3 Å D2 Å D0.
2. Переда сообщения D3D2D1D0Р2Р1Р0 по линии связи.
Прием и проверка данных:
1. Прием сообщения D3D2D1D0Р2Р1Р0.
2. Вычисление синдромов по формулам:
S0 = D2 Å D1 Å D0 Å Р0;
S1 = D3 Å D1 Å D0 Å Р1;
S2 = D3 Å D2 Å D0 Å Р2.
Трёхразрядный код называется синдромом.
Синдром представляет собой сочетание результатов проверки на чётность соответствующих символов кодовой группы и характеризует определённую конфигурацию ошибок (шумовой вектор).
3. Проверка на наличие ошибок:
- получение идентификаторов ошибки для синдромов (восемь идентификаторов ошибки), приведенных в таблице.
Таблица Идентификаторы ошибок
№ | Синдромы | Идентификатор ошибки | ||
S2 | S1 | S0 | ||
Ошибки нет | ||||
Ошибка в P0 | ||||
Ошибка в P1 | ||||
Ошибка в D1 | ||||
Ошибка в Р2 | ||||
Ошибка в D2 | ||||
Ошибка в D3 | ||||
Ошибка в D0 |
Пример. Передать четырехразрядное данное D3D2D1D0 = 0000 с контролем достоверности по Хеммингу.
Кодирование данных и передача по линии связи :
1. Вычисление для данного D3D2D1D0 = 0000 поверочных битов Р2Р1Р0 по формулам:
Р0 = D2 Å D1 Å D0 = 0 Å 0 Å 0 = 0;
Р1 = D3 Å D1 Å D0 = 0 Å 0 Å 0 = 0;
Р2 = D3 Å D2 Å D0 = 0 Å 0 Å 0 = 0.
Поверочные биты Р2Р1Р0 равны 000.
2. Передача сообщения D3D2D1D0Р2Р1Р0 = 0000 000.
Прием и проверка данных:
1. Прием сообщения D3D2D1D0Р2Р1Р0 = 0000 000.
2. Вычисление синдромов :
S0 = D2 Å D1 Å D0 Å Р0 = 0 Å 0 Å 0 Å 0 = 0;
S1 = D3 Å D1 Å D0 Å Р1 = 0 Å 0 Å 0 Å 0 = 0;
S2 = D3 Å D2 Å D0 Å Р2 = 0 Å 0 Å 0 Å 0 = 0.
Синдромы равны 000.
3. Проверка на наличие ошибок:
- из таблицы идентификаторов получаем, что для синдромов = 0000 ошибки нет.
Пример. Выполнить верификацию принятого сообщения 0100000, использующее кодирование методом Хемминга (7,4).
Прием и проверка данных:
1. Прием сообщения D3D2D1D0Р2Р1Р0 = 0100 000.
2. Анализ принятого сообщения:
Данное | Код Хемминга | |||||
D3 | D2 | D1 | D0 | Р2 | Р1 | Р0 |
2. Вычисление синдромов :
S0 = D2 Å D1 Å D0 Å Р0 = 1 Å 0 Å 0 Å 0 = 1 Å 0 Å 0 = 1 Å 0 = 1;
S1 = D3 Å D1 Å D0 Å Р1 = 0 Å 0 Å 0 Å 0 = 0 Å 0 Å 0 = 0 Å 0 = 0;
S2 = D3 Å D2 Å D0 Å Р2 = 0 Å 1 Å 0 Å 0 = 1 Å 0 Å 0 = 1 Å 0 = 1.
3. Проверка на наличие ошибок:
- для синдромов = 101 из таблицы синдромов извлекаем сообщение: «Ошибка в D2».
4. Исправление ошибки:
- исправление ошибки с помощью логической операции инверсии (второго разряда) = 0000.
Ответ. Передавалось данное 0000.
Дата добавления: 2019-02-08; просмотров: 590;