Кодирование тростника-Solomon со стираниями, проколы и сокращение в Simulink

Эта модель показывает, как сконфигурировать коды Тростника-Solomon (RS), чтобы выполнить блочное кодирование со стираниями, проколы и сокращение.

Декодеры RS могут откорректировать и ошибки и стирания. Стирания могут быть сгенерированы получателем, который идентифицирует самые ненадежные символы в данной кодовой комбинации. Когда получатель стирает символ, он заменяет символ на нуль и передает флаг декодеру, указывающему, что символ является стиранием, не допустимым кодовым знаком.

Кроме того, энкодер может сгенерировать проколы, для которых определенные символы четности всегда удаляются из ее выхода. Декодер, который знает шаблон прокола, вставляет нули в положения прокола и обрабатывает те символы как стирания. Декодер обрабатывает сгенерированные энкодером проколы и сгенерированные получателем стирания точно таким же образом, когда он декодирует.

Прокалывание обладает дополнительным преимуществом создания немного более гибкого уровня кода, за счет некоторой возможности исправления ошибок. Сокращенные коды достигают той же гибкости уровня кода, не ухудшая производительность исправления ошибок, учитывая тот же вход E демодулятора b/N0. Обратите внимание на то, что прокалывание является удалением символов четности от кодовой комбинации, и сокращение является удалением символов сообщения от кодовой комбинации.

Декодирование с получателем сгенерированные стирания

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

Симуляция и визуализация со стираниями только

Мы затем задаем параметры системной симуляции:

RS_TsUncoded = 1;               % Sample time (s)
RS_n = 63;                      % Codeword length
RS_k = 53;                      % Message length
RS_MQAM = 64;                   % QAM order
RS_numBitsPerSymbol = ...       % 6 bits per symbol
    log2(RS_MQAM);
RS_sigPower = 42;               % Assume points at +/-1, +/-3, +/-5, +/-7
RS_numErasures = 6;             % Number of erasures
RS_EbNoUncoded = 15;            % In dB

Система симулирована в незакодированном E b/N0 15 дБ. Однако закодированный E b/N0 уменьшается из-за избыточных символов, добавленных Энкодером RS. Кроме того, период каждой системы координат в модели остается постоянным в 53 секунды, соответствуя шагу расчета 1 секунды при выходе Random Integer Generator. Кроме того, время символа при выходе Энкодера RS уменьшается фактором уровня кода, потому что 63 символа выводятся за время системы координат 53 секунд. Блок AWGN Channel составляет это при помощи следующих параметров:

RS_EbNoCoded = RS_EbNoUncoded + 10*log10(RS_k/RS_n);
RS_TsymCoded = RS_TsUncoded * (RS_k/RS_n);

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

Мы симулируем систему, показывая полученные символы и те символы, которые были стерты:

Производительность BER со стираниями только

Теперь давайте исследуем производительность BER при выходе декодера. Мы устанавливаем время остановки симуляции к inf, затем симулируем, пока 100 битовых ошибок не собраны из RS Decoder. 64-QAM BER показывает ниже, сопровождает BER RS. Это соглашение сопровождается для оставшейся части этого примера.

BER_eras =
   1.7049e-03   2.5906e-06

Симуляция со стираниями и проколы

В дополнение к декодированию сгенерированных получателем стираний RS Decoder может откорректировать сгенерированные энкодером проколы. Алгоритм декодирования идентичен для этих двух случаев, но сумма на кодовую комбинацию проколов и стираний не может превысить дважды поддержку с коррекцией ошибок кода. Рассмотрите следующую модель, которая выполняет декодирование и для стираний и для проколов.

Тот же вектор прокола задан и в блоках энкодера и в декодера. Этот пример прокалывает два символа от каждой кодовой комбинации. Векторные значения "1" указывают на непроколотые символы, в то время как значения "0" указывают на проколотые символы. В векторе стираний, однако, значения "1" указывают на стертые символы, в то время как значения "0" указывают на нестертые символы.

Несколько из параметров для блока AWGN Channel теперь немного отличаются, потому что длина кодовой комбинации теперь отличается от предыдущего примера. Блок составляет различие в размере для следующего кода:

RS_EbNoCoded = RS_EbNoUncoded + 10*log10( RS_k / (RS_n - RS_numPuncs) );
RS_TsymCoded = RS_TsUncoded * ( RS_k / (RS_n - RS_numPuncs) );

Мы симулируем модель, RSCodingErasuresPunctExample.mdl, сбор 1 000 ошибок из блока RS Decoder. Из-за прокалывания, размерности сигнала из энкодера 61 1, а не 63 1 в модели без прокалывания. Создать подсистема Вектора Стираний должна также составлять различия в размере, когда она создает 61 1 вектор стираний. Откройте модель RSCodingErasuresPunctExample.

Производительность BER со стираниями и проколами

Давайте сравним BERs для декодирования стираний с и без прокалывания.

BER из 64-QAM Demodulator немного лучше в проколотом случае, потому что E b/N0 в демодулятор немного выше. Однако BER из RS Decoder намного хуже в проколотом случае, потому что два прокола уменьшают поддержку с коррекцией ошибок кода одним, оставляя способным откорректировать (только 10-6-2)/2 = 1 ошибка на кодовую комбинацию.

BER_eras =
   1.7049e-03   2.5906e-06
BER_eras_punc =
   1.4767e-03   6.1103e-05

Определение сокращенного кода

Сокращение блочного кода удаляет символы из своего фрагмента сообщения, куда прокалывание удаляет символы из своего фрагмента четности. Можно включить оба метода с блоками энкодера и декодера RS.

Например, чтобы сократиться (63,53) код к (53,43) код, можно просто войти 63, 53 и 43 для n, k и s соответственно, в масках блока энкодера и декодера.

Откройте модель RSCodingErasuresPunctShortExample.

Симуляция со стираниями, проколы и сокращение

Поскольку сокращение изменяется, уровень кода во многом как прокалывание делает, параметры AWGN должны быть изменены снова. Блок AWGN Channel составляет это со следующим кодом:

RS_EbNoCoded = RS_EbNoUncoded + 10*log10( RS_s  / (RS_n - RS_k + RS_s - RS_numPuncs) );
RS_TsymCoded = RS_TsUncoded * RS_s / (RS_n - RS_k + RS_s - RS_numPuncs);

Мы симулируем модель, еще раз собирая 1 000 ошибок из блока RS Decoder. Обратите внимание на то, что размерности сигнала из RS Encoder 26x1, из-за 35 символов сокращения и 2 символов прокалывания. Еще раз Создать подсистема Вектора Стираний должна также составлять различие в размере, вызванное сокращенным кодом.

Производительность BER со стираниями, проколами и сокращением

Давайте сравним производительность BER для декодирования со стираниями только, со стираниями и проколами, и со стираниями, проколами и сокращением.

BER из 64-QAM Demodulator хуже с сокращением, чем это без сокращения. Это вызвано тем, что уровень кода сокращенного кода намного ниже, чем уровень кода несокращенного кода, и поэтому закодированный E b/N0 в демодулятор хуже с сокращением. Сокращенный код имеет ту же возможность с коррекцией ошибок как несокращенный код для того же E b/N0, но сокращение деклараций E b/N0 в форме более высокого BER из RS Decoder с сокращением, чем без.

BER_eras =
   1.7049e-03   2.5906e-06
BER_eras_punc =
   1.4767e-03   6.1103e-05
BER_eras_punc_short =
   3.5975e-03   9.1940e-05

Дальнейшее исследование

Можно экспериментировать с этими системами путем выполнения их по циклу значений E b/N0 и генерации кривой BER для них. Можно затем сравнить их производительность с теоретической системой 64-QAM/RS без стираний, проколов или сокращения. Используйте BERTool, чтобы сгенерировать теоретические кривые BER.