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

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

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

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

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

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

от 25%

Подписываем

договор

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

Скидка 25% при заказе до 30.12.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. 1-4 Studer EQ Sontec Summit BSS udio NTI Dolby а также Tube Tech Urei и т.html
5. Современные и популярные виды и системы физических упражнени
6. Статья 1. Судебная власть 1
7. Вторая гражданскаявойна Английской Буржуазной революции и казнь короля
8. Курсова робота з дисципліни- Оцінка нерухомості Звіт з оцінки офісного приміщення що знаходиться за
9. .С. учебной работе
10. вариантов исторического развития человечества западного восточного и русского
11. Как влияет курение на молодой организм
12. О высоком назначении поэта и поэзии в лирике А. Пушкина
13. Разработка бизнес-плана создания новой организации ресторанно-гостиничного комплекса в г Звенигороде.html
14. МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ ПО ПОДГОТОВКЕ ДИПЛОМНЫХ ПРОЕКТОВ по направлению 080100
15. Пусть некоторое фиксированное решение x ~t этой системы существует при всех t t0
16. тема образов проблема положительного героя своеобразие творческого метода и жанра
17. Без измерения линий не обходится ни одна геодезическая работа
18. тема пенсионного обеспечения- MAKING VALUE JUDGMENTS EXPLICIT РЕШЕНИЙ оценочные суждения EXPLICIT Erik Schokkaert KULeuven Эрик Sch
19. КАЗАХСКИЙ ГУМАНИТАРНОЮРИДИЧЕСКИЙ УНИВЕРСИТЕТ Кафедра гражданского права УЧ
20. а Брокколи Замороженная овощная смесь ФРУКТЫ без косточек НЕЛЬЗЯ беременным и до 4х мес