Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа 7 Помехоустойчивое кодирование Цель Изучение методов помехоустойчивого ко

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 25.11.2024

Лабораторная работа №7

«Помехоустойчивое кодирование»

 Цель

Изучение методов помехоустойчивого кодирования и сравнение их свойств.

Функции высокого уровня encode и decode осуществляют, соответственно, кодирование и декодирование сообщения с использованием блочного кода. Тип используемого кода задается в числе параметров функций. Линейный блочный код в общем случае описывается порождающей матрицей (generator matrix). Кодирование блока (вектора) производится путем его умножения на порождающую матрицу. Помимо порождающей, существует проверочная матрица кода (parity-check matrix). Она может использоваться для обнаружения ошибок — при отсутствии ошибок умножение кодированного блока на проверочную матрицу должно давать нулевой вектор. Преобразование порождающей матрицы в проверочную и обратно осуществляется функцией gen2par. Если умножение кодированного блока на проверочную матрицу не дает нулевого вектора, то полученный результат (его называют синдромом — syndrome) позволяет определить, какие именно символы были искажены в процессе передачи. Если код является двоичным (то есть символы могут принимать только значения 0 и 1), это позволяет исправить ошибки. Декодирование линейного блочного кода, таким образом, можно осуществить с помощью таблицы, в которой для каждого значения синдрома указан соответствующий вектор ошибок. Создать такую таблицу на основании проверочной матрицы кода позволяет функция syndtable. Функция gfweight позволяет определить кодовое расстояние для линейного блочного кода по его порождающей или проверочной матрице.

Циклические коды
Циклические коды — это подкласс линейных кодов, обладающие тем свойством, что циклическая перестановка символов в кодированном блоке дает другой возможный кодированный блок того же кода. Для работы с циклическими кодами в пакете Communications имеются две функции. Задав число символов в кодируемом и закодированном блоках, с помощью функции cyclpoly можно получить порождающий полином циклического кода. Далее, использовав этот полином в качестве одного из параметров функции cyclgen, можно получить порождающую и проверочную матрицы для данного кода.

Коды БЧХ
Коды БЧХ являются одним из подклассов циклических блочных кодов. Для работы с ними функции высокого уровня вызывают специализированные функции bchenco (кодирование) и bchdeco (декодирование). Кроме того, функция bchpoly позволяет рассчитывать параметры или порождающий полином для двоичных кодов БЧХ.

Коды Хэмминга
Коды Хэмминга являются одним из подклассов циклических блочных кодов. Порождающий полином для кодов Хэмминга неприводим и примитивен, а длина кодированного блока равна 2m – 1. Порождающая и проверочная матрицы для кодов Хэмминга генерируются функцией hammgen.

Коды Рида—Соломона
Коды Рида—Соломона являются одним из подклассов циклических блочных кодов. Это единственные поддерживаемые пакетом Communications коды, которые работают не с однобитовыми, а с многобитовыми символами. Для работы с кодами Рида—Соломона функции высокого уровня вызывают специализированные функции rsenco (кодирование) и rsdeco (декодирование). Кроме того, функции rsencode и rsdecode позволяют использовать при кодировании и декодировании экспоненциальный формат данных, а функции rsencof и rsdecof осуществляют кодирование и декодирование текстового файла.
Наконец, функция
rspoly генерирует порождающие полиномы для кодов Рида—Соломона.

Постановка задачи

  1.  Провести кодирование сигнала, полученного с помощью функции randerr кодом Хэмминга 2-мя способами: с помощью встроенных функций encode/decode, а также через создание проверочной и генераторной матриц и вычисление синдрома. Оценить корректирующую способность кода.
  2.  С помощью встроенных функций encode/decode выполнить кодирование циклическим кодом. Оценить корректирующую способность кода.

Ход работы

  1.  Код Хэмминга
    1.  Встроенные функции encode/decode

Текст программы:

msg = randint(26,1,2); %message

kod=encode(msg, 31,26, 'hamming'); %code

dec=decode(kod,31,26,'hamming'); %decode

sErrors = symerr(msg,dec); %errors of symbols

bitErrors = biterr(msg,dec);  %errors of bits

for i=1:31

   ns(i,1)=0;

   for k=7:2:8

       if i==k

           if kod(i,1)==1 ns(i,1)=-1;

           elseif kod(i,1)==0 ns(i,1)=1;

           end

       end

   end

end

NoiseSignal = kod+ns; %noise

decn=decode(NoiseSignal,31,26,'hamming'); %decode with noise

sErr = symerr(msg,decn) %errors of symbols

bitErr = biterr(msg,decn)  %errors of bits

Результат работы:

msg = 10011110110100111010000101

kod = 1110010011110110100111010000101

dec = 10011110110100111010000101

В случае введения намеренных ошибок код Хэмминга исправляет только одну из них.

Вводим 3 ошибки в 7, 9 и 11 бите:

ns =  0000001000000000000000000000000

NoiseSignal = 1110011011110110100111010000101

decn = 10011110110100111010000101

sErr = 0

bitErr = 0

  1.  Создание проверочной и генераторной матриц и вычисление синдрома

Текст программы:

msg = randint(26,1,2); % message

H=hammgen(5); % parity-check matrix

G=gen2par(H); % generator matrix

T=syndtable(H); % table of errors

kod=mod(msg'*G,2); % code

dec=mod(kod*H',2); % syndrom

for k=1:26

   msg2(1,k)=kod(1,5+k); % return message

end

for i=1:31

   ns(i,1)=0;

   for k=7:2:12

       if i==k

           if kod(1,i)==1 ns(i,1)=-1;

           elseif kod(1,i)==0 ns(i,1)=1;

           end

       end

   end

end

NoiseSignal = kod+ns'; % noise

decs=mod(NoiseSignal*H',2); % decode

forw(1,1)=decs(1,5);

forw(1,2)=decs(1,4);

forw(1,3)=decs(1,3);

forw(1,4)=decs(1,2);

forw(1,5)=decs(1,1);

deccsyn=0;

for i=1:5

   if forw(1,i)==1

       deccsyn=deccsyn+2^(i-1); %quantity of syndrom  

   end

end

ren=T(deccsyn-2,:);

NoiseErr=mod(NoiseSignal+ren,2); % noise

for k=1:26

   msgnap(1,k)=NoiseErr(1,5+k); %message

end

Результат работы:

msg = 11011001110110100111101111

H = |1000010010110011111000110111010|

   |0100001001011001111100011011101|

   |0010010110011111000110111010100|

   |0001001011001111100011011101010|

   |0000100101100111110001101110101|

kod = 0100011011001110110100111101111

dec = 00000

msg2 = 11011001110110100111101111

Добавляем 3 ошибки: в 7, 9 и 11 бит:

NoiseSignal = 0100010001101110110100111101111

Получаем синдром:

decs = 01101

Численное значение синдрома:

deccsyn = 13

В таблице находим 11 строку, соответствующую синдрому:

ren = 0000001000000000000000000000000

Прибавляем к полученному коду по модулю два:

NoiseErr = 0100011001101110110100111101111

Получаем сообщение с одной исправленной ошибкой:

msgnap = 11001101110110100111101111

  1.  Циклические коды

Текст программы:

msg = randint(21,1,2); %message

kod=encode(msg, 31,21, 'cyclic'); %code

dec=decode(kod,31,21,'cyclic'); %decode

H=cyclgen(31,cyclpoly(31,21));

trt=syndtable(H);

sErrors = symerr(msg,dec); %errors of symbols

bitErrors = biterr(msg,dec);  %errors of bits

for i=1:30

   ns(i,1)=0;

   for k=11:2:14

       if i==k

           if kod(i,1)==1 ns(i,1)=-1;

           elseif kod(i,1)==0 ns(i,1)=1;

           end

       end

   end

end

NoiseSignal = kod+ns; %noise

decn=decode(NoiseSignal,31,21,'cyclic',cyclpoly(31,21),trt); %decode with noise

sErr = symerr(msg,decn) %errors of symbols

bitErr = biterr(msg,decn)  %errors of bits

Результат работы:

msg = 101111100001000000100

kod = 0111100011101111100001000000100

dec = 101111100001000000100

В случае введения намеренных ошибок циклический код при данной длине кода может исправлять 2 ошибки. Вводим 2 ошибки в 7 и 9 бите:

ns = 0000000000-10-1000000000000000000

NoiseSignal = 0111100011000111100001000000100

decn = 101111100001000000100

Single-error patterns loaded in decoding table.  992 rows remaining.

2-error patterns loaded.  527 rows remaining.

3-error patterns loaded.  0 rows remaining.

Single-error patterns loaded in decoding table.  992 rows remaining.

2-error patterns loaded.  527 rows remaining.

3-error patterns loaded.  0 rows remaining.

sErr = 0

bitErr = 0

Выводы

Код Хэмминга является частным случаем циклических кодов и исправляет лишь одну ошибку. Корректирующая способность циклических кодов зависит от соотношения длина кодируемого слова / длина кода.  




1. Клаус зарубежный гость Баба Яга дремучий лесной эколог Сорока пресссекретарь Деда Мороза Снеговик горячи
2. Реферат- ІС фінансового аналізу
3. Контрольная работа- Политика и власть, типы избирательных систем
4. Тема- Цель- проверить знания обучающихся по теме- Мир в ХХI веке 1
5. Принципи і правила ведення бухгалтерського обліку в комерційних банка
6. Теневая экономика в системе рыночных отношений Во всех странах с рыночной структурой экономики была есть
7. баня парит ~ здоровье дарит и это не просто слова ~ это реальность
8. тематическая статистика
9. Тема- Мягкий знак на конце существительных после шипящих
10. 2013р. Міністерство освіти і науки молоді і спорту України ДВНЗ Маріупольський будівельний ко
11. Дидактические функции проверки и учета знаний и умений, учащихся по физике
12. . Ведение2 2
13. Искусство художественного слова основывается на мастерстве рассказчика умеющего живо передать впечатлени
14. Тема- Петушок курочка и цыплята
15. полтишкового Пилота Сами вы
16. Когда необходим психолог
17. Дипломная работа- Гражданско-правовая охрана имущественных интересов несовершеннолетних
18. Факторы, влияющие на психофизиологические состояния персонала на примере трудового коллектива фирмы
19. ни промислового виробництва
20. Пожарная безопасность.html