exponenta event banner

Сквозное моделирование DVB-S2X с повреждениями RF и коррекциями для обычных кадров

В этом примере показано, как измерить частоту ошибок в битах (BER) и частоту ошибок в пакетах (PER) для одной линии связи с расширенным (DVB-S2X) цифровым широковещательным спутником второго поколения, которая имеет постоянное кодирование и модуляцию для регулярных кадров. В этом примере подробно описаны стратегии синхронизации символов и несущей, в которых подчеркивается, как оценивать нарушения RF-интерфейса в условиях сильного шума. Однопотоковый сигнал добавляет нарушения RF-интерфейса и затем пропускает сигнал через аддитивный канал белого гауссова шума (AWGN).

Введение

Стандарт DVB-S2X, являющийся расширением спецификации DVB-S2, расширяет поддержку, обеспечиваемую для применения в основных DVB-S2, и повышает общую эффективность по сравнению со спутниковыми линиями связи. Стандарт DVB-S2X поддерживает следующие дополнительные функции:

  • Большая детализация модуляции и кодовых скоростей

  • Меньшие возможности свертывания фильтра для более эффективного использования полосы пропускания

  • Комбинации, оптимизированные для линейных и нелинейных каналов

  • Дополнительные возможности скремблирования для критических сценариев взаимных помех

DVB-S2X обслуживает множество различных целевых приложений, и приемники подвергаются различным типам и уровням радиочастотных нарушений на основе используемого приложения. В этом примере описываются аспекты синхронизации приемника DVB-S2X, используемого для основных DVB-S2 приложений. Пример поддерживает более новые скорости кодирования, более высокие схемы модуляции, такие как 64, 128 и 256 APSK, и меньшие варианты скатывания фильтра.

ETSI EN 302 307-2 Раздел 6 Таблица 20a и Таблица 20c [1] суммируют требования к характеристикам Quasi-Error-Free (QEF) по каналу AWGN для различных схем модуляции и кодовых скоростей. Рабочий диапазон Es/No для различных режимов передачи может рассматриваться как + 3 или -2 дБ от точки Es/No, где наблюдаются характеристики QEF. Поскольку рабочий диапазон Es/No низок, стратегии синхронизации временной синхронизации несущих и символов являются сложными проблемами проектирования.

На этой схеме представлен пример рабочего процесса.

Основной цикл обработки

Пример обрабатывает 30 кадров физического уровня (PL) данных с Es/No, установленным в 25 дБ, и затем вычисляет BER и PER. Смещение несущей частоты, смещение тактовой частоты дискретизации и ухудшение фазового шума применяются к модулированному сигналу, и AWGN добавляется к сигналу.

В приемнике после согласованной фильтрации выполняются операции синхронизации и восстановления несущей для восстановления переданных данных. Для извлечения кадров PL искаженная форма сигнала обрабатывается посредством различных стратегий синхронизации и восстановления несущей. Для декодирования кадров данных параметры передачи физического уровня, такие как схема модуляции, кодовая скорость и тип кадра FEC, восстанавливаются из заголовка PL. Для регенерации входного битового потока декодируется заголовок основной полосы частот (BB).

Поскольку стандарт DVB-S2X поддерживает пакетированные и непрерывные режимы передачи, BB-кадр может быть либо конкатенацией пакетов пользователя, либо потоком битов. BB-заголовок восстанавливается для определения режима передачи. Если BB-кадр является конкатенацией пользовательских пакетов, то состояние проверки циклическим избыточным кодом (CRC) каждого пакета возвращается вместе с декодированными битами, и затем измеряются PER и BER.

На этих блок-схемах показаны рабочие процессы синхронизации и восстановления входных битов.

Загрузите паритетный набор данных матриц DVB-S2X LDPC

В этом примере загружается MAT-файл с DVB-S2X матрицами четности LDPC. Если MAT-файл недоступен по пути MATLAB ®, используйте эти команды для загрузки и распаковки MAT-файла.

if ~exist('dvbs2xLDPCParityMatrices.mat','file')
    if ~exist('s2xLDPCParityMatrices.zip','file')
        url = 'https://ssd.mathworks.com/supportfiles/spc/satcom/DVB/s2xLDPCParityMatrices.zip';
        websave('s2xLDPCParityMatrices.zip',url);
        unzip('s2xLDPCParityMatrices.zip');
    end
    addpath('s2xLDPCParityMatrices');
end

DVB-S2X Конфигурирование в режиме Pilot-Aided

Укажите cfgDVBS2X структура для определения параметров конфигурации передачи DVB-S2X. PLSDecimalCode 129 и 131 не поддерживаются, поскольку они используются для генерации кадров VL-SNR. Поддерживаются только обычные кадры.

cfgDVBS2X.StreamFormat = "TS";
cfgDVBS2X.PLSDecimalCode = 191;                   % 64APSK 7/9 with pilots
cfgDVBS2X.DFL = 50128;
cfgDVBS2X.ScalingMethod = "Unit average power";
cfgDVBS2X.RolloffFactor = 0.35;
cfgDVBS2X.SamplesPerSymbol = 2
cfgDVBS2X = struct with fields:
        StreamFormat: "TS"
      PLSDecimalCode: 191
                 DFL: 50128
       ScalingMethod: "Unit average power"
       RolloffFactor: 0.3500
    SamplesPerSymbol: 2

Параметры моделирования

Стандарт DVB-S2X поддерживает гибкие полосы пропускания каналов. Используйте типичную полосу пропускания канала, например 36 МГц. Полоса пропускания канала может изменяться. Алгоритм грубой частотной синхронизации, реализованный в этом примере, может отслеживать смещения несущей частоты до 11% от скорости входного символа. Скорость передачи символов вычисляется как B/( 1 + R), где B - ширина полосы пропускания канала, а R - коэффициент свертывания фильтра передачи. Алгоритмы, реализованные в этом примере, могут корректировать смещение тактового сигнала выборки до 10 ppm.

simParams.sps = cfgDVBS2X.SamplesPerSymbol;              % Samples per symbol
simParams.numFrames = 30;                                % Number of frames to be processed
simParams.chanBW = 36e6;                                 % Channel bandwidth in Hertz
simParams.cfo = 2e6;                                     % Carrier frequency offset in Hertz
simParams.sco = 2;                                       % Sampling clock offset in parts per million
simParams.phNoiseLevel = "Low";           % Phase noise level provided as 'Low', 'Medium', or 'High'
simParams.EsNodB = 25;                                   % Energy per symbol to noise ratio in decibels

Эта таблица определяет маску фазового шума (dBc/Гц), используемую для генерации фазового шума, применяемого к передаваемому сигналу. Эти шумовые маски взяты из ETSI TR 102 376-1 Раздел 4.3.2.1.3 Рисунок 12 [2].

Произведите форму волны DVB-S2X, искаженную нарушениями РФ

Для создания DVB-S2X формы сигнала используйте HelperDVBS2XRxInputGenerate вспомогательная функция с помощью simParams и cfgDVBS2X структуры в качестве входных данных. Функция возвращает сигнал данных, переданные и принятые формы сигналов, параметры конфигурации физического уровня в виде структуры и структуру обработки приемника. Принятый сигнал ухудшается с помощью несущей частоты, временных фазовых сдвигов и фазового шума и затем проходит через канал AWGN. Структура параметров обработки приемника, rxParams, включает в себя опорные поля пилот-сигнала, индексы пилот-сигнала, счетчики и буферы. Постройте график совокупности принятых символов и спектра переданных и принятых сигналов.

[data,txOut,rxIn,phyConfig,rxParams] = HelperDVBS2XRxInputGenerate(cfgDVBS2X,simParams);
disp(phyConfig)
              FECFrame: "normal"
      ModulationScheme: "64APSK"
    LDPCCodeIdentifier: "7/9"
% Received signal constellation plot
rxConst = comm.ConstellationDiagram('Title','Received data', ...
    'XLimits',[-1 1],'YLimits',[-1 1], ...
    'ShowReferenceConstellation',false, ...
    'SamplesPerSymbol',simParams.sps);
rxConst(rxIn(1:length(txOut)))

% Transmitted and received signal spectrum visualization
Rsymb = simParams.chanBW/(1 + cfgDVBS2X.RolloffFactor);
Fsamp = Rsymb*simParams.sps;
specAn = dsp.SpectrumAnalyzer('SampleRate',Fsamp, ...
    'ChannelNames',{'Transmitted waveform','Received waveform'}, ...
    'ShowLegend',true);
specAn([txOut,rxIn(1:length(txOut))]);

Конфигурирование параметров приемника

В приемнике синхронизация по времени символа выполняется на принятых данных, а затем за ней следует кадровая синхронизация. Алгоритмы приемника включают в себя алгоритмы грубой и тонкой коррекции ухудшения частоты. Алгоритм оценки несущей частоты может отслеживать смещения несущей частоты до 20% от входной скорости передачи символов. Грубая оценка частоты, реализованная как контур подстройки частоты (FLL), уменьшает сдвиг частоты до уровня, который может отслеживать устройство точной оценки частоты. Предпочтительная полоса пропускания контура для синхронизации символов и грубой компенсации частоты зависит от настройки Es/No.

Блок из 36 пилотов повторяется каждые 1476 символов. Оценка грубой частотной ошибки использует 34 из 36 пилот-символов. Соотношение используемых пилот-сигналов на блок (34) и периодичности пилот-сигналов (1476) составляет 0,023. Использование значения 0,023 в качестве коэффициента масштабирования для полосы пропускания контура синхронизатора грубой частоты является предпочтительным.

При уменьшении значения параметра Es/No уменьшите пропускную способность контура для фильтрации большего количества шумов во время сбора данных. Количество кадров, необходимое для схождения синхронизатора символов и грубого FLL, зависит от настройки полосы пропускания контура.

При синхронизации кадров используется заголовок PL. Поскольку синхронизация несущей осуществляется с помощью данных, кадровая синхронизация должна точно обнаруживать начало кадра. Es/No играет решающую роль в определении точности кадровой синхронизации. Когда модулированные кадры QPSK восстанавливаются при значениях Es/No ниже 3 дБ, синхронизация кадров должна выполняться на нескольких кадрах для точного обнаружения.

Точная оценка частоты может отслеживать смещения несущей частоты до 4% от входной скорости передачи символов. Тонкая оценка частоты должна обрабатывать множество контрольных блоков для того, чтобы остаточный сдвиг несущей частоты был уменьшен до уровней, приемлемых для алгоритма фазовой оценки. Алгоритм оценки фазы может обрабатывать ошибку остаточной несущей частоты менее 0,02% от скорости входного символа.

Эти настройки назначены в rxParams структура для обработки синхронизации. Дополнительные сведения о том, как задать эти параметры для низких значений Es/No, см. в разделе Дальнейшие исследования.

rxParams.carrSyncLoopBW = 1e-2*0.023;        % Coarse frequency estimator loop bandwidth normalized by symbol rate
rxParams.symbSyncLoopBW = 8e-3;              % Symbol timing synchronizer loop bandwidth normalized by symbol rate
rxParams.symbSyncLock  = 8;                  % Number of frames required for symbol timing error convergence
rxParams.frameSyncLock = 1;                  % Number of frames required for frame synchronization
rxParams.coarseFreqLock = 5;                 % Number of frames required for coarse frequency acquisition
rxParams.fineFreqLock = 4;                   % Number of frames required for fine frequency estimation

% Total frames taken for symbol timing and coarse frequency lock to happen
rxParams.initialTimeFreqSync = rxParams.symbSyncLock + rxParams.frameSyncLock + rxParams.coarseFreqLock;
% Total frames used for overall synchronization
rxParams.totalSyncFrames = rxParams.initialTimeFreqSync + rxParams.fineFreqLock;

% Create time frequency synchronization System object by using
% HelperDVBS2TimeFreqSynchronizer helper object
timeFreqSync = HelperDVBS2TimeFreqSynchronizer( ...
    'CarrSyncLoopBW',rxParams.carrSyncLoopBW, ...
    'SymbSyncLoopBW',rxParams.symbSyncLoopBW, ...
    'SamplesPerSymbol',simParams.sps, ...
    'DataFrameSize',rxParams.xFecFrameSize, ...
    'SymbSyncTransitFrames',rxParams.symbSyncLock, ...
    'FrameSyncAveragingFrames',rxParams.frameSyncLock);

% Initialize error computing parameters
[numFramesLost,pktsErr,bitsErr,pktsRec] = deal(0);

% Initialize data indexing variables
stIdx = 0;
dataSize = rxParams.inputFrameSize;
plFrameSize = rxParams.plFrameSize;
dataStInd = rxParams.totalSyncFrames + 1;
isLastFrame = false;
symSyncOutLen = zeros(rxParams.initialTimeFreqSync,1);

Синхронизация синхронизации и несущей и восстановление данных

Чтобы синхронизировать принятые данные и восстановить входной битовый поток, искаженные DVB-S2X выборки формы сигнала обрабатываются по одному кадру за раз, следуя этим шагам.

  1. Примените согласованную фильтрацию, выводя со скоростью две выборки на символ.

  2. Примените синхронизацию синхронизации символов с помощью детектора ошибок синхронизации Гарднера с выходом, генерируемым на символьной скорости. Gardner TED не поддерживает передачу данных, поэтому она выполняется до синхронизации несущей.

  3. Применение кадровой синхронизации для определения начала кадра и определения положения пилота.

  4. Оценка и применение грубой коррекции смещения частоты.

  5. Оценка и применение точной коррекции смещения частоты.

  6. Оценка и компенсация остаточной несущей частоты и фазового шума.

  7. Декодирование заголовка PL и вычисление параметров передачи.

  8. Демодуляция и декодирование кадров PL.

  9. Выполните проверку CRC для заголовка BB, если проверка пройдет успешно, восстановите параметры заголовка.

  10. Регенерация входного потока данных или пакетов из кадров BB.

while stIdx < length(rxIn)

    % Use one DVB-S2X PL frame for each iteration.
    endIdx = stIdx + rxParams.plFrameSize*simParams.sps;

    % In the last iteration, all the remaining samples in the received
    % waveform are considered.
    isLastFrame = endIdx > length(rxIn);
    endIdx(isLastFrame) = length(rxIn);
    rxData = rxIn(stIdx+1:endIdx);

    % After coarse frequency offset loop is converged, the FLL works with a reduced loop bandwidth.
    if rxParams.frameCount < rxParams.initialTimeFreqSync
        coarseFreqLock = false;
    else
        coarseFreqLock = true;
    end

    % Retrieve the last frame samples.
    if isLastFrame
        resSymb = plFrameSize - length(rxParams.cfBuffer);
        resSampCnt = resSymb*rxParams.sps - length(rxData);
        if resSampCnt >= 0                           % Inadequate number of samples to fill last frame
            syncIn = [rxData; zeros(resSampCnt, 1)];
        else                                         % Excess samples are available to fill last frame
            syncIn = rxData(1:resSymb*rxParams.sps);
        end
    else
        syncIn = rxData;
    end

    % Apply matched filtering, symbol timing synchronization, frame
    % synchronization, and coarse frequency offset compensation.
    [coarseFreqSyncOut,syncIndex,phEst] = timeFreqSync(syncIn,coarseFreqLock);
    if rxParams.frameCount <= rxParams.initialTimeFreqSync
        symSyncOutLen(rxParams.frameCount) = length(coarseFreqSyncOut);
        if any(abs(diff(symSyncOutLen(1:rxParams.frameCount))) > 5)
            error('Symbol timing synchronization failed. The loop will not converge. No frame will be recovered. Update the symbSyncLoopBW parameter according to the EsNo setting for proper loop convergence.');
        end
    end

    rxParams.syncIndex = syncIndex;

    % The PL frame start index lies somewhere in the middle of the chunk being processed.
    % From fine frequency estimation onwards, the processing happens as a PL frame.
    % A buffer is used to store symbols required to fill one PL frame.
    if isLastFrame
        fineFreqIn = [rxParams.cfBuffer; coarseFreqSyncOut];
    else
        fineFreqIn = [rxParams.cfBuffer; coarseFreqSyncOut(1:rxParams.syncIndex-1)];
    end

    % Estimate the fine frequency error by using the HelperDVBS2FineFreqEst
    % helper function.
    % Add 1 to the conditional check because the buffer used to get one PL frame introduces a delay of one to the loop
    % count.
    if (rxParams.frameCount > rxParams.initialTimeFreqSync + 1) && ...
            (rxParams.frameCount <= rxParams.totalSyncFrames + 1)
        rxParams.fineFreqCorrVal = HelperDVBS2FineFreqEst( ...
            fineFreqIn(rxParams.pilotInd),rxParams.numPilotBlks, ...
            rxParams.refPilots,rxParams.fineFreqCorrVal);
    end
    if rxParams.frameCount >= rxParams.totalSyncFrames + 1
        fineFreqLock = true;
    else
        fineFreqLock = false;
    end


    if fineFreqLock
        % Normalize the frequency estimate by the input symbol rate
        % freqEst = angle(R)/(pi*(N+1)) where N (18) is the number of elements
        % used to compute the mean of auto correlation (R) in
        % HelperDVBS2FineFreqEst.
        freqEst = angle(rxParams.fineFreqCorrVal)/(pi*(19));

        % Generate the symbol indices using frameCount and plFrameSize.
        % Subtract 2 from the rxParams.frameCount because the buffer used to get one
        % PL frame introduces a delay of one to the count.
        phErr = exp(-1j*2*pi*freqEst*((rxParams.frameCount-2)*plFrameSize:(rxParams.frameCount-1)*plFrameSize-1));
        fineFreqOut = fineFreqIn.*phErr(:);

        % Estimate the phase error estimation by using the HelperDVBS2PhaseEst
        % helper function.
        [phEstRes,rxParams.prevPhaseEst] = HelperDVBS2PhaseEst( ...
            fineFreqOut(rxParams.pilotInd),rxParams.refPilots,rxParams.prevPhaseEst);

        % Compensate for the residual frequency and phase offset by using
        % the
        % HelperDVBS2PhaseCompensate helper function.
        % Use two frames for initial phase error estimation. Starting with the
        % second frame, use the phase error estimates from the previous frame and
        % the current frame in compensation.
        % Add 3 to the frame count comparison to account for delays: One
        % frame due to rxParams.cfBuffer delay and two frames used for phase
        % error estimate.
        if rxParams.frameCount >= rxParams.totalSyncFrames + 3
            phaseCompOut = HelperDVBS2PhaseCompensate(rxParams.ffBuffer, ...
                rxParams.pilotEst,phEstRes(2),rxParams.pilotInd);
        end

        rxParams.ffBuffer = fineFreqOut;
        rxParams.pilotEst = phEstRes;

        % The phase compensation on the data portion is performed by
        % interpolating the phase estimates computed on consecutive pilot
        % blocks. The second phase estimate is not available for the data
        % portion after the last pilot block in the last frame. Therefore,
        % the slope of phase estimates computed on all pilot blocks in the
        % last frame is extrapolated and used to compensate for the phase
        % error on the final data portion.
        if isLastFrame
            pilotBlkLen = 36;    % Symbols
            pilotBlkFreq = 1476; % Symbols
            avgSlope = mean(diff(phEstRes(2:end)));
            chunkLen = rxParams.plFrameSize - rxParams.pilotInd(end) + ...
                rxParams.pilotInd(pilotBlkLen);
            estEndPh = phEstRes(end) + avgSlope*chunkLen/pilotBlkFreq;
            phaseCompOut1 = HelperDVBS2PhaseCompensate(rxParams.ffBuffer, ...
                rxParams.pilotEst,estEndPh,rxParams.pilotInd);
        end
    end

    % Recover the input bit stream.
    if rxParams.frameCount >= rxParams.totalSyncFrames + 3
        isValid = true;
        if isLastFrame
            syncOut = [phaseCompOut;phaseCompOut1];
        else
            syncOut = phaseCompOut;
        end
    else
        isValid = false;
        syncOut = [];
    end

    % Update the buffers and counters.
    rxParams.cfBuffer = coarseFreqSyncOut(rxParams.syncIndex:end);
    rxParams.syncIndex = syncIndex;
    rxParams.frameCount = rxParams.frameCount + 1;

    if isValid  % Data valid signal

        % Decode the PL header by using the HelperDVBS2XPLHeaderRecover helper
        % function. Start of frame (SOF) is 26 symbols which are discarded
        % before header decoding. They are only required for frame
        % synchronization.
        rxPLSCode = syncOut(1:90); % First 90 symbols of frame is PL header
        [plsDecCode, phyParams] = HelperDVBS2XPLHeaderRecover(rxPLSCode,rxParams.s2xStatus);
        % Validate the decoded PL header.
        if plsDecCode ~= cfgDVBS2X.PLSDecimalCode
            fprintf('%s\n','PL header decoding failed')
        else % Demodulation and decoding
            for frameCnt = 1:length(syncOut)/rxParams.plFrameSize
                rxFrame = syncOut((frameCnt-1)*rxParams.plFrameSize+1:frameCnt*rxParams.plFrameSize);
                % Estimate noise variance by using
                % HelperDVBS2NoiseVarEstimate helper function.
                nVar = HelperDVBS2NoiseVarEstimate(rxFrame,rxParams.pilotInd,rxParams.refPilots,rxParams.normFlag);
                % The data begins at symbol 91 (after the header symbols).
                rxDataFrame = rxFrame(91:end);
                % Recover the BB frame by using HelperDVBS2XBBFrameRecover
                % helper function.
                rxBBFrame = HelperDVBS2XBBFrameRecover(rxDataFrame,phyParams,rxParams.plScramblingIndex, ...
                    rxParams.numPilotBlks,nVar,false);
                % Recover the input bit stream by using
                % HelperDVBS2StreamRecover helper function.
                if strcmpi(cfgDVBS2X.StreamFormat,'GS') && ~rxParams.UPL
                    [decBits,isFrameLost] = HelperDVBS2StreamRecover(rxBBFrame);
                    if ~isFrameLost && length(decBits) ~= dataSize
                        isFrameLost = true;
                    end
                else
                    [decBits,isFrameLost,pktCRC] = HelperDVBS2StreamRecover(rxBBFrame);
                    if ~isFrameLost && length(decBits) ~= dataSize
                        isFrameLost = true;
                        pktCRC = zeros(0,1,'logical');
                    end
                    % Compute the packet error rate for TS or GS packetized
                    % mode.
                    pktsErr = pktsErr + numel(pktCRC) - sum(pktCRC);
                    pktsRec = pktsRec + numel(pktCRC);
                end
                if ~isFrameLost
                    ts = sprintf('%s','BB header decoding passed.');
                else
                    ts = sprintf('%s','BB header decoding failed.');
                end
                % Compute the number of frames lost. CRC failure of
                % baseband header is considered a frame loss.
                numFramesLost = isFrameLost + numFramesLost;
                fprintf('%s(Number of frames lost = %1d)\n',ts,numFramesLost)
                % Compute the bits in error.
                if isLastFrame && ~isFrameLost
                    bitsErr = bitsErr + sum(data((dataStInd-1)*dataSize+1:dataStInd*dataSize) ~= decBits);
                else
                    if ~isFrameLost
                        bitsErr = bitsErr + sum(data((dataStInd-1)*dataSize+1:dataStInd*dataSize) ~= decBits);
                    end
                end
                dataStInd = dataStInd + 1;
            end
        end
    end
    stIdx = endIdx;
end
BB header decoding passed.(Number of frames lost = 0)
BB header decoding passed.(Number of frames lost = 0)
BB header decoding passed.(Number of frames lost = 0)
BB header decoding passed.(Number of frames lost = 0)
BB header decoding passed.(Number of frames lost = 0)
BB header decoding passed.(Number of frames lost = 0)
BB header decoding passed.(Number of frames lost = 0)
BB header decoding passed.(Number of frames lost = 0)
BB header decoding passed.(Number of frames lost = 0)
BB header decoding passed.(Number of frames lost = 0)
BB header decoding passed.(Number of frames lost = 0)
BB header decoding passed.(Number of frames lost = 0)

Журналы визуализации и ошибок

Постройте график совокупности синхронизированных данных и вычислите BER и PER.

% Synchronized data constellation plot
syncConst = comm.ConstellationDiagram('Title','Synchronized data', ...
    'XLimits',[-1.7 1.7],'YLimits',[-1.7 1.7], ...
    'ShowReferenceConstellation',false);
syncConst(syncOut)

% Error metrics display
% For GS continuous streams
if strcmpi(cfgDVBS2X.StreamFormat,'GS') && ~rxParams.UPL
    if (simParams.numFrames-rxParams.totalSyncFrames == numFramesLost)
        fprintf("All frames are lost. No bits are retrieved from BB frames.")
    else
        ber = bitsErr/((dataStInd-rxParams.totalSyncFrames)*dataSize);
        fprintf('BER           : %1.2e\n',ber)
    end
else
    % For GS and TS packetized streams
    if pktsRec == 0
        fprintf("All frames are lost. No packets are retrieved from BB frames.")
    else
        if strcmpi(cfgDVBS2X.StreamFormat,'TS')
            pktLen = 1504;
        else
            pktLen = cfgDVBS2X.UPL;      % UP length including sync byte
        end
        ber = bitsErr/(pktsRec*pktLen);
        per = pktsErr/pktsRec;
        fprintf('PER: %1.2e\n',per)
        fprintf('BER: %1.2e\n',ber)
    end
end
PER: 0.00e+00
BER: 0.00e+00

Дальнейшие исследования

Для моделирования BER в AWGN, предполагая идеальную синхронизацию, используйте HelperDVBS2XBitRecover вспомогательная функция для оценки производительности приемника. См. примеры, приведенные в разделе M-help документа HelperDVBS2XBitRecover функция помощника. Для получения подробной информации о настройке параметров синхронизации rxParams для других cfgDVBS2X и simParams параметры, см. в разделе «Дальнейшее исследование» в Сквозном моделировании DVB-S2 с повреждениями и исправлениями RF о том, как настроить параметры синхронизации rxParams для других cfgDVBS2X и simParams настройки. Для схем с более высокой модуляцией, таких как 64 APSK и выше, эта таблица показывает типичное количество кадров, необходимых для сходимости цикла синхронизации символа.

Приложение

В примере используются следующие вспомогательные функции:

  • HelperDVBS2XRxInputGenerate.m: Формирование отсчетов формы сигнала DVB-S2X, искаженных с нарушением РЧ и структурой параметров для обработки приемником

  • HelperDVBS2PhaseNoise.m: Произведите образцы шума фазы для различных масок шума фазы DVB-S2X и примените его к входному сигналу

  • HelperDVBS2TimeFreqSynchronizer.m: Выполнение согласованной фильтрации, синхронизации символов, кадровой синхронизации и грубой оценки и коррекции частоты

  • HelperDVBS2FrameSync.m: Выполните синхронизацию кадров и определите начало кадра

  • HelperDVBS2FineFreqEst.m: Оценка точного смещения частоты

  • HelperDVBS2PhaseEst.m: Оценка смещения фазы несущей

  • HelperDVBS2PhaseCompensate.m: Выполнить компенсацию фазы несущей

  • HelperDVBS2XPLHeaderRecover.m: Демодуляция и декодирование заголовка PL для восстановления параметров передачи

  • HelperDVBS2NoiseVarEstimate.m Оценка дисперсии шума принятых данных

  • HelperDVBS2XBBFrameRecover.m: Выполнить дескремблирование PL, демодуляцию, декодирование и восстановление кадра BB из кадра PL

  • HelperDVBS2XDemapper.m: Выполнение мягкой демодуляции для всех схем модуляции на основе DVB-S2X

  • HelperDVBS2XLDPCDecode.m: Выполнение декодирования LDPC для всех форматов кадров LDPC на основе DVB-S2X и скорости передачи кода

  • HelperDVBS2XBCHDecode.m: Выполнение декодирования BCH для всех форматов кадров и скоростей кодирования на основе DVB-S2X

  • HelperDVBS2StreamRecover.m: Проверка CRC заголовка BB и восстановление входного потока из кадра BB на основе параметров заголовка

  • HelperDVBS2XBitRecover.m: Выполнить демодуляцию и декодирование заголовка PL, дескремблирование PL, демодуляцию, декодирование и восстановление кадра BB. Проверьте CRC заголовка BB и восстановите входной поток из кадра BB.

Библиография

  1. Стандарт ETSI EN 302 307-2 V1.1.1 (2015-11). цифровое видеовещание (DVB); структура кадров второго поколения, системы канального кодирования и модуляции для вещания, интерактивных услуг, сбора новостей и других широкополосных спутниковых приложений; Часть 2: DVB-S2 расширения (DVB-S2X).

  2. Стандарт ETSI TR 102 376-2 V1.2.1 (2015-11). цифровое видеовещание (DVB); Руководство по внедрению системы второго поколения для вещания, интерактивных услуг, сбора новостей и других широкополосных спутниковых приложений; Часть 2: S2 расширения (DVB-S2X).

  3. Стандарт ETSI TR 102 376-1 V1.2.1 (2015-11). цифровое видеовещание (DVB); Руководство по внедрению системы второго поколения для вещания, интерактивных услуг, сбора новостей и других широкополосных спутниковых приложений (DVB-S2).

  4. Менгали, Умберто и Альдо Н. Д'Андреа. Методы синхронизации для цифровых приемников. Нью-Йорк: Пленум Press,1997.

  5. Э. Казини, Р. Де Гауденци и Альберто Гинези. «DVB‐S2 разработка модемных алгоритмов и их производительность в обычных спутниковых каналах». Международный журнал спутниковой связи и сетей 22, № 3 (2004 год): 281-318.

  6. Майкл Райс, Digital Communications: дискретно-временной подход. Нью-Йорк: Прентис Холл, 2008.

См. также

Объекты

Связанные темы