Этот пример показывает приложение кодов низкой проверки четности плотности (LDPC) в стандарте Цифрового телевидения второго поколения (DVB-S.2), который развертывается DIRECTV в Соединенных Штатах. Пример использует объекты системы связи моделировать цепочку получателя передатчика, которая включает LDPC кодирование и декодирование.
ETSI (Европейский институт стандартизации электросвязи) EN 302 307 стандарт для Широковещательной передачи, Interactive Services, Сбора Новостей и других широкополосных спутниковых приложений (DVB-S.2) [1] использование современная схема кодирования увеличить способность канала. Конкатенация LDPC (Имеющая малую плотность Проверка четности) и коды BCH является основанием этой схемы кодирования. Коды LDPC, изобретенные Gallager в его оригинальном докторском тезисе в 1 960, могут достигнуть чрезвычайно низких коэффициентов ошибок около способности канала при помощи низкой сложности итеративный алгоритм декодирования [2]. Внешние коды BCH используются, чтобы исправить спорадические ошибки, совершенные декодером LDPC.
Коды канала для DVB-S.2 предоставляют значительное полное усиление по DVB-S при тех же условиях передачи. В зависимости от режима передачи DVB-S.2 обеспечивает операцию Quasi-Error-Free (пакетный коэффициент ошибок ниже 10^-7) на уровне приблизительно 0,7 дБ к 1 дБ от предела Шеннона.
Этот пример моделирует энкодер BCH, энкодер LDPC, interleaver, модулятор, а также их дубликаты в получателе, согласно стандарту 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 varCalc - Variance of the noise on a frame meanCalc - Average of the noise variance
Следующее является списком функций этот пример использование:
Функции симуляции:
dvbsapskmod - DVBSAPSK modulator dvbsapskdemod - DVBSAPSK demodulator
Создайте Системные объекты энкодера и декодера LDPC и установите матрицу проверки четности согласно Разделу 5.3.1 из стандарта DVB-S.2 [1]. Вы устанавливаете свойство IterationTerminationCondition на 'Проверку четности, удовлетворенную' останавливать итерации декодера, когда все проверки четности удовлетворены, который уменьшает время декодирования. Установите свойство MaximumIterationCount на 50, чтобы ограничить количество итераций симуляции. Установите NumIterationsOutputPort на истину выводить количество итераций, выполняемых для каждой кодовой комбинации.
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 как внутренние и внешние коды, соответственно. Закодированные биты проходят через interleaver. Модулятор сопоставляет чередованные биты с символами от предопределенной совокупности. Модулируемые символы проходят через канал 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); intrlvrOut = intrlvr(ldpcEncOut); 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 deintrlvrOut = deintrlvr(demodOut); [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(varCalc(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.99 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'
Этот пример использует следующие скрипты и функцию помощника:
EN 302 307 V1.1.1 Стандарта ETSI: Цифровое телевидение (DVB); структура структурирования Второго поколения, кодирование канала и системы модуляции для Широковещательной передачи, Interactive Services, Сбора Новостей и других широкополосных спутниковых приложений (DVB-S2), Европейский институт стандартизации электросвязи, Вальбонн, Франция, 2005-03.
Р. Г. Галлэджер, Имеющие малую плотность Коды с проверкой четности, IEEE® Transactions на Теории информации, Издании 8, № 1, январь 1962, стр 21-28.
В. Э. Райан, введение в коды LDPC, в Кодировании и Обработке сигналов для Магнитных Систем Записи (Отравляют Vasic, редактора), Нажатие CRC, 2004.