Этот пример показывает применение кодов проверки четности низкой плотности (LDPC) в стандарте цифрового видеовещания второй генерации (DVB-S.2), который развертывается DIRECTV в Соединенных Штатах. Пример использует коммуникационную систему объекты, чтобы симулировать цепь передатчика-приемника, которая включает в себя кодирование и декодирование LDPC.
Стандарт ETSI (European Telecommunications Standard Institute) EN 302 307 для вещания, интерактивных услуг, сбора новостей и других широкополосных спутниковых приложений (DVB-S.2) [1] использует современную схему кодирования для увеличения пропускной способности канала. Конкатенация кодов LDPC (Low-Density Parity-Check) и BCH является базисом этой схемы кодирования. Коды LDPC, изобретенные Галлагером в его исходной докторской диссертации в 1960 году, могут достичь чрезвычайно низких частот ошибок вблизи пропускной способности канала с помощью алгоритма итерационного декодирования с низкой сложностью [2]. Внешние коды BCH используются для исправления спорадических ошибок, допущенных декодером LDPC.
Коды канала для DVB-S.2 обеспечивают значительный коэффициент усиления по сравнению с DVB-S при тех же условиях передачи. В зависимости от режима передачи, DVB-S.2 обеспечивает операцию Quasi-Error-Free (вероятность ошибки пакета ниже 10 ^ -7) на уровне около 0,7 дБ до 1 дБ от предела Шеннона.
Этот пример моделирует энкодер BCH, энкодера LDPC, перемежитель, модулятор, а также их аналоги в приемник, согласно стандарту DVB-S.2. Пример собирает частоту ошибок на выходах демодулятора, декодера LDPC и декодера BCH, определяет распределение количества итераций, выполненных декодером LDPC, и показывает принятое созвездие символов. Для получения дополнительной информации о структуре системы, упрощениях и допущениях смотрите DVB-S.2 Link, включая кодирование 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
Создайте энкодер и декодер Системные объекты и установите матрицу проверки четности в соответствии с разделом 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 декодирует перемеженные значения мягких бит и генерирует жесткие решения. Декодер BCH работает над этими жесткими решениями, чтобы создать окончательную оценку принятой системы координат.
Вторая часть цикла for собирает эффективность измерения, такие как вероятность битовой ошибки и графика поля точек. Это также оценивает полученное значение ОСШ.
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 и частоту ошибок пакета сквозной системы вместе с измеренным ОСШ на входе приемника. В то время как выходные данные демодулятора представляют частоту ошибок более 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 бит для нескольких значений ОСШ. Поскольку эта симуляция занимает много времени, в этом примере мы предоставляем только результат симуляции, сохраненной в 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 Standard EN 302 307 V1.1.1: цифровое видеовещание (DVB); Структура системы координат второй генерации, системы кодирования и модуляции каналов для вещания, интерактивных услуг, сбора новостей и других широкополосных спутниковых приложений (DVB-S2), Европейский институт телекоммуникационных стандартов, Вальбонна, Франция, 2005-03.
Р. Г. Галлагер, Коды проверки четности низкой плотности, Транзакции IEEE ® по теории информации, том 8, № 1, январь 1962, стр. 21-28.
W. E. Ryan, Введение к кодам LDPC, в Coding and Signal Processing for Magnetic Recording Systems (Bane Vasic, ed.), CRC Press, 2004.