В этом примере показано, как измерить частоту ошибок в битах (BER) и частоту ошибок в пакетах (PER) одиночной линии связи второго поколения цифрового видеовещания (DVB-S2), которая имеет постоянное кодирование и модуляцию. В этом примере подробно описаны стратегии синхронизации символов и несущей, в которых подчеркивается, как оценивать нарушения RF-интерфейса в условиях сильного шума. Однопотоковый сигнал добавляет нарушения RF-интерфейса и затем пропускает сигнал через аддитивный канал белого гауссова шума (AWGN).
DVB-S2 приемники подвергаются большим ошибкам несущей частоты порядка 20% от скорости входного символа и существенному фазовому шуму. Использование мощных механизмов прямой коррекции ошибок (FEC), таких как Bose-Chaudhuri-Hocquenghem (BCH) и коды контроля четности низкой плотности (LDPC), заставило систему DVB-S2 работать при очень низких значениях отношения спектральной плотности мощности к шуму () на уровне, близком к пределу Шеннона.
ETSI EN 302 307-1 Раздел 6 Таблица 13 [1] суммирует требования к характеристикам Quasi-Error-Free (QEF) по каналу AWGN для различных схем модуляции и кодовых скоростей. Рабочий диапазон Es/No для различных режимов передачи может рассматриваться как + 2 или -2 дБ от точки Es/No, где наблюдаются характеристики QEF. Поскольку рабочий диапазон Es/No низок, стратегии синхронизации временной синхронизации несущих и символов являются сложными проблемами проектирования.
На этой схеме представлен пример рабочего процесса.

Пример обрабатывает 25 кадров физического уровня (PL) данных с Es/No, установленным в 20 дБ, и затем вычисляет BER и PER. Смещение несущей частоты, смещение тактовой частоты дискретизации и ухудшение фазового шума применяются к модулированному сигналу, и AWGN добавляется к сигналу.
В приемнике после согласованной фильтрации выполняются операции синхронизации и восстановления несущей для восстановления переданных данных. Для извлечения кадров PL искаженная форма сигнала обрабатывается посредством различных стратегий синхронизации и восстановления несущей для извлечения кадров PL. Алгоритмы восстановления несущей управляются пилотом. Для декодирования кадров данных параметры передачи физического уровня, такие как схема модуляции, кодовая скорость и тип кадра FEC, восстанавливаются из заголовка PL. Для регенерации входного битового потока декодируется заголовок основной полосы частот (BB).
Поскольку стандарт DVB-S2 поддерживает пакетированные и непрерывные режимы передачи, BB-кадр может быть либо конкатенацией пакетов пользователя, либо потоком битов. BB-заголовок восстанавливается для определения режима передачи. Если BB-кадр является конкатенацией пользовательских пакетов, то состояние проверки циклическим избыточным кодом (CRC) каждого пакета возвращается вместе с декодированными битами, и затем измеряются PER и BER.
На этих блок-схемах показаны рабочие процессы синхронизации и восстановления входных битов.


В этом примере загружается MAT-файл с DVB-S2 матрицами четности 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
Укажите cfgDVBS2 структура для определения параметров конфигурации передачи DVB-S2. ScalingMethod свойство применяется, когда MODCOD находится в диапазоне [18, 28] (то есть, когда схема модуляции только APSK). UPL применимо при установке StreamFormat комуGS".
cfgDVBS2.StreamFormat = "TS"; cfgDVBS2.FECFrame = "normal"; cfgDVBS2.MODCOD = 18; % 16APSK 2/3 cfgDVBS2.DFL = 42960; cfgDVBS2.ScalingMethod = "Unit average power"; cfgDVBS2.RolloffFactor = 0.35; cfgDVBS2.HasPilots = true; cfgDVBS2.SamplesPerSymbol = 2
cfgDVBS2 = struct with fields:
StreamFormat: "TS"
FECFrame: "normal"
MODCOD: 18
DFL: 42960
ScalingMethod: "Unit average power"
RolloffFactor: 0.3500
HasPilots: 1
SamplesPerSymbol: 2
Стандарт DVB-S2 поддерживает гибкие полосы пропускания каналов. Используйте типичную полосу пропускания канала, например 36 МГц. Полоса пропускания канала может изменяться. Алгоритм грубой частотной синхронизации, реализованный в этом примере, может отслеживать смещения несущей частоты до 20% от скорости входного символа. Скорость передачи символов вычисляется как B/( 1 + R), где B - ширина полосы пропускания канала, а R - коэффициент свертывания фильтра передачи. Алгоритмы, реализованные в этом примере, могут корректировать смещение тактового сигнала выборки до 10 ppm.
simParams.sps = cfgDVBS2.SamplesPerSymbol; % Samples per symbol simParams.numFrames = 25; % Number of frames to be processed simParams.chanBW = 36e6; % Channel bandwidth in Hertz simParams.cfo = 3e6; % Carrier frequency offset in Hertz simParams.sco = 5; % Sampling clock offset in parts per million simParams.phNoiseLevel ="Low"; % Phase noise level provided as 'Low', 'Medium', or 'High' simParams.EsNodB = 20; % Energy per symbol to noise ratio in decibels
Эта таблица определяет маску фазового шума (dBc/Гц), используемую для генерации фазового шума, применяемого к передаваемому сигналу.

Для создания DVB-S2 формы сигнала используйте HelperDVBS2RxInputGenerate вспомогательная функция с помощью simParams и cfgDVBS2 структуры в качестве входных данных. Функция возвращает сигнал данных, переданные и принятые формы сигнала и структуру обработки приемника. Принятый сигнал ухудшается с помощью несущей частоты, временных фазовых сдвигов и фазового шума и затем проходит через канал AWGN. Структура параметров обработки приемника, rxParams, включает в себя опорные поля пилот-сигнала, индексы пилот-сигнала, счетчики и буферы. Постройте график совокупности принятых символов и спектра переданных и принятых сигналов.
[data,txOut,rxIn,rxParams] = HelperDVBS2RxInputGenerate(cfgDVBS2,simParams); % 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 + cfgDVBS2.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 в качестве коэффициента масштабирования для полосы пропускания контура синхронизатора грубой частоты является предпочтительным.
При уменьшении можно уменьшить полосу пропускания шлейфа для фильтрации большего количества шумов во время сбора данных. Количество кадров, необходимое для схождения синхронизатора символов и грубого FLL, зависит от настройки полосы пропускания контура.
При синхронизации кадров используется заголовок PL. Поскольку синхронизация несущей осуществляется с помощью данных, кадровая синхронизация должна точно обнаруживать начало кадра. играет решающую роль в определении точности кадровой синхронизации. Когда модулированные кадры QPSK восстанавливаются при значениях Es/Novalues ниже 3 дБ, синхронизация кадров должна выполняться на нескольких кадрах для точного обнаружения.
Точная оценка частоты может отслеживать смещения несущей частоты до 4% от входной скорости передачи символов. Тонкая оценка частоты должна обрабатывать множество контрольных блоков для того, чтобы остаточный сдвиг несущей частоты был уменьшен до уровней, приемлемых для алгоритма фазовой оценки. Алгоритм оценки фазы может обрабатывать ошибки остаточной несущей частоты менее 0,02% от скорости входного символа. Тонкая фазовая компенсация требуется только для схем модуляции APSK при наличии значительного фазового шума.
Эти настройки назначены в 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 = 6; % Number of frames required for symbol timing error convergence rxParams.frameSyncLock = 1; % Number of frames required for frame synchronization rxParams.coarseFreqLock = 3; % Number of frames required for coarse frequency acquisition rxParams.fineFreqLock = 6; % Number of frames required for fine frequency estimation rxParams.hasFinePhaseCompensation = false; % Flag to indicate whether fine phase compensation is used rxParams.finePhaseSyncLoopBW = 3.5e-4; % Fine phase compensation loop bandwidth normalized by symbol rate % 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); % Create fine phase compensation System object by using % HelperDVBS2FinePhaseCompensator helper object. Fine phase % compensation is only required for 16 and 32 APSK modulated frames if cfgDVBS2.MODCOD >= 18 && rxParams.hasFinePhaseCompensation finePhaseSync = HelperDVBS2FinePhaseCompensator( ... 'DataFrameSize',rxParams.xFecFrameSize, ... 'NormalizedLoopBandwidth',rxParams.finePhaseSyncLoopBW); end normFlag = cfgDVBS2.MODCOD >= 18 && strcmpi(cfgDVBS2.ScalingMethod,'Outer radius as 1'); % 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-S2 выборки формы сигнала обрабатываются по одному кадру за раз, следуя этим шагам.
Примените согласованную фильтрацию, выводя со скоростью две выборки на символ.
Примените синхронизацию синхронизации символов с помощью детектора ошибок синхронизации Гарднера с выходом, генерируемым на символьной скорости. Gardner TED не поддерживает передачу данных, поэтому она выполняется до синхронизации несущей.
Применение кадровой синхронизации для определения начала кадра и определения положения пилота.
Оценка и применение грубой коррекции смещения частоты.
Оценка и применение точной коррекции смещения частоты.
Оценка и компенсация остаточной несущей частоты и фазового шума.
Декодирование заголовка PL и вычисление параметров передачи.
Демодуляция и декодирование кадров PL.
Выполните проверку CRC для заголовка BB, если проверка пройдет успешно, восстановите параметры заголовка.
Регенерация входного потока данных или пакетов из кадров BB.
while stIdx < length(rxIn) % Use one DVB-S2 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.numPilots, ... 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 coarsePhaseCompOut = HelperDVBS2PhaseCompensate(rxParams.ffBuffer, ... rxParams.pilotEst,phEstRes(2),rxParams.pilotInd); % MODCOD >= 18 corresponds to APSK modulation schemes if cfgDVBS2.MODCOD >= 18 && rxParams.hasFinePhaseCompensation phaseCompOut = finePhaseSync(coarsePhaseCompOut); else phaseCompOut = coarsePhaseCompOut; end 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; coarsePhaseCompOut1 = HelperDVBS2PhaseCompensate(rxParams.ffBuffer, ... rxParams.pilotEst,estEndPh,rxParams.pilotInd); % MODCOD >= 18 corresponds to APSK modulation schemes if cfgDVBS2.MODCOD >= 18 && rxParams.hasFinePhaseCompensation phaseCompOut1 = finePhaseSync(coarsePhaseCompOut1); else phaseCompOut1 = coarsePhaseCompOut1; end 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 HelperDVBS2PLHeaderRecover helper % function. Start of frame (SOF) is 26 symbols, which are discarded % before header decoding. They are only required for frame % synchronization. rxPLSCode = syncOut(27:90); [M,R,fecFrame,pilotStat] = HelperDVBS2PLHeaderRecover(rxPLSCode); xFECFrameLen = fecFrame/log2(M); % Validate the decoded PL header. if M ~= rxParams.modOrder || R ~= rxParams.codeRate || ... fecFrame ~= rxParams.cwLen || ~pilotStat 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,normFlag); % The data begins at symbol 91 (after the header symbols). rxDataFrame = rxFrame(91:end); % Recover the BB frame. rxBBFrame = satcom.internal.dvbs.s2BBFrameRecover(rxDataFrame,M,R, ... fecFrame,pilotStat,nVar,false); % Recover the input bit stream by using % HelperDVBS2StreamRecover helper function. if strcmpi(cfgDVBS2.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)
Постройте график совокупности синхронизированных данных и вычислите BER и PER.
% Synchronized data constellation plot syncConst = comm.ConstellationDiagram('Title','Synchronized data', ... 'XLimits',[-2 2],'YLimits',[-2 2], ... 'ShowReferenceConstellation',false); syncConst(syncOut)

% Error metrics display % For GS continuous streams if strcmpi(cfgDVBS2.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(cfgDVBS2.StreamFormat,'TS') pktLen = 1504; else pktLen = cfgDVBS2.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
Рабочий диапазон Es/No стандарта DVB-S2, который является очень низким, требует, чтобы нормализованная полоса пропускания контура синхронизатора символов и грубый FLL были очень малы для точной оценки. Эти параметры устанавливаются через rxParams.symbSyncLoopBW и rxParams.carrSyncLoopBW.
Попробуйте запустить моделирование с помощью синхронизатора синхронизации символов, настроенного с нормализованной полосой пропускания цикла 1e-4. С полосами пропускания контура на этом уровне эта таблица показывает типичное количество кадров, необходимых для сходимости контура синхронизации символа для конкретных схем модуляции и 'normal' Кадры FEC.

Для 'short«Кадры FEC, количество кадров, используемых для синхронизации символов, втрое превышает количество, необходимое для»normal'Кадры FEC. Для достижения сходимости контура синхронизации коэффициент rxParams.symbSyncLoopBW/simParams.sps должно быть больше 1e-5. Если цикл синхронизации символов не сходится, попробуйте увеличить rxParams.carrSyncLoopBW .
Выберите rxParams.symbSyncLock значение из таблицы, представленной в разделе Configure Symbol Timing Synchronization Parameters. Набор rxParams.frameSyncLock как значение в диапазоне [5, 15] кадров на основе настройки Es/No. Если выходные данные не соответствуют ожиданиям, увеличьте количество кадров, необходимых для синхронизации кадров.
Попробуйте запустить моделирование, используя грубый FLL, настроенный с нормализованной полосой пропускания контура 1e-4 * 0,023 для сигналов PSK и 4e-4 * 0,023 для сигналов APSK.
При установке FECFrame свойство для 'normal', установите rxParams.coarseFreqLock свойство до 20. При установке FECFrame свойство для 'short', установите rxParams.coarseFreqLock собственность до 80. Набор simParams.EsNodB до наименьшего для выбранной схемы модуляции из ETSI EN 302 307-1, раздел 6 [1]. Для HelperDVBS2TimeFreqSynchronizer установите его свойства, как описано в предыдущих разделах, на основе выбранной конфигурации.
% timeFreqSync = HelperDVBS2TimeFreqSynchronizer( ... % 'CarrFreqLoopBW',rxParams.carrSyncLoopBW, ... % 'SymbTimeLoopBW',rxParams.symbSyncLoopBW, ... % 'SamplesPerSymbol',simParams.sps, ... % 'DataFrameSize',rxParams.xFecFrameSize, ... % 'SymbSyncTransitFrames',rxParams.symbSyncLock, ... % 'FrameSyncAveragingFrames',rxParams.frameSyncLock)
Замените код в секции синхронизации символов и синхронизации грубой частоты на эти строки кода. Выполните моделирование для различных значений смещения несущей частоты (CFO). После грубой компенсации частоты просмотрите график и остаточное значение финансового директора (resCoarseCFO) над каждым кадром для наблюдения за производительностью алгоритма оценки грубой частоты. В идеале грубая компенсация частоты уменьшает погрешность до 2% от скорости передачи символов. Если грубая компенсация частоты не уменьшается до менее 3% от скорости передачи символов, попробуйте уменьшить полосу пропускания контура и увеличить rxParams.coarseFreqLock. Поскольку ошибка частоты оценивается с использованием символов пилот-сигнала, убедитесь, что синхронизатор кадров правильно зафиксирован в начале кадра.
% [out,index,phEst] = timeFreqSync(rxData,false); % Frequency offset estimate normalized by symbol rate % freqOffEst = diff(phEst(1:simParams.sps:end))/(2*pi); % plot(freqOffEst) % actFreqOff = simParams.cfo/(simParams.chanBW/(1 + cfgDVBS2.RolloffFactor)); % resCoarseCFO = abs(actFreqOff-freqOffEst(end));
При значении смещения остаточной несущей частоты (resCoarseCFO) уменьшается приблизительно до 0,02 или 0,03, установите rxParams.frameCount в rxParams.coarseFreqLock значение.
Для 'normal' Кадры FEC, установите rxParams.fineFreqLock значение 10. Для 'short' Кадры FEC, установите rxParams.fineFreqLock значение 40. Замените код в разделе оценки ошибок точной частоты на этот код.
% rxParams.fineFreqCorrVal = HelperDVBS2FineFreqEst(fineFreqIn(rxParams.pilotInd), ... % rxParams.numPilots,rxParams.refPilots,rxParams.fineFreqCorrVal); % fineFreqEst = angle(rxParams.fineFreqCorrVal)/(pi*(19)); % resFineCFO = abs(actFreqOff-freqOffEst(end)-fineFreqEst);
Повторите процесс моделирования и проверьте остаточную стоимость финансового директора (resFineCFO) над каждым кадром. Если блок точной оценки частоты не уменьшает остаточную ошибку несущей частоты приблизительно до 0,01% от скорости передачи символов, попробуйте увеличить rxParams.fineFreqLock значение свойства.
При остаточной стоимости финансового директора (resFineCFO) уменьшается приблизительно до 0,0001 или 0,0002, установите rxParams.frameCount+1 в rxParams.coarseFreqLock значение.
Тонкая фазовая компенсация PLL используется только для 16 схем модуляции APSK и 32 APSK с существенным фазовым шумом.
После уточнения параметров синхронизации, установленных в rxParams выполните моделирование BER для обновленной конфигурации.
В примере используются следующие вспомогательные функции:
HelperDVBS2RxInputGenerate.m: Формирование отсчетов формы сигнала DVB-S2, искаженных с нарушением РЧ и структурой параметров для обработки приемником
HelperDVBS2PhaseNoise.m: Произведите образцы шума фазы для различных масок шума фазы DVB-S2 и примените его к входному сигналу
HelperDVBS2TimeFreqSynchronizer.m: Выполнение согласованной фильтрации, синхронизации символов, кадровой синхронизации и грубой оценки и коррекции частоты
HelperDVBS2FrameSync.m: Выполните синхронизацию кадров и определите начало кадра
HelperDVBS2FineFreqEst.m: Оценка точного смещения частоты
HelperDVBS2PhaseEst.m: Оценка смещения фазы несущей
HelperDVBS2PhaseCompensate.m: Выполнить компенсацию фазы несущей
HelperDVBS2FinePhaseCompensator.m: Выполнение точного отслеживания и компенсации ошибок фазы несущей для схем модуляции APSK
HelperDVBS2PLHeaderRecover.m: Демодуляция и декодирование заголовка PL для восстановления параметров передачи
HelperDVBS2NoiseVarEstimate.m Оценка дисперсии шума принятых данных
HelperDVBS2StreamRecover.m: Проверка CRC заголовка BB и восстановление входного потока из кадра BB на основе параметров заголовка
Стандарт ETSI EN 302 307-1 V1.4.1 (2014-11). цифровое видеовещание (DVB); Структура кадров второго поколения, системы кодирования и модуляции каналов для вещания, интерактивные услуги, сбор новостей и другие широкополосные спутниковые приложения (DVB-S2).
Стандарт ETSI TR 102 376-1 V1.2.1 (2015-11). цифровое видеовещание (DVB); Руководство по внедрению системы второго поколения для вещания, интерактивных услуг, сбора новостей и других широкополосных спутниковых приложений (DVB-S2).
Менгали, Умберто и Альдо Н. Д'Андреа. Методы синхронизации для цифровых приемников. Нью-Йорк: Пленум Press,1997.
Э. Казини, Р. Де Гауденци и Альберто Гинези. «DVB‐S2 разработка модемных алгоритмов и их производительность в обычных спутниковых каналах». Международный журнал спутниковой связи и сетей 22, № 3 (2004 год): 281-318.
Майкл Райс, Digital Communications: дискретно-временной подход. Нью-Йорк: Прентис Холл, 2008.