comm.LDPCEncoder

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

Описание

The comm.LDPCEncoder Системная object™ применяет кодирование LDPC к двоичному входному сообщению. Коды LDPC являются линейными кодами системы управления ошибками с разреженными матрицами проверки четности и длинными длинами блоков, которые могут достичь эффективности около предела Шеннона.

Чтобы закодировать двоичный код LDPC:

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

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

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

Создание

Описание

пример

ldpcencoder = comm.LDPCEncoder создает двоичный системный объект энкодера. Этот объект выполняет кодирование LDPC на основе матрицы проверки четности по умолчанию.

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

ldpcencoder = comm.LDPCEncoder(___,Name,Value) устанавливает свойства с помощью одной или нескольких пар "имя-значение", в дополнение к входам от любого из предыдущих синтаксисов. Для примера, comm.LDPCEncoder('ParityCheckMatrix',sparse(I(:,1),I(:,2),1)) конфигурирует энкодер Системного объекта LDPC для кодирования данных с помощью матрицы четности sparse(I(:,1),I(:,2),1). Заключайте каждое имя свойства в кавычки.

Свойства

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

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

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

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

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

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

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

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

Примечание

  • Когда последние (N - K) столбцы матрицы проверки четности образуют треугольную матрицу, выполняется прямая или обратная подстановка, чтобы решить уравнение проверки четности.

  • Когда последние (N - K) столбцы матрицы проверки четности не образуют треугольную матрицу, выполняется инверсия матрицы, чтобы решить уравнение проверки четности. Если большая матрица должна быть инвертирована, инициализация или обновление занимает больше времени.

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

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

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

Описание

пример

codeword = ldpcencoder(message) кодирует вход сообщение с помощью кода LDPC на основе матрицы проверки четности. Выход кодового слова LDPC является решением уравнения проверки четности.

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

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

Входное сообщение, заданное как вектор-на-1 K, содержащий двоичные элементы. K - длина незакодированного сообщения.

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

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

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

Кодовое слово LDPC, возвращаемое как вектор-столбец N -by-1. N - количество бит в кодовом слове LDPC. Сигнал выхода наследует свой тип данных от входного сигнала. Выход кодового слова LDPC является решением уравнения проверки четности. Входное сообщение содержит первые K бита выходного кодового слова LDPC, и проверка четности содержит оставшиеся (N- K) биты.

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

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

Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем 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.

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

.

См. также

Объекты

Функции

Блоки

Введенный в R2012a