主要内容

端到端孔灵活先进的编码和调制模拟射频损伤和修正

这个例子展示了如何测量端到端链的误比特率(BER)的空间数据系统咨询委员会(ccsd)灵活先进的编码和调制(FACM)方案高速率遥测系统(TM)应用程序[1]

介绍

来自各种仪器的数据生成的卫星。这个数据集体TM数据。地球探测卫星服务(套)任务载荷产生实质性的TM数据速率,从几个数百Mbps。实现高频谱效率等任务,编码和调制方案必须基于链接调整预算。的冲洗液FACM方案高速率TM的应用程序[1]标准支持高数据率采金宝app用串行级联卷积码(SCCC)和调制方案的家庭相移键控(相移键控)和幅度相移键控(APSK)。这个例子展示了如何生成一个复杂的基带ccsd FACM随机生成的波形传输帧(TFs),介绍无线电频率(RF)障碍基带信号,并添加加性高斯白噪声(AWGN)受损的信号。然后,显示了符号定时恢复的例子中,载波频率同步解调和解码的噪声信号得到的最后部分受损TFs的形式。这个示例还展示了如何测量系统的信噪比(信噪比)的一个配置ccsd FACM信号。

这个例子中这些射频损伤在基带信号模型:

  • 载波频率偏移(CFO)

  • 多普勒速度

  • “采样率抵消(SRO”)

  • 相位噪声

这图中显示接收方的过程,符号定时恢复、载波频率和载波相位的存在射频损伤。

在接收器链锁频环路(算法)使用帧标记(FM)物理层(PL)头。相位恢复模块使用试点领域恢复阶段。因为pilots-based相位恢复算法,必须使试点工作领域的例子。相位恢复模块可以容忍一定的残余首席财务官后剩下的算法操作。

这图显示了PL FACM波形的框架结构。PL帧,16码字部分(水煤浆)存在,每个码字部分是由每个SCCC编码器输出。使用ccsdsTMWaveformGenerator系统对象生成FACM波形。

配置和仿真参数

这个例子展示了各种可视化如星座图和信号的频谱。您可以选择禁用这些可视化。对于这个示例,使他们。

showVisualizations =真正的;

设置配置参数控制波形的属性。

sps = 2;每个符号%样本(SPS)滚边= 0.35;%过滤器碾轧因素cfgCCSDSFACM。NumBytesInTransferFrame = 223;cfgCCSDSFACM。SamplesPerSymbol = sps;cfgCCSDSFACM。RolloffFactor = rolloff; cfgCCSDSFACM.FilterSpanInSymbols = 10; cfgCCSDSFACM.ScramblingCodeNumber = 1; cfgCCSDSFACM.ACMFormat = 1; cfgCCSDSFACM.HasPilots = true;% HasPilots必须设置为true%这个例子来工作

指定仿真参数simParams结构。指定每个符号的信噪比在dB能源噪声功率比(Es /不)EsNodB字段。

simParams。EsNodB=1;

“指定首席财务官和SRO”。首席财务官使用模型comm.PhaseFrequencyOffset系统对象。模型使用采样率抵消comm.SampleRateOffset系统对象。

simParams。首席财务官= 1 e6;%在赫兹simParams。地面读数= 20;%在PPM

指定信号的衰减因子。在没有衰减的情况下,指定这个值1

simParams。AttenuationFactor = 0.1;%必须小于或等于1

生成指定数量的PL帧通过指定的帧数不占初始同步的误码率计算和帧的数量中占的数量计算。在这个例子中,集simParams.NumFramesForBER提前10完成仿真。看到一个适当的误码率值,将该值设置为200。

%初始化用于同步帧的数量simParams。InitalSyncFrames = 15;%初始化的帧数,用于计算误码率simParams.NumFramesForBER=10; simParams.NumPLFrames = simParams.InitalSyncFrames + simParams.NumFramesForBER;

指定每个符号的符号率和样本(SPS)。

simParams。SymbolRate = 100 e6;% 100 MBaudsimParams。SPS = SPS;

计算延迟和多普勒卫星场景中的例子显示了如何基于卫星轨道的多普勒频移随时间变化。多普勒频移呈正弦曲线的峰值发生多普勒频移时,卫星开始变得可见接收器在地面上,或当卫星正在消退。这样一个循环多普勒频移的变化被建模为一个正弦多普勒剖面。当前示例模拟多普勒频率变化的方程[2]

f ( t ) = f D 因为 ( f R f D t )

f D 多普勒频移峰值, f R 多普勒速度。指定这些属性的多普勒剖面。

simParams。PeakDoppler = 1 e6;%在赫兹simParams。DopplerRate = 50e3;%在赫兹/秒

如果需要,禁用射频损伤进行调试。

simParams。DisableRFImpairments = false;%禁用射频损伤

代的冲洗液FACM波形失真与射频损伤

创建一个冲洗液FACM波形,可以使用HelperCCSDSFACMRxInputGeneratehelper函数,simParamscfgCCSDSFACM结构作为输入。这个函数使用ccsdsTMWaveformGenerator系统对象生成波形传播。这个函数返回的数据信号,发送和接收波形和接收处理结构。接收到的波形与载波频率受损,多普勒频移,定时相位偏移,相位噪声,然后通过一个AWGN信道。接收方工艺参数结构,rxParams,包括参考飞行员字段和飞行员指数。情节收到的星座符号和传播和接收波形的频谱。

[比特,txOut rxIn、phyParams rxParams] =HelperCCSDSFACMRxInputGenerate (cfgCCSDSFACM simParams);如果showVisualizations = = true%画出接收信号星座rxConst = comm.ConstellationDiagram (“标题”,接收的数据的,“XLimits”[1],“YLimits”[1],“ShowReferenceConstellation”,真的,“SamplesPerSymbol”,simParams.SPS);%计算指定的参考星座ACM格式。refConstellation = HelperCCSDSFACMReferenceConstellation (cfgCCSDSFACM.ACMFormat);rxConst。ReferenceConstellation = refConstellation; rxConst(rxIn(1:rxParams.plFrameSize*sps))%画出传输和接收信号频谱Fsamp = simParams.SymbolRate * simParams.SPS;范围= dsp.SpectrumAnalyzer (“SampleRate”Fsamp,“ChannelNames”,{传输波形的,接收波形的},“ShowLegend”,真正的);范围([txOut rxIn(1:长度(txOut))));结束

接收器的配置

创建一个根提出了余弦(SRRC)接收滤波器。

rxFilterDecimationFactor = sps / 2;rrcfilt = comm.RaisedCosineReceiveFilter (“RolloffFactor”、双(滚边),“FilterSpanInSymbols”、双(cfgCCSDSFACM.FilterSpanInSymbols),“InputSamplesPerSymbol”sps,“DecimationFactor”,rxFilterDecimationFactor);b =多项式系数(rrcfilt);% | H f (f) | = 1 | | < fN(1α),按照第六节标准[1]rrcfilt。获得=总和(b.Numerator);

创建一个符号定时同步系统对象,comm.SymbolSynchronizer

%初始化探测器增益。参见8.47情商在数字通信%迈克尔·米[3]。Kp = 1 /(π*(1 -((滚边^ 2)/ 4)))*罪(π*滚边/ 2);symsyncobj = comm.SymbolSynchronizer (“DampingFactor”1 /√(2)“DetectorGain”Kp,“TimingErrorDetector”,“加德纳(non-data-aided)”,“调制”,PAM /相移键控/ QAM的,“NormalizedLoopBandwidth”,0.0001,“SamplesPerSymbol”sps / rxFilterDecimationFactor);

可视化后的星座图时间和频率恢复通过创建一个comm.ConstellationDiagram系统对象。

如果showVisualizations = = true constelDiag = comm.ConstellationDiagram ();constelDiag。ReferenceConstellation = refConstellation;结束

初始化算法对载波频率同步。这图显示了算法实现,如5.7节所述[2]。在这种情况下,频率检测器实现了一个基于快速傅里叶变换(FFT)方法,在频域峰值表明剩余载波频率。因为这种方法由FFT的分辨率有限,插入在峰值在频域检测剩余的频率。因为这种方法使用PL中可用的调频头,完成前一帧同步信号通过算法。这图显示了2型算法处理大的多普勒速度。

初始化算法。当您设置K2为0,这个算法变成1型算法。

算法= HelperCCSDSFACMFLL (“SampleRate”simParams.SymbolRate,“K1”,0.17,“K2”,0);

初始化局部变量的接收器链。

plFrameSize = rxParams.plFrameSize;stIdx = 0;% PL帧起始索引%使用PL框架为每个迭代。endIdx = stIdx + plFrameSize * sps;rxParams。ffBuffer = complex(zeros(plFrameSize,1));

同步和数据恢复

从接收到的信号恢复数据,遵循这些步骤。

  1. 通过接收基带样品通过SRRC接收滤波器。

  2. 执行符号定时同步。使用comm.SymbolSynchronizer系统对象的符号定时同步。地面读数是补偿而执行符号定时同步。

  3. 运用帧同步检测帧边界。

  4. 通过算法通过帧同步标志。算法,随着首席财务官,多普勒速度和多普勒频移也跟踪。

  5. 估计和补偿剩余的使用参考FM调频频率偏移。

  6. 恢复阶段的剩余阶段恢复模块。相位恢复模块可以容忍一些残余的首席财务官。

  7. 估计的信噪比,利用相位补偿调频信号。

  8. 通过相位补偿信号通过数字自动增益控制器(DAGC)。

  9. 解调软比特同步符号。

  10. 对软位执行SCCC解码获取解码比特。SCCC解码可以通过使用无网格概率译码器系统对象(应用程序),comm.APPDecoder

  11. 恢复传输帧的解码。

这个图显示了SCCC解码框图。

%初始化符号的数量在一个代码块。假设飞行员%的信号,15 * 16飞行员和8100数据符号存在%代码块。n = 8100 + 15 * 16;%执行第一帧的帧同步外循环。在最后一帧%,考虑所有剩下的样品收到了%波形。isLastFrame = endIdx >长度(rxIn);endIdx长度(isLastFrame) = (rxIn);rxData = rxIn (stIdx + 1: endIdx);stIdx = endIdx;%更新后开始指数提取所需的数据filteredRx = rrcfilt (rxData);% RRC过滤器syncsym = symsyncobj (filteredRx);%符号定时同步%帧同步syncidx = HelperCCSDSFACMFrameSync (syncsym rxParams.RefFM);fineCFOSync = comm.PhaseFrequencyOffset (“SampleRate”,simParams.SymbolRate);leftOutSym = syncsym (syncidx(1):结束);extraBits = [];numIterations = 10;frameIndex = 1;berinfo =结构(“NumBitsInError”0,“TotalNumBits”0,“BitErrorRate”,0);snrAveragingFactor = 6;%的平均6帧精确估计的信噪比信噪比= 0 (snrAveragingFactor, 1);idxTemp = 0;G = 1;numFramesLost = 0;fqyoffset = 0 (1000 1);stIdx <长度(rxIn) isFrameLost = false;%使用PL框架为每个迭代。endIdx = stIdx + rxParams.plFrameSize * sps;在最后一帧%,考虑所有剩下的样品收到了%波形。isLastFrame = endIdx >长度(rxIn);endIdx长度(isLastFrame) = (rxIn);rxData = rxIn (stIdx + 1: endIdx);stIdx = endIdx;%更新后开始指数提取所需的数据如果~ isLastFrame%接收的数据进行过滤filteredRx = rrcfilt (rxData);% RRC过滤器%符号定时同步syncsym = symsyncobj (filteredRx);%同步数据帧边界syncidx = HelperCCSDSFACMFrameSync (syncsym rxParams.RefFM);%认为一个完整的PL帧头开始。附加% 0如果数据是不够的。这种情况通常发生的%时,样品在定时同步或丢失%同步丢失。tempSym = [leftOutSym; syncsym (1: syncidx (1) 1)];leftOutSym = syncsym (syncidx(1):结束);如果长度(tempSym) < n * 16 + 320% 16代码块和320头符号fllIn = [tempSym; 0 (n * 16 + 320 -长度(tempSym), 1)];其他的%的长度(tempSym) > = n * 16 + 320fllIn = tempSym (1: n * 16 + 320);结束%跟踪频率偏移[fllOut fqyoffset (frameIndex)] =算法(fllIn);%估计和补偿调频的首席财务官。首席财务官= HelperCCSDSFACMFMFrequencyEstimate (fllOut (1:256),rxParams.RefFM simParams.SymbolRate);fineCFOSync。FrequencyOffset = -cfoEst;fqysyncedFM = fineCFOSync (fllOut (1:256));%估计和补偿相位抵消在每一帧独立%。在这个过程中去除飞行员。[noPilotsSym, frameDescriptor] =HelperCCSDSFACMPhaseRecovery (fllOut rxParams.PilotSeq rxParams.RefFM);agcIn = [frameDescriptor; noPilotsSym];%估计信噪比。参见130.11 ccsd g1 5.5节[2]。信噪比(idxTemp + 1) = HelperCCSDSFACMSNREstimate (fqysyncedFM (1:256),rxParams.RefFM);%的平均信噪比估计多个帧finalSNREst =意味着(信噪比);idxTemp = mod (idxTemp + 1, 6);%通过DAGC传递信号如果frameIndex > = snrAveragingFactor [agcRecovered G] = HelperDigitalAutomaticGainControl (agcIn, finalSNREst, G);其他的agcRecovered = agcIn;结束如果showVisualizations = = true%绘制星座。constelDiag (agcRecovered (:))结束%恢复ACM格式飞行员可用性指示器。[ACMFormat, hasPilots decFail] = HelperCCSDSFACMFDRecover (agcRecovered (1:64));如果decFail isFrameLost = true;结束如果(ACMFormat ~ = cfgCCSDSFACM.ACMFormat) | | (hasPilots ~ = cfgCCSDSFACM.HasPilots) isFrameLost = true;结束%继续进一步的处理只有在框架是不会丢失。如果~ isFrameLost% De-randomize PL-frame。derandomized = agcRecovered(65年)结束。*连词(rxParams.PLRandomSymbols (:));%解调信号据nVar = 1 / finalSNREst;解调=重塑(HelperCCSDSFACMDemodulate (derandomized ACMFormat,据nVar),[],16);fullFrameDecoded = 0 (16 * phyParams.K, 1);iCodeWord = 1:16解码= HelperSCCCDecode(解调(:,iCodeWord)、ACMFormat numIterations);fullFrameDecoded ((iCodeWord-1) * phyParams.K + 1: iCodeWord * phyParams.K) =解码;结束%提取TFs。[initBits, deccodedBuffer extraBits] =HelperCCSDSFACMTFSynchronize ([extraBits; fullFrameDecoded),phyParams.ASM,phyParams.NumInputBits);PRNSeq = satcom.internal.ccsds.tmrandseq (phyParams.NumInputBits);如果~ isempty (deccodedBuffer) finalBits = xor (deccodedBuffer (33:,:) > 0, PRNSeq);其他的isFrameLost = true;extraBits = [];结束结束如果isFrameLost numFramesLost = numFramesLost + 1;结束%找到误码率如果frameIndex > simParams。InitalSyncFrames & & ~ isFrameLost berinfo = HelperBitErrorRate(比特、finalBits berinfo);disp ([“frameIndex = 'num2str (frameIndex)”。数量= 'num2str (berinfo.BitErrorRate)))结束frameIndex = frameIndex + 1;结束结束
frameIndex = 16。数量= 0 frameIndex = 17。数量= 0 frameIndex = 18。数量= 0 frameIndex = 19。数量= 0 frameIndex = 20。数量= 0 frameIndex = 21。数量= 0 frameIndex = 22。数量= 0 frameIndex = 23。数量= 0 frameIndex = 24。数量= 0 frameIndex = 25。 BER = 0 frameIndex = 26. BER = 0 frameIndex = 27. BER = 0 frameIndex = 28. BER = 0 frameIndex = 29. BER = 0

frameIndex = 30。1 = 0
disp ([“ACM格式= 'num2str (cfgCCSDSFACM.ACMFormat)”。Es /不(dB) = 'num2str (simParams.EsNodB)”。数量= 'num2str (berinfo.BitErrorRate)))
ACM格式= 1。Es /不(dB) = 1。1 = 0

这图显示了频率估计频率偏移的收敛。这个情节是显示了所需的帧数的算法收敛。情节显示频率偏移收敛即使在信噪比很低(0分贝Es /不)。这个观察表明,该算法能有效地在低信噪比的值。

如果showVisualizations = = true情节(fqyoffset (1: frameIndex-1));网格ylabel (“估计频率偏移(Hz)”)包含(的帧数的)标题(频率偏移收敛的)结束

进一步的探索

这个例子显示了一个ACM的误码率的计算格式在一个信噪比。运行系统模拟多个信噪比点和多个ACM格式。

这个示例使用Es /不信噪比指标。这每一点能量转换噪声功率比(Eb /不),使用这个代码。

% ccsdsWaveGen = ccsdsTMWaveformGenerator (WaveformSource,灵活先进的编码和调制,…% ACMFormat, cfgCCSDSFACM.ACMFormat);% codeRate = ccsdsWaveGen.info.ActualCodeRate;% modOrder = ccsdsWaveGen.info.NumBitsPerSymbol;% EbNodB = simParams。EsNodB- 10*log10(codeRate) - 10*log10(modOrder);

附录

这个例子使用这些辅助文件:

引用

[1]131.2 -b-1冲洗液。蓝色的书。问题1。“灵活先进高速遥测应用程序的编码和调制方案。”空间数据系统推荐标准。华盛顿特区。2012年3月:冲洗液。

[2]ccsd 130.11 g1。绿色的书。问题1。“SCCC-Summary定义和性能”。信息报告有关空间数据系统标准。华盛顿特区。2019年4月:冲洗液。

[3]大米,迈克尔。数字通信:一个离散时间的方法。培生/普伦蒂斯霍尔,2008。

另请参阅

对象

相关的话题