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 возможные выходные символы, длиной этого выходного вектора является L ✕ K.

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

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием 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