主要内容

端到端DVB-S2X模拟与常规帧的射频损伤和校正

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

介绍

DVB-S2X标准是DVB-S2规范的扩展,增强了对核心DVB-S2应用的支持,并提高了卫星链路的整体效率。万博1manbetxDVB-S2X标准支持以下附加功能:万博1manbetx

  • 更细粒度的调制和码率

  • 更小的过滤器滚出选项,以更好地利用带宽

  • 为线性和非线性信道优化的星座

  • 为关键的同信道干扰场景提供更多的置乱选项

DVB-S2X可以满足各种不同的目标应用,并且接收机会根据所使用的应用受到不同类型和级别的射频损伤。本例设计了用于核心DVB-S2应用程序的DVB-S2X接收机的同步方面。该示例支持更新的码率、更万博1manbetx高的调制方案(如64、128和256 APSK)以及更小的滤波器滚转选项。

ETSI EN 302 307-2第6节表20a和表20c[1]总结了AWGN信道在不同调制方案和码率下的准无差错(QEF)性能要求。操作 E 年代 / N o 对于不同的传输模式,范围可考虑为+3或-2 dB E 年代 / N o 观察QEF表现的点。因为操作 E 年代 / N o 距离低,载波和符号定时同步策略是具有挑战性的设计问题。

该图总结了示例工作流。

dvbs2xWorkFlow.png

主要处理回路

实例处理30个物理层(PL)帧的数据 E 年代 / N o 设置为25db,然后计算误码率和PER。对调制信号进行载波频偏、采样时钟偏置和相位噪声损伤,并在信号中添加AWGN。

在接收端,经过匹配滤波、定时和载波恢复操作,恢复传输的数据。为了提取PL帧,采用多种时序和载波恢复策略对失真波形进行处理,其中载波恢复算法是导频辅助的。为了解码数据帧,从PL报头中恢复物理层传输参数,如调制方案、码率和FEC帧类型。为了重新生成输入比特流,基带(BB)报头被解码。

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

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

dvbs2xCompensationBlockDiagram.png

dvbs2xBitRecovery.png

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

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

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

导航辅助模式下DVB-S2X配置

指定cfgDVBS2X结构定义DVB-S2X传输配置参数。PLSDecimalCode129和131不支持,因为它们用于生成V万博1manbetxL-SNR帧。只支持常规帧。万博1manbetx

cfgDVBS2X。StreamFormat =“t”;cfgDVBS2X。PLSDecimalCode = 191;7/9带飞行员cfgDVBS2X。DFL = 50128;cfgDVBS2X。ScalingMethod =“单位平均功率”;cfgDVBS2X。RolloffFactor = 0.35;cfgDVBS2X。SamplesPerSymbol = 2
cfgDVBS2X =带字段的结构:StreamFormat:“TS”PLSDecimalCode: 191 DFL: 50128 ScalingMethod:“单位平均功率”RolloffFactor: 0.3500 SamplesPerSymbol: 2

仿真参数

DVB-S2X标准支持灵活的信道带宽。万博1manbetx使用典型的通道带宽,如36mhz。信道带宽可以改变。本例中实现的粗频率同步算法可以跟踪输入符号率的11%的载波频率偏移。符号速率计算为B/(1+R),其中B是信道带宽,R是发射滤波器滚脱系数。在这个例子中实现的算法可以纠正采样时钟偏移高达10ppm。

simParams。年代ps = cfgDVBS2X.SamplesPerSymbol;每个符号的样本百分比simParams。numFrames = 30;%要处理的帧数simParams。chanBW = 36e6;%信道带宽(以赫兹为单位)simParams。Cfo = 2e6;%载波频率偏移(以赫兹为单位)simParams。Sco = 2;%采样时钟偏移部分百万分率simParams。phNoiseLevel =“低”相位噪声级为%“低”、“中”或“高”simParams。E年代NodB = 25;%每个符号能量与噪声之比%,单位为分贝

该表定义了用于产生应用于传输信号的相位噪声的相位噪声掩码(dBc/Hz)。这些噪声掩模取自ETSI TR 102 376-1章节4.3.2.1.3图12[2]

dvbs2xPhaseNoiseMask.png

产生DVB-S2X波形失真与射频损伤

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

[data,txOut,rxIn,phyConfig,rxParams] = HelperDVBS2XRxInputGenerate(cfgDVBS2X,simParams);disp (phyConfig)
调制方案:“64APSK”LDPCCodeIdentifier:“7/9”
接收信号星座图rxConst = com . constellation diagram (“标题”接收的数据的...“XLimits”[1],“YLimits”[1],...“ShowReferenceConstellation”假的,...“SamplesPerSymbol”, simParams.sps);rxConst (rxIn(1:长度(txOut)))

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

配置接收机参数

在接收端,对接收到的数据执行符号定时同步,然后紧接着进行帧同步。接收机算法包括粗频损伤校正算法和细频损伤校正算法。载频估计算法可以跟踪最多20%的输入符号速率的载频偏移。粗频率估计实现为频率锁定环(FLL),将频率偏移降低到精细频率估计器可以跟踪的水平。符号定时和粗频率补偿的首选环路带宽取决于 E 年代 / N o 设置。

每1476个符号重复一个36个导频的块。粗频率误差估计使用36个导频符号中的34个。每个区块使用的导频(34)与导频周期性(1476)之比为0.023。使用0.023值作为粗频率同步器环路带宽的缩放因子是首选。

当你减少 E 年代 / N o ,降低环路带宽,在采集过程中滤除更多噪声。符号同步器和粗FLL收敛所需的帧数取决于环路带宽设置。

帧同步使用PL报头。由于载波同步是数据辅助的,所以帧同步必须准确地检测帧的开始。 E 年代 / N o 在决定帧同步精度方面起着至关重要的作用。当QPSK调制帧正在恢复时 E 年代 / N o 值低于3db时,必须对多帧进行帧同步才能准确检测。

精细频率估计可以跟踪载波频率偏移高达输入符号率的4%。精细频率估计必须处理多个导频块,使剩余载波频偏减小到相位估计算法可接受的水平。该相位估计算法可以处理小于输入符号率0.02%的剩余载频误差。

属性中分配这些设置rxParams结构进行同步处理。有关如何为low设置这些参数的详细信息 E 年代 / N o 值,请参阅进一步的探索部分。

rxParams。carrSyncLoopBW = 1e-2*0.023;粗频率估计环带宽%由符号速率归一化rxParams。年代ymbSyncLoopBW = 8e-3;符号定时同步器环带宽%由符号速率归一化rxParams。年代ymbSyncLock = 8;符号计时所需的帧数误差收敛百分比rxParams.frameSyncLock = 1;每帧需要的帧数%的同步rxParams。coarseFreqLock = 5;粗制所需的帧数百分比频率采集rxParams。fineFreqLock = 4;%精细所需帧数%频率估计用于符号计时和粗频率锁定的总帧数rxParams。initialTimeFreqSync = rxParams。年代ymbSyncLock + rxParams.frameSyncLock +...rxParams.coarseFreqLock;用于整体同步的帧总数rxParams。totalSyncFrames = rxParams。rxParams.fineFreqLock;使用,创建时频同步系统对象helper对象timeFreqSync = HelperDVBS2TimeFreqSynchronizer(...“CarrSyncLoopBW”rxParams.carrSyncLoopBW,...“SymbSyncLoopBW”rxParams.symbSyncLoopBW,...“SamplesPerSymbol”simParams.sps,...“DataFrameSize”rxParams.xFecFrameSize,...“SymbSyncTransitFrames”rxParams.symbSyncLock,...“FrameSyncAveragingFrames”, rxParams.frameSyncLock);初始化错误计算参数[numFramesLost,pktsErr,bitsErr,pktsRec] = deal(0);初始化数据索引变量stIdx = 0;dataSize = rxParams.inputFrameSize;plFrameSize = rxParams.plFrameSize;dataStInd = rxParams。totalSyncFrames + 1;isLastFrame = false;symSyncOutLen = 0 (rxParams.initialTimeFreqSync,1);

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

为了同步接收到的数据并恢复输入比特流,扭曲的DVB-S2X波形样本按以下步骤一次处理一帧。

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

  2. 使用加德纳计时错误检测器应用符号计时同步,输出以符号速率生成。Gardner TED不是数据辅助的,所以在载波同步之前执行。

  3. 应用帧同步来检测帧的开始和识别导频位置。

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

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

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

  7. 解码PL报头并计算传输参数。

  8. 解调和解码PL帧。

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

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

stIdx < length(rxIn)每次迭代使用一个DVB-S2X PL帧。endIdx = stIdx + rxParams.plFrameSize*simParams.sps;%在最后一次迭代中,接收到的所有剩余样本%波形被考虑。isLastFrame = endIdx > length(rxIn);endIdx(isLastFrame) = length(rxIn);rxData = rxIn(stIdx+1:endIdx);粗频偏环路收敛后,FLL工作在%降低环路带宽。如果rxParams. framecount < rxParams. framecount。initialTimeFreqSync粗freqlock = false;其他的roughsefreqlock = true;结束检索最后一个帧样本。如果isLastFrame resSymb = plFrameSize - length(rxParams.cfBuffer);resSampCnt = resSymb*rxParams。sps - length(rxData);如果resSampCnt >= 0最后一帧样品数量不足syncIn = [rxData;0 (resSampCnt 1)];其他的有多余的样品可以填充最后一帧syncIn = rxData(1:resSymb*rxParams.sps);结束其他的syncIn = rxData;结束应用匹配过滤,符号定时同步,帧%同步,粗频偏补偿。[coarseFreqSyncOut,syncIndex,phEst] = timeFreqSync(syncIn,coarseFreqLock);如果rxParams. framecount <= rxParams. framecount。initialTimeFreqSync symSyncOutLen(rxParams.frameCount) = length(粗freqsyncout);如果any(abs(diff(symSyncOutLen(1:rxParams.frameCount)) > 5) error(['符号定时同步失败。循环不会'...“收敛。没有帧将被恢复。更新symbSyncLoopBW '...参数,根据EsNo设置适当的环路收敛。]);结束结束rxParams。年代yncIndex = syncIndex;PL帧开始索引位于正在处理的数据块的中间。从精细的频率估计开始,处理以PL帧的方式进行。缓冲区用于存储填充一个PL帧所需的符号。如果isLastFrame resCnt = resSymb - length(粗freqsyncout);如果resCnt <= 0 fineFreqIn = [rxParams.cfBuffer;coarseFreqSyncOut (1: resSymb)];其他的fineFreqIn = [rxParams.cfBuffer;coarseFreqSyncOut;0 (resCnt 1)];结束elseifrxParams.frameCount > 1 fineFreqIn = [rxParams.cfBuffer;coarseFreqSyncOut (1: rxParams.plFrameSize-length (rxParams.cfBuffer)));结束使用HelperDVBS2FineFreqEst估计精细频率误差helper函数。为条件检查添加1,因为缓冲区用于获得一个PL% frame为循环计数引入了1的延迟。如果(rxParams. framecount > rxParams. framecount)initialTimeFreqSync + 1) &&...(rxParams. framecount <= rxParams. framecount。totalSyncFrames + 1) rxParams。fineFreqCorrVal = HelperDVBS2FineFreqEst(...rxParams.numPilotBlks fineFreqIn (rxParams.pilotInd),...rxParams.refPilots rxParams.fineFreqCorrVal);结束如果rxParams. framecount >= rxParams. framecount。totalSyncFrames + 1 fineFreqLock = true;其他的fineFreqLock = false;结束如果fineFreqLock由输入符号速率归一化频率估计% freqEst =角(R)/(pi*(N+1)),其中N(18)为元素个数%用于计算自相关(R)的平均值% HelperDVBS2FineFreqEst。freqEst =角度(rxParams.fineFreqCorrVal)/(pi*(19));使用frameCount和plFrameSize生成符号索引。从rxParams.frameCount中减去2,因为缓冲区曾经获得1PL帧为计数引入了1的延迟。ind = (rxParams.frameCount-2)*plFrameSize:(rxParams.frameCount-1)*plFrameSize-1;phErr = exp(-1j*2*pi*freqEst*ind);fineFreqOut = fineFreqIn.*phErr(:);通过使用HelperDVBS2PhaseEst估计相位误差helper函数。[phEstRes, rxParams。prevPhaseEst = HelperDVBS2PhaseEst(...fineFreqOut (rxParams.pilotInd)、rxParams.refPilots rxParams.prevPhaseEst);使用时补偿剩余频率和相位偏差%的helper函数。使用两帧进行初始相位误差估计。从%第二帧,使用前一帧的相位误差估计和%当前帧的补偿。在帧数比较中添加3以考虑延迟:1% frame由于rxParams。cfBuffer延迟和两个帧用于相位%误差估计。如果rxParams. framecount >= rxParams. framecount。totalSyncFrames + 3 phaseCompOut = helperdvbs2phasecomcompensate (rxParams.ffBuffer,...rxParams.pilotEst、rxParams.pilotInd phEstRes (2));结束rxParams。ffBuffer = fineFreqOut;rxParams。pilotEst = phEstRes;数据部分的相位补偿由对连续导频上计算的相位估计进行插值%块。第二阶段的估计数据是不可用的最后一帧中最后一个导频块后面的%部分。因此,中所有试验块上计算的相位估计的斜率为%最后一帧是外推的,用来补偿相位最终数据部分的%错误。如果isLastFrame pilotBlkLen = 36;%符号pilotBlkFreq = 1476;%符号avgSlope = mean(diff(phEstRes(2:end)));chunkLen = rxParams。plFrameSize - rxParams.pilotInd(end) +...rxParams.pilotInd (pilotBlkLen);estEndPh = phEstRes(end) + avgSlope*chunkLen/pilotBlkFreq;phaseCompOut1 = helperdvbs2phascompensate (rxParams.ffBuffer,...rxParams.pilotEst、rxParams.pilotInd estEndPh);结束结束恢复输入比特流。如果rxParams. framecount >= rxParams. framecount。totalSyncFrames + 3 isValid = true;如果isLastFrame syncOut = [phaseCompOut;phaseCompOut1];其他的syncOut = phaseCompOut;结束其他的isValid = false;syncOut = [];结束更新缓冲区和计数器。rxParams。cfBuffer =粗freqsyncout (rxParams.syncIndex:end);rxParams。年代yncIndex = syncIndex; rxParams.frameCount = rxParams.frameCount + 1;如果isValid数据有效信号使用HelperDVBS2XPLHeaderRecover帮助解码PL报头%的功能。帧开始(SOF)是26个被丢弃的符号头解码前%。它们只适用于框架%的同步。rxPLSCode = syncOut(1:90);帧的前90个符号是PL报头[plsDecCode,phyParams] = HelperDVBS2XPLHeaderRecover(rxPLSCode,rxParams.s2xStatus);验证已解码的PL报头。如果plsDecCode ~= cfgDVBS2X。PLSDecimalCode流(“% s \ n”'PL头解码失败') dataStInd = dataStInd + 1;其他的解调和解码frameCnt = 1:length(syncOut)/rxParams. txtplFrameSize rxFrame = syncOut((frameCnt-1)*plFrameSize+1:frameCnt*plFrameSize);通过使用估计噪声方差helper函数。nVar = helperdvbs2noisevareestimate (rxFrame,rxParams.pilotInd,...rxParams.refPilots rxParams.normFlag);数据从符号91开始(在头符号之后)。rxDataFrame = rxFrame(91:end);使用helperdvbs2xbbframerrecover恢复BB帧helper函数。rxBBFrame = HelperDVBS2XBBFrameRecover(rxDataFrame,phyParams,...rxParams.plScramblingIndex rxParams.numPilotBlks,据nVar、假);使用恢复输入比特流% HelperDVBS2StreamRecover辅助功能。如果strcmpi (cfgDVBS2X。StreamFormat,“GS”) && ~rxParams。推高[decBits,isFrameLost] = HelperDVBS2StreamRecover(rxBBFrame);如果~isFrameLost && length(decBits) ~= dataSize isFrameLost = true;结束其他的[decBits,isFrameLost,pktCRC] = HelperDVBS2StreamRecover(rxBBFrame);如果~isFrameLost && length(decBits) ~= dataSize isFrameLost = true;pktCRC = 0 (0,1,“逻辑”);结束%计算TS或GS分组的错误率%模式。pktsErr = pktsErr + number (pktCRC) - sum(pktCRC);pktsRec = pktsRec +数字(pktCRC);结束如果~isFrameLost ts = sprintf(' % s ''BB头解码已通过。');其他的Ts = sprintf(' % s ''BB报头解码失败。');结束计算丢失的帧数。CRC故障%基带报头被认为是帧丢失。numFramesLost = isFrameLost + numFramesLost;流('%s(丢失帧数= %1d)\n'、ts numFramesLost)计算出错位。bitInd = (dataStInd-1)*dataSize+1:dataStInd*dataSize;如果isLastFrame && ~isFrameLost bitsErr = bitsErr + sum(data(bitInd) ~= decBits);其他的如果~isFrameLost bitsErr = bitsErr + sum(data(bitInd) ~= decBits);结束结束dataStInd = dataStInd + 1;结束结束结束stIdx = endIdx;结束
BB报头解码通过。(丢失帧数= 0)BB报头解码通过。(丢失帧数= 0)BB报头解码通过。(丢失帧数= 0)BB报头解码通过。(丢失帧数= 0)BB报头解码通过。(丢失帧数= 0)BB报头解码通过。(丢失帧数= 0)BB报头解码通过。(丢失帧数= 0)BB报头解码通过。(丢失帧数= 0)BB报头解码通过。(丢失帧数= 0)BB报头解码通过。(丢失帧数= 0)BB报头解码通过。(丢失帧数= 0)BB报头解码通过。(丢失帧数= 0)

可视化和错误日志

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

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

%错误指标显示%用于GS连续流如果strcmpi (cfgDVBS2X。StreamFormat,“GS”) && ~rxParams。推高如果(simParams.numFrames-rxParams。totalSyncFrames == numFramesLost)“所有的帧都丢失了。没有从BB帧检索比特。”其他的ber = bitsErr/((dataStInd-rxParams.totalSyncFrames)*dataSize);流('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

进一步的探索

对于假定完全同步的AWGN中的误码率模拟,请使用HelperDVBS2XBitRecover辅助函数来评估接收器的性能。中的M-help部分提供的示例HelperDVBS2XBitRecoverhelper函数。配置文件的同步参数rxParams为其他cfgDVBS2X而且simParams的“进一步探索”部分带射频损伤和校正的端到端DVB-S2模拟的同步参数rxParams为其他cfgDVBS2X而且simParams设置。对于更高的调制方案,如64 APSK及以上,此表显示了符号计时环路收敛所需的典型帧数。

dvbs2xSymbolSyncStatistics.png

附录

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

参考书目

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

  2. ETSI标准TR 102 376-2 V1.2.1(2015-11)。数字视频广播;第二代广播、互动业务、新闻采集和其他宽带卫星应用系统实施指南第二部分:S2扩展(DVB-S2X)

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

  4. 蒙加利,翁贝托和奥尔多·安德里亚。数字接收机的同步技术.纽约:全会出版社,1997年。

  5. E. Casini, R. De Gaudenzi和Alberto Ginesi。“DVB‐S2调制解调器算法设计和典型卫星频道的性能。”国际卫星通信与网络杂志22日,没有。3(2004): 281-318。

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

另请参阅

对象

相关的话题