Этот пример показывает приложение кодов с низкой плотностью проверок на четность (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: [1 0 1 1 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 1 ... ] 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 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 ldpcEncode - LDPC encoder ldpcDecode - LDPC decoder
Создайте объекты настройки энкодера и декодера LDPC на основе матрицы проверки четности согласно Разделу 5.3.1 из стандарта DVB-S.2 [1].
encldpcCfg = ldpcEncoderConfig(dvb.LDPCParityCheckMatrix); decldpcCfg = ldpcDecoderConfig(dvb.LDPCParityCheckMatrix);
Этот раздел кода вызывает цикл обработки для системы 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 = ldpcEncode(bchEncOut,encldpcCfg); 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 deintrlvrOut = deintrlv(demodOut,dvb.InterleaveOrder); % By default, ldpcDecode stops iterating when all parity checks are % satisfied, which reduces decoding time [ldpcDecOut, numIter] = ldpcDecode(deintrlvrOut,decldpcCfg,dvb.LDPCNumIterations); 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(logical(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:dvb.LDPCNumIterations-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.