В этом примере показано, как настроить энкодер/декодер Тростника-Solomon (RS), чтобы сократиться (63,53) код к (28,18) код.
В дополнение к этому примеру примеры “Первая часть Кодирования Тростника-Solomon – Стирания” и “Вторая часть Кодирования Тростника-Solomon – Проколы” показывают 64-QAM систему связи с (63,53) блочный код RS со стираниями и проколами соответственно. Как был упомянут в этих двух примерах, прокалывание обладает преимуществом создания более гибкого уровня кода, за счет некоторой возможности исправления ошибок. Сокращенные коды достигают той же гибкости уровня кода, не ухудшая производительность исправления ошибок, учитывая тот же вход Eb/N0 демодулятора. Обратите внимание на то, что прокалывание является удалением символов четности от кодовой комбинации, и сокращение является удалением символов сообщения от кодовой комбинации.
Введение
Этот пример показывает симуляцию системы связи, состоящей из случайного источника, энкодера RS, 64-QAM модулятора, канала AWGN, 64-QAM демодулятора и декодера RS. Это анализирует эффекты кодирования RS со стираниями, прокалывания и сокращения, путем сравнения производительности частоты ошибок по битам (BER) канала по сравнению с закодированной производительностью BER. Этот пример получает BER Канала путем сравнения входных параметров для модулятора QAM к выходным параметрам от демодулятора QAM. Этот пример получает Закодированный BER путем сравнения входных параметров для энкодера RS к выходным параметрам от декодера RS.
Инициализация
Файл скрипта RSCodingConfigExample инициализирует параметры симуляции и конфигурирует канал AWGN, и объекты системы измерения коэффициента ошибок раньше симулировали систему связи. Скрипт также устанавливает незакодированное отношение Eb/N0 на EbNoUncoded = 15 дБ и устанавливает критерии остановки симуляции путем определения целевого количества ошибок и максимального количества битных передач к 500 и 5×106, соответственно.
RSCodingConfigExample
Конфигурирование энкодера/Декодера RS
Рассмотрите тот же (63,53) код RS, действующий совместно с 64-QAM схемой модуляции, которая использовалась в Первой части Кодирования Тростника-Solomon в качестве примера - Стираниях и Второй части Кодирования Тростника-Solomon - Проколы, чтобы продемонстрировать, как декодировать стирания и как проколоть код. В этом примере показано, как сократиться (63,53) код к (28,18) код.
Сокращение блочного кода удаляет символы из своего фрагмента сообщения, в то время как прокалывание удаляет символы из своего фрагмента четности. Можно включить оба метода с Системными объектами энкодера и декодера RS.
Например, чтобы сократиться (63,53) код к (53,43) код, можно просто войти 53 и 43 для CodewordLength
и MessageLength
свойства, соответственно (поскольку ). Однако, чтобы сократить его 35 символами к (28,18) код, необходимо явным образом указать, что символы принадлежат GF Поля Галуа (26). В противном случае блоки RS примут, что код сокращен от (31,21) код (поскольку ).
Установите Системные объекты энкодера/декодера RS так, чтобы они выполнили блочное кодирование с (28,18) код, сокращенный от (63,53) код.
Создайте (63,53) RSEncoder
Системный объект и RSDecoder
объект с входным портом стираний и два прокола.
N = 63; % Codeword length K = 53; % Message length S = 18; numErasures = 6; numPuncs = 2; rsEncoder = comm.RSEncoder(N, K, 'BitInput', false); rsDecoder = comm.RSDecoder(N, K, 'BitInput', false, 'ErasuresInputPort', true); rsEncoder.PuncturePatternSource = 'Property'; rsEncoder.PuncturePattern = [ones(N-K-numPuncs,1); zeros(numPuncs,1)]; rsDecoder.PuncturePatternSource = 'Property'; rsDecoder.PuncturePattern = rsEncoder.PuncturePattern; % Set the shortened message length values rsEncoder.ShortMessageLength = S; rsDecoder.ShortMessageLength = S;
Задайте поле GF (26) в Системных объектах энкодера/декодера RS путем установки PrimitivePolynomialSource
свойство к 'Свойству' и PrimitivePolynomial
свойство до 6-й степени примитивный полином.
rsEncoder.PrimitivePolynomialSource = 'Property'; rsEncoder.PrimitivePolynomial = de2bi(primpoly(6, 'nodisplay'), 'left-msb'); rsDecoder.PrimitivePolynomialSource = 'Property'; rsDecoder.PrimitivePolynomial = de2bi(primpoly(6, 'nodisplay'), 'left-msb');
Потоковый цикл обработки
Симулируйте систему связи для незакодированного отношения E b/N0 15 дБ. Незакодированный E b/N0 является отношением, которое было бы измерено во входе канала, если бы не было никакого кодирования в системе.
Сокращение изменяется, уровень кода во многом как прокалывание делает. Необходимо настроить значение закодированного отношения E b/N0, чтобы составлять проколы и сокращение. В этом примере незакодированное отношение E b/N0 относится к закодированному E b/N0, как показано в следующем синтаксисе. Установите свойство объекта канала AWGN к вычисленному закодированному значению E b/N0.
EbNoCoded = EbNoUncoded + ...
10*log10(S/(N - numPuncs - K + S));
channel.EbNo = EbNoCoded;
Цикл до симуляции достигает целевого количества ошибок или максимального количества передач.
chanErrorStats = zeros(3,1); codedErrorStats = zeros(3,1); while (codedErrorStats(2) < targetErrors) && ... (codedErrorStats(3) < maxNumTransmissions) % Data symbols - transmit 1 message word at a time, each message word has % S symbols in the [0 2^P-1] range. P is the degree of the % primitive polynomial specified in the RS encoder/decoder, which in this % example equals 6. data = randi([0 2^6-1],S,1); % Encode the shortened message word. The encoded word encData is % N-numPuncs-K+S 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 object. 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 = 9.6599e-05 totalCorrectedErrors = 1436
Можно добавить цикл for вокруг цикла обработки выше, чтобы запустить симуляции для набора значений E b/N0. Симуляции были запущены оффлайн для незакодированных значений E b/N0 в 4:15 дБ, целевое количество ошибок, равных 5 000, и максимальное количество передач, равных 50×106. Результаты симуляции показывают в следующем рисунке. Для сравнения рисунок также показывает результаты, полученные в примерах “Первая часть Кодирования Тростника-Solomon – Стираниях” и “Второй части Кодирования Тростника-Solomon – Проколы”. Результаты “Первой части Кодирования Тростника-Solomon – Стирания” соответствуют системе со стираниями, но никаким прокалыванием. Результаты “Второй части Кодирования Тростника-Solomon – Проколы” соответствуют системе со стираниями и проколами.
От кривых заметьте, что BER канала хуже с сокращением, потому что закодированный E b/N0 хуже. Этот ухудшенный закодированный E b/N0 происходит, потому что уровень кода сокращенного кода намного ниже, чем тот из несокращенного кода. В результате закодированный BER также хуже с сокращением, чем без, особенно в более низких значениях E b/N0.
Сводные данные
Этот пример использовал несколько Системных объектов, чтобы симулировать 64-QAM систему связи по каналу AWGN с сокращенным блочным кодом RS. Это показало, как сконфигурировать энкодер/декодер RS, чтобы сократиться (63,53) код к (28,18) код. Производительность системы была измерена с помощью канала и закодированных кривых BER, полученных с помощью объектов системы измерения коэффициента ошибок.
Приложение
Этот пример использует следующий скрипт и функцию помощника:
Выбранная библиография
[1] Г. К. Кларк младший, Дж. Б. Каин, кодирование с коррекцией ошибок для цифровой связи, Пленум-Пресс, Нью-Йорк, 1981.