exponenta event banner

коммуникация. ViterbiDecoder

Декодировать сверточно закодированные данные с помощью алгоритма Витерби

Описание

ViterbiDecoder объект декодирует входные символы для получения двоичных выходных символов. Этот объект может обрабатывать несколько символов одновременно для повышения производительности. Этот объект обрабатывает сигналы переменного размера; однако сигналы переменного размера не могут применяться для входных сигналов стирания.

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

  1. Определите и настройте объект-декодер Витерби. См. раздел Строительство.

  2. Звонить step для декодирования входных символов в соответствии со свойствами comm.ViterbiDecoder. Поведение step относится к каждому объекту на панели инструментов.

Примечание

Начиная с R2016b, вместо использования step для выполнения операции, определенной системным object™, можно вызвать объект с аргументами, как если бы это была функция. Например, y = step(obj,x) и y = obj(x) выполнять эквивалентные операции.

Строительство

H = comm.ViterbiDecoder создает системный объект декодера Витерби, H. Этот объект использует алгоритм Витерби для декодирования сверточно закодированных входных данных.

H = comm.ViterbiDecoder(Name,Value) создает объект-декодер Витерби, H, каждое указанное свойство имеет заданное значение. Можно указать дополнительные аргументы пары имя-значение в любом порядке как (Name1,Value1,...,NameN,ValueN).

H = comm.ViterbiDecoder(TRELLIS,Name,Value) создает объект-декодер Витерби, H. Этот объект имеет TrellisStructure свойство имеет значение TRELLIS и другие указанные свойства имеют указанные значения.

Свойства

TrellisStructure

Решетчатая структура сверточного кода

Укажите решетку как структуру MATLAB ®, содержащую описание решетки сверточного кода. Значение по умолчанию является результатом poly2trellis(7, [171 133]). Используйте istrellis для проверки того, является ли структура допустимой решеткой.

InputFormat

Формат ввода

Укажите формат входа в декодер как Unquantized | Hard | Soft. Значение по умолчанию: Unquantized.

При установке для этого свойства значения Unquantized, вход должен быть действительным вектором мягких значений двойной или одинарной точности, которые не квантуются. Объект считает отрицательные числа 1s и положительные числа должны быть 0s.

При установке для этого свойства значения Hard, вход должен быть вектором значений жесткого решения, которые являются 0s или 1s. Тип данных входов может быть двойная точность, одинарная точность, логический, 8-, 16- и 32-битные целые числа со знаком. Можно также использовать 8-, 16- и 32-разрядные беззнаковые целые числа.

При установке для этого свойства значения Soft, ввод требует вектора квантованных мягких значений, представленных в виде целых чисел между 0 и. Тип данных входов может быть двойная точность, одинарная точность, логический, 8-, 16- и 32-битные целые числа со знаком. Можно также использовать 8-, 16- и 32-разрядные беззнаковые целые числа. В качестве альтернативы можно указать тип данных как неназначенный и немасштабированный объект фиксированной точки (fi) с длиной слова, равной длине слова, указанной в SoftInputWordLength собственность. Объект считает отрицательные числа 0s и положительные числа должны быть 1s.

SoftInputWordLength

Длина слова мягкого ввода

Укажите количество битов для представления каждого квантованного значения мягкого ввода как положительного, целого скалярного значения. Значение по умолчанию: 4 биты. Это свойство применяется при установке InputFormat свойство для Soft.

InvalidQuantizedInputAction

Действие, когда входные значения выходят за пределы диапазона

Укажите действие, выполняемое объектом, когда входные значения выходят за пределы диапазона Ignore | Error. Значение по умолчанию: Ignore. Установить для этого свойства значение Error так что объект генерирует ошибку, когда квантованные входные значения находятся вне диапазона. Это свойство применяется при установке InputFormat свойство для Hard или Soft.

TracebackDepth

Глубина отслеживания

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

При установке TerminationMethod свойство для Continuous, задержка декодирования состоит из TracebackDepth× K нулевых битов для сверточного кода скорости K/N.

При установке TerminationMethod свойство для Truncated или Terminated, задержка на выходе отсутствует.

Дополнительные сведения см. в разделах Задержки трассировки и декодирования и Оценки глубины трассировки.

TerminationMethod

Метод завершения кодированного кадра

Укажите метод завершения как Continuous | Truncated | Terminated. Значение по умолчанию: Continuous.

В Continuous В режиме объект сохраняет метрику внутреннего состояния в конце каждого кадра для использования со следующим кадром. Каждый путь отслеживания обрабатывается объектом независимо.

В Truncated , объект обрабатывает каждый кадр независимо. Путь отслеживания начинается в состоянии с лучшей метрикой и всегда заканчивается в состоянии всех нулей. В Terminated в режиме объект обрабатывает каждый кадр независимо, и путь отслеживания всегда начинается и заканчивается в состоянии «все нули».

ResetInputPort

Включить вход сброса декодера

Установите для этого свойства значение true, чтобы включить дополнительный step ввод способа. Значение по умолчанию: false. Когда входной сигнал сброса является ненулевым значением, объект сбрасывает внутренние состояния декодера в исходное состояние. Это свойство применяется при установке TerminationMethod свойство для Continuous.

DelayedResetAction

Сброс на ненулевом входе через порт

Установите для этого свойства значение true, чтобы отложить сброс вывода объекта. Значение по умолчанию - false. Если для этого свойства задано значение true, сброс внутренних состояний декодера происходит после того, как объект вычисляет декодированные данные. Если для этого свойства задано значение false, сброс внутренних состояний декодера происходит до того, как объект вычислит декодированные данные. Это свойство применяется при установке ResetInputPort свойство имеет значение true.

PuncturePatternSource

Источник прокола

Укажите источник образца прокола как None | Property. Значение по умолчанию: None.

При установке для этого свойства значения None, объект не предполагает прокалывания. Установить для этого свойства значение Property для декодирования проколотых кодовых слов на основе вектора шаблона прокола, заданного посредством PuncturePattern собственность.

PuncturePattern

Вектор прокола

Укажите шаблон прокола для прокола закодированных данных. Значение по умолчанию: [1; 1; 0; 1; 0; 1]. Рисунок прокола является вектором столбца 1s и 0с. 0s указывает положение для вставки фиктивных битов. Шаблон прокола должен соответствовать шаблону прокола, используемому кодером. Это свойство применяется при установке PuncturePatternSource свойство для Property.

ErasuresInputPort

Включить ввод стираний

Установить для этого свойства значение true для указания вектора стираний как step ввод способа. Значение по умолчанию: false. Входной сигнал стирания должен быть вектором столбца с двойной точностью или логическим, двоичным. Этот вектор указывает, какие символы входных кодовых слов следует стереть. Значения 1 указать стертые биты. Декодер не обновляет метрику ветви для стираний во входящем потоке данных.

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

OutputDataType

Тип данных вывода

Укажите тип данных вывода как Full precision | Smallest unsigned integer | double | single | int8 | uint8 | int16 | uint16 | int32 | uint32 | logical. Значение по умолчанию: Full precision.

Если входной сигнал является целочисленным типом данных, для использования этого свойства в необходимо иметь лицензию пользователя Fixed-Point Designer™. Smallest unsigned integer или Full precision режим.

 Свойства с фиксированной точкой

Методы

шагДекодировать сверточно закодированные данные с помощью алгоритма Витерби
Общие для всех системных объектов
release

Разрешить изменение значения свойства объекта системы

reset

Сброс внутренних состояний объекта System

Примеры

свернуть все

Передавать сверточно кодированный 8-DPSK модулированный битовый поток через канал AWGN. Затем демодулируют и декодируют с помощью декодера Витерби.

Создайте необходимые системные объекты.

hConEnc = comm.ConvolutionalEncoder;
hMod = comm.DPSKModulator('BitInput',true);
hChan = comm.AWGNChannel('NoiseMethod', ...
    'Signal to noise ratio (SNR)',...
    'SNR',10);
hDemod = comm.DPSKDemodulator('BitOutput',true);
hDec = comm.ViterbiDecoder('InputFormat','Hard');
hError = comm.ErrorRate('ComputationDelay',3,'ReceiveDelay', 34);

Обработка данных выполняется с помощью следующих шагов:

  1. Генерировать случайные биты

  2. Сверточное кодирование данных

  3. Применение модуляции DPSK

  4. Пропустить модулированный сигнал через AWGN

  5. Демодуляция шумного сигнала

  6. Декодирование данных с помощью алгоритма Витерби

  7. Сбор статистики об ошибках

for counter = 1:20
    data = randi([0 1],30,1);
    encodedData = step(hConEnc, data);
    modSignal = step(hMod, encodedData);
    receivedSignal = step(hChan, modSignal);
    demodSignal = step(hDemod, receivedSignal);
    receivedBits = step(hDec, demodSignal);
    errors = step(hError, data, receivedBits);
end

Отображение количества ошибок.

errors(2)
ans = 3

Кодирование и декодирование последовательности битов с использованием сверточного кодера и декодера Витерби с определенной комбинацией проколов. Убедитесь, что входные и выходные биты идентичны

Определите матрицу шаблона прокола и преобразуйте ее в векторную форму для использования с объектами Encoder и Decoder.

pPatternMat = [1 0 1;1 1 0];
pPatternVec = reshape(pPatternMat,6,1);

Создание сверточного кодера и декодера Витерби, в котором шаблон прокола определяется pPatternVec.

ENC = comm.ConvolutionalEncoder(...
    'PuncturePatternSource','Property', ...
    'PuncturePattern',pPatternVec);

DEC = comm.ViterbiDecoder('InputFormat','Hard', ...
    'PuncturePatternSource','Property',...
    'PuncturePattern',pPatternVec);

Создайте счетчик частоты ошибок с соответствующей задержкой приема.

ERR = comm.ErrorRate('ReceiveDelay',DEC.TracebackDepth);

Кодирование и декодирование последовательности случайных битов.

dataIn = randi([0 1],600,1);

dataEncoded = step(ENC,dataIn);

dataOut = step(DEC,dataEncoded);

Убедитесь в отсутствии ошибок в выходных данных.

errStats = step(ERR,dataIn,dataOut);
errStats(2)
ans = 0

Подробнее

развернуть все

Алгоритмы

Этот объект реализует алгоритм, входы и выходы, описанные на справочной странице блока декодера Витерби. Свойства объекта соответствуют параметрам блока, за исключением:

  • Параметр Тип решения соответствует InputFormat собственность.

  • Параметр Operation mode соответствует TerminationMethod собственность.

Ссылки

[1] Moision, B. «Правило глубины усечения большого пальца для сверточных кодов». В информационной теории и прикладном семинаре (27 января 2008 - 1 февраля 2008, Сан-Диего, Калифорния), 555-557. Нью-Йорк: IEEE, 2008.

Расширенные возможности

.
Представлен в R2012a