Пример: построить систематический код с разрядностью 10 для исправления однократной ошибки: n=10, a =1, k -? r -?
dmin>= 2*a+1 – минимальное кодовое расстояние
dmin>=3
r=n-k>=log2(ΣCnt)= log2(C100+C101)= log2(1+10!/1*9!) = log2(1+10)= log211=3.4
r>=4
n-r=k, k=10-4=6 (n;k); (10,6)
Избыточность кода: W=r/n=(n-k)/n=(10-6)/10=0.4
Скорость кодирования: V=k/n=6/10=0.6(бит/с)
Dk * (n-k) = D6*4
dmin-1=3-1=2 единицы в каждой строке
Систематический код невозможно реализовать, если нельзя построить матрицу D и если величина а>k, в нашем примере а=1 k=6, а<k, следовательно код возможно реализовать.
D6*4 = 1| 0011
2| 0101
3| 0110
4| 1001
5| 1010
6| 1111
Проверяем, сумма по модулю двух любых строк должна содержать dmin-2 и более «единиц»:
D(D1,D2)=0110
D(D1,D3)=0101
D(D1,D4)=1010
D(D1,D5)=1001
D(D1,D6)=1100
D(D2,D3)=0011
D(D2,D4)=1100
D(D2,D5)=1111
D(D2,D6)=1010
D(D3,D4)=1111
D(D3,D5)=1100
D(D3,D6)=1001
D(D4,D5)=0011
D(D4,D6)=0110
D(D5,D6)=0101
A=[Ik*k] [Dk*(n-k)]=[I6*6] [D6*4]
A=100000 0011
010000 0101
001000 0110
000100 1001
000010 1010
000001 1111
H=[DT] [I(n-k)*(n-k)] =[DT] [I4*4]
a1 a2 a3 a4 a5 a6 a7 a8 a9 a10
H= 0 0 0 1 1 1 1 0 0 0
0 1 1 0 0 1 0 1 0 0
1 0 1 0 1 1 0 0 1 0
1 1 0 1 0 1 0 0 0 1
Количество уравнений 4, т.к. в проверочной матрице 4 строки:
|
|
r1=a4 a5 a6 a7
r2=a2 a3 a6 a8
r3=a1 a3 a5 a6 a9
r4=a1 a2 a4 a6 a10
Проверочные разряды:
a7=a4 a5 a6
a8=a2 a3 a6
a9=a1 a3 a5 a6
a10=a1 a2 a4 a6
А – передаваемая информационная последовательность
a1 a2 a3 a4 a5 a6 a7 a8 a9 a10
1 0 0 1 0 0 1 0 1 0
a7=1 0 0=1
a8=0 0 0=0
a9=1 0 0 0=1
a10=1 0 1 0=0
r1=1 0 0 1=0
r2=0 0 0 0=0
r3=1 0 0 0 1=0
r4=1 0 1 0 0=0
В – полученная информационная последовательность
b1 b2 b3 b4 b5 b6 b7 b8 b9 b10
1 0 0 1 0 1 1 0 1 0
r1=1 0 1 1=1
r2=0 0 1 0=1
r3=1 0 0 1 1=1
r4=1 0 1 1 0=1
Необходимо подставить r (1111) в правую часть производящей матрицы. Ошибка находится в шестой строке производящей матрицы
A=100000 0011
010000 0101
001000 0110
000100 1001
000010 1010
000001 1111 – ошибка в 6-м разряде
Необходимо инвертировать шестой разряд:
В=100101 1010
e= 000001 0000 – исправляющий вектор
B e=100100 1010
Тест 2. В – полученная информационная последовательность
b1 b2 b3 b4 b5 b6 b7 b8 b9 b10
1 0 0 1 11 1 0 1 0
r1=1 1 1 1=0
r2=0 0 1 0=1
r3=1 0 1 1 1=0
r4=1 0 1 1 0=1
R = 0101
Ищем опознаватель.
A=100000 0011
010000 0101 – ошибка во втором разряде?
001000 0110
000100 1001
000010 1010
000001 1111
Вывод:Ошибка обнаружена, но локализована неверно. Исправление будет некорректным.
В=100111 1010
e= 010000 0000 – исправляющий вектор
B e=1 1 01 11 1010
Систематический код Хэмминга
Это такой систематический код, у которого опознаватель показывает номер ошибочного разряда. Он служит для поиска однократной ошибки.
dmin=3
r>=log2 n
Необходимо, чтобы каждое проверочное уравнение проверяло цифру с весом какого-либо разряда, т.е.:
при первой проверке получалась цифра с весом младшего разряда - 20;
при 2-ой проверке цифра с весом 1-го разряда - 21;
и т.д.
20,21,…,2n-1. Тогда сумма всех проверок даст номер ошибочного разряда.
|
|