comm.gpu.ViterbiDecoder

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

Чтобы использовать этот объект, необходимо установить Parallel Computing Toolbox™ и иметь доступ к соответствующему графическому процессору. Для больше о графических процессорах, смотрите, что графический процессор Вычисляет (Parallel Computing Toolbox).

Описание

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

Основанный на графическом процессоре Системный объект принимает типичный MATLAB® массивы или объекты создали использование gpuArray класс. Основанный на графическом процессоре Системный объект поддерживает входные сигналы с двойным - или типы данных с одинарной точностью. Выходной сигнал наследовал свой тип данных от входного сигнала.

  • Если входной сигнал является массивом MATLAB, Системный объект обрабатывает передачу данных между центральным процессором и графическим процессором. Выходной сигнал является массивом MATLAB.

  • Если входным сигналом является gpuArray, данные остаются на графическом процессоре. Выходным сигналом является gpuArray. Когда объекту дают gpuArray, вычисления происходят полностью на графическом процессоре, и никакая передача данных не происходит. Передача gpuArray аргументы обеспечивают увеличенную эффективность путем сокращения времени симуляции. Для получения дополнительной информации смотрите, Устанавливают Массивы на графическом процессоре (Parallel Computing Toolbox).

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

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

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

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

Создание

Описание

пример

gpuViterbiDec = comm.gpu.ViterbiDecoder создает основанный на графическом процессоре Системный объект Декодера Витерби.

gpuViterbiDec = comm.gpu.ViterbiDecoder(trellis) устанавливает TrellisStructure свойство к trellis.

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

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

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

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

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

Зависимости

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

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

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

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

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

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

Когда вы устанавливаете TerminationMethod свойство к 'Truncated' или 'Terminated', никакая выходная задержка не присутствует. TracebackDepth значение должно быть меньше чем или равно количеству символов в каждом входе. Если скорость кода является 1/2, типичное traceback значение глубины является приблизительно пять раз продолжительностью ограничения кода.

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

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

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

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

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

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

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

Зависимости

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

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

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

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

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

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

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

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

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

Зависимости

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

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

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

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

Тип данных выхода в виде 'Full precision'. Единственной допустимой установкой является 'Full precision', который заставляет тип выходных данных совпадать с типом входных данных.

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

Количество независимых систем координат, существующих в векторах входных и выходных данных в виде целого числа.

Объектные сегменты входной вектор в NumFrames сегменты и декодируют их независимо. Выход содержит NumFrames декодируемые сегменты.

Зависимости

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

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

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

Описание

пример

decmsg = gpuViterbiDec(codeword) декодирует основанные на графическом процессоре convolutionally закодированные входные данные при помощи основанного на графическом процессоре Viterbi декодирование алгоритма. Выход является декодируемыми данными.

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

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

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

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

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

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

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

Зависимости

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

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

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

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

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

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

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

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

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

release(obj)

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

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

Примеры

свернуть все

Создайте основанный на графическом процессоре сверточный Системный объект энкодера.

conEnc = comm.gpu.ConvolutionalEncoder;

Создайте основанный на графическом процессоре Системный объект модулятора манипулирования сдвига фазы (PSK), который принимает немного входного сигнала.

modPSK = comm.gpu.PSKModulator('BitInput',true);

Создайте основанный на графическом процессоре Системный объект канала аддитивного белого Гауссова шума (AWGN) с отношением сигнал-шум семь.

chan = comm.gpu.AWGNChannel('NoiseMethod','Signal to noise ratio (SNR)','SNR',7);

Создайте основанный на графическом процессоре Системный объект демодулятора PSK, который выводит вектор-столбец битных значений.

demodPSK = comm.gpu.PSKDemodulator('BitOutput',true);

Создайте основанный на графическом процессоре Системный объект Декодера Витерби, который принимает входной вектор значений трудного решения, которые являются нулями или единицами.

vDec = comm.gpu.ViterbiDecoder('InputFormat','Hard');

Создайте Системный объект коэффициента ошибок, который игнорирует 3 выборки данных перед сравнениями созданий. Принятые данные отстают от передаваемых данных 34 выборками.

error = comm.ErrorRate('ComputationDelay',3,'ReceiveDelay',34);

Запустите симуляцию при помощи этого цикла for, чтобы обработать данные.

for counter = 1:20
    data = randi([0 1],30,1);
    encodedData = conEnc(gpuArray(data));
    modSignal = modPSK(encodedData);
    receivedSignal = chan(modSignal);
    demodSignal = demodPSK(receivedSignal);
    receivedBits = vDec(demodSignal);
    errors = error(data,gather(receivedBits));
end

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

errors(2)
ans = 1

Ссылки

[1] Sklar, Бернард. Цифровая связь: основные принципы и приложения. Englewood Cliffs, NJ: Prentice Hall, 1988.

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

[3] Fettweis, G. и Х. Меир. “Архитектуры прямого распространения для Параллельного Декодирования Viterbi”. Журнал Систем Обработки сигналов VLSI для Сигнала, Изображения и Видео Технологии 3, № 1-2 (июнь 1991): 105–19. https://doi.org/10.1007/BF00927838.

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

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