В этом примере показано, как настроить энкодер/декодер Тростника-Solomon (RS), чтобы использовать проколотые коды. Энкодер может сгенерировать проколы, для которых определенные символы четности всегда удаляются из ее выхода. Декодер, который знает шаблон прокола, вставляет нули в положения прокола и обрабатывает те символы как стирания. Декодер обрабатывает сгенерированные энкодером проколы и сгенерированные получателем стирания точно таким же образом, когда он декодирует. Прокалывание обладает дополнительным преимуществом создания более гибкого уровня кода, за счет некоторой возможности исправления ошибок.
В дополнение к этому примеру пример “Первая часть Кодирования Тростника-Solomon – Стирания” показывают 64-QAM систему связи с (63,53) блочный код RS со стираниями и пример “Часть III Кодирования Тростника-Solomon – Сокращение” показывает блочное кодирование RS с сокращенными кодами.
Введение
Этот пример показывает симуляцию системы связи, состоящей из случайного источника, энкодера RS, 64-QAM модулятора, канала AWGN, 64-QAM демодулятора и декодера RS. Это включает анализ кодирования RS со стираниями и прокалывания путем сравнения производительности частоты ошибок по битам (BER) канала по сравнению с закодированной производительностью BER. Этот пример получает BER Канала путем сравнения входных параметров для модулятора QAM к выходным параметрам от демодулятора QAM. Этот пример получает Закодированный BER путем сравнения входных параметров для энкодера RS к выходным параметрам от декодера RS.
Инициализация
Файл скрипта RSCodingConfigExample инициализирует параметры симуляции и конфигурирует канал AWGN, и объекты системы измерения коэффициента ошибок раньше симулировали систему связи. Скрипт также устанавливает незакодированное отношение E b/N0 на EbNoUncoded = 15 дБ и устанавливает критерии остановки симуляции путем определения целевого количества ошибок и максимального количества битных передач к 500 и 5×106, соответственно.
RSCodingConfigExample
Конфигурирование энкодера/Декодера RS
Рассмотрите тот же (63,53) код RS, действующий совместно с 64-QAM схемой модуляции, которая использовалась в примере “Первая часть Кодирования Тростника-Solomon − Стирания”, чтобы продемонстрировать, как декодировать стирания. В этом примере показано, как настроить энкодер/декодер RS, чтобы использовать проколотый код. В дополнение к декодированию сгенерированных получателем стираний декодер RS может откорректировать сгенерированные энкодером проколы. Алгоритм декодирования идентичен для этих двух случаев. Для каждой кодовой комбинации сумма проколов и стираний не может превысить дважды поддержку с коррекцией ошибок кода.
N = 63; % Codeword length K = 53; % Message length numErasures = 6; rsEncoder = comm.RSEncoder(N,K, 'BitInput', false); rsDecoder = comm.RSDecoder(N,K, 'BitInput', false, 'ErasuresInputPort', true);
Чтобы включить код, прокалывающий вас, устанавливает PuncturePatternSource
свойство к 'Свойству' и набору PuncturePattern
свойство к желаемому вектору шаблона прокола. Тот же вектор прокола должен быть задан и в энкодере и в декодере. Этот пример прокалывает два символа от каждой кодовой комбинации. Значения одного в векторе шаблона прокола указывают на непроколотые символы, в то время как значения нуля указывают на проколотые символы.
numPuncs = 2; rsEncoder.PuncturePatternSource = 'Property'; rsEncoder.PuncturePattern = [ones(N-K-numPuncs,1); zeros(numPuncs,1)]; rsDecoder.PuncturePatternSource = 'Property'; rsDecoder.PuncturePattern = rsEncoder.PuncturePattern;
Потоковый цикл обработки
Симулируйте систему связи для незакодированного отношения E b/N0 15 дБ. Незакодированный E b/N0 является отношением, которое было бы измерено во входе канала, если бы не было никакого кодирования в системе.
Длина кодовых комбинаций, сгенерированных энкодером RS, уменьшается количеством проколов, заданных в векторе шаблона прокола. Поэтому значение закодированного отношения E b/N0 должно быть настроено, чтобы составлять эти проколы. В этом примере незакодированное отношение E b/N0 относится к закодированному E b/N0 как показано ниже. Установите EbNo
свойство AWGN образовывает канал объект к вычисленному закодированному значению E b/N0.
EbNoCoded = EbNoUncoded + 10*log10(K/(N - numPuncs)); channel.EbNo = EbNoCoded;
Цикл до симуляции достигает целевого количества ошибок или максимального количества передач.
chanErrorStats = zeros(3,1); codedErrorStats = zeros(3,1); correctedErrors = 0; while (codedErrorStats(2) < targetErrors) && ... (codedErrorStats(3) < maxNumTransmissions) % Data symbols - transmit 1 message word at a time. Each message word % has K symbols in the [0 N] range. data = randi([0 N],K,1); % Encode the message word. The encoded word encData is N-numPuncs symbols % long. encData = rsEncoder(data); % Modulate encoded data. modData = qamModulator(encData); % Add noise. chanOutput = channel(modData); % Demodulate channel output. demodData = qamDemodulator(chanOutput); % Get erasures vector. erasuresVec = RSCodingGetErasuresExample(chanOutput,numErasures); % Decode data. [estData,errs] = rsDecoder(demodData,erasuresVec); % If a decoding error did not occur, accumulate the number of corrected % errors using the cumulative sum objet. if errs >= 0 correctedErrors = cumulativeSum(errs); end % Convert integers to bits and compute the channel BER. chanErrorStats(:,1) = ... chanBERCalc(intToBit1(encData),intToBit1(demodData)); % Convert integers to bits and compute the coded BER. codedErrorStats(:,1) = ... codedBERCalc(intToBit2(data),intToBit2(estData)); end
Объекты измерения коэффициента ошибок, chanBERCalc
и codedBERCalc
, выведите векторы 3 на 1, содержащие обновления измеренного значения BER, количество ошибок и общее количество битных передач. Отобразите закодированный BER и общее количество ошибок, откорректированных декодером RS.
codedBitErrorRate = codedErrorStats(1) totalCorrectedErrors = correctedErrors
codedBitErrorRate = 4.3198e-05 totalCorrectedErrors = 578
Можно добавить цикл for вокруг цикла обработки выше, чтобы запустить симуляции для набора значений Eb/N0. Симуляции были запущены оффлайн для незакодированных значений Eb/N0 в 4:15 дБ, целевое количество ошибок, равных 5 000, и максимальное количество передач, равных 50×106. Результаты симуляции показывают в следующем рисунке. Для сравнения рисунок также показывает результаты, полученные в примере “Первая часть Кодирования Тростника-Solomon – Стирания”, которые соответствуют системе со стираниями, но никаким прокалыванием.
От кривых заметьте, что BER канала немного лучше в проколотом случае. Причина этого состоит в том, что закодированный E b/N0 немного выше. С другой стороны, закодированный BER хуже в проколотом случае, потому что два прокола уменьшают поддержку с коррекцией ошибок кода одним, оставляя способным откорректировать (только 10-6-2)/2 = 1 ошибка на кодовую комбинацию.
Сводные данные
Пример использовал несколько Системных объектов, чтобы симулировать 64-QAM систему связи по каналу AWGN с блочным кодированием RS. Это показало, как сконфигурировать Системные объекты энкодера/декодера RS, чтобы получить проколотые коды. Производительность системы была измерена с помощью канала, и закодированные кривые BER получили использование объектов системы измерения коэффициента ошибок.
Пример “Часть III Кодирования Тростника-Solomon – Сокращение” показывает, как выполнить блочное кодирование RS с сокращенными кодами.
Приложение
Этот пример использует следующий скрипт и функцию помощника:
Выбранная библиография
[1] Г. К. Кларк младший, Дж. Б. Каин, кодирование с коррекцией ошибок для цифровой связи, Пленум-Пресс, Нью-Йорк, 1981.