comm.ViterbiDecoder

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

Описание

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

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

  1. Задайте и настройте свой объект Декодера Витерби. Смотрите Конструкцию.

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

Примечание

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

Конструкция

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

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

'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

Глубина Traceback

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

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

Когда вы устанавливаете TerminationMethod свойство к Truncated или Terminated, нет никакой выходной задержки. В этом случае, TracebackDepth должно быть меньше чем или равно количеству символов в каждом входе.

Как общая оценка, типичный TracebackDepth значение свойства приблизительно два - три раза (k – 1) / (1 – r), где k является продолжительностью ограничения кода, и r является уровнем кода [1]. Например:

  • Уровень 1/2 код имеет TracebackDepth из 5 (k – 1).

  • Уровень 2/3 код имеет TracebackDepth из 7,5 (k – 1).

  • Уровень 3/4 код имеет TracebackDepth из 10 (k – 1).

  • Уровень 5/6 код имеет TracebackDepth из 15 (k – 1).

TerminationMethod

Метод завершения закодированной системы координат

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

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

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

ResetInputPort

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

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

DelayedResetAction

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

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

PuncturePatternSource

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

Задайте источник шаблона прокола как None | Property. Значением по умолчанию является None.

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

PuncturePattern

Проколите вектор шаблона

Задайте шаблон прокола, чтобы проколоть закодированные данные. Значением по умолчанию является [1; 1; 0; 1; 0; 1]. Шаблон прокола является вектор-столбцом 1s и 0s. 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 режим.

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

Методы

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

Позвольте изменения значения свойства Системного объекта

Примеры

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

Передайте модулируемый поток битов convolutionally закодированного 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. Convolutionally кодируют данные

  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

Закодируйте и декодируйте последовательность битов с помощью сверточного энкодера и Декодера Витерби с заданным шаблоном прокола. Проверьте, что биты ввода и вывода идентичны

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

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

Алгоритмы

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

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

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

Ссылки

[1] Moision, B., “Эмпирическое правило Глубины Усечения для Сверточных кодов”, Теория информации и Семинар Приложений, стр 555–557, 2008.

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

Представленный в R2012a