comm.gpu.LDPCDecoder

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

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

Описание

Система на базе GPU, object™ принимает типовой MATLAB® массивы или объекты, созданные с помощью gpuArray класс. Объект System на основе GPU поддерживает входные сигналы с типами данных двойной или одинарной точности. Сигнал выхода наследует свой тип данных от входного сигнала.

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

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

The comm.gpu.LDPCDecoder Системный объект использует алгоритм распространения убеждения, чтобы декодировать двоичный код LDPC, который вводится в объект как выход мягкого решения (отношение логарифмической правдоподобности принятых бит) от демодуляции. Объект декодирует типовые двоичные коды LDPC, где не приняты шаблоны в матрице проверки четности. Для получения дополнительной информации см. «Декодирование распространения убеждений».

Для декодирования LDPC-кодированного сигнала:

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

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

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

пример

gpu_ldpcdecoder = comm.gpu.LDPCDecoder создает базирующийся на графическом процессоре двоичный декодер LDPC Системного объекта. Этот объект выполняет декодирование LDPC на основе указанной матрицы проверки четности.

gpu_ldpcdecoder = comm.gpu.LDPCDecoder(parity) устанавливает ParityCheckMatrix свойство к parity и создает декодер LDPC на базе GPU Системного объекта. The parity вход должен быть задан как описано в ParityCheckMatrix свойство.

gpu_ldpcdecoder = comm.gpu.LDPCDecoder(___,Name,Value) устанавливает свойства с помощью одной или нескольких пар "имя-значение", в дополнение к входам от любого из предыдущих синтаксисов. Для примера, comm.LDPCDecoder('DecisionMethod','Soft decision') конфигурирует Системный объект декодера LDPC для декодирования данных с помощью метода мягкого принятия решений и коэффициентов выходной логарифмической правдоподобности типа данных double. Заключайте каждое имя свойства в кавычки.

Свойства

расширить все

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

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

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

Матрица проверки четности, заданная как разреженная (N - K) -by N двоичная матрица. N - длина принимаемого сигнала и должна находиться в области значений (0, 231). K - длина незакодированного сообщения и должна быть меньше N. Последние (N - K) столбцы в матрице проверки четности должны быть обратимой матрицей в поле порядка 2 Галуа, gf(2).

Можно также задать матрицу проверки четности как двухколоночную нештатную индексную матрицу, I, который определяет индексы строка и столбец 1s в матрице проверки четности таким образом, что sparse(I(:,1),I(:,2),1).

Это свойство принимает типы числовых данных. Когда вы устанавливаете это свойство в разреженную двоичную матрицу, это свойство также принимает logical тип данных.

Значение по умолчанию использует dvbs2ldpc функция для конфигурирования разреженной матрицы проверки четности для кодирования LDPC с половинной скоростью, как указано в DVB-S.2 стандарте.

Пример: dvbs2ldpc(R,'indices') конфигурирует матрицу индексов для стандарта DVB-S.2, где R - скорость кода, и 'indices' задает выход dvbs2ldpc как двухколоночная матрица двойной точности, которая задает индексы строка и столбец 1s в матрице проверки четности.

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

Выход значения, заданный как одно из следующих значений:

  • 'Information part' - Объект выводит вектор-столбец K-на-1, содержащий только информационную часть полученного вектора отношения логарифмической правдоподобности. K - длина незакодированного сообщения.

  • 'Whole codeword' - Объект выводит вектор-на-1 N, содержащий весь вектор логарифмического отношения логарифмической правдоподобности. N - длина принимаемого сигнала.

    N и K должны совпадать с размерностью (N - K) -by K матрицы проверки четности.

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

Метод принятия решений, используемый для декодирования, заданный как одно из следующих значений:

  • 'Hard decision' - объект выводит декодированные данные типа данных logical.

  • 'Soft decision' - Объект выводит логарифмические коэффициенты логарифмической правдоподобности типа данных double.

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

Условие окончания итерации, заданное как одно из следующих значений:

  • 'Maximum iteration count' - Декодирование прекращается после количества итераций, заданных MaximumIterationCount свойство.

  • 'Parity check satisfied' Декодирование завершается после того, как все проверки четности удовлетворены. Если не все проверки четности удовлетворены, декодирование прекращается после количества итераций, заданных MaximumIterationCount свойство.

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

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

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

Выводит количество выполненных итераций, задается как false или true. Чтобы вывести количество выполненных итераций, задайте для этого свойства значение true.

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

Выход окончательных проверок четности, заданный как false или true. Чтобы вывести окончательные вычисленные проверки четности, установите это свойство равным true.

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

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

Описание

пример

y = gpu_ldpcdecoder(x) декодирует входные данные с помощью кода LDPC, основанного на матрице проверки четности по умолчанию.

[y,numiter] = gpu_ldpcdecoder(x) возвращает декодированные данные, y, и количество выполненных итераций, numiter. Чтобы использовать этот синтаксис, установите NumIterationsOutputPort свойство к true.

[y,parity] = gpu_ldpcdecoder(x) возвращает декодированные данные, y, и окончательные проверки четности, parity. Чтобы использовать этот синтаксис, установите FinalParityChecksOutputPort свойство к true.

[y,numiter,parity] = gpu_ldpcdecoder(x) возвращает декодированные данные, количество выполненных итераций и окончательные проверки четности. Чтобы использовать этот синтаксис, установите NumIterationsOutputPort и FinalParityChecksOutputPort свойства для true.

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

расширить все

Логарифмические коэффициенты логарифмической правдоподобности, заданные как вектор-столбец N-на-1, содержащий выходные данные мягкого решения демодуляции. N - количество бит в кодовом слове LDPC перед модуляцией. Каждый элемент является коэффициентом логарифмической правдоподобности для принятого бита. Значения элемента с большей вероятностью будут 0 если логарифмический коэффициент логарифмической правдоподобности положительный. Первые элементы K соответствуют информационной части входа сообщения.

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

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

расширить все

Декодированные данные, возвращенные как вектор-столбец. The DecisionMethod свойство определяет, выводит ли объект жесткие решения или мягкие решения (коэффициенты логарифмической правдоподобности).

  • Если на OutputValue для свойства задано значение 'Information part'выходные выходы включают только информационную часть принятого вектора логарифмического отношения логарифмической правдоподобности.

  • Если на OutputValue для свойства задано значение 'Whole codeword', выход включает в себя весь вектор логарифмического отношения логарифмической правдоподобности.

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

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

Зависимости

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

Окончательная проверка четности после декодирования входного кода LDPC, возвращенная как (N - K) вектор-на-1 столбец. N - количество бит в кодовом слове LDPC перед модуляцией. K - длина незакодированного сообщения.

Зависимости

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

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

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

release(obj)

расширить все

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

Примеры

свернуть все

Использование comm.gpu.LDPCDecoder Система Object™ для декодирования сигнала, передачи кодированного LDPC, модулированного QPSK битового потока через канал AWGN. После добавления AWGN демодулируйте и декодируйте принятый сигнал. Вычислите статистику ошибок для приема незакодированных и закодированных LDPC сигналов. Для получения дополнительной информации смотрите Ускорение симуляции с использованием графических процессоров.

Задайте переменные симуляции. Создайте системные объекты для энкодера LDPC, декодера LDPC, модулятора QPSK и демодуляторов QPSK.

M = 4; % Modulation order (QPSK)
snr = [0.25,0.5,0.75,1.0,1.25];
numFrames = 10;
ldpcEncoder = comm.LDPCEncoder;
gpuldpcDecoder = comm.gpu.LDPCDecoder;
pskMod = comm.PSKModulator(M,'BitInput',true);
pskDemod = comm.PSKDemodulator(M,'BitOutput',true,...
    'DecisionMethod','Approximate log-likelihood ratio');
pskuDemod = comm.PSKDemodulator(M,'BitOutput',true,...
    'DecisionMethod','Hard decision');
errRate = zeros(1,length(snr));
uncErrRate = zeros(1,length(snr));

Для каждой настройки ОСШ и всех систем координат вычислите статистику ошибок для незакодированных и закодированных LDPC сигналов.

for ii = 1:length(snr)
    ttlErr = 0;
    ttlErrUnc = 0;
    pskDemod.Variance = 1/10^(snr(ii)/10); % Set variance using current SNR
    for counter = 1:numFrames
        data = logical(randi([0 1],32400,1));
        % Transmit and receiver uncoded signal data
        mod_uncSig = pskMod(data);
        rx_uncSig = awgn(mod_uncSig,snr(ii),'measured');
        demod_uncSig = pskuDemod(rx_uncSig);
        numErrUnc = biterr(data,demod_uncSig);
        ttlErrUnc = ttlErrUnc + numErrUnc;
        % Transmit and receive LDPC coded signal data
        encData = ldpcEncoder(data);
        modSig = pskMod(encData);
        rxSig = awgn(modSig,snr(ii),'measured');
        demodSig = pskDemod(rxSig);
        rxBits = gpuldpcDecoder(demodSig);
        numErr = biterr(data,rxBits);
        ttlErr = ttlErr + numErr;
    end
    ttlBits = numFrames*length(rxBits);
    uncErrRate(ii) = ttlErrUnc/ttlBits;
    errRate(ii) = ttlErr/ttlBits;
end

Постройте график статистики ошибок для незакодированных и закодированных LDPC данных.

plot(snr,uncErrRate,snr,errRate)
legend('Uncoded','LDPC coded')
xlabel('SNR (dB)')
ylabel('BER')

Алгоритмы

расширить все

Этот объект выполняет декодирование LDPC, используя алгоритм распространения убеждений, также известный как алгоритм передачи сообщений.

Ссылки

[1] Gallager, Robert G. Коды проверки четности с низкой плотностью. Cambridge, MA: MIT Press, 1963.

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

Введенный в R2012a