Декодируйте сверточно закодированные данные с использованием алгоритма Viterbi на графическом процессоре
The GPU ViterbiDecoder
Система object™ декодирует входные символы, чтобы создать двоичные выходные символы с помощью модуля обработки графики (GPU). Этот объект обрабатывает сигналы переменного размера; однако сигналы переменного размера не могут применяться для входов стирания.
Примечание
Чтобы использовать этот объект, необходимо установить лицензию Parallel Computing Toolbox™ и иметь доступ к соответствующему графическому процессору. Для получения дополнительной информации о графических процессорах см. раздел «Графические процессоры» (Parallel Computing Toolbox).
Объект System на базе GPU принимает типовой MATLAB® массивы или объекты, созданные с помощью gpuArray
класс. Объект System на основе GPU поддерживает входные сигналы с типами данных двойной или одинарной точности. Сигнал выхода наследует свой тип данных от входного сигнала.
Если входной сигнал является массивом MATLAB, системный объект обрабатывает передачу данных между центральным процессором и графическим процессором. Сигнал выхода является массивом MATLAB.
Если входной сигнал является gpuArray
, данные остаются на графическом процессоре. Выходной сигнал является gpuArray
. Когда объекту задается gpuArray
вычисления происходят полностью на графическом процессоре, и передача данных не происходит. Передача gpuArray
аргументы обеспечивают увеличение эффективности за счет сокращения времени симуляции. Для получения дополнительной информации смотрите Установка массивов на графическом процессоре (Parallel Computing Toolbox).
Чтобы декодировать входные символы и создать двоичные выходные символы:
Определите и настройте свой объект декодера Viterbi. См. «Конструкция».
Функции step
декодировать входные символы в соответствии со свойствами comm.gpu.ViterbiDecoder
. Поведение step
характерен для каждого объекта в тулбоксе.
Примечание
Начиная с R2016b, вместо использования step
метод для выполнения операции, заданной системным объектом, можно вызвать объект с аргументами, как если бы это была функция. Для примера, y = step(obj,x)
и y = obj(x)
выполнять эквивалентные операции.
H = comm.gpu.ViterbiDecoder
создает Системный объект декодера Viterbi, H
. Этот объект использует алгоритм Viterbi, чтобы декодировать сверточно закодированные входные данные.
H = comm.gpu.ViterbiDecoder(
создает объект декодера Viterbi, Name
,Value
)H
, с заданным именем свойства установлено заданное значение. Можно задать дополнительные аргументы пары "имя-значение" в любом порядке как (Name1
, Value1
..., NameN
, ValueN
.
H = comm.gpu.ViterbiDecoder(TRELLIS,Name,Value)
создает объект декодера Viterbi, H
, с TrellisStructure
Наборы свойств в TRELLIS и другие заданные имена свойства устанавливаются в заданные значения.
|
Структура Trellis сверточного кода Задайте шпалеру как структуру MATLAB, которая содержит описание шпалеры сверточного кода. Используйте |
|
Вход Задайте формат входа декодера как один из Когда вы устанавливаете это свойство на |
|
Функции мягкого входа размера слова Задайте количество бит, используемых для представления каждого квантованного значения мягкого входа как положительного, целочисленного скаляра. Это свойство применяется, когда вы задаете свойство InputFormat равным |
|
Действие, когда входные значения находятся вне области значений Единственная допустимая настройка |
|
Глубина следа Задайте количество шпалерных ветвей, используемых для построения каждого пути трассировки, как положительный, целочисленный скаляр, меньше или равный 256. Глубина отслеживания влияет на точность декодирования и задержку. Количество нулевых символов, которые предшествуют первому декодированному символу на выходе, представляет задержку декодирования. Когда вы задаете свойство TerminationMethod равным |
|
Метод завершения кодированной системы координат Задайте |
|
Включите вход сброса декодера Установите это свойство равным true, чтобы включить дополнительный вход метода шага. Когда вход сброса является ненулевым значением, объект сбрасывает внутренние состояния декодера в начальные условия. Это свойство применяется, когда вы задаете значение свойства TerminationMethod |
|
Задержка выходного сброса Задержка сброса выхода не поддерживается. Единственный допустимый параметр - false. |
|
Источник шаблона направленности Укажите источник шаблона прокола как один из |
|
Вектор пунктирного шаблона Задайте шаблон прокола, используемый для прокола закодированных данных. Значение по умолчанию является |
|
Включите вход стирания Удаление не поддерживается. Единственный допустимый параметр - false. |
|
Тип данных выхода Единственная допустимая настройка |
|
Количество независимых систем координат, присутствующих в векторах входных и выходных данных. Задайте количество независимых систем координат, содержащихся в одном векторе ввода/вывода данных. Вектор входа будет сегментирован на |
информация | Отображение информации об объекте декодера Viterbi на базе графического процессора |
шаг | Декодируйте сверточно закодированные данные с использованием алгоритма Viterbi |
Передайте сверточно закодированный 8-DPSK-modulated битовый поток через канал AWGN. Затем демодулируйте, декодируйте с помощью декодера Viterbi и отсчитывайте ошибки.
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., H. Meyr. «Feedforward Architecture for Parallel Viterbi Decoding», Журнал обработки сигналов VLSI, том 3, июнь 1991 года.