exponenta event banner

Кодирование Рида-Соломона со стиранием, проколами и укорочением в Simulink

В этой модели показано, как настроить коды Рида-Соломона (RS) для выполнения блочного кодирования со стиранием, проколами и укорочением.

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

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

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

Декодирование с использованием сгенерированных приемником стираний

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

model_e = 'RSCodingErasuresExample';
open_system(model_e);
close_system([model_e,'/Received Signal Scatter Plot'])
close_system([model_e,'/Erased Signal Scatter Plot'])

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

Определите параметры моделирования системы:

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

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

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 ошибки на кодовое слово.

Запустите моделирование и отобразите полученные символы и те символы, которые были стерты.

sim(model_e)
open_system([model_e,'/Received Signal Scatter Plot'])
open_system([model_e,'/Erased Signal Scatter Plot'])
%

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

Проверьте характеристики BER на выходе декодера. Мы устанавливаем время остановки моделирования на inf, а затем имитируем до тех пор, пока 100 битовых ошибок не будут собраны из RS-декодера. Отображение общего количества исправленных ошибок, 64-QAM BER и RS BER.

fprintf('Total number of corrected errors with\n')
fprintf('erasures: %d\n',totCorrErrors_e(1))
fprintf('64-QAM BER with\n')
fprintf('erasures: %s\n',channelBER_e(1))
fprintf('RS BER with\n')
fprintf('erasures: %s\n',codedBER_e(1))
Total number of corrected errors with
erasures: 6905
64-QAM BER with
erasures: 1.702521e-03
RS BER with
erasures: 2.589668e-06

Моделирование со стиранием и проколами

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

Один и тот же вектор прокола задается как в блоках кодера, так и декодера. В этом примере проколоты два символа из каждого кодового слова. Векторные значения «1» обозначают незаконченные символы, а значения «0» - проколотые символы. Однако в векторе стирания значения «1» указывают стертые символы, в то время как значения «0» указывают не стертые символы.

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

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

Мы моделируем модель, RSCodingErasedPunctExample.mdl, собирая 1000 ошибок из блока RS-декодера. Из-за прокалывания размеры сигнала из кодера 61 на 1, а не 63 на 1 в модели без прокалывания. Подсистема Create Erasures Vector также должна учитывать различия в размерах при создании вектора стирания 61 на 1. Здесь показана модель RSCodingErasingPunctExample.

model_ep = 'RSCodingErasuresPunctExample';
open_system(model_ep);

sim(model_ep)

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

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

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

fprintf('Total number of corrected errors with\n')
fprintf('              erasures: %d\n',totCorrErrors_e(1))
fprintf('erasures and punctures: %d\n',totCorrErrors_ep(1))
fprintf('64-QAM BER with\n')
fprintf('              erasures: %s\n',channelBER_e(1))
fprintf('erasures and punctures: %s\n',channelBER_ep(1))
fprintf('RS BER with\n')
fprintf('              erasures: %s\n',codedBER_e(1))
fprintf('erasures and punctures: %s\n',codedBER_ep(1))
Total number of corrected errors with
              erasures: 6905
erasures and punctures: 1960
64-QAM BER with
              erasures: 1.702521e-03
erasures and punctures: 1.475314e-03
RS BER with
              erasures: 2.589668e-06
erasures and punctures: 5.627692e-05

Указание укороченного кода

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

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

model_eps = 'RSCodingErasuresPunctShortExample';
open_system(model_eps);

Моделирование со стиранием, проколами и укорочением

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

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);

Моделируем модель, еще раз собирая 1000 ошибок из блока RS-декодера. Следует отметить, что размеры сигнала из кодера RS составляют 26x1 из-за 35 символов укорочения и 2 символов прокалывания. Кроме того, подсистема Create Erasures Vector также должна учитывать разницу в размерах, вызванную укороченным кодом.

sim(model_eps)

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

Сравните производительность BER для декодирования только со стиранием, со стиранием и проколами, а также со стиранием, проколами и укорочением.

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

fprintf('Total number of corrected errors\n')
fprintf( ...
    '                           erasures: %d\n',totCorrErrors_e(1))
fprintf( ...
    '             erasures and punctures: %d\n',totCorrErrors_ep(1))
fprintf( ...
    'erasures, punctures, and shortening: %d\n',totCorrErrors_eps(1))
fprintf('64-QAM BER with\n')
fprintf('                           erasures: %s\n',channelBER_e(1))
fprintf('             erasures and punctures: %s\n',channelBER_ep(1))
fprintf('erasures, punctures, and shortening: %s\n',channelBER_eps(1))
fprintf('RS BER with\n')
fprintf('                           erasures: %s\n',codedBER_e(1))
fprintf('             erasures and punctures: %s\n',codedBER_ep(1))
fprintf('erasures, punctures, and shortening: %s\n',codedBER_eps(1))
Total number of corrected errors
                           erasures: 6905
             erasures and punctures: 1960
erasures, punctures, and shortening: 3287
64-QAM BER with
                           erasures: 1.702521e-03
             erasures and punctures: 1.475314e-03
erasures, punctures, and shortening: 3.590801e-03
RS BER with
                           erasures: 2.589668e-06
             erasures and punctures: 5.627692e-05
erasures, punctures, and shortening: 9.748840e-05

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

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

close_system(model_e,0);
close_system(model_ep,0);
close_system(model_eps,0);