Сквозная симуляция DVB-S2X с искажениями RF и коррекциями для регулярных систем координат

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

Введение

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

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

  • Меньшие опции развертывания фильтра для лучшего использования полосы пропускания

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

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

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

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

Эта схема суммирует пример рабочего процесса.

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

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

В приемнике после согласованной фильтрации выполняются операции синхронизации и восстановления несущей для восстановления передаваемых данных. Чтобы извлечь системы координат, искаженная форма волны обрабатывается через различные стратегии синхронизации и восстановления несущей. Алгоритмы восстановления несущей управляются пилотно. Для декодирования систем координат данных параметры передачи физического слоя, такие как схема модуляции, скорость кода и тип системы координат 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/Hz), используемую для генерирования фазы шума, приложенного к переданному сигналу. Эти шумовые маски взяты из ETSI TR 102 376-1 Раздел 4.3.2.1.3 Рисунок 12 [2].

Сгенерируйте DVB-S2X сигнал, искаженный искажениями RF

Чтобы создать 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. Применить временную синхронизацию символа с помощью детектора временных ошибок Гарднера с выходом, сгенерированным со скоростью символа. 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 настройки смотрите в 'Further Exploration Section' Сквозной симуляции DVB-S2 с ослаблениями RF и коррекциями о том, как сконфигурировать параметры синхронизации rxParams для других cfgDVBS2X и simParams настройки. Для схем более высокой модуляции, подобных 64 APSK и выше, эта таблица показывает типичное количество систем координат, требуемых для сходимости цикла временных параметров символа.

Приложение

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

  • HelperDVBS2XRxInputGenerate.m: Сгенерируйте DVB-S2X выборки формы волны, искаженные искажениями RF и структурой параметров для обработки приемника

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

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

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

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

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

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

  • HelperDVBS2XPLHeaderRecover.m: Демодулируйте и декодируйте заголовок PL, чтобы восстановить параметры передачи

  • HelperDVBS2NoiseVarEstimate.m: Оценка отклонения полученных данных от уровня шума

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

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

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

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

  • HelperDVBS2StreamRecover.m: Выполните проверку CRC заголовка 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 алгоритмы модема проекта и эффективности по типичным спутниковым каналам. International Journal of Satellite Communications and Networking 22, № 3 (2004): 281-318.

  6. Майкл Райс, цифровые коммуникации: подход в дискретном времени. Нью-Йорк: Prentice Hall, 2008.

См. также

Объекты

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте