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

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

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

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

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

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

DelayedResetAction

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

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

PuncturePatternSource

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

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

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

PuncturePattern

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

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

Для просмотра документации необходимо авторизоваться на сайте