Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 800306

.pdf
Скачиваний:
3
Добавлен:
01.05.2022
Размер:
1.45 Mб
Скачать

вание кода, а n - длина кода). Кодовые слова V отличаются друг от друга одним символом, поэтому даже один ошибочно принятый символ приводит к замене одного кодового слова другим и, следовательно, к неправильному приему сообщения в целом.

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

Классы помехоустойчивых кодов:

Коды с контролем четности. В них в кодовом слове V контролируется четность или нечетность количества 1.

Линейные блочные коды. В них кодовое слово V включает две части - информационную U и управляющую P (V = P, U).

Циклические блочные коды. В них кодовое слово получается умножением U на генерирующий множитель G по правилам модульной арифметики. Реализация кодера с циклическими кодами проще.

Сверточные коды. В них слово U разбивается на части (кортежи U1). Кодер имеет память для хранения U из нескольких кортежей. Кортежи заносятся в эту память путем сдвига. Кодер и декодер имеют одинаковый набор состояний S, между которыми определены переходы по кортежу U1. Выходной код V включает номер состояния кодера S и кортеж U1. В декодере дублируется работа кодера, повторяется состояние S кодера, из которого извлекается слово U. Чтобы кодек работал необходима синхронизация кодера и декодера – их состояния должны быть одинаковыми. Декодирование осуществляется по алгоритму Витерби, который ускоряет синхронизацию декодера с кодером.

9

Кодек Хэмминга

Выполнить моделирование кодека Хэмминга (11,15) без ошибок T0=0, и с ошибками с кратностью T1=1, T2=2.

Создаем модель в среде Simulink (рис. 4).

Рис. 4. Модель в среде Simulink

В модель включаем:

Источник данных, генератор случайных двоичных чисел – Bernoulli Binary-Integer, вырабатывающий случайные биты. Блок находится в Communications Blockset => Comm Sourses => RandomData Sourses. Выход генератора нужно сделать в виде фрейма из K=11 отсчетов. В окне параметров блока зададим и вероятность нулей, равную 0,9. (рис. 5).

Кодер Хэмминга – Hamming encoder. Блок находится в Communications Blockset => Error Detection and Correction => Block.Он по сообщению K формирует передаваемый код V. В окне параметров блока Ошибка!

Источник ссылки не найден, задаем N=15 и число добавляемых символов N-k=4 (рис. 6) как параметр функции генерации порождающей функции.

10

Рис. 5. Окно параметров блока

Рис. 6. Окно параметров блока

Умножитель Gain. Блок находится в Simulink => Commonly Used Blocks. Он умножает выход кодера на вектор ошибки E из 0 и 1, имитирующий ошибки в канале связи (ошибка может получиться при компоненте E, равном 0).

11

Вектор E должен содержать N компонент, которые вычислим функцией rot90(randerr(N,1,N -ER)) (рис. 7). Получим вектор-

строку из N равновероятных нулей и единиц, из которых

(N –ER) равны 1.

Рис. 7. Окно параметров блока

Декодер Хэмминга – Hamming decoder. Блок находится в Communications Blockset => Error Detection and Correction => Block. Для него нужно задать параметры, аналогичные кодеру.

Блоки Unbuffer. Блок находится в Signal Processing Blockset => Signal management => Buffers. Они преобразуют фреймы в линейные последовательности, направляемые к виртуальному наблюдателю Scope.

Наблюдатель Scope. Блок находится в Simulink => Sinks. Он позволяет в общем масштабе времени наблюдать сигналы от блоков Buffer. Чтобы в графиках наблюдателя были заголовки, сделаем входам имена. Для этого двойным щелчком по линии входа вызовем окно ввода имени, в которое занесем имя. Зададим имена: для передаваемого сообщения – Message_T, для передаваемого кода Code_T, для принятого кода – Code_R, для декодированного сообщения

Message_R.

12

При моделировании с разными кратностями ошибок получим (рис. 8-10):

Рис. 8. Результаты моделирования: Ошибок нет, T0=ER=0. Code_T и Code_R одинаковы

Рис. 9. Результаты моделирования: Ошибка кратности T1=ER=1. Code_T и Code_R не одинаковы. Все ошибки исправлены

13

Рис. 10. Результаты моделирования: Ошибка кратности T2=ER=2. Code_T и Code_R не одинаковы. Часть ошибок осталась

Кодек Рида-Соломона

Выполнить моделирование кодека Рида-Соломона RS(5,15) без ошибок T0=0 и с ошибками с кратностью T1=4, T2=8. Создаем модель в среде Simulink (рис. 11).

Рис. 11. Модель в среде Simulink 14

В модель включаем:

Источник данных, генератор случайных целых чисел

– Random-Integer. Communications Blockset =>Comm Sources => Random Data Sources. Он вырабатывает числа в интервале от 0 до N-1. Выход генератора нужно сделать в виде фрейма из K чисел (рис. 12).

Рис. 12. Окно параметров блока

Кодер Рида-Соломона – RS encoder (рис. 13). Блок находится в Communications Blockset => Error Detection and Correction => Block. Он по сообщению K формирует передаваемый код из N символов.

15

Рис. 13. Окно параметров блока

Умножитель Gain. Блок находится в Simulink => Commonly Used Blocks. Он умножает выход кодера на вектор ошибки E из 0 и 1, имитирующий ошибки в канале связи (ошибка может получиться при компоненте E, равном 0). Вектор E должен содержать N компонент, которые вычислим функцией rot90(randerr(N,1,N -ER)) (рис. 14). Получим вектор-

строку из N равновероятных нулей и единиц, из которых N -ER равны 1.

Декодер Рида-Соломона – RS decoder. Блок находится в Communications Blockset => Error Detection and Correction => Block. Декодер имеет два выхода: верхний декодированное сообщение, нижний – число исправленных ошибок. Для работы с нижним выходом в окне параметров блока нужно установить флаг отображения этого выхода.

16

Рис. 14. Окно параметров блока

Блоки Unbuffer Блок находится в Signal Processing Blockset => Signal management => Buffers. Они преобразуют фреймы в линейные последовательности, направляемые к виртуальному наблюдателю Scope.

Наблюдатель Scope. Блок находится в Simulink => Sinks. Он позволяет в общем масштабе времени наблюдать сигналы от блоков Buffer. Чтобы в графиках наблюдателя были заголовки, сделаем входам имена. Для этого двойным щелчком по линии входа вызовем окно ввода имени, в которое занесем имя. Зададим имена: для передаваемого сообщения – Message_T, для передаваемого кода Code_T, для принятого кода – Code_R, для декодированного сообщения

Message_R.

Индикатор Display. Блок находится в Simulink => Sinks. Он отображает число исправленных ошибок.

При моделировании с разными кратностями ошибок получим (рис. 15-17):

17

Рис. 15. Результаты моделирования: Ошибок нет, T0=ER=0. Code_T и Code_R одинаковы. Дисплей отображает 0

Рис. 16. Результаты моделирования: Ошибка кратности T1=ER=5. Code_T и Code_R не одинаковы. Все ошибки исправлены. Дисплей отображает их количество (5)

18