- •«Код Хэмминга»
- •Цель работы
- •Подробное решение
- •1) Необходимо закодировать в коде Хэмминга первые буквы моей фамилии, имени, отчества – «щ», «к», «б» в кодах ascii и записать выражение для контрольных символов.
- •2) Сформировать указатель ошибки для принятого кода 100110001001 и записать выражения для разрядов указателя ошибки.
2) Сформировать указатель ошибки для принятого кода 100110001001 и записать выражения для разрядов указателя ошибки.
Занесу данные в таблицу:
Номер позиции N |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
Символ |
q1 |
q2 |
a1 |
q3 |
a2 |
a3 |
a4 |
q4 |
a5 |
a6 |
a7 |
a8 |
Значение |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
Далее при приеме по принятой кодовой комбинации формирую указатель ошибки: b4 b3 b2 b1.
Для этого использую формулы и вычислю значения:
b1 =q1 a1 a2 a4 a5 a7 = 1 0 1 0 1 0 = 1
b2 =q2 a1 a3 a4 a6 a7 = 0 0 0 0 0 0 = 0
b3 =q3 a2 a3 a4 a8 = 1 1 0 0 1 = 1
b4 =q4 a5 a6 a7 a8 = 0 1 0 0 1= 0
В результате вычислений получаю указатель ошибки b4 b3 b2 b1= 01012=510 , который указывает, что ошибка произошла на пятой позиции.
3) Используя формулу 2k>= m+k+1 построить таблицу и график зависимости m/n для m принимающего значения от 1 до 16.
Для того, чтобы построить график необходимо знать значения n. Использую формулу 2k>= m+k+1 с учетом, что n=m+k нахожу n:
если m=1, то подставляя в формулу ищу такое значение k, чтобы выполнялось неравенство 2k>= 1+k+1. Следовательно, это выполняется при k=2, так как 4=4. Тогда нахожу n=m+k=1+2=3.
если m=2, то подставляя в формулу ищу такое значение k, чтобы выполнялось неравенство 2k>= 2+k+1. Следовательно, это выполняется при k=3, так как 8>6. Тогда нахожу n=m+k=2+3=5.
если m=3, то подставляя в формулу ищу такое значение k, чтобы выполнялось неравенство 2k>= 3+k+1. Следовательно, это выполняется при k=3, так как 8>7. Тогда нахожу n=m+k=3+3=6.
если m=4, то подставляя в формулу ищу такое значение k, чтобы выполнялось неравенство 2k>= 4+k+1. Следовательно, это выполняется при k=3, так как 8=8. Тогда нахожу n=m+k=4+3=7.
если m=5, то подставляя в формулу ищу такое значение k, чтобы выполнялось неравенство 2k>= 5+k+1. Следовательно, это выполняется при k=4, так как 16>10. Тогда нахожу n=m+k=5+4=9.
если m=6, то подставляя в формулу ищу такое значение k, чтобы выполнялось неравенство 2k>= 6+k+1. Следовательно, это выполняется при k=4, так как 16>11. Тогда нахожу n=m+k=6+4=10.
если m=7, то подставляя в формулу ищу такое значение k, чтобы выполнялось неравенство 2k>= 7+k+1. Следовательно, это выполняется при k=4, так как 16>12. Тогда нахожу n=m+k=7+4=11.
если m=8, то подставляя в формулу ищу такое значение k, чтобы выполнялось неравенство 2k>= 8+k+1. Следовательно, это выполняется при k=4, так как 16>13. Тогда нахожу n=m+k=8+4=12.
если m=9, то подставляя в формулу ищу такое значение k, чтобы выполнялось неравенство 2k>= 9+k+1. Следовательно, это выполняется при k=4, так как 16>14. Тогда нахожу n=m+k=9+4=13.
если m=10, то подставляя в формулу ищу такое значение k, чтобы выполнялось неравенство 2k>= 10+k+1. Следовательно, это выполняется при k=4, так как 16>15. Тогда нахожу n=m+k=10+4=14.
если m=11, то подставляя в формулу ищу такое значение k, чтобы выполнялось неравенство 2k>= 11+k+1. Следовательно, это выполняется при k=4, так как 16=16. Тогда нахожу n=m+k=11+4=15.
если m=12, то подставляя в формулу ищу такое значение k, чтобы выполнялось неравенство 2k>= 12+k+1. Следовательно, это выполняется при k=5, так как 32>18. Тогда нахожу n=m+k=12+5=17.
если m=13, то подставляя в формулу ищу такое значение k, чтобы выполнялось неравенство 2k>= 13+k+1. Следовательно, это выполняется при k=5, так как 32>18. Тогда нахожу n=m+k=13+5=18.
если m=14, то подставляя в формулу ищу такое значение k, чтобы выполнялось неравенство 2k>= 14+k+1. Следовательно, это выполняется при k=5, так как 32>20. Тогда нахожу n=m+k=14+5=19.
если m=15, то подставляя в формулу ищу такое значение k, чтобы выполнялось неравенство 2k>= 15+k+1. Следовательно, это выполняется при k=5, так как 32>21. Тогда нахожу n=m+k=14+5=20.
если m=16, то подставляя в формулу ищу такое значение k, чтобы выполнялось неравенство 2k>= 16+k+1. Следовательно, это выполняется при k=5, так как 32>22. Тогда нахожу n=m+k=16+5=21.
Результаты занесем в таблицу:
m |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
n |
3 |
5 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
17 |
18 |
19 |
20 |
21 |
m/n |
0.33 |
0.4 |
0.5 |
0.57 |
0.56 |
0.6 |
0.64 |
0.67 |
0.69 |
0.71 |
0.73 |
0.71 |
0.72 |
0.74 |
0.75 |
0.76 |
Исходя из данного графика, можно заключить, что чем больше длина кодовой комбинации, тем больше число информационных символов. При этом видно, что график стремится к какому-то постоянному значению, что позволяет при больших m без подсчетов прогнозировать длину кодовой комбинации.
4)
Исследование способности кода обнаруживать и исправлять однократную ошибку для двоичного кода буквы «Щ» и перебор всех однократных ошибок.
Результаты представлены в таблице.
Код сообщения (источник) |
10011 001 |
Сообщение в коде Хэмминга |
101000101001 |
Искаж-енные позиции |
Закодированный сигнал |
Исправленный сигнал |
Указатель ошибки |
Выходной сигнал |
0 |
101000101001 |
101000101001 |
0001 |
001000101001 |
1 |
101000101001 |
101000101001 |
0010 |
111000101001 |
2 |
101000101001 |
101000101001 |
0011 |
100000101001 |
3 |
101000101001 |
101000101001 |
0100 |
101100101001 |
4 |
101000101001 |
101000101001 |
0101 |
101010101001 |
5 |
101000101001 |
101000101001 |
0110 |
101001101001 |
6 |
101000101001 |
101000101001 |
0111 |
101000001001 |
7 |
101000101001 |
101000101001 |
1000 |
101000111001 |
8 |
101000101001 |
101000101001 |
1001 |
101000100001 |
9 |
101000101001 |
101000101001 |
1010 |
101000101101 |
10 |
101000101001 |
101000101001 |
1011 |
101000101011 |
11 |
101000101001 |
101000101001 |
1100 |
101000101000 |
Вывод: Как видно из таблицы, код Хэмминга определяет однократную ошибку, на которую указывает указатель ошибки на любой позиции, которая возникает при передачи кода по каналу связи, при этом не важно положение искаженного символа – информационного или контрольного и исправляет ее, при этом не возникают новые ошибки при исправлении.
Исследование способности кода обнаруживать и исправлять двукратную ошибку для двоичного кода буквы «К».
Код сообщения (источник) |
10001 010 |
Сообщение в коде Хэмминга |
010110110001 |
Искаж-енные позиции |
Закодированный сигнал |
Исправленный сигнал |
Указатель ошибки |
Выходной сигнал |
0, 1 |
010110110001 |
101110110001 |
0011 |
100110110001 |
0, 2 |
010110110001 |
101110110001 |
0010 |
111110110001 |
0, 3 |
010110110001 |
110000110001 |
0101 |
110010110001 |
0, 4 |
010110110001 |
110000110001 |
0100 |
110100110001 |
0, 5 |
010110110001 |
110111010001 |
0111 |
110111110001 |
0, 6 |
010110110001 |
110111010001 |
0110 |
110110010001 |
0, 7 |
010110110001 |
110110101001 |
1001 |
110110100001 |
0, 8 |
010110110001 |
110110101001 |
1000 |
110110111001 |
0, 9 |
010110110001 |
110110110111 |
1011 |
110110110101 |
0, 10 |
010110110001 |
110110110111 |
1010 |
110110110011 |
0, 11 |
010110110001 |
110110110000 |
1101 |
110110110000 |
1, 2 |
010110110001 |
101110110001 |
0001 |
001110110001 |
1, 3 |
010110110001 |
000011110001 |
0110 |
000010110001 |
1, 4 |
010110110001 |
000100010001 |
0111 |
000100110001 |
1, 5 |
010110110001 |
000011110001 |
0100 |
000111110001 |
1, 6 |
010110110001 |
000100010001 |
0101 |
000110010001 |
1, 7 |
010110110001 |
000110100101 |
1010 |
000110100001 |
1, 8 |
010110110001 |
000110111011 |
1011 |
000110111001 |
1, 9 |
010110110001 |
000110100101 |
1000 |
000110110101 |
1, 10 |
010110110001 |
000110111011 |
1001 |
000110110011 |
1, 11 |
010110110001 |
000110110000 |
1110 |
000110110000 |
2, 3 |
010110110001 |
011010010001 |
0111 |
011010110001 |
2, 4 |
010110110001 |
011101110001 |
0110 |
011100110001 |
2, 5 |
010110110001 |
011101110001 |
0101 |
011111110001 |
2, 6 |
010110110001 |
011010010001 |
0100 |
011110010001 |
2, 7 |
010110110001 |
011110100011 |
1011 |
011110100001 |
2, 8 |
010110110001 |
011110111101 |
1010 |
011110111001 |
2, 9 |
010110110001 |
011110111101 |
1001 |
011110110101 |
2, 10 |
010110110001 |
011110100011 |
1000 |
011110110011 |
2, 11 |
010110110001 |
011110110000 |
1111 |
011110110000 |
3, 4 |
010110110001 |
110000110001 |
0001 |
010000110001 |
3, 5 |
010110110001 |
000011110001 |
0010 |
010011110001 |
3, 6 |
010110110001 |
011010010001 |
0011 |
010010010001 |
3, 7 |
010110110001 |
010010100000 |
1100 |
010010100001 |
3, 8 |
010110110001 |
010010111001 |
1101 |
010010111001 |
3, 9 |
010110110001 |
010010110101 |
1110 |
010010110101 |
3, 10 |
010110110001 |
010010110011 |
1111 |
010010110011 |
3, 11 |
010110110001 |
010010100000 |
1000 |
010010110000 |
4, 5 |
010110110001 |
011101110001 |
0011 |
010101110001 |
4, 6 |
010110110001 |
000100010001 |
0010 |
010100010001 |
4, 7 |
010110110001 |
010100100001 |
1101 |
010100100001 |
4, 8 |
010110110001 |
010100111000 |
1100 |
010100111001 |
4, 9 |
010110110001 |
010100110101 |
1111 |
010100110101 |
4, 10 |
010110110001 |
010100110011 |
1110 |
010100110011 |
4, 11 |
010110110001 |
010100111000 |
1001 |
010100110000 |
5, 6 |
010110110001 |
110111010001 |
0001 |
010111010001 |
5, 7 |
010110110001 |
010111100001 |
1110 |
010111100001 |
5, 8 |
010110110001 |
010111111001 |
1111 |
010111111001 |
5, 9 |
010110110001 |
010111110100 |
1100 |
010111110101 |
5, 10 |
010110110001 |
010111110011 |
1101 |
010111110011 |
5, 11 |
010110110001 |
010111110100 |
1010 |
010111110000 |
6, 7 |
010110110001 |
010110000001 |
1111 |
010110000001 |
6, 8 |
010110110001 |
010110011001 |
1110 |
010110011001 |
6, 9 |
010110110001 |
010110010101 |
1101 |
010110010101 |
6, 10 |
010110110001 |
010110010010 |
1100 |
010110010011 |
6, 11 |
010110110001 |
010110010010 |
1011 |
010110010000 |
7, 8 |
010110110001 |
110110101001 |
0001 |
010110101001 |
7, 9 |
010110110001 |
000110100101 |
0010 |
010110100101 |
7, 10 |
010110110001 |
011110100011 |
0011 |
010110100011 |
7, 11 |
010110110001 |
010010100000 |
0100 |
010110100000 |
8, 9 |
010110110001 |
011110111101 |
0011 |
010110111101 |
8, 10 |
010110110001 |
000110111011 |
0010 |
010110111011 |
8, 11 |
010110110001 |
010100111000 |
0101 |
010110111000 |
9, 10 |
010110110001 |
110110110111 |
0001 |
010110110111 |
9, 11 |
010110110001 |
010111110100 |
0110 |
010110110100 |
10, 11 |
010110110001 |
010110010010 |
0111 |
010110110010 |
Вывод: Анализирую полученные данные можно сделать заключение, что код Хэмминга только обнаруживает двукратную ошибку с помощью указателей, но не исправляет ее. При этом если вносятся исправления в коде, то возникают новые ошибки.
Исследование способности кода обнаруживать и исправлять трехкратную ошибку для двоичного кода буквы «Б».
Код сообщения (источник) |
10000 001 |
Сообщение в коде Хэмминга |
111100010001 |
Искаж-енные позиции |
Закодированный сигнал |
Исправленный сигнал |
Указатель ошибки |
Выходной сигнал |
0, 1, 6 |
111100010001 |
001000110001 |
0100 |
001100110001 |
0, 2, 8 |
111100010001 |
010100011011 |
1011 |
010100011001 |
0, 3, 9 |
111100010001 |
011000010101 |
1111 |
011000010101 |
1, 3, 5 |
111100010001 |
101001010001 |
0000 |
101001010001 |
1, 6, 7 |
111100010001 |
101100100001 |
1101 |
101100100001 |
1, 8, 9 |
111100010001 |
001100011101 |
0001 |
101100011101 |
2, 3, 11 |
111100010001 |
110000010010 |
1011 |
110000010000 |
2, 9, 10 |
111100010001 |
100100010111 |
0010 |
110100010111 |
3, 4, 5 |
111100010001 |
111011110001 |
0111 |
111011010001 |
3, 10,11 |
111100010001 |
110000010010 |
0011 |
111000010010 |
4, 6, 9 |
111100010001 |
111110100101 |
1000 |
111110110101 |
5, 8, 9 |
111100010001 |
111111011101 |
0101 |
111101011101 |
6, 7, 10 |
111100010001 |
111000100011 |
0100 |
111100100011 |
7, 8, 9 |
111100010001 |
111100001111 |
1011 |
111100001101 |
9, 10, 11 |
111100010001 |
111100010110 |
1101 |
111100010110 |
Вывод: По результатам таблицы видно, что данный код Хэмминга не способен исправить трёхкратную ошибку. Но на позициях 1, 3, 5 указатель ошибки нулевой, то есть, следовательно, ошибок нет. Не всегда данный код Хэмминга может обнаружить ошибку.
ВЫВОДЫ
В ходе анализа данных, полученных во время исследований, можно подвести итог, что код Хэмминга может обнаружить однократные, двукратные, трехкратные ошибки, но исправлять он способен однократные ошибки, причем, чем выше кратность, тем меньше вероятности обнаружить такие ошибки. То есть при больших кратностях метод дает неоднозначные результаты. Метод лучше применять для каналов с низким уровнем помех. Чтобы улучшить метод, необходимо увеличить число контрольных символов, что означает увеличение порядка. Чем выше число контрольных символов, тем выше помехоустойчивость метода.