Проколотая сверточная кодировка

Эта модель показывает, как использовать блоки Convolutional Encoder и Viterbi Decoder для симуляции проколотой системы кодирования. Сложность декодера Viterbi быстро увеличивается со скоростью кода. Прокалывание является методом, который позволяет кодировать и декодировать коды более высокой скорости, используя стандартную скорость 1/2 энкодеров и декодеры.

Пример несколько похож на тот, который появляется в Soft-Decide Decoding, которое показывает сверточное кодирование без прокалывания.

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

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

  • Bernoulli Binary Generator: Создайте последовательность случайных бит для использования в качестве сообщения.

  • Convolutional Encoder: Закодируйте сообщение с помощью сверточного энкодера.

  • BPSK Modulator Baseband: Модулируйте закодированное сообщение.

  • AWGN Channel: Пропустите модулированный сигнал через шумный канал.

  • Error Rate Calculation: Вычислите количество расхождений между исходным и восстановленным сообщениями.

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

doc_punct_conv_code

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

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

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

Блок Convolutional Encoder кодирует данные из Bernoulli Binary Generator. Этот пример использует тот же код, что и в Soft-Decoding Decoding.

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

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

В этом примере выхода от Bernoulli Binary Generator является вектор-столбец длины 3. Поскольку скорость 1/2 Convolutional Encoder удваивает длину каждого вектора, длина вектора прокола должна делиться на 6.

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

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

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

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

  • Предыдущий блок модуляции генерирует единичные сигналы степени, поэтому Input signal power устанавливается на 1 Ватт.

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

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

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

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

Блок Viterbi Decoder сконфигурирован, чтобы декодировать тот же код скорости 1/2, указанный в блоке Convolutional Encoder.

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

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

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

В целом два параметра Puncture vector в Convolutional Encoder и Viterbi Decoder должны быть одинаковыми.

Вычисление частоты ошибок

Блок Error Rate Calculation сравнивает декодированные биты с исходными битами. Выход блока Error Rate Calculation является трехэлементным вектором, содержащим вычисленную вероятность битовой ошибки (BER), количество наблюдаемых ошибок и количество обработанных бит.

В маске для этого блока параметр Receive delay установлен равным 96, поскольку значение Traceback depth 96 в блоке Viterbi Decoder создает задержку 96. Если бы в модели были другие блоки, которые создавали задержки, Receive delay равнялось бы сумме всех задержек.

Симуляции BER обычно выполняются до тех пор, пока не произойдет минимальное количество ошибок или пока симуляция не обработает максимальное количество бит. Блок Error Rate Calculation использует свой Stop simulation режим, чтобы задать эти пределы и контролировать длительность симуляции.

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

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

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

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

  • В блоке Error Rate Calculation установите Output data равным Workspace а затем установите Variable name равным 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 проколотый код ограничена выше выражением:

Pb12(n1)d=dfreeωderfc(rd(Eb/N0))

В этом выражении erfc обозначает дополнительную функцию ошибки, r является кодовой частотой, и оба dfree и Для кода скорости 3/4 этого примера dfree = 5, Для получения дополнительной информации см. ссылку [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] Yasuda, Y., K. Kashiki, and Y. Hirata, «High Rate Puncured Convolutional Codes for Soft Decoding Viterbi», IEEE Transactions on Communications, Vol. COM-32, March, 1984, pp. 315-319.

[2] Begin, G., Haccoun, D. and Paquin, C., «Further results on High-Rate Punctured Convolutional Codes for Viterbi and Sequential Decoding», IEEE Transactions on on Communications., vol.