comm.ViterbiDecoder

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

Описание

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

Чтобы декодировать входные символы и создать двоичные выходные символы:

  1. Определите и настройте свой объект декодера Viterbi. См. «Конструкция».

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

Примечание

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

Конструкция

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

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

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

Свойства

TrellisStructure

Структура Trellis сверточного кода

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

InputFormat

Вход

Задайте формат входа декодера следующим Unquantized | Hard | Soft. Значение по умолчанию является Unquantized.

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

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

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

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 mode, объект сохраняет метрику внутреннего состояния в конце каждой системы координат для использования со следующей системой координат. Объект обрабатывает каждый путь трассировки независимо.

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

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с. The 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 режим.

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

Методы

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

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

reset

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

Примеры

свернуть все

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

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

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. Декодируйте данные с помощью алгоритма Viterbi

  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

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

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

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

Создайте сверточный энкодер и декодер Viterbi, в которых пунктирный шаблон задан 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

Подробнее о

расширить все

Алгоритмы

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

  • Параметр Decision type соответствует InputFormat свойство.

  • Параметр Operation mode соответствует TerminationMethod свойство.

Ссылки

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

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

.
Введенный в R2012a