В этом примере показано, как измерить частоту ошибок по битам (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] обобщает Квазибезошибочное (QEF) требование к производительности по каналу AWGN для различных схем модуляции и уровней кода. Работа область значений для различных режимов передачи может быть рассмотрена как +2 или-2 дБ от укажите, где эффективность QEF наблюдается. Поскольку работа область значений является низкой, поставщик услуг и стратегии временной синхронизации символа бросают вызов проблемам проектирования.
Эта схема обобщает рабочий процесс в качестве примера.
Пример обрабатывает 25 кадров физического уровня (PL) данных с установите на 20 дБ, и затем вычислите BER и PER. Смещение несущей частоты, производя смещение часов и нарушения шума фазы применяется к модулируемому сигналу, и AWGN добавляется к сигналу.
В приемнике, после согласованной фильтрации, синхронизация и операции восстановления поставщика услуг запущены, чтобы восстановить передаваемые данные. Чтобы извлечь системы координат PL, искаженная форма волны обрабатывается посредством различной синхронизации и стратегий восстановления поставщика услуг извлечь системы координат PL. Алгоритмы восстановления поставщика услуг помогаются пилотами. Чтобы декодировать системы координат данных, параметры передачи физического уровня, такие как схема модуляции, уровень кода и тип системы координат FEC, восстанавливаются с заголовка PL. Чтобы регенерировать входной поток битов, основная полоса (BB), заголовок декодируется.
Поскольку стандарт DVB-S2 поддерживает packetized и непрерывные режимы передачи, система координат 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 страниц в минуту смещения часов выборки.
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
Эта таблица задает маску шума фазы (дБн/Гц), используемый, чтобы сгенерировать шум фазы, применился к переданному сигналу.
Чтобы создать форму волны 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), уменьшает смещение частоты к уровню, который может отследить прекрасное средство оценки частоты. Предпочтительная пропускная способность цикла для синхронизации символа и крупной компенсации частоты зависит от установка.
Блок 36 пилотов повторяется каждые 1 476 символов. Крупная оценка погрешности частоты использует 34 из 36 экспериментальных символов. Отношение используемых пилотов на блок (34) и экспериментальную периодичность (1476) 0.023. Используя 0,023 значения, когда предпочтен масштабный коэффициент для крупной пропускной способности цикла синхронизатора частоты.
Когда вы уменьшаетесь , можно уменьшать пропускную способность цикла, чтобы отфильтровать больше шума во время приобретения. Количество систем координат, требуемых для синхронизатора символа и крупного FLL, чтобы сходиться, зависит от установки пропускной способности цикла.
Синхронизация системы координат использует заголовок PL. Поскольку синхронизация поставщика услуг помогается данными, синхронизация системы координат должна обнаружить запуск системы координат точно. играет важную роль в определении точности синхронизации системы координат. Когда модулируемые системы координат QPSK восстанавливаются в значения ниже 3 дБ, синхронизация системы координат должна быть выполнена на нескольких системах координат для точного обнаружения.
Прекрасная оценка частоты может отследить смещения несущей частоты до 4% уровня вводимого символа. Прекрасная оценка частоты должна обработать несколько экспериментальных блоков для остаточного смещения несущей частоты, которое будет уменьшаться до уровней, приемлемых для алгоритма оценки фазы. Алгоритм оценки фазы может обработать остаточные ошибки несущей частоты меньше чем 0,02% уровня вводимого символа. Прекрасная компенсация фазы только требуется для схем модуляции APSK в присутствии значительного шума фазы.
Эти настройки присвоены в rxParams
структура для обработки синхронизации. Для получения дополнительной информации о том, как установить эти параметры для низко значения, смотрите раздел Further Exploration.
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 обрабатываются один кадр за один раз путем выполнения этих шагов.
Примените согласованную фильтрацию, выводящую по курсу двух выборок на символ.
Примените временную синхронизацию символа с помощью Гарднера, синхронизирующего детектор ошибок с выходом, сгенерированным на уровне символа. 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
Работа область значений стандарта 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] структурирует на основе установка. Если выход не как ожидалось, увеличьте число систем координат, требуемых для синхронизации системы координат.
Попытайтесь запустить симуляцию с помощью крупного 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). После крупной компенсации частоты просмотрите график и остаточное значение 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);
Повторите процесс симуляции и наблюдайте остаточное значение CFO (resFineCFO
) по каждой системе координат. Если прекрасное средство оценки частоты не уменьшает остаточную ошибку несущей частоты приблизительно до 0,01% уровня символа, попытайтесь увеличить rxParams.fineFreqLock
значение свойства.
Когда остаточное значение CFO (resFineCFO
) уменьшается до приблизительно 0,0001 или 0.0002, установите rxParams.frameCount+1
к rxParams.coarseFreqLock
значение.
Прекрасный PLL компенсации фазы используется только для 16 APSK и 32 схем модуляции APSK с существенным шумом фазы.
После совершенствования набора параметров синхронизации в rxParams
структура, выполните симуляцию BER для обновленной настройки.
Пример использует эти функции помощника:
HelperDVBS2RxInputGenerate.m: Сгенерируйте выборки формы волны DVB-S2, искаженные нарушениями RF и структурой параметров для обработки приемника
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 на основе параметров заголовка
EN 302 307-1 V1.4.1 Стандарта ETSI (2014-11). Цифровое телевидение (DVB); Структура Структурирования Второго поколения, Кодирование Канала и Системы Модуляции для Широковещательной передачи, Interactive Services, Сбора Новостей и других Широкополосных Спутниковых Приложений (DVB-S2).
TR 102 376-1 V1.2.1 Стандарта ETSI (2015-11). Цифровое телевидение (DVB); Инструкции по Реализации для Системы Второго поколения для Широковещательной передачи, Interactive Services, Сбора Новостей и других Широкополосных Спутниковых Приложений (DVB-S2).
Mengali, Умберто и Альдо Н.Д'Андрея. Методы синхронизации для цифровых приемников. Нью-Йорк: нажатие пленума, 1997.
E. Казино, Р. Де Годанзи и Альберто Джинези. "Модемный проект алгоритмов DVB‐S2 и эффективность по типичным спутниковым каналам". Международный журнал Спутниковой связи и Организации сети 22, № 3 (2004): 281-318.
Майкл Райс, цифровая связь: подход дискретного времени. Нью-Йорк: Prentice Hall, 2008.