Часть III кодирования тростника-Solomon – сокращение

Этот пример показывает, как настроить энкодер/декодер Тростника-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 конфигурирует прямоугольный 64-QAM модулятор и демодулятор, канал 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, соответственно (поскольку 2журнал2(53+1)1=63). Однако, чтобы сократить его 35 символами к (28,18) код, необходимо явным образом указать, что символы принадлежат GF Поля Галуа (26). В противном случае блоки RS примут, что код сокращен от (31,21) код (поскольку 2журнал2(28+1)1=31).

Установите Системные объекты энкодера/декодера 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, полученных с помощью объектов системы измерения коэффициента ошибок.

Примеры “Первая часть Кодирования Тростника-Solomon – Стирания”, “Вторая часть Кодирования Тростника-Solomon – Проколы”, и “Часть III Кодирования Тростника-Solomon – Сокращение” показывает, как сконфигурировать энкодеры RS и декодеры, чтобы выполнить блочное кодирование со стираниями, прокалывание и сокращение.

Приложение

Этот пример использует следующий скрипт и функцию помощника:

Выбранная библиография

[1] Г. К. Кларк младший, Дж. Б. Каин, кодирование с коррекцией ошибок для цифровой связи, Пленум-Пресс, Нью-Йорк, 1981.