exponenta event banner

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

В этой модели показано, как использовать блоки сверточного кодера и декодера Витерби для моделирования проколотой системы кодирования. Сложность декодера Витерби быстро возрастает с кодовой скоростью. Прокалывание - это метод, который позволяет кодировать и декодировать коды с более высокой скоростью, используя кодеры со стандартной скоростью 1/2 и декодеры.

Пример в некоторой степени аналогичен тому, который появляется при декодировании с мягким решением, которое показывает сверточное кодирование без прокалывания.

Структура примера

Этот пример содержит эти блоки.

Откройте пример, doc_punct_conv_code, путем ввода следующего в командной строке MATLAB ®.

doc_punct_conv_code

Генерация случайных данных

Блок двоичного генератора Бернулли создает источник информации для этого моделирования. Блок генерирует кадр из трех случайных битов в каждый момент времени выборки. Параметр Samples per frame определяет количество строк выходного кадра.

Сверточное кодирование с прокалыванием

Блок сверточного кодера кодирует данные из двоичного генератора Бернулли. В этом примере используется тот же код, что описан в Soft-Decision Decoding.

Шаблон прокола задается параметром вектора прокола в маске. Вектор прокола является вектором двоичного столбца. 1 указывает, что бит в соответствующей позиции входного вектора посылается в выходной вектор, а 0 указывает, что бит удален.

Например, чтобы создать код скорости 3/4 из сверточного кода скорости 1/2, длины ограничения 7, оптимальным вектором прокола является [1 1 0 1 1 0]. ' (где. 'после вектора указывает транспонирование). Биты в позициях 1, 2, 4 и 5 передаются, а биты в позициях 3 и 6 удаляются. Теперь для каждых 3 бит входного сигнала проколотый код генерирует 4 бита выходного сигнала (в отличие от 6 битов, полученных до прокола). Это делает скорость 3/4.

В этом примере выходной сигнал двоичного генератора Бернулли представляет собой вектор столбца длиной 3. Поскольку скорость 1/2 сверточного кодера удваивает длину каждого вектора, длина вектора прокола должна разделить 6.

Передача данных

Блок канала AWGN моделирует передачу по шумному каналу. Параметры блока устанавливаются в маске следующим образом:

  • Параметр Mode для этого блока имеет значение Signal to noise ratio (Es/No).

  • Параметр Es/No имеет значение 2 дБ. Это значение обычно изменяется с одного прогона моделирования на следующий.

  • Предшествующий блок модуляции генерирует сигналы мощности блока, так что мощность входного сигнала устанавливается равной 1 Вт.

  • Период символа устанавливается равным 0,75 секунды, поскольку код имеет скорость 3/4.

Демодулирование

В этом моделировании блок декодера Витерби настроен на прием неквантованных входных сигналов. В результате моделирование передает выходной сигнал канала через блок Simulink ® Complex to Real-Imag, который извлекает реальную часть комплексных выборок.

Декодирование Витерби проколотых кодов

Блок декодера Витерби сконфигурирован для декодирования кода со скоростью 1/2, указанной в блоке сверточного кодера.

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

Поскольку проколотые биты не передаются, отсутствует информация для указания их значений. В результате они игнорируются в процессе декодирования.

Параметр вектора прокола указывает местоположения проколов или битов, которые необходимо игнорировать в процессе декодирования. Каждый 1 в векторе прокола указывает переданный бит, в то время как каждый 0 указывает прокол или бит для игнорирования на входе в декодер.

В общем случае два параметра вектора прокола в сверточном кодере и декодере Витерби должны быть одинаковыми.

Расчет частоты ошибок

Блок вычисления частоты ошибок сравнивает декодированные биты с исходными битами. Выходной сигнал блока вычисления частоты ошибок представляет собой трехэлементный вектор, содержащий вычисленный коэффициент битовых ошибок (BER), количество обнаруженных ошибок и количество обработанных битов.

В маске для этого блока параметр задержки приема установлен в 96, поскольку значение глубины отслеживания 96 в блоке декодера Витерби создает задержку в 96. Если в модели имеются другие блоки, создающие задержки, задержка получения будет равна сумме всех задержек.

Моделирование BER обычно выполняется до тех пор, пока не произойдет минимальное количество ошибок, или пока моделирование не обработает максимальное количество битов. Блок «Расчет частоты ошибок» использует режим моделирования «Остановить» для установки этих пределов и управления длительностью моделирования.

Оценка результатов

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

  • В окне модели удалите блок Display и линию, соединенную с его портом.

  • В блоке AWGN Channel установите для параметра Es/No имя переменной EsNodB.

  • В блоке «Расчет частоты ошибок» установите для параметра «Выходные данные» значение Workspace а затем задайте для параметра Имя переменной значение BER_Data.

  • Сохраните модель в рабочей папке под другим именем, например my_punct_conv_code.slx.

  • Выполните следующий код, который запускает моделирование несколько раз и собирает результаты.

    CodeRate = 0.75;
    EbNoVec = [2:.5:5];
    EsNoVec = EbNoVec + 10*log10(CodeRate);
    BERVec = zeros(length(EsNoVec),3);
    for n=1:length(EsNoVec),
        EsNodB = EsNoVec(n);
        sim('my_commpunctcnvcod');
        BERVec(n,:) = BER_Data;
    end

Чтобы подтвердить достоверность результатов, сравните их с установленным пределом производительности. Эффективность частоты битовых ошибок кода со скоростью r = (n-1 )/n проколотого кода ограничена выше выражением:

Pb≤12 (n 1) ∑d=dfree∞ωderfc (rd (Eb/N0))

В этом выражении erfc обозначает комплементарную функцию ошибки, r - скорость кода, и как dfree, так и startd зависят от конкретного кода. Для кода скорости 3/4 этого примера dfree = 5, start5 = 42, start6 = 201, start7 = 1492 и так далее. Для получения дополнительной информации см. [1].

Следующие команды вычисляют аппроксимацию этой границы, используя первые семь членов суммирования (значения, используемые для nerr приведены в таблице 2 справочного документа [2]:

dist = [5:11];
nerr = [42 201 1492 10469 62935 379644 2253373];
CodeRate = 3/4;
EbNo_dB = [2:.02:5];
EbNo = 10.0.^(EbNo_dB/10);
arg = sqrt(CodeRate*EbNo'*dist);
bound = nerr*(1/6)*erfc(arg)';

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

berfit(EbNoVec',BERVec(:,1)); % Curve-fitted simulation results
hold on;
semilogy(EbNo_dB,bound,'g'); % Theoretical results
legend('Simulated BER','Fit for simulated BER',...
    'Theoretical bound on BER')

В некоторых случаях при более низких коэффициентах битовых ошибок можно заметить результаты моделирования, которые, по-видимому, указывают на несколько более высокие коэффициенты ошибок. Это может быть результатом дисперсии моделирования (если наблюдается менее 500 битовых ошибок) или конечной глубины отслеживания в декодере.

Ссылки

[1] Ясуда, Я., К. Кашики и Я. Хирата, «Высокоскоростные проколотые сверточные коды для декодирования Витерби с мягким решением», IEEE Transactions on Communications, Vol. COM-32, March, 1984, pp. 315-319.

[2] Begin, G., Haccoun, D., and Paquin, C., «Дальнейшие результаты по высокоскоростным проколотым сверточным кодам для Витерби и последовательного декодирования», IEEE Transactions on Communications, Vol. 38, No. 11, November, 1990, p. 1923.