主要内容

端到端DVB-S2X模拟与宽带射频损伤和修正模式

这个例子展示了如何衡量误比特率(BER)和包错误率(/)的单个流数字视频广播卫星第二代扩展(DVB-S2X)链接不断的编码和调制的宽带模式使用时间切片。示例描述了符号定时、框架和载波同步策略,强调如何正确的射频前端损伤严重的噪声条件下。单流信号增加射频前端障碍,然后通过波形通过加性高斯白噪声(AWGN)信道。

介绍

宽带模式是一个可选的传输格式DVB-S2 / S2X标准高符号率卫星运营商广播,专业,和交互式服务。这种格式采用宽带卫星转发器(200 - 500 MHz)在单一频率和使用时间切片DVB-S2 / S2X标准中定义的概念(ETSI EN 302 307 - 2附件)(1]。

多个服务时间切片器形式的物理层(PL)框架,串行传输的时间。每个服务提供一个独立的输入流dvbs2xWaveformGenerator系统对象®和流的最大数量可能是8。每个服务是由时间切片数量(听)传播PL报头的一部分。

切片接收机,用户选择和解码一个特定流与所需的服务。基于头周围的信息,接收方解码某些PL帧和丢弃他人。因此,选举委员会的解码速度相当于常规DVB-S2应用程序的100或200 Mbps的顺序。这种方法大大减少接收设备的复杂性,进而创造新的应用,比如高速数据链接的机会在Ka波段(26-40 GHz)。信息相关的时间切片数是已知的接收器。

这个例子中设计的同步方面DVB-S2X接收机使用时间切片接收机在宽带模式。这个例子支持所有256 金宝appapsk从正交相移编码调制方案。ETSI EN 302 307 - 2节6表20和表20 c [1总结了Quasi-Error-Free(意见)在AWGN信道的性能需求不同的调制方案和代码率。很低的信号噪声比(VL-SNR)物理层信号(PLS)不支持代码。金宝app

在这个例子中,4服务是作为独立的输入流dvbs2xWaveformGenerator系统对象和接收机恢复相关的输入数据流服务2演示时间切片特性。这个图表总结了工作流实例。

主要处理循环

示例流程五PL帧的数据/服务 E 年代 / N o 设置为15分贝,然后计算所需的服务的数量和每PL帧。载波频率偏移、频率漂移、采样时钟偏移,并应用于调制信号相位噪声损伤,和AWGN添加到信号。

在接收机匹配滤波后,执行定时和载波恢复操作恢复数据传输。选择所需的服务的PL帧,PL头解码,这取决于周围的价值,适合解码的帧选择。随着周围,物理层传输参数,如调制方案,编码速率,和选举委员会的帧类型,恢复的PL头使解调和解码。重新生成输入比特流,解码基带(BB)头。

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

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

下载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”);结束

DVB-S2X配置

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

cfgDVBS2X。StreamFormat =“t”;cfgDVBS2X。HasTimeSlicing = true;cfgDVBS2X。NumInputStreams =4;cfgDVBS2X。PLSDecimalCode = 143;% 8 psk进行23/36cfgDVBS2X。分= 41128;%在比特数据字段的长度%编码速率的23/36cfgDVBS2X。PLScramblingIndex =0;cfgDVBS2X。RolloffFactor = 0.35;cfgDVBS2X。SamplesPerSymbol = 2;

仿真参数

宽带的DVB-S2X标准应答器支持通道带宽从200年到500 MHz。金宝app计算符号率作为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 = 200 e6;信道带宽百分比赫兹rolloffFac = cfgDVBS2X.RolloffFactor;simParams。Fsymb = simParams。chanBW / (1 + rolloffFac);%符号率符号/秒simParams。首席财务官= 0.02 * simParams.Fsymb;在赫兹%载波频率偏移%将振荡不稳定simParams。dopplerRate = 3 e4;%多普勒速度在赫兹/秒simParams。peakDoppler = 1 e6;%多普勒频移峰值赫兹simParams。上海合作组织= 10;%采样时钟偏移的部分%每百万simParams。phNoiseLevel =“1”;%相位噪声水平simParams。E年代NodB = 15%每个符号能量噪声比
simParams =结构体字段:serviceNumber: 2 sps: 2 numFrames: 5 chanBW: 200000000 Fsymb: 1.4815 e + 08年首席财务官:2.9630 e + 06 dopplerRate: 30000 peakDoppler: 1000000上海合作组织:10 phNoiseLevel:“一级”EsNodB: 15

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

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

(数据、txOut rxIn phyConfig, rxParams] = HelperDVBS2XWidebandRxInputGenerate (cfgDVBS2X,simParams);%显示物理层配置phyConfig
phyConfig =结构体字段:FECFrame:{“正常”“正常”“正常”“正常”}ModulationScheme:{8相移键控的“8相移键控”“八相移键控”“八相移键控”}LDPCCodeIdentifier: {“23/36”“23/36”“23/36”“23/36”}
%接收信号星座图rxConst = = comm.ConstellationDiagram(标题“接收的数据”,XLimits = [1], YLimits = [1],ShowReferenceConstellation = false,SamplesPerSymbol = simParams.sps);rxConst (rxIn (1: rxParams.plFrameSize * simParams.sps))%传播和接收信号频谱可视化Fsamp = simParams.Fsymb * simParams.sps;specAn =简介(SampleRate = Fsamp,ChannelNames = [“传播波形”“接收波形”),ShowLegend = true);specAn ([txOut rxIn(1:长度(txOut))));

配置接收机参数

匹配滤波接收机,接收的数据,然后执行之后,符号定时同步、帧同步和载波同步。符号定时估计的数据辅助。象征的首选环路带宽取决于时机补偿 E 年代 / N o 设置。

帧同步使用PL头和两个飞行员块。 E 年代 / N o 扮演一个重要角色在决定帧同步的准确性。连续帧的帧同步执行准确的检测。

粗频率误差估计执行PL头。优良的频率误差估计可以估计载波频率偏移量高达3%的输入符号率。优良的频率估计必须处理多个试点块剩余载波频率偏移的相位估计算法减少到可接受的水平。相位估计算法可以处理剩余载波频率误差高达0.03%的输入符号率。

rxParams.symbSyncLoopBW= 1e-4;%符号定时同步器回路带宽%符号率归一化rxParams.numFramesForFineFreqLock= 3;%好所需的帧数%频率估计%通过使用创建频率粗同步系统对象% HelperDVBS2XWidebandCoarseFrequencySynchronizer helper对象freqSync = HelperDVBS2XWidebandCoarseFrequencySynchronizer (SampleRate = simParams.Fsymb);%通过使用创建帧同步系统对象% HelperDVBS2XWidebandFrameSynchronizer helper对象frameSync = HelperDVBS2XWidebandFrameSynchronizer (PLScramblingIndex = cfgDVBS2X.PLScramblingIndex);%通过使用创建符号定时同步系统对象% comm.SymbolSynchronizer对象symSync = comm.SymbolSynchronizer (TimingErrorDetector =“加德纳(non-data-aided)”,NormalizedLoopBandwidth = rxParams。年代ymbSyncLoopBW, DampingFactor = 1/sqrt(2));%通过使用创建匹配滤波器系统对象% comm.RaisedCosineReceiveFilter对象decFac = simParams.sps / 2;rxFilter = comm.RaisedCosineReceiveFilter (RolloffFactor = 0.35,InputSamplesPerSymbol = simParams。sps DecimationFactor = decFac);b = rxFilter.coeffs;rxFilter。获得=总和(b.Numerator);%初始化错误计算参数[numFramesLost, pktsErr bitsErr pktsRec] =交易(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. 运用符号定时同步使用Gardner定时误差检测器和一个输出生成速度的符号。

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

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

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

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

  7. 解调和解码PL头。

  8. 选择相对应的PL帧所需的服务基于听。

  9. 解调和解码PL画框。

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

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

stIdx <长度(rxIn)%使用一个DVB-S2X PL框架为每个迭代。endIdx = stIdx + plFrameSize * simParams.sps;%在过去的迭代,所有剩下的样品收到了使用%波形。isLastFrame = endIdx >长度(rxIn);endIdx长度(isLastFrame) = (rxIn);rxData = rxIn (stIdx + 1: endIdx);%检索最后一帧样本。如果isLastFrame resSampCnt = plFrameSize * rxParams。sps -长度(rxData);%的样本数量不足填补最后一帧syncIn = [rxData;0 (resSampCnt 1)];其他的syncIn = rxData;结束%执行匹配滤波和downsample 2样品/的信号%的象征。filtOut = rxFilter (syncIn);%符号定时同步。symSyncOut = symSync (filtOut);%应用帧同步syncIndex = frameSync (symSyncOut);rxParams。年代yncIndex = [rxParams.syncIndex;syncIndex];如果长度(rxParams.syncIndex) > 1% PL帧开始指数介于两者中间的数据%被处理。从粗频率补偿起,%作为PL处理框架。一个缓冲区用于存储符号%需要填补一个PL框架。stIdx1 = rxParams.syncIndex (1);endIdx1 = winLen + rxParams.syncIndex (2);cfoIn = symBuffer (stIdx1: endIdx1-1);%提取飞行员基于帧长度的数量numPilots = rxParams.possPilotBlks (rxParams。possFrameSizes = =长度(cfoIn));%应用粗频率同步。[coarseFreqSyncOut, 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])) /(π* (rxParams.NumLags));印第安纳州= (rxParams.frameCount-2) * plFrameSize: (rxParams.frameCount-1) * plFrameSize-1;phErr = exp (1 j * 2 *π* fineFreqEst *印第安纳)。”;freqCompOut = coarseFreqSyncOut。* phErr (:);问题= HelperDVBS2PhaseEst (freqCompOut (pilotInd),pilotVal, 0);phaseCompOut = HelperDVBS2PhaseCompensate (freqCompOut,问题,pilotInd 0 2);%使用HelperDVBS2PLHeaderRecover解码PL头% helper函数。的开始帧(SOF) 26个符号,被丢弃%之前头解码。SOF符号只需要帧同步。[plsDecCode, timeSliceNum phyParams] =HelperDVBS2XWidebandPLHeaderRecover (phaseCompOut (27:180));%验证解码PL头。如果plsDecCode ~ = cfgDVBS2X。PLSDecimalCode流(“% s \ n”,“PL头解码失败了。请代码不正确解码”)其他的如果timeSliceNum = = simParams.serviceNumber使用%估计噪声方差% HelperDVBS2NoiseVarEstimate helper函数。据nVar = HelperDVBS2NoiseVarEstimate (phaseCompOut pilotInd,pilotVal rxParams.normFlag);通过使用HelperDVBS2XBBFrameRecover %恢复BB框架% helper函数。180年PL标题符号被丢弃。rxBBFrame = HelperDVBS2XBBFrameRecover (phaseCompOut(181:结束),phyParams,rxParams.plScramblingIndex numPilotBlks,据nVar、假);%恢复输入比特流用% HelperDVBS2StreamRecover helper函数。如果strcmpi (cfgDVBS2X.StreamFormat“GS”)& & ~ rxParams.UPL[decBits,isFrameLost] = HelperDVBS2StreamRecover(rxBBFrame,true);如果~ isFrameLost & &长度(decBits) ~ = dataSize isFrameLost = true (timeSliceNum);结束其他的[decBits, isFrameLost pktCRC] = HelperDVBS2StreamRecover (rxBBFrame,真实);如果~ isFrameLost & &长度(decBits) ~ = dataSize isFrameLost = true (timeSliceNum);pktCRC = 0 (0, 1,“逻辑”);结束%计算为TS /或GS通过模式。%的数据包数量基于数据包CRC错误状态pktsErr = pktsErr +元素个数(pktCRC)和(pktCRC);%的数据包数量从基带框架中恢复过来pktsRec = pktsRec +元素个数(pktCRC);结束如果~ isFrameLost ts = sprintf (“% s”,“BB头解码了。”);其他的ts = sprintf (“% s”,“BB头解码失败了。”);结束%计算帧丢失的数量。CRC的失败%基带头被认为是一个框架的损失。numFramesLost = isFrameLost + numFramesLost;frameIdx =装天花板((rxParams.frameCount-1) / cfgDVBS2X.NumInputStreams);流(“% s(帧丢失的数量= % 1 d,服务% d,帧数= % d) \ n”,ts、numFramesLost timeSliceNum frameIdx)%计算比特错误。如果~ isFrameLost dataInd = (frameIdx-1) * dataSize (timeSliceNum) + 1: frameIdx * dataSize (timeSliceNum);犯错误=总和(数据{timeSliceNum} (dataInd) ~ = decBits);bitsErr = bitsErr +犯错误;结束结束结束symBuffer = symBuffer (endIdx1 + 1-rxParams.syncIndex(2):结束);winLen =长度(symBuffer);rxParams.fineFreqCorrVal (1: end-1) = rxParams.fineFreqCorrVal(2:结束);rxParams.fineFreqCorrVal(结束)= corrVal;rxParams。年代yncIndex = rxParams.syncIndex(end);结束symBuffer = [symBuffer; symSyncOut];% #好< AGROW >stIdx = endIdx;rxParams.frameCount = rxParams.frameCount + 1;结束
BB头解码了。(丢失的帧数= 0,服务2、帧数= 1)BB头解码了。(丢失的帧数= 0,服务2、帧数= 2)BB头解码了。(丢失的帧数= 0,服务2、帧数= 3)BB头解码了。(丢失的帧数= 0,服务2、帧数= 4)BB头解码了。(丢失的帧数= 0,服务2、帧数= 5)

可视化和错误日志

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

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

%错误指标显示% GS连续流如果strcmpi (cfgDVBS2X.StreamFormat“GS”)& & ~ rxParams.UPL如果(simParams。numFrames = = numFramesLost)流(“所有的框架都是输了。没有从BB检索框架。”)其他的numFramesRec = simParams。numFrames - numFramesLost;数量= bitsErr / (numFramesRec * dataSize (timeSliceNum));流(“BER: % 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”,每)流(“BER: % 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必须大于1 e-5。

配置载波同步参数

HelperDVBS2PhaseEst辅助函数可以准确估计相位抵消只有剩余载波频率偏移(CFO)小于符号率的0.0003倍。使用第二个输出参数cEstFreq一步的召唤freqSync和优良的频率偏移误差估计fineFreqEst整个首席财务官估计计算。

% normCFOEst = cEstFreq / simParams。Fsymb + fineFreqEst;% actCFO = (simParams。首席财务官+ simParams.peakDoppler) / simParams.Fsymb;% residualErr = abs (actCFO - normCFOEst);

增加了rxParams.numFramesForFineFreqLock价值提高精细频率误差估计的准确性residualErr不小于期望的结果。

附录

本例使用这些辅助函数:

参考书目

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

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

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

  4. p .金姆和d .哦,”基于dvb - s2帧检测时间片”,18 IEEE国际研讨会消费类电子产品(ISCE 2014),2014年,页1 - 2,doi: 10.1109 / ISCE.2014.6884410。

  5. 极,E。,et al. “DVB-S2 Modem Algorithms Design and Performance over Typical Satellite Channels.”国际卫星通信和网络杂志》上,22卷,不。3、2004年5月,页281 - 318。

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

另请参阅

对象

相关的话题