Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КУрсАч_-_мальцев.docx
Скачиваний:
10
Добавлен:
19.12.2018
Размер:
247.86 Кб
Скачать
  1. Обобщенная структура кодирующего и декодирующего устройства

Блок-схема кодирующего и декодирующего устройства приведена на рисунке 1:

N(t)

1

2

3

6

4

5

7

8

Вход

Выход

Рисунок 1 – Блок-схема кодирующего и декодирующего устройств.

Блок №1 выполняет кодирование входной последовательности, формируя четырехразрядный двоичный код, причем первые 3 символа информационные, а четвертый – проверочный. Затем кодированное сообщение параллельно передается на блок №2 (параллельно-последовательный регистр).

После прохождения кода через зашумленный канал связи к нему прибавляется вектор ошибки N(t), причем каждая единица вектора приводит к ошибке в соответствующем бите переданной последовательности.

Далее информация поступает на последовательный регистр (блок №3). Теперь кодовая последовательность двигается по двум путям: один ведет к регулирующему буферу (блок №6), в который перезаписывается информация с блока №3; второй – к блоку формирующему синдром s (блок №4), после которого синдром s подается на блок №5, в котором формируется вектор ошибки E.

Затем сигнал на выходе блока №6 суммируется с вектором ошибок Е, который получаем на выходе блока №5, причем полученный код двигается параллельно, и приходит на параллельно-последовательный регистр (блок №8). После сигнал идет на выход.

Данная блок-схема позволяет устройству обнаружить ошибку и исправить ее. Минусом такого устройства будет являться то, что при ошибке в двух символах схема не укажет на это. И при получении ложного синдрома может внести дополнительную ошибку в сообщение.

  1. Моделирование в среде Matlab

Согласно построенной блок-схеме из пункта №2 промоделируем данное устройство. Для этого воспользуемся программным пакетом Matlab.

Блоки №1 и №2 представляют собой кодирующее устройство сверточного кода Вайнера-Эша. Представим данные блоки в виде программы, написанной в среде Matlab:

1

x=[1,0,0, 0,0,0, 0,0,0];

n=1;

r=0;

reg1=0;

2

reg2=0;

reg3=0;

reg4=0;

reg5=0;

for i=1:1:3

resylt=reg1+reg2+reg3+reg5+x(n)+x(n+1)+x(n+2);

reg2=reg1;

reg1=x(n);

3

reg3=x(n+1);

reg5=reg4;

reg4=x(n+2);

n=n+3;

singi(i)=mod(resylt,2);

end;

for b=1:1:12

a=mod(b,4);

4

if a==0

res(b)=singi(b/4);

r=r+1;

else

res(b)=x(b-r);

end;

end;

Матрица x представляет собой входную последовательность, подаваемую на вход кодирующего устройства (1). Далее описывается начальное положение регистров (2).

Цикл (3) формирует четвертый (проверочный) символ по правилу:

resylt=reg1+reg2+reg3+reg5+x(n)+x(n+1)+x(n+2);

singi(i)=mod(resylt,2),

где singi - матрица проверочных символов к трем кадрам.

Далее в цикле (4) к информационным символам добавляются проверочные символы. Т. е. после каждых трех информационных символов входной матрицы x записывается проверочный символ из матрицы singi, после чего мы получаем кодированное сообщение, представляющее собой матрицу res и передаем его по каналу связи.

В канале связи вноситься ошибка N(t) и мы получаем матрицу z. Далее сообщение z поступает на вход декодирующего устройства.

Блоки №3, №4, №5, №6, №7 и №8 представляют собой декодирующее устройство. Представим данные блоки в виде программы, написанной в среде Matlab:

5

z=[1,0,0,1, 0,0,0,1, 0,0,0,1];

n1=1;

r1=0;

reg11=0;

6

reg12=0;

reg13=0;

reg14=0;

reg15=0;

for i=1:1:3

resylt1=reg11+reg12+reg13+reg15+z(n1)+z(n1+1)

+z(n1+2)+z(n1+3);

reg12=reg11;

reg11=z(n1);

7

reg13=z(n1+1);

reg15=reg4;

reg14=z(n1+2);

n1=n1+4;

sindrom(i)=mod(resylt1,2);

end;

sin1=[1,1,1];

sin2=[1,1,0];

sin3=[1,0,0];

8

sin5=[0,1,1];

sin7=[0,1,0];

sin9=[0,0,1];

sin0=[0,0,0];

a=[0,0,0,0,0,0,0,0,0];

if sindrom==sin1

a(1)=1;

end;

if sindrom==sin2

a(2)=1;

end;

if sindrom==sin3

a(3)=1;

9

end;

if sindrom==sin5

a(5)=1;

end;

if sindrom==sin7

a(7)=1;

end;

if sindrom==sin9

a(9)=1;

end;

b=z1;

b(1)=z(1);b(2)=z(2);b(3)=z(3);b(4)=z(5);

b(5)=z(6);b(6)=z(7);b(7)=z(9);b(8)=z(10);

b(9)=z(11);

10

for i=1:1:9

if a(i)==1

b(i)=mod(z(i)+a(i),2);

end;

end;

На вход декодирующего устройства приходит последовательность, которая задается матрицей z (5). Далее описываются начальные положения регистров (6).

Цикл (7) формирует синдром по правилу:

resylt1=reg11+reg12+reg13+reg15+z(n1)+z(n1+1)+z(n1+2)+z(n1+3);

sindrom(i)=mod(resylt1,2),

где матрица sindrom - синдром к трем кадрам.

Далее записываются вероятные последовательности синдромов, причем каждый синдром соответствует полученной ошибке пир передаче по каналу связи (8).

Затем в зависимости от синдрома формируется вектор ошибки. Вектор ошибки представлен матрицей а (9).

После того как вектор ошибки сформирован происходит его суммирование с матрицей z, после чего получаем декодированную последовательность, записанную в матрицу b. Причем если в канале связи не возникло более одной ошибки, то матрица b будет равна исходной матрице х, что свидетельствует о удачном декодировании.

Рассмотрим несколько случаев возникновения ошибки в кодовом сообщении.

Подадим на вход кодирующего устройства последовательность:

x=[1,0,0,0,0,0,0,0,0].

После завершения кодирования получим закодированную последовательность, где каждый четвертый символ проверочный:

res=[1,0,0,1,0,0,0,1,0,0,0,1].

Затем добавим ошибку в последовательность res, получив при этом сообщение приходящее на вход декодирующего устройства z и рассмотрим работу декодирующего устройства.

Первый случай: ошибка в первом бите информационного сообщения.

x=[1,0,0,0,0,0,0,0,0];

res=[1,0,0,1,0,0,0,1,0,0,0,1];

z=[0,0,0,1,0,0,0,1,0,0,0,1];

sindrom=[1,1,1];

a=[1,0,0,0,0,0,0,0,0];

b=[1,0,0,0,0,0,0,0,0];

Второй случай: ошибка во втором бите информационного сообщения.

x=[1,0,0,0,0,0,0,0,0];

res=[1,0,0,1,0,0,0,1,0,0,0,1];

z=[1,1,0,1,0,0,0,1,0,0,0,1];

sindrom=[1,1,0];

a=[0,1,0,0,0,0,0,0,0];

b=[1,0,0,0,0,0,0,0,0];

Третий случай: ошибка в третьем бите информационного сообщения.

x=[1,0,0,0,0,0,0,0,0];

res=[1,0,0,1,0,0,0,1,0,0,0,1];

z=[1,0,1,1,0,0,0,1,0,0,0,1];

sindrom=[1,0,0];

a=[0,0,1,0,0,0,0,0,0];

b=[1,0,0,0,0,0,0,0,0];

Четвертый случай: ошибка в пятом бите информационного сообщения.

x=[1,0,0,0,0,0,0,0,0];

res=[1,0,0,1,0,0,0,1,0,0,0,1];

z=[1,0,0,1,1,0,0,1,0,0,0,1];

sindrom=[0,1,1];

a=[0,0,0,1,0,0,0,0,0];

b=[1,0,0,0,0,0,0,0,0];

Пятый случай: ошибка во втором и третьем битах информационного сообщения.

x=[1,0,0,0,0,0,0,0,0];

res=[1,0,0,1,0,0,0,1,0,0,0,1];

z=[1,1,1,1,0,0,0,1,0,0,0,1];

sindrom=[0,1,0];

a=[0,0,1,0,0,0,0,0,0];

b=[1,1,1,0,0,0,1,0,0];

В заключении можно сказать, что модель работает правильно и исправляет единичную ошибку (случаи 1, 2, 3, 4). В пятом же случае, при добавлении двух ошибок, модель, как описывалось раньше, ошибок не исправляет, а в данном случае добавляет их. Это связано с особенностью кодов Вайнера-Эша.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]