Декодируйте сверточно закодированные данные с использованием алгоритма Viterbi на графическом процессоре
GPU ViterbiDecoder
Система object™ декодирует вводимые символы, чтобы произвести символы двоичного выхода с помощью графического процессора (GPU). Этот объектный переменный размер процессов сигналы; однако, сигналы переменного размера не могут быть применены для входных параметров стирания.
Примечание
Чтобы использовать этот объект, необходимо установить лицензию Parallel Computing Toolbox™ и иметь доступ к соответствующему графическому процессору. Для больше о графических процессорах, смотрите, что графический процессор Вычисляет (Parallel Computing Toolbox).
Основанный на графическом процессоре Системный объект принимает типичные массивы MATLAB®, или объекты создали использование gpuArray
класс. Основанный на графическом процессоре Системный объект поддерживает входные сигналы с двойным - или типы данных с одинарной точностью. Выходной сигнал наследовал свой тип данных от входного сигнала.
Если входной сигнал является массивом MATLAB, Системный объект обрабатывает передачу данных между центральным процессором и графическим процессором. Выходной сигнал является массивом MATLAB.
Если входным сигналом является gpuArray
, данные остаются на графическом процессоре. Выходным сигналом является gpuArray
. Когда объекту дают gpuArray
, вычисления происходят полностью на графическом процессоре, и никакая передача данных не происходит. Передача gpuArray
аргументы обеспечивают увеличенную эффективность путем сокращения времени симуляции. Для получения дополнительной информации смотрите, Устанавливают Массивы на графическом процессоре (Parallel Computing Toolbox).
Декодировать вводимые символы и произвести символы двоичного выхода:
Задайте и настройте свой объект Декодера Витерби. Смотрите Конструкцию.
Вызовите step
декодировать вводимые символы согласно свойствам comm.gpu.ViterbiDecoder
. Поведение step
характерно для каждого объекта в тулбоксе.
Примечание
Запуск в R2016b, вместо того, чтобы использовать step
метод, чтобы выполнить операцию, заданную Системным объектом, можно вызвать объект с аргументами, как будто это была функция. Например, y = step(obj,x)
и y = obj(x)
выполните эквивалентные операции.
H = comm.gpu.ViterbiDecoder
создает Системный объект Декодера Витерби, H
. Этот объект использует алгоритм Viterbi, чтобы декодировать convolutionally закодированные входные данные.
H = comm.gpu.ViterbiDecoder(
создает объект Декодера Витерби, Name
,Value
)H
, с заданным набором имени свойства к заданному значению. Можно задать дополнительные аргументы пары "имя-значение" в любом порядке как (Name1
, Value1
..., NameN
, ValueN
.
H = comm.gpu.ViterbiDecoder(TRELLIS,Name,Value)
создает объект Декодера Витерби, H
, с TrellisStructure
набор свойств к TRELLIS и другой заданный набор имен свойства к заданным значениям.
|
Структура решетки сверточного кода Задайте решетку как структуру MATLAB, которая содержит описание решетки сверточного кода. Используйте |
|
'InputFormat' Задайте формат входа к декодеру как один из Когда вы устанавливаете это свойство на |
|
Мягкий входной размер слова Укажите, что количество битов раньше представляло каждое квантованное мягкое входное значение как положительное, целочисленный скаляр. Это свойство применяется, когда вы устанавливаете свойство InputFormat на |
|
Действие, когда входные значения вне области значений Единственной допустимой установкой является |
|
Глубина Traceback Укажите, что количество ветвей решетки раньше создавало каждый traceback путь как положительное, целочисленный скаляр, меньше чем или равный 256. traceback глубина влияет на точность декодирования и задержку. Количество нулевых символов, которые предшествуют первому декодируемому символу в выходе, представляет задержку декодирования. Когда вы устанавливаете свойство TerminationMethod на |
|
Метод завершения закодированной системы координат Задайте |
|
Включите вход сброса декодера Установите это свойство на true, чтобы включить дополнительный вход метода шага. Когда вход сброса является ненулевым значением, объект сбрасывает внутренние состояния декодера к начальным условиям. Это свойство применяется, когда вы устанавливаете свойство TerminationMethod на |
|
Задержите выходной сброс Задержка выходного сброса не поддерживается. Единственная допустимая установка является ложной. |
|
Источник шаблона прокола Задайте источник шаблона прокола как один из |
|
Проколите вектор шаблона Укажите, что шаблон прокола раньше прокалывал закодированные данные. Значением по умолчанию является |
|
Включите вход стираний Стирания не поддерживаются. Единственная допустимая установка является ложной. |
|
Тип данных выхода Единственной допустимой установкой является |
|
Количество независимых систем координат, существующих в векторах входных и выходных данных. Задайте количество независимых систем координат, содержавшихся в одном вводе данных / выходной вектор. Входной вектор будет сегментирован на |
информация | Отобразите информацию об основанном на графическом процессоре объекте Viterbi Decoder |
сброс | Сбросьте состояния основанного на графическом процессоре объекта модулятора Декодера Витерби |
шаг | Декодируйте convolutionally закодированные данные с помощью алгоритма Viterbi |
Характерный для всех системных объектов | |
---|---|
release | Позвольте изменения значения свойства Системного объекта |
Передайте модулируемый поток битов convolutionally закодированных 8 DPSK через канал AWGN. Затем демодулируйте, декодируйте использование Декодера Витерби и ошибок количества.
hConEnc = comm.ConvolutionalEncoder; hMod = comm.DPSKModulator('BitInput',true); hChan = comm.gpu.AWGNChannel('NoiseMethod', ... 'Signal to noise ratio (SNR)', 'SNR',10); hDemod = comm.DPSKDemodulator('BitOutput',true); hDec = comm.gpu.ViterbiDecoder('InputFormat','Hard'); % Delay in bits is TracebackDepth times the number of % bits per symbol delay = hDec.TracebackDepth* ... log2(hDec.TrellisStructure.numInputSymbols); hError = comm.ErrorRate( ... 'ComputationDelay',3,'ReceiveDelay',delay); 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); errorStats = step(hError, data, receivedBits); end fprintf('Error rate = %f\nNumber of errors = %d\n', ... errorStats(1), errorStats(2))
[1] Fettweis, G., Х. Меир. "Архитектура прямого распространения для параллельного декодирования Viterbi”, журнал обработки сигналов VLSI, издания 3, июнь 1991.