Эта модель показывает, как сконфигурировать коды Тростника-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 секунды при выводе Случайного Целочисленного Генератора. Кроме того, время символа при выводе Энкодера 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 исправлять (10-6)/2 = 2 ошибки на кодовую комбинацию.
Мы моделируем систему, показывая полученные символы и те символы, которые были стерты:
Теперь давайте исследуем производительность BER при выводе декодера. Мы устанавливаем время остановки симуляции к inf, затем моделируем, пока 100 битовых ошибок не собраны из Декодера RS. 64-QAM BER показывает ниже, сопровождает BER RS. Это соглашение сопровождается для остатка от этого примера.
BER_eras = 1.7049e-03 2.5906e-06
В дополнение к декодированию сгенерированных получателем стираний Декодер RS может исправить сгенерированные энкодером проколы. Алгоритм декодирования идентичен для этих двух случаев, но сумма на кодовую комбинацию проколов и стираний не может превысить дважды поддержку с коррекцией ошибок кода. Рассмотрите следующую модель, которая выполняет декодирование и для стираний и для проколов.
Тот же вектор прокола задан и в блоках энкодера и в декодера. Этот пример прокалывает два символа от каждой кодовой комбинации. Векторные значения "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.
Давайте сравним BERs для декодирования стираний с и без прокалывания.
BER из 64-QAM Демодулятора немного лучше в проколотом случае, потому что E b/N0 в демодулятор немного выше. Однако BER из Декодера RS намного хуже в проколотом случае, потому что два прокола уменьшают поддержку с коррекцией ошибок кода одним, оставляя способным исправить (только 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 26x1, из-за 35 символов сокращения и 2 символов прокалывания. Еще раз Создать подсистема Вектора Стираний должна также составлять различие в размере, вызванное сокращенным кодом.
Давайте сравним производительность BER для декодирования со стираниями только, со стираниями и проколами, и со стираниями, проколами и сокращением.
BER из 64-QAM Демодулятора хуже с сокращением, чем это без сокращения. Это вызвано тем, что уровень кода сокращенного кода намного ниже, чем уровень кода несокращенного кода, и поэтому закодированный E b/N0 в демодулятор хуже с сокращением. Сокращенный код имеет ту же возможность с коррекцией ошибок как несокращенный код для того же E b/N0, но сокращение деклараций E b/N0 в форме более высокого BER из Декодера RS с сокращением, чем без.
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.