主要内容

端到端DVB-S2X模拟和射频损伤和修正常规框架

这个例子展示了如何衡量误比特率(BER)和包错误率(/)的单个流数字视频广播卫星第二代扩展(DVB-S2X)链接常数为普通帧编码和调制。实例详细描述了符号定时和载波同步策略强调如何估计射频前端沉重的噪音条件下损伤。单流信号增加射频前端障碍,然后通过波形通过加性高斯白噪声(AWGN)信道。

介绍

DVB-S2X标准,DVB-S2规范的一个扩展,提高支持提供核心DVB-S2应用在卫星连接,提高整体效率。金宝appDVB-S2X标准支持这些额外的功能:金宝app

  • 多粒度的调制和编码率

  • 为了更好的利用带宽较小的滤波器碾轧选项

  • 星座为线性和非线性优化渠道

  • 更多地选择关键的同信道干扰场景

DVB-S2X迎合各种不同的目标应用程序,和接收器是受不同类型和层次的射频损伤基础上所使用的应用程序。这个例子中设计的同步方面DVB-S2X接收机用于DVB-S2核心应用程序。例子支持更新代码率,更高金宝app的调制方案,如64年,128年和256年APSK,较小的滤波器碾轧选项。

ETSI EN 302 307 - 2节6表20和表20 c[1]总结了Quasi-Error-Free(意见)在AWGN信道的性能需求不同的调制方案和代码率。操作 E 年代 / N o 范围不同的传播模式可以被认为是+ 3或2 dB E 年代 / N o 点意见性能观察。因为操作 E 年代 / N o 范围低,载波和符号定时同步策略是具有挑战性的设计问题。

这个图表总结了工作流实例。

主要处理循环

示例流程30物理层(PL)帧的数据 E 年代 / N o 设置为25 dB,然后计算数量和每。载波频率偏移,采样时钟偏移,相位噪声损伤应用于调制信号,和AWGN添加到信号。

接收器,匹配滤波后,定时和载波恢复操作运行恢复传输数据。提取PL框架,扭曲的波形处理通过各种定时和载波恢复策略pilot-aided载波恢复算法。解码数据帧,物理层传输参数,如调制方案,编码速率,和选举委员会的帧类型,从PL头中恢复过来。重新生成输入比特流,基带(BB)头是解码。

因为DVB-S2X标准支持通过连续的传输模式,BB框架可以金宝app是连接用户数据包或比特流。BB头恢复到确定的传输方式。如果BB框架是连接用户数据包,数据包循环冗余校验(CRC)的状态返回每个数据包解码比特,然后测量每和误码率。

这些方框图显示同步和输入一些恢复工作流。

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

这个示例加载MAT-file DVB-S2X LDPC的奇偶校验矩阵。如果MAT-file不可用MATLAB®路径,使用这些命令来下载并解压缩MAT-file。

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

在Pilot-Aided DVB-S2X配置模式

指定cfgDVBS2X结构定义DVB-S2X传输配置参数。PLSDecimalCode129年和131年不支持,因为他们是用于金宝app生成VL-SNR帧。只支持普通帧。金宝app

cfgDVBS2X。StreamFormat =“t”;cfgDVBS2X。PLSDecimalCode = 191;% 64 apsk 7/9与飞行员cfgDVBS2X。分= 50128;cfgDVBS2X。ScalingMethod =“单元平均功率”;cfgDVBS2X。RolloffFactor = 0.35;cfgDVBS2X。SamplesPerSymbol = 2
cfgDVBS2X =结构体字段:StreamFormat:“t”PLSDecimalCode: 191分:50128 ScalingMethod:“单位平均功率”RolloffFactor: 0.3500 SamplesPerSymbol: 2

仿真参数

DVB-S2X标准支持灵活的信道带宽。金宝app使用一个典型的通道带宽等36 MHz。信道带宽可以不同。粗频率同步算法实现在这个例子可以跟踪载波频率偏移量高达11%的输入符号率。计算符号率作为B / (1 + R), B通道带宽,R是传输过滤器碾轧的因素。这个例子中实现的算法可以正确的采样时钟偏移10 ppm。

simParams。年代ps = cfgDVBS2X.SamplesPerSymbol;每个符号%样本simParams。numFrames = 30;%处理的帧数simParams。chanBW = 36 e6;信道带宽百分比赫兹simParams。首席财务官= 2 e6;在赫兹%载波频率偏移simParams。上海合作组织= 2;%采样时钟偏移的部分%每百万simParams。phNoiseLevel =“低”;%作为相位噪声水平%“低”、“媒介”或“高”simParams。E年代NodB = 25;%每个符号能量噪声比%的分贝

这个表定义了相位噪声面具(dBc / Hz)用于生成相位噪声应用于传输信号。这些噪音掩盖了取自ETSI TR 102 376 - 1节4.3.2.1.3图12[2]

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

创建一个DVB-S2X波形,可以使用HelperDVBS2XRxInputGeneratehelper函数与simParamscfgDVBS2X结构作为输入。函数返回的数据信号,传输和接收波形,物理层配置参数结构,和接收器处理结构。接收到的波形与载波频率受损,定时相位偏移,相位噪声,然后通过一个AWGN信道。接收方工艺参数结构,rxParams,包括参考试点领域,试验指标,计数器和缓冲区。情节收到的星座符号和传播和接收波形的频谱。

(数据、txOut rxIn phyConfig, rxParams] = HelperDVBS2XRxInputGenerate (cfgDVBS2X simParams);disp (phyConfig)
FECFrame:“正常”ModulationScheme:“64”apsk LDPCCodeIdentifier:“7/9”
%接收信号星座图rxConst = comm.ConstellationDiagram (“标题”,接收的数据的,“XLimits”[1],“YLimits”[1],“ShowReferenceConstellation”假的,“SamplesPerSymbol”,simParams.sps);rxConst (rxIn(1:长度(txOut)))

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

配置接收机参数

接收器,符号定时同步接收的数据,然后执行帧同步紧随其后。接收机算法包括粗和细损伤频率校正算法。载波频率估计算法可以跟踪载波频率偏移量高达20%的输入符号率。粗频率估计,实现为一个锁频环路(算法),减少了频率偏移水平,优良的频率估计可以跟踪。象征的首选环路带宽取决于时机和粗频率补偿 E 年代 / N o 设置。

36块飞行员重复每1476个符号。粗频率误差估计使用34 36飞行员的符号。飞行员使用的比例每个块(34)和飞行员周期性(1476)是0.023。0.023使用价值的比例因子频率粗同步器回路带宽优先。

当你降低 E 年代 / N o 循环,减少带宽来过滤掉噪音在收购。所需的的帧数符号同步器和粗算法收敛取决于环路带宽设置。

帧同步使用PL头。因为承运人data-aided同步、帧同步必须准确检测帧的开始。 E 年代 / N o 扮演一个重要角色在决定帧同步的准确性。QPSK调制时帧被恢复 E 年代 / N o 值低于3 dB,必须进行帧同步多个帧精确检测。

优良的频率估计可以跟踪载波频率偏移量高达4%的输入符号率。优良的频率估计必须处理多个试点块剩余载波频率偏移的相位估计算法减少到可接受的水平。相位估计算法可以处理剩余载波频率误差不到0.02%的输入符号率。

这些设置被分配rxParams结构进行同步处理。有关如何设置这些参数为低 E 年代 / N o 值,请参阅进一步的探索部分。

rxParams。carrSyncLoopBW = 1依照* 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。initialTimeFreqSync + rxParams.fineFreqLock;%通过使用创建时间频率同步系统对象% HelperDVBS2TimeFreqSynchronizer 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] =交易(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不是data-aided,所以之前完成载波同步。

  3. 应用帧同步检测的开始帧和识别驾驶员的位置。

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

  5. 估计和应用好频率偏移校正。

  6. 估计和补偿剩余载波频率和相位噪声。

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

  8. 解调和解码PL画框。

  9. 对BB头执行CRC检查,如果检查通过,恢复头参数。

  10. 再生的数据输入流或从BB帧数据包。

stIdx <长度(rxIn)%使用一个DVB-S2X PL框架为每个迭代。endIdx = stIdx + rxParams.plFrameSize * simParams.sps;%在过去的迭代,所有剩下的样品收到了%波形。isLastFrame = endIdx >长度(rxIn);endIdx长度(isLastFrame) = (rxIn);rxData = rxIn (stIdx + 1: endIdx);%粗频率偏移循环聚合后,算法使用%降低环路带宽。如果rxParams.frameCount < rxParams。initialTimeFreqSync coarseFreqLock = false;其他的coarseFreqLock = true;结束%检索最后一帧样本。如果isLastFrame resSymb = plFrameSize -长度(rxParams.cfBuffer);resSampCnt = resSymb * rxParams。sps -长度(rxData);如果resSampCnt > = 0%的样本数量不足填补最后一帧syncIn = [rxData;0 (resSampCnt 1)];其他的%多余的样品可用来填补最后一帧syncIn = rxData (1: resSymb * rxParams.sps);结束其他的syncIn = rxData;结束%应用匹配滤波,符号定时同步、帧%同步和粗频率偏移补偿。[coarseFreqSyncOut, syncIndex, ph值]= timeFreqSync (syncIn coarseFreqLock);如果rxParams.frameCount < = rxParams。initialTimeFreqSync symSyncOutLen长度(rxParams.frameCount) = (coarseFreqSyncOut);如果任何(abs (diff (symSyncOutLen (1: rxParams.frameCount))) > 5)错误([的符号定时同步失败。循环不会的“收敛。没有框架会恢复。更新symbSyncLoopBW”的参数根据EsNo设置适当的循环收敛。”]);结束结束rxParams。年代yncIndex = syncIndex;% PL帧开始指数介于两者中间的一部分正在处理。%从开始,细频偏估计处理的PL框架。%缓冲区用于存储符号需要填补一个PL框架。如果isLastFrame fineFreqIn = [rxParams.cfBuffer;coarseFreqSyncOut];其他的fineFreqIn = [rxParams.cfBuffer;coarseFreqSyncOut (1: rxParams.syncIndex-1)];结束%估计频率错误使用HelperDVBS2FineFreqEst罚款% helper函数。% 1添加到条件检查因为缓冲区用于获取一个PL%框架引入了一个延迟的循环计数。如果(rxParams.frameCount > rxParams。initialTimeFreqSync + 1) & &(rxParams.frameCount < = rxParams。totalSyncFrames rxParams + 1)。fineFreqCorrVal = HelperDVBS2FineFreqEst (rxParams.numPilotBlks fineFreqIn (rxParams.pilotInd),rxParams.refPilots rxParams.fineFreqCorrVal);结束如果rxParams.frameCount > = rxParams。totalSyncFrames + 1 fineFreqLock = true;其他的fineFreqLock = false;结束如果fineFreqLock%正常化的频率估计的输入符号率%频率=角(R) /(π* (N + 1)) N(18)元素的数量%用于计算汽车相关(R)的意思% HelperDVBS2FineFreqEst。频率=角(rxParams.fineFreqCorrVal) /(π* (19));%生成指数使用frameCount和plFrameSize象征。% rxParams.frameCount减去2,因为所使用的缓冲区% PL框架引入了一个延迟的一个计数。印第安纳州= (rxParams.frameCount-2) * plFrameSize: (rxParams.frameCount-1) * plFrameSize-1;phErr = exp (1 j * 2 *π*频率*印第安纳州);fineFreqOut = fineFreqIn。* phErr (:);使用HelperDVBS2PhaseEst %估计相位误差估计% helper函数。[phEstRes, rxParams。prevPhaseEst] = HelperDVBS2PhaseEst (fineFreqOut (rxParams.pilotInd)、rxParams.refPilots rxParams.prevPhaseEst);%赔偿剩余使用频率和相位抵消%的% HelperDVBS2PhaseCompensate helper函数。%使用两个帧初始相位误差估计。从%第二帧,使用前一帧和相位误差估计%的当前帧补偿。%添加3的帧数比较占延迟:一个由于rxParams %框架。cfBuffer延迟和两帧用于阶段%的错误估计。如果rxParams.frameCount > = rxParams。totalSyncFrames + 3 phaseCompOut = HelperDVBS2PhaseCompensate (rxParams.ffBufferrxParams.pilotEst、rxParams.pilotInd phEstRes (2));结束rxParams。ffBuffer = fineFreqOut;rxParams。飞行员= phEstRes;%的相位补偿数据部分是由%插值连续相位估计计算试点%块。第二阶段为数据估计是不可用的%后最后一部分飞行员在最后一帧块。因此,%阶段的斜率估计计算在所有飞行员块%最后一帧是推断,用于补偿阶段%误差对最终的数据部分。如果isLastFrame pilotBlkLen = 36;%符号pilotBlkFreq = 1476;%符号avgSlope =意味着(diff (phEstRes(2:结束)));chunkLen = rxParams。plFrameSize rxParams.pilotInd(结束)+rxParams.pilotInd (pilotBlkLen);estEndPh = phEstRes(结束)+ avgSlope * chunkLen / pilotBlkFreq;phaseCompOut1 = HelperDVBS2PhaseCompensate (rxParams.ffBuffer,rxParams.pilotEst、rxParams.pilotInd estEndPh);结束结束%恢复输入比特流。如果rxParams.frameCount > = rxParams。totalSyncFrames + 3 = true是否是可用的;如果isLastFrame syncOut = [phaseCompOut; phaseCompOut1];其他的syncOut = phaseCompOut;结束其他的isValid = false;syncOut = [];结束%更新缓冲和计数器。rxParams。cfBuffer = coarseFreqSyncOut (rxParams.syncIndex:结束);rxParams。年代yncIndex = syncIndex; rxParams.frameCount = rxParams.frameCount + 1;如果isValid%数据有效信号%解码PL头使用HelperDVBS2XPLHeaderRecover帮手%的功能。的开始帧(SOF)是被丢弃的26个符号%之前头解码。他们只需要框架%的同步。rxPLSCode = syncOut (1:90);% 90帧PL头的象征[plsDecCode, phyParams] = HelperDVBS2XPLHeaderRecover (rxPLSCode rxParams.s2xStatus);%验证解码PL头。如果plsDecCode ~ = cfgDVBS2X。PLSDecimalCode流(“% s \ n”,“PL头解码失败”)其他的%解调和解码frameCnt = 1:长度(syncOut) / rxParams。plFrameSize rxFrame = syncOut ((frameCnt-1) * plFrameSize + 1: frameCnt * plFrameSize);使用%估计噪声方差% HelperDVBS2NoiseVarEstimate helper函数。据nVar = HelperDVBS2NoiseVarEstimate (rxFrame rxParams.pilotInd,rxParams.refPilots rxParams.normFlag);%数据始于91年(在标题符号)。rxDataFrame = rxFrame(91:结束);通过使用HelperDVBS2XBBFrameRecover %恢复BB框架% helper函数。rxBBFrame = HelperDVBS2XBBFrameRecover (rxDataFrame phyParams,rxParams.plScramblingIndex rxParams.numPilotBlks,据nVar、假);%恢复输入比特流用% HelperDVBS2StreamRecover helper函数。如果strcmpi (cfgDVBS2X.StreamFormat“GS”)& & ~ rxParams.UPL[decBits,isFrameLost] = HelperDVBS2StreamRecover(rxBBFrame);如果~ isFrameLost & &长度(decBits) ~ = dataSize isFrameLost = true;结束其他的[decBits, isFrameLost pktCRC] = HelperDVBS2StreamRecover (rxBBFrame);如果~ isFrameLost & &长度(decBits) ~ = dataSize isFrameLost = true;pktCRC = 0 (0, 1,“逻辑”);结束%计算为TS包错误率或GS通过%模式。pktsErr = pktsErr +元素个数(pktCRC)和(pktCRC);pktsRec = pktsRec +元素个数(pktCRC);结束如果~ isFrameLost ts = sprintf (' % s ',“BB头解码了。”);其他的ts = sprintf (' % s ',“BB头解码失败了。”);结束%计算帧丢失的数量。CRC的失败%基带头被认为是一个框架的损失。numFramesLost = isFrameLost + numFramesLost;流(' % s(帧丢失的数量= % 1 d) \ n”、ts numFramesLost)%计算比特错误。bitInd = (dataStInd-1) * dataSize + 1: dataStInd * dataSize;如果isLastFrame & & ~ isFrameLost bitsErr = bitsErr +总和(数据(bitInd) ~ = decBits);其他的如果~ isFrameLost bitsErr = bitsErr +总和(数据(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)

可视化和错误日志

情节的星座同步数据和计算数量和每。

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

%错误指标显示% GS连续流如果strcmpi (cfgDVBS2X.StreamFormat“GS”)& & ~ rxParams.UPL如果(simParams.numFrames-rxParams。totalSyncFrames = = numFramesLost)流(“所有的框架都是输了。没有从BB检索框架。”)其他的数量= bitsErr / ((dataStInd-rxParams.totalSyncFrames) * dataSize);流(“方方面面:% 1.2 e \ n”,ber)结束其他的%对GS和TS通过流如果pktsRec = = 0流(“所有的框架都是输了。没有数据包从BB检索框架。”)其他的如果strcmpi (cfgDVBS2X.StreamFormat“t”)pktLen = 1504;其他的pktLen = cfgDVBS2X.UPL;%长度包括同步字节结束数量= bitsErr / (pktsRec * pktLen);每= pktsErr / pktsRec;流(“每:% 1.2 e \ n”,每)流(“方方面面:% 1.2 e \ n”,ber)结束结束
每:0.00 e + 00
数量:0.00 e + 00

进一步的探索

情况下的误码率仿真假设完美的同步,使用HelperDVBS2XBitRecoverhelper函数对接收机性能进行评估。看到M-help小节中提供的示例HelperDVBS2XBitRecoverhelper函数。有关如何配置的同步参数rxParams为其他cfgDVBS2XsimParams设置,看到的进一步勘探区端到端DVB-S2模拟射频损伤和修正如何配置的同步参数rxParams为其他cfgDVBS2XsimParams设置。更高的调制方案64 APSK以上,这个表显示了典型的帧数收敛所需的符号定时循环。

附录

本例使用这些辅助函数:

参考书目

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

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

  3. ETSI标准TR 102中的例子376 - 1(2015 - 11)。是processing V1.2.1数字视频广播(DVB);实现指南第二代系统广播、互动服务,新闻采集和其他宽带卫星应用程序(DVB-S2)

  4. Umberto Mengali,奥尔多北达科他州'Andrea。同步数字接收机的技术。纽约:充气出版社,1997年。

  5. 大肠极、r . De Gaudenzi和阿尔贝托Ginesi。“DVB S2现代算法设计和性能在典型的卫星频道。”国际卫星通信和网络杂志》上22日,没有。3 (2004):281 - 318。

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

另请参阅

对象

相关的话题