comm.ViterbiDecoder

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

Описание

comm.ViterbiDecoder Система object™ декодирует convolutionally закодированные вводимые символы, чтобы произвести символы двоичного выхода при помощи алгоритма Viterbi.

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

  1. Создайте comm.ViterbiDecoder объект и набор его свойства.

  2. Вызовите объект с аргументами, как будто это была функция.

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?

Создание

Описание

пример

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

viterbidecoder = comm.ViterbiDecoder(trellis) устанавливает набор свойств TrellisStructure на trellis.

пример

viterbidecoder = comm.ViterbiDecoder(___,Name,Value) Свойства наборов с помощью одного или нескольких значение имени с помощью одних или нескольких аргументов name-value в дополнение к любым комбинациям аргументов в предыдущих синтаксисах. Например, 'TerminationMethod','Continuous' задает метод завершения как непрерывный, чтобы сохранить метрику внутреннего состояния в конце каждой системы координат для использования со следующей системой координат.

Свойства

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

Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и release функция разблокировала их.

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты.

Описание решетки сверточного кода в виде структуры, которая содержит описание решетки для уровня K ∕ код N. K является количеством входных потоков битов, и N является количеством выходных потоков битов.

Можно или использовать poly2trellis функция, чтобы создать структуру решетки или создать его вручную. Для больше об этой структуре, см. Описание Решетки Сверточного кода и istrellis функция.

Структура решетки содержит эти поля.

Количество входа символов к энкодеру в виде целого числа равняется 2K, где K является количеством входных потоков битов.

Типы данных: double

Количество символов выход от энкодера в виде целого числа равняется 2N, где N является количеством выходных потоков битов.

Типы данных: double

Количество состояний в энкодере в виде степени 2.

Типы данных: double

Следующие состояния для всех комбинаций текущих состояний и текущих входных параметров в виде матрицы целых чисел. Матричным размером должен быть numStates- 2K.

Типы данных: double

Выходные параметры для всех комбинаций текущих состояний и текущих входных параметров в виде матрицы восьмеричных чисел. Матричным размером должен быть numStates- 2K.

Типы данных: double

Типы данных: struct

Формат ввода к декодеру в виде 'Unquantized', 'Hard', или 'Soft'.

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

  • 'Hard' — Вход должен быть вектором из значений трудного решения, которые являются 0s или 1s. Тип данных входных параметров должен быть двойная точность, одинарная точность, логическая, или числовая.

  • 'Soft' — Вход требует вектора из квантованных мягких значений, которые представлены как целые числа между 0 и 2SoftInputWordLength – 1. Тип данных входных параметров должен быть двойная точность, одинарная точность, логическая, или числовая. В качестве альтернативы можно задать тип данных как и немасштабированный объект фиксированной точки без знака использование (fi (Fixed-Point Designer)) с размером слова, равным размеру слова, который вы задаете для SoftInputWordLength свойство. 0 рассматривается как самый уверенный 0 и 2SoftInputWordLength – 1 как самый уверенный 1.

Типы данных: char | string

Мягкий входной размер слова, который представляет количество битов для каждого квантованного мягкого входного значения в виде целого числа.

Зависимости

Чтобы включить это свойство, установите InputFormat свойство к 'Soft'.

Типы данных: double

Опция, чтобы принять меры для недопустимого квантованного входа (то есть, когда входные значения вне области значений) в виде 'Ignore' или 'Error'. Установите это свойство на 'Error' так, чтобы объект сгенерировал ошибку, когда квантованные входные значения вне области значений.

Зависимости

Чтобы включить это свойство, установите InputFormat свойство к 'Soft' или 'Hard'.

Типы данных: char | string

Глубина Traceback в виде целого числа. traceback глубина влияет на точность декодирования и задержку. Количество нулевых символов, которые предшествуют первому декодируемому символу в выходе, представляет задержку декодирования. Для получения дополнительной информации смотрите Traceback и Decoding Delay и Оценки Глубины Traceback.

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

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

Типы данных: double

Метод завершения закодированной системы координат в виде одного из этих значений.

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

  • 'Truncated' — Системный объект обрабатывает каждую систему координат независимо. traceback путь запускается в состоянии с лучшей метрики и концов во все-нулевом состоянии.

  • 'Terminated' — Системный объект обрабатывает каждую систему координат независимо. traceback путь всегда начала и концы во все-нулевом состоянии.

Типы данных: char | string

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

Зависимости

Чтобы включить это свойство, установите TerminationMethod свойство к 'Continuous'.

Типы данных: логический

Опция, чтобы задержать выходной сброс в виде одного из этих логических значений.

  • 1 TRUE) — Сброс внутренних состояний декодера происходит после того, как объект вычисляет декодируемые данные.

  • 0 ложь) — Сброс внутренних состояний декодера происходит, прежде чем объект вычисляет декодируемые данные.

Зависимости

Чтобы включить это свойство, установите ResetInputPort свойство к true.

Типы данных: логический

Источник шаблона прокола в виде одного из этих значений.

  • 'None' — Объект не применяет прокалывание.

  • 'Property' — Объект декодирует проколотые кодовые комбинации на основе вектора шаблона прокола, который вы задаете в PuncturePattern свойство.

Типы данных: char | string

Проколите вектор шаблона, чтобы проколоть декодируемые данные в виде вектор-столбца. Вектор должен содержать 1s и 0s, где 0 указывает на положение проколотых битов. Этот шаблон прокола должен совпадать с шаблоном прокола, используемым сверточным энкодером.

Зависимости

Чтобы включить это свойство, установите PuncturePatternSource свойство к 'Property'.

Типы данных: double

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

  • 1 TRUE) — Когда вы вызываете Системный объект, он задает вектор из стираний при вызове его. Этот вектор указывает который символы входных кодовых комбинаций стереться. Значения 1 укажите на стертые биты. Декодер не обновляет метрику ветви для стираний во входящем потоке данных. Вход стираний должен быть двойная точность или логический вектор-столбец. Длина вектора стирания должна равняться длине входных данных.

  • 0 ложь) — Системный объект не принимает стираний.

Типы данных: логический

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

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

Типы данных: char

Тип данных метрики состояния в виде 'Full precision' или 'Custom'

Когда вы устанавливаете это свойство на 'Full precision', объект устанавливает метрическую фиксированную точку состояния на numerictype([],16).

  • Когда вы устанавливаете InputFormat свойство к 'Hard', входные данные должны быть вектор-столбцом. Этот вектор включает числа фиксированной точки без знака (fi объекты) размера слова 1 включить фиксированной точке декодирование Viterbi. На основе этого входа (любой 0 или 1), объект вычисляет внутренние метрики ветви с помощью беззнакового целого размера слова L. В этом случае L является количеством выходных битов, как задано структурой решетки.

  • Когда вы устанавливаете InputFormat свойство к 'Soft', входные данные должны быть вектор-столбцом. Этот вектор включает числа фиксированной точки без знака (fi объекты) размера слова N. В этом случае N является количеством битов мягкого решения, заданных SoftInputWordLength свойство.

Когда вы вызываете Системный объект, вводы данных должны быть целыми числами в диапазоне от 0 до 2N– 1. Объект вычисляет внутренние метрики ветви с помощью беззнакового целого размера слова L = (N + Nout – 1). В этом случае Nout является количеством выходных битов, как задано структурой решетки.

Зависимости

Чтобы включить это свойство, установите InputFormat свойство к 'Hard' или 'Soft'.

Типы данных: char

Тип данных с фиксированной точкой метрики состояния в виде немасштабированного numerictype (Fixed-Point Designer) объект (Fixed-Point Designer) с со знаком из Автоматических.

Зависимости

Чтобы включить это свойство, установите StateMetricDataType свойство к 'Custom'.

Типы данных: numeric

Использование

Описание

пример

decmsg = viterbidecoder(codeword) декодирует convolutionally закодированные входные данные, codeword, при помощи алгоритма Viterbi. decmsg декодируемые данные.

decmsg = viterbidecoder(codeword,erasures) задает символы входных кодовых комбинаций для объекта стереться. Чтобы включить этот синтаксис, установите ErasuresInputPort свойство к 1 TRUE).

decmsg = viterbidecoder(codeword,resetstate) задает вход, чтобы сбросить внутренние состояния декодера. Чтобы включить этот синтаксис, установите TerminationMethod свойство к 'Continuous' и ResetInputPort свойство к 1 TRUE).

Входные параметры

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

Convolutionally закодировал сообщение в виде вектор-столбца с числовым знаком. Тип данных и значение элемента в codeword зависьте от того, как вы устанавливаете InputFormat свойство.

Если сверточный код использует алфавит 2N возможные выходные символы, длиной этого входного вектора должен быть L×N для некоторого положительного целочисленного L.

Типы данных: double

Символы стирания в кодовой комбинации в виде вектора с бинарным знаком. Элементы в erasures должен иметь тип данных double или logical. Значения 1 в erasures вектор соответствует стертым символам и значениям 0 соответствуйте нестертым символам. Длина codeword должен равняться длине erasures.

Зависимости

Чтобы включить этот аргумент, установите ErasuresInputPort свойство к 1 TRUE).

Сбросьте для внутренних состояний декодера в виде числового или логического 1 TRUE) или 0 ложь).

Зависимости

Чтобы включить этот аргумент, установите TerminationMethod свойство к 'Continuous' и ResetInputPort свойство к true.

Типы данных: double | logical

Выходные аргументы

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

Декодируемое сообщение, возвращенное как вектор-столбец с бинарным знаком. Этот выходной вектор имеет совпадающий тип данных как OutputDataTypeсвойство.

Если декодируемые данные используют алфавит 2K возможные выходные символы, длиной этого выходного вектора является LK.

Функции объекта

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

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

stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

свернуть все

Передайте модулируемый поток битов convolutionally закодированных 8 дифференциальных манипулирований сдвига фазы (DPSK) через канал аддитивного белого гауссова шума (AWGN). Затем демодулируйте и декодируйте модулируемый поток битов с помощью Декодера Витерби.

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

conEnc = comm.ConvolutionalEncoder;
modDPSK = comm.DPSKModulator('BitInput',true);
chan = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (SNR)','SNR',10);
demodDPSK = comm.DPSKDemodulator('BitOutput',true);
vDec = comm.ViterbiDecoder('InputFormat','Hard');
error = 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 = conEnc(data);
    modSignal = modDPSK(encodedData);
    receivedSignal = chan(modSignal);
    demodSignal = demodDPSK(receivedSignal);
    receivedBits = vDec(demodSignal);
    errors = error(data,receivedBits);
end

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

errors(2)
ans = 3

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

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

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

Создайте сверточный энкодер и Декодер Витерби, в котором шаблон прокола задан pPatternVec.

conEnc = comm.ConvolutionalEncoder('PuncturePatternSource','Property','PuncturePattern',pPatternVec);
viDec = comm.ViterbiDecoder('InputFormat','Hard','PuncturePatternSource','Property', ...
        'PuncturePattern',pPatternVec);

Создайте коэффициент ошибок, отвечают соответствующей задержкой приема.

error = comm.ErrorRate('ReceiveDelay',viDec.TracebackDepth);

Закодируйте последовательность случайных битов, и затем декодируйте закодированное сообщение.

dataIn = randi([0 1],600,1);
dataEncoded = conEnc(dataIn);
dataOut = viDec(dataEncoded);

Проверьте, что никакие ошибки не существуют в выходных данных.

errStats = error(dataIn,dataOut);
errStats(2)
ans = 0

Больше о

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

Ссылки

[1] Кларк, Джордж К. и J. Затвор Каин. Кодирование с коррекцией ошибок для цифровой связи. Приложения коммуникационной теории. Нью-Йорк: нажатие пленума, 1981.

[2] Gitlin, Ричард Д., Иеремия Ф. Хейз и Стивен Б. Вайнштейн. Принципы передачи данных. Приложения коммуникационной теории. Нью-Йорк: нажатие пленума, 1992.

[3] Yasuda, Y., К. Кэшики и И. Хирэта. “Высокий показатель Проколотые Сверточные коды для Мягкого Решения Декодирование Viterbi”. Транзакции IEEE на Коммуникациях 32, № 3 (март 1984): 315–19. https://doi.org/10.1109/TCOM.1984.1096047.

[4] Haccoun, D. и G. Начало. “Высокий показатель Проколотые Сверточные коды для Viterbi и Sequential Decoding”. Транзакции IEEE на Коммуникациях 37, № 11 (ноябрь 1989): 1113–25. https://doi.org/10.1109/26.46505.

[5] Начните, G., Д. Хэккун и К. Пакуин. “Дальнейшие Результаты на Высоком показателе Проколотые Сверточные коды для Viterbi и Sequential Decoding”. Транзакции IEEE на Коммуникациях 38, № 11 (ноябрь 1990): 1922–28. https://doi.org/10.1109/26.61470.

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

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

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