Рис. 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