В этом примере показано применение кодов контроля четности низкой плотности (LDPC) в стандарте цифрового видеовещания второго поколения (DVB-S.2), который развернут DIRECTV в США. В примере используются объекты системы связи для моделирования цепи передатчик-приемник, которая включает в себя кодирование и декодирование LDPC.
Стандарт ETSI (Европейский институт телекоммуникационных стандартов) EN 302 307 для вещания, интерактивных услуг, сбора новостей и других широкополосных спутниковых приложений (DVB-S.2) [1] использует современную схему кодирования для увеличения пропускной способности канала. Конкатенация кодов LDPC (проверка четности с низкой плотностью) и BCH является основой этой схемы кодирования. Коды LDPC, изобретенные Галлагером в его основной докторской диссертации в 1960 году, могут достичь чрезвычайно низких коэффициентов ошибок вблизи пропускной способности канала, используя алгоритм итеративного декодирования с низкой сложностью [2]. Внешние коды BCH используются для исправления спорадических ошибок, сделанных декодером LDPC.
Канальные коды для DVB-S.2 обеспечивают значительное увеличение пропускной способности по сравнению с DVB-S при тех же условиях передачи. В зависимости от режима передачи DVB-S.2 обеспечивает работу без квазиошибок (частота пакетных ошибок ниже 10 ^ -7) на уровне от 0,7 дБ до 1 дБ от предела Шеннона.
Этот пример моделирует кодер BCH, кодер LDPC, перемежитель, модулятор, а также их аналоги в приемнике в соответствии со стандартом DVB-S.2. Пример собирает частоту ошибок на выходах демодулятора, декодера LDPC и декодера BCH, определяет распределение количества итераций, выполняемых декодером LDPC, и показывает совокупность принятых символов. Для получения дополнительной информации относительно структуры системы, упрощения и предположения, видят Связь DVB-S.2, Включая LDPC, Кодирующий в примере Simulink.
Сценарий configureDVBS2Demo.m инициализирует некоторые параметры моделирования и генерирует структуру dvb. Поля этой структуры являются параметрами текущей системы DVB-S.2. Он также создает системные объекты, составляющие DVB-S.2 систему.
subsystemType = '16APSK 2/3'; % Constellation and LDPC code rate EsNodB = 9; % Energy per symbol to noise PSD ratio in dB numFrames = 20; % Number of frames to simulate % Initialize configureDVBS2Demo % Display system parameters dvb
dvb =
struct with fields:
CodeRate: '2/3'
EsNodB: 9
ModulationType: '16APSK'
NumBytesPerPacket: 188
NumBitsPerPacket: 1504
BCHCodewordLength: 43200
BCHMessageLength: 43040
BCHGeneratorPoly: [1x161 double]
BCHPrimitivePoly: [1 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 1]
NumPacketsPerBBFrame: 28
NumInfoBitsPerCodeword: 42112
BitPeriod: 2.3746e-05
LDPCCodewordLength: 64800
LDPCParityCheckMatrix: [21600x64800 logical]
LDPCNumIterations: 50
InterleaveOrder: [64800x1 double]
Constellation: [16x1 double]
SymbolMapping: [12 14 15 13 4 0 8 10 2 6 7 3 11 9 1 5]
PhaseOffset: [0.7854 0.2618]
BitsPerSymbol: 4
ModulationOrder: 16
SequenceIndex: 2
NumSymsPerCodeword: 16200
NoiseVar: 0.1259
NoiseVarEst: 0.3227
RecDelayPreBCH: 43040
В примере используются эти системные объекты и функции.
Объекты моделирования:
enc - BCH encoder dec - BCH decoder LDPCEnc - LDPC encoder LDPCDec - LDPC decoder intrlvr - Block interleaver deintrlvr - Block deinterleaver pskModulator - PSK modulator pskDemodulator - PSK demodulator chan - AWGN channel
Объекты измерения производительности:
PER - Packet error rate calculator BERLDPC - LDPC decoder output error rate calculator BERMod - Demodulator output error rate calculator constDiag - Scatter plot of channel output meanCalc - Average of the noise variance
Функции моделирования:
dvbsapskmod - DVBSAPSK modulator dvbsapskdemod - DVBSAPSK demodulator
Создайте системные объекты LDPC-кодера и декодера и установите матрицу контроля четности в соответствии с разделом 5.3.1 стандарта DVB-S.2 [1]. Вы устанавливаете IterationTerminationCondition свойство для 'Parity check satisfied' для прекращения итераций декодера, когда все проверки четности выполнены, что уменьшает время декодирования. Установите MaximumIterationCount для 50, чтобы ограничить число итераций моделирования. Установите NumIterationsOutputPort true для вывода количества итераций, выполненных для каждого кодового слова.
encldpc = comm.LDPCEncoder(dvb.LDPCParityCheckMatrix); decldpc = comm.LDPCDecoder(dvb.LDPCParityCheckMatrix, ... 'IterationTerminationCondition','Parity check satisfied', ... 'MaximumIterationCount',dvb.LDPCNumIterations, ... 'NumIterationsOutputPort',true);
Этот раздел кода вызывает цикл обработки для системы DVB-S.2. Основной контур обрабатывает данные покадрово, где системный параметр dvb.NumPacketsPerBBFrame определяет количество пакетов данных на кадр BB. Первая часть цикла for моделирует систему. Имитатор кодирует каждый кадр, используя кодеры BCH и LDPC в качестве внутреннего и внешнего кодов соответственно. Кодированные биты проходят через перемежитель. Модулятор отображает перемеженные биты в символы из предопределенной совокупности. Модулированные символы проходят через канал AWGN. Демодулятор использует аппроксимационный алгоритм логарифмического правдоподобия для получения оценок мягких битов. Декодер LDPC декодирует обращенно перемеженные значения мягких битов и генерирует жесткие решения. Декодер ВСН работает над этими трудными решениями, чтобы создать окончательную оценку принятого кадра.
Вторая часть цикла для собирает измерения рабочих характеристик, такие как частота битовых ошибок и график рассеяния. Он также оценивает полученное значение SNR.
bbFrameTx = false(encbch.MessageLength,1); numIterVec = zeros(numFrames,1); falseVec = false(dvb.NumPacketsPerBBFrame,1); for frameCnt=1:numFrames % Transmitter, channel, and receiver bbFrameTx(1:dvb.NumInfoBitsPerCodeword) = ... logical(randi([0 1],dvb.NumInfoBitsPerCodeword,1)); bchEncOut = encbch(bbFrameTx); ldpcEncOut = encldpc(bchEncOut); % Block Interleaver intrlvrOut = intrlv(ldpcEncOut,dvb.InterleaveOrder); if dvb.ModulationOrder == 4 || dvb.ModulationOrder == 8 modOut = pskModulator(intrlvrOut); else modOut = dvbsapskmod(intrlvrOut,dvb.ModulationOrder,'s2', ... dvb.CodeRate,'InputType','bit','UnitAveragePower',true); end chanOut = chan(modOut); if dvb.ModulationOrder == 4 || dvb.ModulationOrder == 8 demodOut = pskDemodulator(chanOut); else demodOut = dvbsapskdemod(chanOut,dvb.ModulationOrder,'s2', ... dvb.CodeRate,'OutputType','approxllr','NoiseVar', ... dvb.NoiseVar,'UnitAveragePower',true); end % Block Deinterleaver deintrlvrOut = deintrlv(demodOut,dvb.InterleaveOrder); [ldpcDecOut, numIter] = decldpc(deintrlvrOut); bchDecOut = decbch(ldpcDecOut); bbFrameRx = bchDecOut(1:dvb.NumInfoBitsPerCodeword,1); % Error statistics comparedBits = xor(bbFrameRx,bbFrameTx(1:dvb.NumInfoBitsPerCodeword)); packetErr = any(reshape(comparedBits,dvb.NumBitsPerPacket, ... dvb.NumPacketsPerBBFrame)); per = PER(falseVec,packetErr'); berMod = BERMod(demodOut<0,intrlvrOut); berLDPC = BERLDPC(ldpcDecOut,bchEncOut); % LDPC decoder iterations numIterVec(frameCnt) = numIter; % Noise variance estimate noiseVar = meanCalc(var(chanOut - modOut)); % Scatter plot constDiag(chanOut); end

Выполнение объектов измерения частоты ошибок (hPER, hBERMod, и hBERLDPC), выводит вектор 3 на 1, содержащий обновления измеренного значения частоты ошибок, количества ошибок и общего количества передач (пакетов или битов). Отображение BER на выходе демодулятора, BER на выходе декодера LDPC и частоты ошибок пакетов сквозной системы вместе с измеренным SNR на входе приемника. В то время как выходной сигнал демодулятора представляет частоту ошибок более 10%, декодер LDPC способен исправлять все ошибки и предоставлять пакеты без ошибок.
fprintf('Measured SNR : %1.2f dB\n',10*log10(1/noiseVar)) fprintf('Modulator BER: %1.2e\n',berMod(1)) fprintf('LDPC BER : %1.2e\n',berLDPC(1)) fprintf('PER : %1.2e\n',per(1))
Measured SNR : 8.98 dB Modulator BER: 8.25e-02 LDPC BER : 0.00e+00 PER : 0.00e+00
На рисунке показано распределение количества итераций, выполняемых декодером LDPC. Декодер смог декодировать все кадры без ошибки до достижения максимального числа итераций 50.
distFig = figure; histogram(numIterVec,1:decldpc.MaximumIterationCount-1); xlabel('Number of iterations'); ylabel('# occurrences'); grid on; title('Distribution of number of LDPC decoder iterations')

Мы запустили цикл обработки потока для 32,4e6 бит для нескольких значений SNR. Поскольку это моделирование занимает много времени, в этом примере мы предоставляем только результат моделирования, сохраненный в MAT-файле.
load berResultsDVBS2Demo.mat cBER_16APSK snrdB_16APSK berFig = figure; semilogy(snrdB_16APSK,cBER_16APSK(1,:)); xlim([8 8.9]); xlabel('SNR (dB)'); ylabel('BER'); grid on

В этом примере использовались несколько объектов системы для моделирования части DVB-S.2 системы связи по каналу AWGN. Он показал, как моделировать несколько частей системы DVB-S.2, таких как кодирование LDPC. Производительность системы измерялась с использованием значений PER и BER, полученных с помощью системных объектов измерения частоты ошибок.
Можно изменить части этого примера, чтобы поэкспериментировать с различными типами подсистем, используя различные значения для Es/No и максимальное количество итераций декодера LDPC. В этом примере поддерживаются следующие типы подсистем:
'QPSK 1/4', 'QPSK 1/3', 'QPSK 2/5', 'QPSK 1/2', 'QPSK 3/5', 'QPSK
2/3', 'QPSK 3/4', 'QPSK 4/5', 'QPSK 5/6', 'QPSK 8/9', 'QPSK 9/10' '8PSK 3/5', '8PSK 4/5', '8PSK 2/3', '8PSK 3/4', '8PSK 5/6', '8PSK
8/9', '8PSK 9/10' '16APSK 2/3', '16APSK 3/4', '16APSK 4/5', '16APSK 5/6', '16APSK
8/9', '16APSK 9/10' '32APSK 3/4', '32APSK 4/5', '32APSK 5/6', '32APSK 8/9', '32APSK
9/10'В этом примере используются следующие сценарии и вспомогательная функция:
Стандарт ETSI EN 302 307 V1.1.1: цифровое видеовещание (DVB); Структура кадров второго поколения, системы кодирования и модуляции каналов для вещания, интерактивных услуг, сбора новостей и других широкополосных спутниковых приложений (DVB-S2), Европейский институт телекоммуникационных стандартов, Вальбонн, Франция, 2005-03.
Р. Г. Галлагер, коды проверки четности с низкой плотностью, IEEE ® Transactions on Information Theory, том 8, № 1, январь 1962, стр. 21-28.
В. Э. Райан, Введение в коды LDPC, в кодировании и обработке сигналов для систем магнитной записи (Bane Vasic, ред.), CRC Press, 2004.