带射频损伤和校正的端到端DVB-S2模拟
本例演示了如何测量具有恒定编码和调制的单流数字视频广播卫星第二代(DVB-S2)链路的误码率(BER)和包错误率(PER)。实例详细描述了符号定时和载波同步策略,重点介绍了在大噪声条件下如何估计射频前端损耗。单流信号添加射频前端损伤,然后通过加性高斯白噪声(AWGN)通道传递波形。
简介
DVB-S2接收机的载频误差高达输入符号速率的20%左右,而且相位噪声很大。使用强大的前向纠错(FEC)机制,如Bose-Chaudhuri-Hocquenghem (BCH)和低密度奇偶校验(LDPC)码,导致DVB-S2系统在每个符号与噪声功率谱密度比( )值,接近香农极限。
ETSI EN 302 307-1第6节表13[1]总结了AWGN信道在不同调制方案和码率下的准无差错(QEF)性能要求。操作 不同传输模式的范围可考虑为+2或-2 dB从 观察QEF性能的点。因为操作 距离低,载波和符号定时同步策略是具有挑战性的设计问题。
此图总结了示例工作流。
主要处理循环
实例处理25个物理层(PL)数据帧 设置为20 dB,然后计算BER和PER。将载波频率偏移、采样时钟偏移和相位噪声损伤应用于调制信号,并在信号中添加AWGN。
在接收端,在匹配滤波之后,运行定时和载波恢复操作来恢复传输的数据。为了提取PL帧,对失真波形进行处理,采用各种定时和载波恢复策略提取PL帧。载波恢复算法是导频辅助的。为了解码数据帧,从PL报头中恢复物理层传输参数,如调制方案、码率和FEC帧类型。为了重新生成输入位流,解码基带(BB)头。
因为DVB-S2标准支持分组和连续传输模式,BB帧既可以是用户包的串联,也可以是位流。回收BB头以确定传输模式。如果BB帧是用户包的串接帧,则返回每个包的CRC (packet cyclic redundancy check)状态和解码的比特,然后测量PER和BER。
这些框图显示了同步和输入位恢复工作流程。
下载DVB-S2 LDPC奇偶矩阵数据集
这个例子加载了一个带有DVB-S2 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-S2配置
指定cfgDVBS2
结构定义DVB-S2传输配置参数。的ScalingMethod
属性适用于当MODCOD
在范围(18、28)(也就是说,当调制方案只APSK)。推高
属性时适用StreamFormat
“GS
".
cfgDVBS2。StreamFormat =“t”;cfgDVBS2。FECFrame=“正常”;cfgDVBS2。MODCOD= 18;% 16 apsk 2/3cfgDVBS2。分= 42960;cfgDVBS2。ScalingMethod =“单元平均功率”;cfgDVBS2。RolloffFactor = 0.35;cfgDVBS2。HasPilots = true;cfgDVBS2。SamplesPerSymbol = 2
cfgDVBS2 =结构体字段:StreamFormat:“t”FECFrame:“正常”MODCOD: 18分:42960 ScalingMethod:“单位平均功率”RolloffFactor: 0.3500 HasPilots: 1 SamplesPerSymbol: 2
仿真参数
DVB-S2标准支持灵活的通道带宽。使用典型的通道带宽,例如36mhz。通道带宽可以改变。在本例中实现的粗频率同步算法可以跟踪载波频率偏移量,最多可达输入符号速率的20%。符号速率计算为B/(1+R),其中B为信道带宽,R为发射滤波器滚离因子。本例中实现的算法可以将采样时钟偏移校正到10ppm。
simParams。年代ps = cfgDVBS2.SamplesPerSymbol;每个符号的样本百分比simParams。numFrames = 25;要处理的帧数simParams。chanBW = 36 e6;%信道带宽,单位为赫兹simParams。首席财务官= 3 e6;%载波频率偏移,单位为赫兹simParams。上海合作组织= 5;%部分采样时钟偏移%每百万simParams。phNoiseLevel =“低”;相位噪声电平设为'低'、'中'或'高'simParams。EsNodB= 20;每个符号的能量与噪声比%的分贝
该表定义了用于产生应用于传输信号的相位噪声的相位噪声掩码(dBc/Hz)。
产生DVB-S2波形失真与射频损害
要创建DVB-S2波形,请使用HelperDVBS2RxInputGenerate
的Helper函数simParams
而且cfgDVBS2
结构作为输入。函数返回数据信号、传输和接收的波形以及接收器处理结构。接收到的波形被载波频率、定时相位偏移和相位噪声削弱,然后通过AWGN信道。接收机处理参数结构,rxParams
,包括参考导频字段、导频索引、计数器和缓冲区。绘制接收符号的星座图以及发射和接收波形的频谱图。
(数据、txOut rxIn rxParams] = HelperDVBS2RxInputGenerate (cfgDVBS2 simParams);接收信号星座图rxConst = comm.ConstellationDiagram (“标题”,接收的数据的,...“XLimits”[1],“YLimits”[1],...“ShowReferenceConstellation”假的,...“SamplesPerSymbol”, simParams.sps);rxConst (rxIn(1:长度(txOut)))
发射和接收信号频谱可视化Rsymb = simParams。chanBW / (1 + cfgDVBS2.RolloffFactor);Fsamp = Rsymb * simParams.sps;specAn = dsp。简介(“SampleRate”Fsamp,...“ChannelNames”, {传输波形的,接收波形的},...“ShowLegend”,真正的);specAn ([txOut rxIn(1:长度(txOut))));
配置接收机参数
在接收端,对接收的数据执行符号定时同步,然后进行帧同步。接收机算法包括粗频差校正算法和细频差校正算法。载频估计算法可以跟踪高达20%的输入符号速率的载频偏移。粗频率估计以频率锁定环(FLL)的形式实现,将频率偏移降低到精细频率估计器可以跟踪的水平。符号定时和粗频补偿的首选环路带宽取决于 设置。
36个导频块每1476个符号重复一次。粗频率误差估计使用36个导频符号中的34个。每块使用的导频(34)与导频周期(1476)之比为0.023。使用0.023值作为粗频同步器环路带宽的比例因子是首选。
当你减少 ,可以降低环路带宽,以过滤掉采集过程中更多的噪声。符号同步器和粗FLL收敛所需的帧数取决于环路带宽设置。
帧同步使用PL报头。由于载波同步是数据辅助的,因此帧同步必须准确检测帧的开始。 在决定帧同步精度方面起着至关重要的作用。当QPSK调制帧在 值低于3 dB时,必须在多个帧上进行帧同步,以便准确检测。
精细的频率估计可以跟踪高达4%的输入符号速率的载波频率偏移。精细频率估计必须处理多个导频块,以便将剩余载波频偏降低到相位估计算法可接受的水平。相位估计算法能处理小于0.02%的输入码率的剩余载频误差。只有在存在显著相位噪声的APSK调制方案中才需要精细相位补偿。
中分配这些设置rxParams
用于同步处理的结构。有关如何为low设置这些参数的详细信息
值,请参阅进一步的探索部分。
rxParams.carrSyncLoopBW= 1e-2*0.023;粗频率估计器环路带宽%由符号速率规范化rxParams.symbSyncLoopBW= 8e-3;符号定时同步器环路带宽%由符号速率规范化rxParams.symbSyncLock= 6;符号所需的帧数%定时误差收敛rxParams.frameSyncLock = 1;帧所需的帧数%%的同步rxParams.coarseFreqLock= 3;粗帧所需帧数%频率采集rxParams.fineFreqLock= 6;%好所需的帧数%频率估计rxParams。hasFinePhaseCompensation = false;%标志表示是否精细相位%补偿使用rxParams。finePhaseSyncLoopBW = 3.5的军医;精细相位补偿环路带宽%由符号速率规范化%发生符号定时和粗频率锁定所需的总帧数rxParams。initialTimeFreqSync = rxParams。年代ymbSyncLock + rxParams.frameSyncLock +...rxParams.coarseFreqLock;用于整体同步的总帧数rxParams。totalSyncFrames = rxParams。initialTimeFreqSync + rxParams.fineFreqLock;创建时频同步系统对象HelperDVBS2TimeFreqSynchronizer助手对象timeFreqSync = HelperDVBS2TimeFreqSynchronizer (...“CarrSyncLoopBW”rxParams.carrSyncLoopBW,...“SymbSyncLoopBW”rxParams.symbSyncLoopBW,...“SamplesPerSymbol”simParams.sps,...“DataFrameSize”rxParams.xFecFrameSize,...“SymbSyncTransitFrames”rxParams.symbSyncLock,...“FrameSyncAveragingFrames”, rxParams.frameSyncLock);创建精细相位补偿系统对象帮助器对象。好相%补偿只需要16和32 APSK调制帧如果cfgDVBS2。MODCOD>= 18 && rxParams.hasFinePhaseCompensation finePhaseSync = HelperDVBS2FinePhaseCompensator(...“DataFrameSize”rxParams.xFecFrameSize,...“NormalizedLoopBandwidth”, rxParams.finePhaseSyncLoopBW);结束normFlag = cfgDVBS2。MODCOD>= 18 && strcmpi(cfgDVBS2.ScalingMethod,'外半径为1');初始化错误计算参数[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-S2波形样本按以下步骤一次处理一帧。
应用匹配滤波,以每个符号两个样本的速率输出。
使用加德纳计时错误检测器应用符号计时同步,输出以符号速率产生。Gardner TED不是数据辅助的,所以它在载波同步之前执行。
应用帧同步来检测帧的开始和识别导频位置。
估计和应用粗频偏校正。
估计和应用精细的频率偏移校正。
估计和补偿剩余载波频率和相位噪声。
解码PL报头并计算传输参数。
解调和解码PL帧。
对BB报头进行CRC校验,如果校验通过,则恢复报头参数。
从BB帧中重新生成数据或包的输入流。
而stIdx <长度(rxIn)每次迭代使用一个DVB-S2 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 - length(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) = length(coarseFreqSyncOut);如果any(abs(diff(symSyncOutLen(1:rxParams.frameCount))) > 5) error(['符号定时同步失败。循环不会`...“收敛。没有帧将被恢复。更新symbSyncLoopBW '...'参数根据EsNo设置为适当的循环收敛。']);结束结束rxParams。年代yncIndex = syncIndex;PL帧开始索引位于正在处理的块的中间位置。从精细的频率估计开始,处理作为PL帧进行。缓冲区用于存储填充一个PL帧所需的符号。如果isLastFrame resCnt = resSymb - length(coarseFreqSyncOut);如果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%帧给循环计数带来1的延迟。如果(rxParams.frameCount > rxParams。initialTimeFreqSync + 1) &&...(rxParams.frameCount < = rxParams。1) rxParams。fineFreqCorrVal = HelperDVBS2FineFreqEst (...rxParams.numPilots fineFreqIn (rxParams.pilotInd),...rxParams.refPilots rxParams.fineFreqCorrVal);结束如果rxParams.frameCount > = rxParams。totalSyncFrames + 1 fineFreqLock = true;其他的fineFreqLock = false;结束如果fineFreqLock由输入符号速率归一化频率估计% freqEst =角(R)/(*(N+1)),其中N(18)是元素的个数%用于计算汽车相关(R)的意思% HelperDVBS2FineFreqEst。频率=角(rxParams.fineFreqCorrVal) /(π* (19));使用frameCount和plFrameSize生成符号索引。从rxParams.frameCount中减去2,因为缓冲区曾经获得1% PL帧引入计数延迟1。印第安纳州= (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);通过使用补偿剩余的频率和相位偏移%的helper函数。使用两帧初始相位误差估计。从%第二帧,使用前一帧的相位误差估计和%当前帧的补偿。在帧数比较中增加3个以考虑延迟:1%帧由于rxParams。cfBuffer延迟和两帧用于phase%的错误估计。如果rxParams.frameCount > = rxParams。totalSyncFrames + 3 coarsePhaseCompOut = helperdvbs2phascompenscompensate (rxParams.ffBuffer,...rxParams.pilotEst、rxParams.pilotInd phEstRes (2));% MODCOD >= 18对应APSK调制方案如果cfgDVBS2。MODCOD>= 18 && rxParams.hasFinePhaseCompensation phaseCompOut = finePhaseSync(coarsePhaseCompOut);其他的phaseCompOut = coarsePhaseCompOut;结束结束rxParams。ffBuffer = fineFreqOut;rxParams。飞行员= phEstRes;数据部分上的相位补偿由%插值在连续导频上计算的相位估计%块。第二阶段的估计无法得到数据在最后一帧的最后一个引导块之后的%部分。因此,的所有导块上计算的相位估计的斜率%最后一帧外推并用于补偿相位最终数据部分的%错误。如果isLastFrame pilotBlkLen = 36;%符号pilotBlkFreq = 1476;%符号avgSlope =意味着(diff (phEstRes(2:结束)));chunkLen = rxParams。plFrameSize - rxParams.pilotInd(end) +...rxParams.pilotInd (pilotBlkLen);estEndPh = phEstRes(end) + avgSlope*chunkLen/pilotBlkFreq;coarsePhaseCompOut1 = HelperDVBS2PhaseCompensate (rxParams.ffBuffer,...rxParams.pilotEst、rxParams.pilotInd estEndPh);% MODCOD >= 18对应APSK调制方案如果cfgDVBS2。MODCOD>= 18 && rxParams.hasFinePhaseCompensation phaseCompOut1 = finePhaseSync(coarsePhaseCompOut1);其他的phaseCompOut1 = coarsePhaseCompOut1;结束结束结束恢复输入位流。如果rxParams.frameCount > = rxParams。totalSyncFrames + 3 isValid = true;如果isLastFrame syncOut = [phaseCompOut;phaseCompOut1];其他的syncOut = phaseCompOut;结束其他的isValid = false;syncOut = [];结束更新缓冲区和计数器。rxParams。cfBuffer = coarseFreqSyncOut (rxParams.syncIndex:结束);rxParams。年代yncIndex = syncIndex; rxParams.frameCount = rxParams.frameCount + 1;如果isValid数据有效信号使用HelperDVBS2PLHeaderRecover帮助程序解码PL报头%的功能。起始帧(SOF)是26个符号,被丢弃在解码报头之前。它们只在框架中需要%的同步。rxPLSCode = syncOut (27:90);[M R fecFrame pilotStat] = HelperDVBS2PLHeaderRecover (rxPLSCode);xFECFrameLen = fecFrame / log2 (M);%验证解码PL头。如果M ~ = rxParams。modOrder || R ~= rxParams。codeRate | |...fecFrame ~ = rxParams。cwLen || ~pilotStat fprintf(“% s \ n”,'PL头解码失败') dataStInd = dataStInd + 1;其他的解调和解码为frameCnt = 1:length(syncOut)/plFrameSize rxFrame = syncOut((frameCnt-1)*plFrameSize+1:frameCnt*plFrameSize);%估计噪声方差使用助手函数。据nVar = HelperDVBS2NoiseVarEstimate (rxFrame rxParams.pilotInd,...rxParams.refPilots normFlag);数据从符号91开始(在标头符号之后)。rxDataFrame = rxFrame(91:结束);%恢复BB帧。rxBBFrame = satcom.internal.dvbs.s2BBFrameRecover (rxDataFrame, M, R,...fecFrame pilotStat,据nVar、假);使用恢复输入位流% HelperDVBS2StreamRecover帮助函数。如果strcmpi (cfgDVBS2。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 + numel(pktCRC) - sum(pktCRC);pktsRec = pktsRec + numel(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)
可视化和错误日志
绘制同步数据的星座图,计算误码率和PER。
同步数据星座图syncConst = comm.ConstellationDiagram (“标题”,“同步数据”,...“XLimits”(2 - 2),“YLimits”(2 - 2),...“ShowReferenceConstellation”、假);syncConst (syncOut)
暂停(0.5)%误差指标显示对于GS连续流如果strcmpi (cfgDVBS2。StreamFormat,“GS”) & & ~ rxParams。推高如果(simParams.numFrames-rxParams。totalSyncFrames == numFramesLost) fprintf(“所有帧都丢失了。没有位从BB帧检索。”)其他的数量= bitsErr / ((dataStInd-rxParams.totalSyncFrames) * dataSize);流(“方方面面:% 1.2 e \ n”, ber)结束其他的%对于GS和TS包化流如果pktsRec == 0 fprintf(“所有帧都丢失了。没有包从BB帧中检索。”)其他的如果strcmpi (cfgDVBS2。StreamFormat,“t”) pktLen = 1504;其他的pktLen = cfgDVBS2.UPL;% UP长度,包括同步字节结束数量= bitsErr / (pktsRec * pktLen);每= pktsErr / pktsRec;流(“每:% 1.2 e \ n”,每)流(“方方面面:% 1.2 e \ n”, ber)结束结束
每:0.00 e + 00
数量:0.00 e + 00
进一步的探索
操作
DVB-S2标准的范围非常低,要求符号同步器的归一化环路带宽和粗FLL非常小,以便进行精确估计。这些参数是通过rxParams.symbSyncLoopBW
而且rxParams.carrSyncLoopBW
.
配置符号定时同步参数
尝试使用配置为标准化循环带宽1e-4的符号计时同步器运行模拟。当环路带宽处于此水平时,此表显示了特定调制方案和符号定时环路收敛所需的典型帧数“正常”
选举委员会的框架。
“短
FEC帧,用于符号定时同步的帧数是所需帧数的三倍正常的
选举委员会的框架。如果符号计时循环不收敛,尝试减少rxParams.symbSyncLoopBW
并且增加rxParams.symbSyncLock
.要实现定时回路的收敛,比rxParams.symbSyncLoopBW / simParams.sps
必须大于1e-5。
配置帧同步参数
选择一个rxParams.symbSyncLock
中提供的表中的值配置符号定时同步参数部分。集rxParams.frameSyncLock
作为价值的范围(5、15)帧的基础上
设置。如果输出不符合预期,则增加帧同步所需的帧数。
配置运营商同步参数
试着使用粗FLL运行模拟,该粗FLL配置的归一化环路带宽为1e-4*0.023(对于PSK信号)和4e-4*0.023(对于APSK信号)。
当你设置FECFrame
财产“正常”
,设置rxParams.coarseFreqLock
属性到20。当你设置FECFrame
财产“短”
,设置rxParams.coarseFreqLock
80年财产。集simParams。EsNodB
到最低
对于从ETSI EN 302 307-1第6节中选择的调制方案[1].为HelperDVBS2TimeFreqSynchronizer
系统对象,根据所选配置设置其属性,如前几节所述。
% timeFreqSync = HelperDVBS2TimeFreqSynchronizer(…%’CarrSyncLoopBW’,rxParams。carrSyncLoopBW,……%’SymbSyncLoopBW’,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);%%按符号速率归一化的频率偏移估计% freqOffEst = diff(phEst(1:simParams.sps:end))/(2*pi);%的阴谋(freqOffEst)% actFreqOff = simParams.cfo/(simParams. cfo/)chanBW / (1 + cfgDVBS2.RolloffFactor));% resCoarseCFO = abs(actFreqOff-freqOffEst(end));
当剩余载频偏移值(resCoarseCFO
)减少到大约0.02或0.03,设置rxParams.frameCount
到rxParams.coarseFreqLock
价值。
为“正常”
FEC帧,设置rxParams.fineFreqLock
值10。为“短”
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.fineFreqLock
价值。
精细相位补偿锁相环仅用于16种APSK和32种具有较大相位噪声的APSK调制方案。
中设置的同步参数修改完成后rxParams
结构,对更新后的配置执行误码率模拟。
附录
该示例使用了以下辅助函数:
HelperDVBS2RxInputGenerate.m:生成因射频损伤和参数结构而失真的DVB-S2波形样本,用于接收机处理
HelperDVBS2PhaseNoise.m:为不同的DVB-S2相位噪声掩模生成相位噪声样本,并应用于输入信号
HelperDVBS2TimeFreqSynchronizer.m:匹配滤波、符号定时同步、帧同步、粗频估计与校正
HelperDVBS2FrameSync.m:同步帧并检测帧的开始
HelperDVBS2FineFreqEst.m:估计好频率偏移
HelperDVBS2PhaseEst.m:估计载波相位偏移
HelperDVBS2PhaseCompensate.m:进行载波相位补偿
HelperDVBS2FinePhaseCompensator.m:对APSK调制方案进行载波相位误差跟踪和补偿
HelperDVBS2PLHeaderRecover.m:解调解码PL报头,恢复传输参数
HelperDVBS2NoiseVarEstimate.m:估计接收数据的噪声方差
HelperDVBS2StreamRecover.m:对BB报头进行CRC校验,根据报头参数从BB帧中恢复输入流
参考书目
ETSI标准EN 302 307-1 V1.4.1(2014-11)。数字视频广播(DVB);广播、交互服务、新闻采集和其他宽带卫星应用的第二代帧结构、信道编码和调制系统(DVB-S2).
ETSI标准TR 102 376-1 V1.2.1(2015-11)。数字视频广播(DVB);第二代广播、互动服务、新闻采集和其他宽带卫星应用系统(DVB-S2)实施指引.
蒙加利,翁贝托和奥尔多·德安德里亚。数字接收机同步技术.纽约:全会出版社,1997年。
E.卡西尼,R.德·高登齐,阿尔贝托·吉内西。“DVB‐S2调制解调器算法的设计和典型卫星频道的性能。”国际卫星通信与网络杂志22日,没有。3(2004): 281 - 318。
迈克尔大米,数字通信:离散时间方法.纽约:普伦蒂斯大厅,2008。