Первая часть кодирования тростника-Solomon – стирания

Этот пример показывает, как сконфигурировать RSEncoder и Системные объекты RSDecoder, чтобы выполнить блочное кодирование Тростника-Solomon (RS) со стираниями при симуляции системы связи. Декодеры RS могут исправить и ошибки и стирания. Получатель, который идентифицирует самые ненадежные символы в данной кодовой комбинации, может сгенерировать стирания. Когда получатель стирает символ, он заменяет тот символ на нуль. Получатель затем передает флаг декодеру, указывая, что символ является стиранием, не допустимым кодовым знаком. Кроме того, энкодер может сгенерировать проколы, для которых определенные символы четности всегда удаляются из ее вывода. Декодер, который знает шаблон прокола, вставляет нули в положения прокола и обрабатывает те символы как стирания. Декодер обрабатывает сгенерированные энкодером проколы и сгенерированные получателем стирания тот же самый путь, когда это декодирует символ. Прокалывание также обладает дополнительным преимуществом создания более гибкого уровня кода, за счет некоторой возможности исправления ошибок. Сокращенные коды достигают той же гибкости уровня кода, не ухудшая производительность исправления ошибок, учитывая ту же входную энергию демодулятора на бит к шумовой степени спектральное отношение плотности (E b/N0). Обратите внимание на то, что прокалывание является удалением символов четности от кодовой комбинации, и сокращение является удалением символов сообщения от кодовой комбинации. В дополнение к этому примеру, примеры “Вторая часть Кодирования Тростника-Solomon – Проколы” и “Часть III Кодирования Тростника-Solomon – Сокращение” показывают блочное кодирование RS с проколами и сокращенными кодами, соответственно.

Введение

Этот пример показывает симуляцию системы связи, состоящей из случайного источника, энкодера RS, прямоугольного 64-QAM модулятора, канала AWGN, прямоугольного 64-QAM демодулятора и декодера RS. Это включает анализ кодирования RS со стираниями путем сравнения производительности частоты ошибок по битам (BER) канала по сравнению с закодированной производительностью BER. Этот пример получает BER Канала путем сравнения входных параметров для прямоугольного модулятора QAM к выходным параметрам от прямоугольного демодулятора QAM. Этот пример получает Закодированный BER путем сравнения входных параметров для энкодера RS к выходным параметрам от декодера RS. ЭТО ИСПОРЧЕНО!

Инициализация

Файл скрипта RSCodingConfigExample конфигурирует прямоугольный 64-QAM модулятор и демодулятор, канал AWGN и объекты системы измерения коэффициента ошибок, раньше моделировал систему связи. Скрипт также устанавливает незакодированное отношение E b/N0 на EbNoUncoded = 15 дБ и устанавливает критерии остановки симуляции путем определения целевого количества ошибок и максимального количества битных передач к 500 и 5×106 соответственно.

RSCodingConfigExample

Конфигурирование энкодера/Декодера RS

Этот пример показывает (63,53) код RS, действующий с 64-QAM схемой модуляции. Этот код может исправить (63-53)/2 = 5 ошибок, или это может альтернативно исправить (63-53) = 10 стираний. Для каждой кодовой комбинации при выводе 64-QAM демодулятора получатель определяет шесть наименее надежных символов с помощью функции RSCodingGetErasuresExample. Индексы, которые указывают на местоположение этих ненадежных символов, передаются как вход декодеру RS. Декодер RS обрабатывает эти символы как стирания, приводящие к возможности исправления ошибок (10-6)/2 = 2 ошибки на кодовую комбинацию.

Создайте (63,53) Системный объект RSEncoder и установите свойство BitInput на false указывать, что вводы и выводы энкодера являются целочисленными символами.

N = 63;  % Codeword length
K = 53;  % Message length
rsEncoder = comm.RSEncoder(N,K, 'BitInput', false);
numErasures = 6;

Создайте Системный объект RSDecoder с помощью тех же настроек в качестве в энкодере. Запросите дополнительный вход для определения стираний как вход к объекту. Это сделано путем установки свойства ErasuresInputPort на true.

rsDecoder = comm.RSDecoder(N,K, 'BitInput', false, 'ErasuresInputPort', true);

Установите свойство NumCorrectedErrorsOutputPort на true так, чтобы декодер вывел количество исправленных ошибок. Не отрицательная величина в выводе ошибок обозначает количество исправленных ошибок во входной кодовой комбинации. Значение −1 в выводе ошибок указывает на ошибку декодирования. Ошибка декодирования происходит, когда входная кодовая комбинация имеет больше ошибок, чем поддержка исправления ошибок кода RS.

rsDecoder.NumCorrectedErrorsOutputPort = true;

Потоковый цикл обработки

Моделируйте систему связи для незакодированного отношения E b/N0 15 дБ. Незакодированный E b/N0 является отношением, которое было бы измерено во входе канала, если бы не было никакого кодирования в системе.

Сигнал, входящий в канал AWGN, является кодируемым сообщением, таким образом, необходимо преобразовать незакодированные значения E b/N0 так, чтобы они соответствовали энергетическому отношению в энкодере вывод. Это отношение является закодированным отношением E b/N0. Если вы, символы входа K к энкодеру и получают N символы вывода, то энергетическое отношение дано уровнем K/N. Установите свойство EbNo объекта канала AWGN к вычисленному закодированному значению E b/N0.

EbNoCoded = EbNoUncoded + 10*log10(K/N);
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 symbols long.
  encData = rsEncoder(data);

  % Modulate encoded data.
  modData = qamModulator(encData);

  % Add noise.
  chanOutput = channel(modData);

  % Demodulate channel output.
  demodData = qamDemodulator(chanOutput);

  % Find the 6 least reliable symbols and generate an erasures vector using
  % the RSCodingGetErasuresExample function. The length of the erasures vector
  % must be equal to the number of symbols in the demodulated codeword. A
  % one in the ith element of the vector erases the ith symbol in the
  % codeword. Zeros in the vector indicate no erasures.
  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 =

     0


totalCorrectedErrors =

   882

Можно добавить цикл for вокруг цикла обработки выше, чтобы запустить симуляции для набора значений E b/N0. Симуляции были запущены оффлайн для незакодированных значений E b/N0 в 4:15 дБ, целевое количество ошибок, равных 5 000, и максимальное количество передач, равных 50×106. Результаты симуляции показывают. BER канала хуже, чем теоретический 64-QAM BER, потому что E b/N0 уменьшается уровнем кода.

Сводные данные

Этот пример использовал несколько Системных объектов, чтобы моделировать прямоугольную 64-QAM систему связи по каналу AWGN с блочным кодированием RS. Это показало, как сконфигурировать декодер RS, чтобы декодировать символы со стираниями. Производительность системы была измерена с помощью канала и закодированных кривых BER, полученных с помощью объектов системы измерения коэффициента ошибок.

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

Приложение

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

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

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