Оля, здравствуйте.
Причина возникновения ошибки в строке 87:
% собственно модуляция
IQ_signal = modulate(h, code_word);1. Недопустимый размер матрицы code_word - он в Вашей модели равен 510 - не кратен 3. Убедиться в этом предельно просто - поставьте точку останова на строке 87 - щелчком на символе "-", что рядом с номером строки, запустите программу и установите курсор мыши на переменную code_word - Matlab отразит текущие параметры переменной.
Такая размерность матрицы связана с тем, что при кодировании
%% Помехоустойчивое кодирование
code_word = encode(trx,n,k,'cyclic/binary');Вы задаете параметры кода (255,245), однако подставляете вектор trx размерностью 246.
С целью устранения ситуации требуется либо на 1 разряд уменьшить адрес (что противоречит заданию), либо скорректировать количество информационных символов до 13 и перед модуляцией дополнить размерность code_word до 255 (наподобие операции
code_word = [0 code_word]').
2. Матрица code_word в методе modulate должна быть типа столбца, в Вас в моделе - строка. В примере с этой целью использовалась операция транспонирования (символ
'): code_word = [0 code_word]';
Достаточно будет записать: IQ_signal = modulate(h, code_word');
После этого модулятор будет работать без ошибок.
Посмотрел код приемника - он не настроен на структуру Ваших пакетов, требуется некоторая коррекция кода.
Для 8-PSK в методе awgn целесообразно задать SNR=15..18.
Последнее: по заданию требуется использовать кодек именно Рида-Соломона. Используемый в программе циклический код имеет общие корни с РС, но не является им. Наберите в разделе HELP Matlab
fec.rsdec или по ссылке
mathworks- в справке имеется исчерпывающая информация о кодеке РС и пример его реализации.
Удачи!
P.S. Путь господин Лашко найдет несколько минут свободного времени и укажет в этой теме те задачи, которые он решал в рамках самостоятельной работы. В противном случае его участие в работе будет пересмотрено.