主要内容

宽带模式下带射频损伤和校正的端到端DVB-S2X模拟

本例展示了如何使用时间切片测量具有宽带模式恒定编码和调制的单流数字视频广播卫星第二代扩展(DVB-S2X)链路的误码率(BER)和分组误码率(PER)。该实例详细描述了符号定时、帧和载波同步策略,重点介绍了如何在严重噪声条件下纠正射频前端损伤。单流信号添加射频前端损伤,然后将波形通过加性高斯白噪声(AWGN)通道。

介绍

宽带模式是DVB-S2/S2X标准中用于广播、专业和交互服务的高符号速率卫星载波的可选传输格式。此格式采用单一频率的宽频带卫星应答器(200-500 MHz),并使用DVB-S2/S2X标准(ETSI EN 302 307-2附件M)中定义的时间切片概念[1]。

多个业务在发送端以物理层帧(PL)的形式进行时间切片,按时间顺序进行传输。的独立输入流提供每个服务dvbs2xWaveformGenerator系统对象®和流的最大数量可能是8。每个服务都由一个时间切片号(TSN)标识,TSN作为PL报头的一部分传输。

在时间切片接收器中,用户选择并解码与所需服务相关的特定流。接收端根据报头中的TSN信息,对某些PL帧进行解码,丢弃其他PL帧。因此,FEC解码速度相当于常规DVB-S2应用程序的100或200 Mbps。这种方法大大降低了接收设备的复杂性,从而为Ka频段(26-40 GHz)上的高速数据链路等新应用创造了机会。接收方已经知道有关时间切片数的信息。

本例设计了DVB-S2X接收机在宽带模式下使用时间切片接收机的同步方面。该示例支持从QPSK到256APSK的所有调制方案。ETSI EN 302 307-2第6节表20a和表20c [1]总结了AWGN信道在不同调制方案和码率下的准无差错(QEF)性能要求。不支持极低信噪比(VL-SNR)物理层信号编码。

的独立输入流给出了4个服务dvbs2xWaveformGenerator系统对象和接收方恢复属于服务2的输入数据流,以演示时间切片特性。该图总结了示例工作流。

主要处理回路

方法处理每个服务的五个PL帧数据 E 年代 / N o 设置为15db,然后计算所需业务PL帧的BER和PER。对调制信号进行载波频偏、频率漂移、采样时钟偏置和相位噪声损伤,并在信号中添加AWGN。

在接收端,经过匹配滤波后,进行定时和载波恢复操作,恢复传输的数据。为了选择所需服务的PL帧,将对PL报头进行解码,并根据TSN值选择适当的帧进行解码。与TSN一起,物理层传输参数,如调制方案,码率和FEC帧类型,从PL报头恢复,以实现解调和解码。为了重新生成输入比特流,解码基带(BB)报头。

因为DVB-S2X标准支持分组和连续传输模式,所以BB帧既可以是用户分组的连接,也可以是比特流。回收BB头以确定传输模式。如果BB帧是用户数据包的串接,则返回每个数据包的CRC (packet cyclic redundancy check)状态,并将解码后的比特返回,然后测量PER和BER。如果BB帧是比特流,则只返回解码后的比特,然后测量误码率。

这些框图显示了同步和输入位恢复工作流程。

下载DVB-S2X LDPC校验矩阵数据集

这个例子加载了一个带有DVB-S2X LDPC奇偶矩阵的mat文件。如果mat -文件在MATLAB®路径中不可用,使用这些命令下载并解压缩mat -文件。

如果~ (“dvbs2xLDPCParityMatrices.mat”“文件”如果~ (“s2xLDPCParityMatrices.zip”“文件”) url =“https://ssd.mathworks.com/supportfiles/spc/satcom/DVB/s2xLDPCParityMatrices.zip”;websave (“s2xLDPCParityMatrices.zip”url);解压缩(“s2xLDPCParityMatrices.zip”);结束目录“s2xLDPCParityMatrices”);结束

DVB-S2X配置

指定cfgDVBS2X结构定义DVB-S2X传输配置参数。PLSDecimalCode129和131不支持,因为它们用于生成VL-SNR帧。只支持常规帧。集HasTimeSlicing真正的启用时间切片操作。

cfgDVBS2X。StreamFormat =“t”;cfgDVBS2X。HasTimeSlicing = true;cfgDVBS2X。NumInputStreams =4;cfgDVBS2X。PLSDecimalCode = 143;% 8psk 23/36cfgDVBS2X。DFL = 41128;%数据字段长度(以比特为单位)%码率23/36cfgDVBS2X。PLScramblingIndex =0;cfgDVBS2X。RolloffFactor = 0.35;cfgDVBS2X。SamplesPerSymbol = 2;

仿真参数

宽带应答器的DVB-S2X标准支持200至500 MHz的信道带宽。符号速率计算为B/(1+R),其中B是信道带宽,R是发射滤波器滚脱系数。

该表定义了用于产生应用于传输信号的相位噪声的相位噪声掩码(dBc/Hz)。这些噪声掩模取自ETSI EN 302 307-1附件M.3 [2]。

所考虑的峰值多普勒和频率漂移通常来自运动中的近地轨道(LEO)卫星。

simParams。年代erviceNumber = 2;%待处理的时间切片号simParams。年代ps = cfgDVBS2X.SamplesPerSymbol;每个符号的样本百分比simParams。numFrames = 5;%要处理的帧数simParams。chanBW = 200e6;%信道带宽(以赫兹为单位)rolloffFac = cfgDVBS2X.RolloffFactor;simParams。Fsymb = simParams。chanBW/(1 + rolloffFac);%符号速率,单位为符号/秒simParams。cfo = 0.02*simParams.Fsymb;%载波频率偏移(以赫兹为单位)%由于振荡器的不稳定性simParams。dopplerRate = 3e4;%多普勒速率,单位为赫兹/秒simParams。峰多普勒= 1e6;%峰值多普勒频移,单位为赫兹simParams。Sco = 10;%采样时钟偏移部分百万分率simParams。phNoiseLevel =“1”相位噪声级simParams。E年代NodB = 15%每个符号能量与噪声之比
simParams =带字段的结构:serviceNumber: 2 sps: 2 numFrames: 5 chanBW: 200000000 Fsymb: 1.4815e+08 cfo: 2.9630e+06 dopplerRate: 30000 peakDoppler: 1000000 sco: 10 phNoiseLevel: "Level-1" EsNodB: 15

产生DVB-S2X宽带波形失真与射频损害

若要创建DVB-S2X波形,请使用HelperDVBS2XWidebandRxInputGenerate的辅助函数。simParams而且cfgDVBS2X结构作为输入。该函数返回传输的数据位、传输和接收的波形、作为结构的物理层配置参数以及接收机处理结构。接收到的波形受到载波频率、频率漂移、采样时钟偏移和相位噪声的损害,然后通过AWGN信道。接收机处理参数结构,rxParams,包括参考先导字段、先导索引、计数器和缓冲区。绘制接收到的符号星座和发送和接收波形的频谱。

[data,txOut,rxIn,phyConfig,rxParams] = HelperDVBS2XWidebandRxInputGenerate(cfgDVBS2X,...simParams);显示物理层配置phyConfig
phyConfig =带字段的结构:FECFrame: {'normal' 'normal' 'normal' 'normal' 'normal'} ModulationScheme: {'8PSK' '8PSK' '8PSK'} LDPCCodeIdentifier: {'23/36' '23/36' '23/36' '23/36'}
接收信号星座图rxConst = com . constellation diagram (“标题”接收的数据的...“XLimits”[1],“YLimits”[1],...“ShowReferenceConstellation”假的,...“SamplesPerSymbol”, simParams.sps);rxConst (rxIn (1: rxParams.plFrameSize * simParams.sps))

发送和接收信号频谱可视化Fsamp = simParams.Fsymb*simParams.sps;specAn = dsp。简介(“SampleRate”Fsamp,...“ChannelNames”, {传输波形的接收波形的},...“AveragingMethod”“指数”“ShowLegend”,真正的);specAn ([txOut rxIn(1:长度(txOut))));

配置接收机参数

在接收端对接收到的数据进行匹配滤波,然后进行符号定时同步、帧同步和载波同步。符号计时估计器是非数据辅助的。符号定时补偿的首选环路带宽取决于 E 年代 / N o 设置。

帧同步使用PL报头和两个导标块。 E 年代 / N o 在决定帧同步精度方面起着至关重要的作用。对连续帧进行帧同步,以实现准确的检测。

对PL报头进行粗频率误差估计。精细的频率误差估计可以估计到输入符号率的3%的载波频率偏移。精细频率估计必须处理多个导频块,使剩余载波频偏减小到相位估计算法可接受的水平。相位估计算法可以处理高达输入符号率0.03%的剩余载频误差。

rxParams.symbSyncLoopBW= 1e-4;符号定时同步器环带宽%由符号速率归一化rxParams.numFramesForFineFreqLock= 3;%精细所需帧数%频率估计使用创建粗频同步系统对象helper对象freqSync = helpdvbs2xwidebandcoarsefrequencysynchronizer (“SampleRate”, simParams.Fsymb);使用创建帧同步系统对象helper对象帧同步= helperdvbs2xwideband帧同步器(...“PLScramblingIndex”, cfgDVBS2X.PLScramblingIndex);使用创建符号定时同步系统对象symbolsynchronizer对象符号同步器(“TimingErrorDetector”“加德纳(non-data-aided)”...“NormalizedLoopBandwidth”rxParams.symbSyncLoopBW,“DampingFactor”1 /√(2));使用创建匹配的过滤系统对象raisedcosinereceivefilter对象decFac = simParams.sps/2;rxFilter = com . raisedcosinereceivefilter (...“RolloffFactor”, 0.35,...“InputSamplesPerSymbol”simParams.sps,“DecimationFactor”, decFac);b = rxFilter.coeffs;rxFilter。增益= sum(b.分子);初始化错误计算参数[numFramesLost,pktsErr,bitsErr,pktsRec] = deal(0);初始化数据索引变量stIdx = 0;isLastFrame = false;symBuffer = [];plFrameSize = rxParams.plFrameSize;dataSize = rxParams.inputFrameSize;winLen = plFrameSize;rxParams。fineFreqCorrVal = 0 (rxParams.numFramesForFineFreqLock,1);pilotBlkLen = rxParams.pilotBlkLength;

定时和载波同步与数据恢复

为了同步接收到的数据,选择适当的流(服务)并恢复输入数据,按照以下步骤一次处理一帧失真的DVB-S2X波形样本。

  1. 应用匹配滤波,以每个符号两个样本的速率输出。

  2. 使用加德纳计时错误检测器应用符号计时同步,输出以符号速率生成。

  3. 应用帧同步来检测帧的开始。

  4. 估计和应用粗频偏校正。

  5. 估计和应用精细的频偏校正。

  6. 估计和补偿残余载频和相位噪声。

  7. 解调和解码PL报头。

  8. 根据TSN选择所需服务对应的PL帧。

  9. 解调和解码PL帧。

  10. 对BB报头进行CRC校验,如果校验通过,恢复报头参数。

  11. 从BB帧重新生成数据或包的输入流。

stIdx < length(rxIn)每次迭代使用一个DVB-S2X PL帧。endIdx = stIdx + plFrameSize*simParams.sps;%在最后一次迭代中,接收到的所有剩余样本%波形被使用。isLastFrame = endIdx > length(rxIn);endIdx(isLastFrame) = length(rxIn);rxData = rxIn(stIdx+1:endIdx);检索最后一个帧样本。如果isLastFrame resSampCnt = plFrameSize*rxParams。sps - length(rxData);最后一帧样品数量不足syncIn = [rxData;0 (resSampCnt 1)];其他的syncIn = rxData;结束执行匹配滤波并将信号降采样至2个样本%的象征。filtOut = rxFilter(syncIn);应用符号定时同步。symSyncOut = symSync(filtOut);应用帧同步syncIndex = frameSync(symSyncOut);rxParams。年代yncIndex = [rxParams.syncIndex;syncIndex];如果length(rxParams.syncIndex) >PL帧开始索引位于数据中间的某个位置%正在处理。从粗频率补偿开始%处理发生在PL帧。缓冲区是用来存储符号的%需要填充一个PL帧。stIdx1 = rxParams.syncIndex(1);endIdx1 = winLen+rxParams.syncIndex(2);cfoIn = symBuffer(stIdx1:endIdx1-1);根据帧长提取导频数numPilots = rxParams. posspilotblks (rxParams. posspilotblks)framesize == length(cfoIn));%应用粗频率同步。[粗freqsyncout,cEstFreq] = freqSync(cfoIn);根据数量提取飞行员指数和PL置乱飞行员。%飞行员百分比pilotInd = rxParams.pilotIndices(1:numPilots(1));pilotVal = rxParams.pilotValues(1:numPilots(1));numPilotBlks = numPilots(1)/pilotBlkLen;使用HelperDVBS2FineFreqEst估计精细频率误差helper函数。corrVal = HelperDVBS2FineFreqEst(coarseFreqSyncOut(pilotInd),numPilotBlks,...pilotVal 0 pilotBlkLen rxParams.NumLags);使用跨多个先导字段计算的相关值%多帧来计算精细频率误差估计。估计使用滑动窗口技术。fineFreqEst =角度(sum([rxParams.fineFreqCorrVal;corrVal]))/(pi*(rxparams . numslots));ind = (rxParams.frameCount-2)*plFrameSize:(rxParams.frameCount-1)*plFrameSize-1;phErr = exp(-1j*2*pi*fineFreqEst*ind).';freqCompOut =粗freqsyncout .*phErr(:);phErrEst = HelperDVBS2PhaseEst(freqCompOut(pilotInd),...pilotVal, 0);phaseCompOut = helperdvbs2phasecompout (freqCompOut,...问题,pilotInd 0 2);使用HelperDVBS2PLHeaderRecover解码PL报头helper函数。帧的开始(SOF)是26个符号,这些符号被丢弃头解码前%。SOF符号仅用于帧同步。[plsDecCode, timeSliceNum phyParams] =...HelperDVBS2XWidebandPLHeaderRecover (phaseCompOut (27:180));验证已解码的PL报头。如果plsDecCode ~ = cfgDVBS2X。PLSDecimalCode流(“% s \ n”'PL头解码失败。PLS代码被错误解码'其他的如果timeSliceNum == simParams.serviceNumber通过使用估计噪声方差helper函数。nVar = helperdvbs2noisevareestimate (phaseCompOut,pilotInd,...pilotVal rxParams.normFlag);使用helperdvbs2xbbframerrecover恢复BB帧helper函数。180 PL头符号被丢弃。rxBBFrame = HelperDVBS2XBBFrameRecover(phaseCompOut(181:end),phyParams,...rxParams.plScramblingIndex numPilotBlks,据nVar、假);使用恢复输入比特流% HelperDVBS2StreamRecover辅助功能。如果strcmpi (cfgDVBS2X。StreamFormat,“GS”) && ~rxParams。推高[decBits,isFrameLost] = HelperDVBS2StreamRecover(rxBBFrame,true);如果~isFrameLost && length(decBits) ~= dataSize(timeSliceNum) isFrameLost = true;结束其他的[decBits,isFrameLost,pktCRC] = HelperDVBS2StreamRecover(rxBBFrame,true);如果~isFrameLost && length(decBits) ~= dataSize(timeSliceNum) isFrameLost = true;pktCRC = 0 (0,1,“逻辑”);结束计算TS或GS分组模式的PER。基于报文CRC状态的错误报文数%pktsErr = pktsErr + number (pktCRC) - sum(pktCRC);从基带帧恢复的包数%pktsRec = pktsRec +数字(pktCRC);结束如果~isFrameLost ts = sprintf(' % s ''BB头解码已通过。');其他的Ts = sprintf(' % s ''BB报头解码失败。');结束计算丢失的帧数。CRC故障%基带报头被认为是帧丢失。numFramesLost = isFrameLost + numFramesLost;frameIdx = ceil((rxParams.frameCount-1)/cfgDVBS2X.NumInputStreams);流('%s(丢失帧数= %1d,服务%d,帧数= %d)\n'...ts、numFramesLost timeSliceNum frameIdx)计算出错位。如果~isFrameLost dataInd = (frameIdx-1)*dataSize(timeSliceNum)+1:frameIdx*dataSize(timeSliceNum);errs = sum(data{timeSliceNum}(dataInd) ~= decBits);bitsErr = bitsErr + errs;结束结束结束symBuffer = symBuffer(endIdx1+1-rxParams.syncIndex(2):end);winLen = length(symBuffer)rxParams.fineFreqCorrVal(1:end-1) = rxParams.fineFreqCorrVal(2:end);rxParams.fineFreqCorrVal(end) = corrVal;rxParams。年代yncIndex = rxParams.syncIndex(end);结束symBuffer = [symBuffer;symSyncOut];% #好< AGROW >stIdx = endIdx;rxParams.frameCount = rxParams.frameCount + 1;结束
BB报头解码失败。(丢失帧数= 1,服务2,帧数= 1)BB报头解码通过。(丢失帧数= 1,服务2,帧数= 2)BB报头解码通过。(丢失帧数= 1,服务2,帧数= 3)BB报头解码通过。(丢失帧数= 1,服务2,帧数= 4)BB报头解码通过。(丢失帧数= 1,服务2,帧数= 5)

可视化和错误日志

绘制同步数据的星座并计算误码率和PER。

同步数据星座图syncConst = com . constellation diagram (“标题”“同步数据”...“XLimits”(-1.7 - 1.7),“YLimits”(-1.7 - 1.7),...“ShowReferenceConstellation”、假);syncConst (phaseCompOut)

%错误指标显示%用于GS连续流如果strcmpi (cfgDVBS2X。StreamFormat,“GS”) && ~rxParams。推高如果(simParams。numFrames == numFramesLost) fprintf(“所有的帧都丢失了。没有从BB帧检索比特。”其他的numFramesRec = simParams。numFrames - numFramesLost;ber = bitsErr/(numFramesRec*dataSize(timeSliceNum));流('BER: %1.2e\n', ber)结束其他的%用于GS和TS分组流如果pktsRec == 0 fprintf(“所有的帧都丢失了。没有数据包从BB帧检索。”其他的如果strcmpi (cfgDVBS2X。StreamFormat,“t”) pktLen = 1504;其他的pktLen = cfgDVBS2X.UPL;UP长度,包括同步字节结束ber = bitsErr/(pktsRec*pktLen);per = pktsErr/pktsRec;流(“每:% 1.2 e \ n”,每)流(“方方面面:% 1.2 e \ n”, ber)结束结束
每:0.00 e + 00
数量:0.00 e + 00

进一步的探索

的部分字段,本节将介绍如何设置rxParams以使该示例适用于低信噪比条件。

配置符号定时同步参数

因为操作 E 年代 / N o DVB-S2X标准的取值范围很低,必须用小值进行rxParams.symbSyncLoopBW参数用于正确的符号同步。如果符号计时循环不收敛,请尝试减小rxParams.symbSyncLoopBW参数。达到收敛的定时回路,比rxParams.symbSyncLoopBW / simParams.sps必须大于1e-5。

配置运营商同步参数

HelperDVBS2PhaseEst辅助函数只有在剩余载频偏置(CFO)小于0.0003倍符号速率时才能准确地估计相位偏置。使用第二个输出参数cEstFreq一步的召唤freqSync并进行了精细的频偏误差估计fineFreqEst来计算CFO的整体估算。

% normCFOEst = cEstFreq/simParams. %Fsymb + fineFreqEst;% actCFO = (simParams.)cfo + simParams.peakDoppler)/simParams.Fsymb;% residualErr = abs(actCFO - normCFOEst);

增加了rxParams.numFramesForFineFreqLock值提高精度的精细频率误差估计如果residualErr不低于期望的结果。

附录

下面的例子使用了这些helper函数:

参考书目

  1. ETSI标准EN 302 307-2 V1.1.1(2015-11)。数字视频广播;用于广播、交互业务、新闻采集和其他宽带卫星应用的第二代帧结构、信道编码和调制系统第二部分:DVB-S2扩展(DVB-S2X)

  2. ETSI标准EN 302 307-1 V1.4.1(2014-11)。数字视频广播;用于广播、互动业务、新闻采集和其他宽带卫星应用的第二代帧结构、信道编码和调制系统(DVB-S2)

  3. ETSI标准TR 102 376-1 V1.2.1(2015-11)。数字视频广播;第二代广播、互动服务、新闻采集及其他宽频卫星应用系统(DVB-S2)实施指引

  4. P. Kim和D. Oh,“基于时间切片的DVB-S2帧检测”,第18届IEEE消费电子国际研讨会(ISCE 2014), 2014, pp. 1-2, doi: 10.1109/ISCE.2014.6884410。

  5. 典型卫星信道上DVB-S2调制解调器算法设计与性能研究。国际卫星通信与网络杂志,第22卷,no。3, 2004年5月,第281-318页。

  6. 迈克尔大米,数字通信:离散时间方法.纽约:普伦蒂斯厅,2008年。

另请参阅

对象

相关的话题

Baidu
map