comm.LDPCDecoder

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

Описание

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

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

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

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

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

Создание

Описание

пример

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

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

ldpcdecoder = comm.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 = ldpcdecoder(x) декодирует входные данные с помощью кода LDPC, основанного на матрице проверки четности по умолчанию.

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

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

[y,numiter,parity] = 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Сброс внутренних состояний Системного объекта

Примеры

свернуть все

Передайте битовый поток с кодировкой LDPC, модулированный QPSK, через канал 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;
ldpcDecoder = comm.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 = ldpcDecoder(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')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Uncoded, LDPC coded.

Алгоритмы

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

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

Ссылки

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

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

.

См. также

Объекты

Функции

Блоки

Введенный в R2012a