ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

卫星OFDM链路设计:从MATLAB仿真到SDR原型验证

卫星OFDM链路设计:从MATLAB仿真到SDR原型验证 我第一次把RTL-SDR的天线指向天空等着低轨卫星过境时在屏幕上看到一段被多普勒拉偏了几十千赫兹的信号那一刻才意识到地面Wi-Fi和蜂窝网那套OFDM经验放在卫星链路上根本不成立。后来我用MATLAB加一块SDR硬件从零搭了一套OFDM卫星通信原型系统整个过程走下来踩的坑比我想象的多但收获也实实在在——这套仿真先行、半实物验证、再对准天空的路径几乎可以复用到任何卫星通信原型开发里。这篇文章就围绕这块内容展开适合正在做通信方向课题的研究生、想从零接触卫星链路的工程师以及那些手里已经有SDR但不知道从哪下手的业余爱好者。1. 卫星OFDM链路为什么不能照搬地面Wi-Fi方案先说一个反直觉的结论卫星信道虽然看起来空旷但它对OFDM系统提出的挑战比室内Wi-Fi环境要苛刻得多。我最早按照Wi-Fi那套思路设计原型结果第一次上链路测试就吃了大亏。这里把三个最关键的差异摆出来理解透这三件事后面设计参数才有依据。1.1 大尺度衰减决定了每一分贝都要精打细算地面通信中几十米距离的自由空间损耗大概在60~80 dB发射功率有个十几dBm就能跑得很好。卫星链路完全不是这个量级。拿LEO低轨卫星举例假设轨道高度600 km工作频率2.4 GHz自由空间损耗用简化公式估算$$L_{fs} 32.45 20\log_{10}(f_{MHz}) 20\log_{10}(d_{km})$$代入 $f_{MHz}2400$$d_{km}600$$$L_{fs} \approx 32.45 67.6 55.6 155.7 \text{ dB}$$这还没算雨衰、大气吸收、极化失配和馈线损耗。如果地面站发射功率30 dBm1 W发射天线增益18 dBi接收天线增益14 dBi那么接收端实际收到的信号功率大概是多少算一下$$P_{rx} 30 18 14 - 155.7 -93.7 \text{ dBm}$$接收机热噪声功率按 $kTB$ 算带宽1 MHz、噪声系数3 dB时是$$P_{noise} -174 60 3 -111 \text{ dBm}$$也就是接收信噪比大约17 dB。看起来够用但一旦你加入信道估计导频开销、OFDM峰均比带来的功率回退、频偏校正的残余误差余量很快就吃光了。这和Wi-Fi那种功率随便开、噪声地板低的宽松环境根本不是一回事。这告诉我们一个很实际的设计原则卫星OFDM原型系统的每一个模块都应该朝着省功率、降开销、抗频偏这三个方向去设计而不是照搬地面系统的高调制阶数、密集导频、大带宽。1.2 动态多普勒OFDM最怕的频率漂移OFDM系统的子载波正交性是建立在本振频率精确同步的基础上的。地面设备静止时晶振偏差可能只有几十Hz问题不大。但卫星链路完全不同LEO卫星对地速度约7.6 km/s在2.4 GHz频段产生的最大多普勒频移大约是$$f_d \frac{v}{c} f_c \approx \frac{7600}{3 \times 10^8} \times 2.4 \times 10^9 \approx 60.8 \text{ kHz}$$而OFDM的子载波间隔通常只有15 kHz或30 kHz。这意味着多普勒频移达到4个子载波间隔量级。更麻烦的是多普勒不是固定值卫星从地平线升起到过顶再到落下多普勒变化遵循一个S曲线变化速率可以达到每秒几百赫兹。如果接收端不把载波频偏纠正到子载波间隔的一个很小比例以内ICI子载波间干扰会把星座图彻底搅成一团。经验值是残余频偏最好控制在子载波间隔的1%~2%以内。所以卫星OFDM系统要么把子载波间隔加大比如30 kHz甚至60 kHz要么在接收端做动态多普勒跟踪没有别的路可走。1.3 透明转发器与星上再生系统约束完全不同很多卫星通信系统是透明转发架构卫星只做频率变换和功率放大不解析信号。这意味着OFDM信号要通过卫星上的非线性功率放大器——而OFDM的高峰均比PAPR恰好是功率放大器最讨厌的东西。地面基站里你还可以用DPD数字预失真和较大的功率回退来压制非线性卫星转发器的功率资源极其宝贵工作点通常接近饱和区。OFDM信号通过饱和放大器会产生严重的互调失真和频谱再生把邻道全部污染掉。这也是为什么传统卫星通信一直用恒包络的单载波调制像DVB-S2X而不是OFDM。但在5G NTN非地面网络等新场景里OFDM又回来了因为需要在多用户、灵活频谱分配方面和地面5G保持一致。原型系统里要做的就是通过降低调制阶数、增大功率回退、使用RRC脉冲成形尽量减轻PA非线性的影响。这些约束在你决定要不要在原型里用OFDM之前就应该想清楚。2. 从链路预算反推OFDM参数LEO场景下的方案设计搞清楚卫星信道的特殊性之后第二步不是急着写代码而是先把系统参数定下来。绝大多数人犯的错误是拿着Wi-Fi或LTE那套参数直接改个频率就上SDR结果频偏、CP、导频密度全都不匹配。2.1 核心参数怎么定我把我的参数选择逻辑拆开来讲这样你可以根据自己的场景调整而不是抄一个固定配置。首先是子载波间隔。前面算过LEO在2.4 GHz的最大多普勒约61 kHz。选30 kHz子载波间隔时多普勒大约占2个子载波间隔接收端搜索范围是[-2, 2]个子载波整数倍频偏搜索量不大。选15 kHz的话要搜4个方向搜索范围大PLL跟踪的动态范围也得更宽。我最终选了30 kHz子载波间隔在抗多普勒和频谱效率之间取了个平衡。然后是FFT点数。原型带宽1 MHz30 kHz间隔下有33个子载波取64点FFT比较合适其中有效子载波约48个留出直流子载波和边缘保护间隔。如果你要跑到5 MHz带宽可以换成512点FFT、子载波间隔15 kHz。这里给一张我常用的参数表参数数值设计理由载波频率2.4 GHzISM频段SDR和天线好找信号带宽1 MHz降低采样率需求方便USB传输子载波间隔30 kHz抗LEO多普勒FFT点数641 MHz带宽下的合理选择有效子载波48留直流和边缘保护循环前缀8个采样点约4.2 μs覆盖典型地面多径和定时误差调制方式QPSK/DQPSK平衡速率与解调门槛帧结构前导 10个数据符号 导频支持同步和信道跟踪脉冲成形RRC滚降系数0.25抑制带外辐射CP长度这里多说一句。卫星链路不像地面那么多径丰富但用户端地面反射还是存在典型的时延扩展在几百ns到几μs之间。4.2 μs的CP对中低速率卫星链路够用了。不用盲目抄LTE的4.7 μs因为我们的子载波间隔已经不同CP占比约12.5%会直接影响有效数据速率。2.2 多普勒预算与参数验证参数定完后一定要做一次多普勒预算验证最大多普勒61 kHz子载波间隔30 kHz归一化多普勒为2个整数倍间隔。接收端频偏估计需要先做整数倍频偏校正再做小数倍频偏校正最后还要留一个跟踪环来应对多普勒随时间的变化。帧同步的容限也要算卫星仰角从5度到90度变化时多普勒变化率最大可达每秒几百Hz。如果一帧长度是1 ms那么一帧内多普勒变化只有零点几Hz可以忽略帧内可以当作固定频偏处理但帧间必须跟踪。这个结论决定了接收机必须在每帧的前导部分重新估计频偏否则几帧之后频偏误差就会累积到不可接受的程度。这个阶段可以用一句话总结参数设计不是拍脑袋而是被链路预算和动态特性反向约束出来的。把所有约束写进一张表后面仿真、硬件联调都要回来看这张表就不会跑偏。3. MATLAB仿真先行先把发射链路跑通参数定好了先别碰硬件。我经验里最稳妥的顺序是先在MATLAB里把完整的发射机、信道模型、接收机搭出来确认算法在纯仿真环境能工作再把它搬到SDR上。这一步看似多花了时间实际上省掉的是无数在硬件上盲目试错的夜晚。3.1 发射链路的基本模块一个最小可用的OFDM发射机按数据流顺序是随机比特生成 → QPSK符号映射 → 串并变换 → 导频插入 → IFFT → 加循环前缀 → 加前导序列 → RRC脉冲成形 → 上变频到载波。MATLAB里最省事的做法是直接用Communications Toolbox里的comm.OFDMModulator它把IFFT、导频插入、保护间隔这些都封装好了。我第一次搭的时候也想过自己写IFFT循环后来发现没必要重复造轮子官方对象还有个好处是配套comm.OFDMDemodulator收发参数天然对齐。下面给一个发射端核心代码骨架% OFDM参数 fftLen 64; cpLen 8; numDataSubcarriers 48; numSymbols 10; modOrder 4; % QPSK % 创建OFDM调制器 ofdmMod comm.OFDMModulator( ... FFTLength, fftLen, ... CyclicPrefixLength, cpLen, ... NumGuardBandCarriers, [6; 5], ... NumSymbols, numSymbols, ... PilotInputPort, true, ... PilotCarrierIndices, (6:8:54), ... InsertDCNull, true); % 随机数据生成与QPSK调制 bitsPerSym numDataSubcarriers * log2(modOrder); txBits randi([0 1], bitsPerSym * numSymbols, 1); dataSym pskmod(txBits, modOrder, pi/4, InputTypebit, BitOutputtrue); % 导频符号用随机QPSK接收端已知 pilotSym pskmod(randi([0 1], 7*numSymbols*2, 1), modOrder, pi/4, ... InputTypebit, BitOutputtrue); % 执行OFDM调制 ofdmTx ofdmMod(dataSym, pilotSym);这里面有几个容易被忽略的控制项NumGuardBandCarriers要跟前面参数表里的有效子载波数对应起来直流子载波必须置空否则SDR的DC偏置会直接污染它导频子载波的位置要均匀分布方便接收端做插值信道估计。3.2 前导序列设计我强烈建议不要省掉前导。OFDM接收机最困难的两件事——帧到达检测和粗频偏估计——都要靠前导。前导长度至少要能容纳2个重复的序列块经典的Schmidl-Cox算法就是靠重复结构完成定时和频偏粗估计。我用的是长度为64的Zadoff-Chu序列重复两次作为前导。Zadoff-Chu序列的恒包络和良好自相关特性特别适合做同步而且在频偏存在时依然能保持可检测性。生成方式也很简单% Zadoff-Chu序列生成根序列索引1长度64 n 0:63; zcSeq exp(-1j * pi * 1 * n .* (n1) / 64); preamble [zcSeq, zcSeq]; % 两个重复块用于Schmidl-Cox前导在发射端放在OFDM数据符号的前面接收端实时流式检测时一旦自相关峰超过阈值就认为帧到达了。3.3 脉冲成形与带外抑制OFDM信号如果不做脉冲成形频谱旁瓣会非常高。卫星通信对频谱使用有严格约束原型系统里最好加上根升余弦RRC滤波器。滚降系数我选0.25既能有效抑制带外辐射又不会把带宽撑得太大。这里有个细节脉冲成形通常在基带完成用rcosdesign函数生成滤波器系数然后对OFDM基带信号做卷积或滤波rolloff 0.25; span 6; % 符号跨度 sps 4; % 每个符号采样数 rrcFilter rcosdesign(rolloff, span, sps, sqrt); txWaveform upfirdn(ofdmTxFull, rrcFilter, sps); % 4倍过采样后的发射波形为什么要4倍过采样因为SDR设备通常需要比信号带宽更高的采样率才能保证频谱成型质量4倍是一个比较稳妥的工程选择。过采样率过低频域抗混叠滤波会很吃力过高又会把USB传输和FPGA资源直接拉爆。3.4 仿真性能目标发射链路搭好后先接AWGN信道跑一下BER曲线确认在理论值附近。QPSK在AWGN下要得到10^-3量级的误码率需要的Eb/N0大约是6.8 dB。如果加上1/2码率卷积编码这个门限可以降到3 dB左右。如果你的光仿真结果就差理论值5 dB以上先别急着碰硬件回头检查滤波器设计、同步模块、信道估计是不是有bug。这一步能帮你省掉至少一周的硬件排错时间。4. SDR硬件选型与发射机实现从UHD到MATLAB工具箱仿真通过后才进入半实物环节。SDR硬件怎么选直接影响整个项目从搭建到联调的难度。4.1 主流SDR硬件对比与选型我拿市面上常见的几款做一个横向对比方便你按预算和需求选硬件位数收发能力频率范围适合场景参考定位RTL-SDR8 bit仅接收24 MHz~1.7 GHz下行监听、接收端验证百元级入门HackRF One8 bit半双工1 MHz~6 GHz发射低功率信号千元级入门ADALM-Pluto12 bit全双工325 MHz~3.8 GHz教学原型、小功率链路千元级性价比USRP B21012 bit全双工70 MHz~6 GHz正规实验平台、多通道万元级主力E310/E32012 bit全双工70 MHz~6 GHz嵌入式/机载场景嵌入式原型我的建议是如果你预算有限选ADALM-PlutoMATLAB对它支持很完善自带AD9363射频前端12 bit ADC做1 MHz带宽的实验绰绰有余。如果实验室预算充足直接上USRP B210性能和软件生态最成熟UHD驱动和MATLAB的通信工具箱配合得很顺。RTL-SDR虽然只能接收但在原型验证接收解调这部分反而非常有价值因为发射端可以用任意信号源接收端解出来后能正常工作说明你的接收算法没问题。4.2 时钟校准最容易被忽视的一环两块SDR设备之间晶振误差带来的频率偏移往往比多普勒还大而且它是固定偏差写在接收端频偏估计里如果精度不够就会导致系统整体无法工作。一块典型SDR的TCXO精度是20 ppm左右在2.4 GHz频段意味着最大偏差$$f_{err} 2.4 \times 10^9 \times 20 \times 10^{-6} 48 \text{ kHz}$$这已经超过1倍子载波间隔。所以做卫星OFDM原型时我强烈建议外部10 MHz参考时钟。ADALM-Pluto可以拆开接外部参考USRP B210后面板直接有10 MHz参考输入和PPS接口。如果一时没有外部时钟就用GPS驯服晶振GPSDO把收发两端都锁到GPS时钟上频率偏差可以直接降到1 ppb量级。没有这一步你后面所有的频偏估算都会混入一个不可控的固定偏差。4.3 发射功率与PA线性区间SDR板载发射功率通常不高USRP B210在2.4 GHz最大输出也就10 dBm左右ADALM-Pluto更小。做近场测试、桌面回环实验够用但要真正模拟卫星链路必须加外置功放和低噪放。加功放时前面提到的OFDM峰均比问题就来了。OFDM信号瞬时功率波动大功放进入饱和区后会产生非线性失真。工程上最简单有效的办法是功率回退让功放工作在比1 dB压缩点低6~10 dB的平均功率水平。代价是效率下降换来的却是可接受的EVM误差矢量幅度。如果你追求更高的效率可以试试DFT-s-OFDM也就是把QPSK符号先做一次DFT扩展再进OFDM调制器峰均比会低很多代价是接收端均衡复杂度略微增加。这也是5G NR上行选择DFT-s-OFDM的原因卫星上行链路完全可以借用这个设计。4.4 发射端代码接入SDRMATLAB里控制SDR发射可以用DSP System Toolbox里的sdrtransmitter对象。整体流程是把前面仿真生成的基带波形经过RRC成形后直接推给这个对象txSDR sdrtransmitter(Pluto); txSDR.CenterFrequency 2.4e9; txSDR.BasebandSampleRate 1e6; txSDR.Gain -10; % 注意先小功率测试 transmitRepeat(txSDR, txWaveform); % 循环发射方便接收端持续抓取第一次上硬件一定要把增益调到很低的负值先用频谱仪或另一块SDR确认信号存在、频谱形状正常再逐步加功率。千万不要一上来就满功率发射这会损坏板载功放这个教训是我用真金白银换来的。5. 接收端同步没有同步的OFDM全是噪声发射端把信号推出去之后接收端才是真正的重头戏。OFDM接收机在卫星链路上能不能工作很大程度上取决于同步做得好不好。下面是接收端必须按顺序处理的四个问题帧检测、小数倍频偏估计、整数倍频偏估计、符号定时与残余频偏跟踪。5.1 接收处理流水线接收端从SDR采到的是基带IQ数据流。整个处理链路是用前导的自相关峰做帧到达检测用Schmidl-Cox估计小数倍频偏并校正在频域搜索整数倍子载波偏移用CP相关或前导做符号定时同步确定FFT窗口起点提取OFDM符号、做FFT用导频做信道估计与均衡最后用PLL或CPE公共相位误差估计消除残余频偏带来的相位旋转。每一步没做对后面的星座图都不会干净。我用RTL-SDR收过一个没做整数倍频偏校正的信号屏幕上看到的是完全随机的星座点一度以为是发射端坏了直到在频域看频谱才发现整个OFDM符号平移了好几个子载波位置。5.2 Schmidl-Cox粗同步与小数倍频偏估计设前导长度的一半为 $L$接收信号为 $r(n)$滑动自相关计算如下$$P(d) \sum_{m0}^{L-1} r^*(dm) \cdot r(dmL)$$$$R(d) \sum_{m0}^{L-1} \left| r(dmL) \right|^2$$归一化度量 $M(d) \frac{|P(d)|^2}{R(d)^2}$峰值位置就是帧起始的粗估计。频偏估计则来自自相关的相位$$\hat{\epsilon} \frac{\angle P(d_{peak})}{2\pi}$$这个 $\hat{\epsilon}$ 是归一化到子载波间隔的小数倍频偏。根据它做时域相位校正% 频偏校正 n (0:length(rxWaveform)-1).; rxCorrected rxWaveform .* exp(-1j * 2 * pi * epsilon * n / L);这里的 $L$ 必须严格等于前导中重复周期对应的采样点数我在实际代码里因为过采样倍数没对齐吃过一次大亏频偏估出来偏差一倍怎么校正相位都转不对。建议在代码里把 $L$ 和过采样率的关系单独写成一个变量避免后面犯迷糊。5.3 整数倍频偏搜索小数倍频偏校正后还剩下整数倍子载波偏移。这时候在频域把接收的每个OFDM符号的导频子载波和本地导频做滑动互相关搜索使相关峰值最大的移位量就是整数倍频偏。% 搜索结果是对整数倍偏移k的估计 for k -maxIntFreqOffset : maxIntFreqOffset corrMetric(k maxIntFreqOffset 1) ... sum( conj(pilotLocal) .* rxPilotFreq(k pilotIdx) ); end [~, bestIdx] max(abs(corrMetric)); intFreqOffset bestIdx - maxIntFreqOffset - 1;如果你的链路里晶振误差和多普勒的总量级大到几十kHz而子载波间隔只有15 kHz这一步搜索范围至少要覆盖正负4个子载波。这也是我为什么把子载波间隔提高到30 kHz的原因之一——搜索范围直接缩小一半鲁棒性更好。5.4 符号定时与信道估计帧起始和频偏校准之后紧接着需要找到每个OFDM符号的FFT窗口起点。最简单的办法是利用循环前缀的自相关特性CP是OFDM符号尾部的复制所以滑动窗口内CP部分的样本与符号尾部样本高度相关。计算滑动相关峰就能锁定符号边界。卫星信道变化相对平缓做信道估计不需要像地面移动通信那么密集的导频。我采用7个子载波间隔插一个导频的梳状导频结构接收端在这些位置做LS估计$$\hat{H}(k) \frac{Y(k)}{X(k)}$$再用线性插值或线性最小二乘拟合把每个数据子载波的信道响应补全。隔离导频间距不能太大否则子载波间的信道变化会导致插值失真间距太小又浪费有效数据。7个子载波插一个在1 MHz带宽、30 kHz间隔下既不浪费也稳得很。5.5 频偏跟踪环路在真实卫星链路里多普勒是时变的帧间会存在残余频偏。我的做法是在导频估计出公共相位误差CPE后用一阶PLL跟踪。环路带宽设在50~200 Hz之间阻尼系数0.707。典型的环路滤波系数可以这样粗略计算loopBw 100; % Hz damp 0.707; T 1 / (30e3 * 10); % 每符号更新周期 theta 2 * pi * damp * loopBw * T / (damp 0.25 / (4 * damp^2)); beta 4 * theta^2 / (1 2 * damp * theta theta^2); alpha 2 * damp * theta / (1 2 * damp * theta theta^2);这个环路的整定值要在实测里微调但初始参数按这个公式来收敛速度和解调性能都算是比较均衡的。5.6 关于DQPSK的一个取舍如果只是想快速验证链路通不通我建议在原型里用DQPSK替代QPSK加信道估计。DQPSK的信息编码在相邻符号的相位差上接收端不需要做信道均衡也知道当前发的是哪个符号代价是BER性能比相干QPSK差2~3 dB。但换来的接收机简化程度非常大尤其适合第一次跑原型的时候。我的习惯是第一版永远用DQPSK先把同步和链路打通等稳定了再切回QPSK加信道估计把性能榨出来。6. 实测链路排错一个信号满格但解不出数据的案例仿真通过、硬件也接好了真正折磨人的是实测排错环节。我在这里分享一个非常典型的案例你以后大概率也会遇到。6.1 四级回环验证法我强烈建议按下面的顺序逐级推进每级通过后再进下一级而不是直接跳到最后一步软件回环发射波形文件直接喂给接收机处理验证算法链路正确SDR射频回环用SMA线缆把发射端和接收端直接相连中间加30~40 dB衰减器排除天线和空间传播的不确定性近场天线测试两端各接天线距离几米到几十米验证天线和射频前端模拟卫星链路加入可调衰减、人为频偏、多普勒模拟或使用卫星信道仿真器。大部分解不出来的问题都能在第二步或第三步暴露出来。6.2 常见问题定位表实际调试中以下现象我几乎每次都遇到现象可能原因解决方向频谱仪上看不到信号发射功率太低、频率没对准、功放未使能检查增益设置、用频谱仪100 kHz扫描范围找信号信号明显但是接收端同步不到频偏超范围、前导太弱扩大频偏搜索范围、检查晶振参考、增加发射功率星座图整体转圈残余频偏未跟踪启用CPE/PLL跟踪把环路带宽拉准星座图呈圆环状接收采样钟偏差积累做符号定时跟踪或改用外部参考时钟高频段符号错、低频段对定时偏差导致子载波间相位旋转精确调整FFT窗口起点EVM随功率增大而恶化PA非线性降低发射功率、增加回退6.3 完整排错过程那次信号满格但解不出数据的排错过程值得完整复盘一遍。现象是频谱仪上OFDM频谱包络清清楚楚接收SDR的RSSI也在-50 dBm左右说明信号确实进来了但解调端就是出不来星座图。我当时的排查顺序是先怀疑频偏把整数倍频偏搜索范围扩大到正负8个子载波依然无解。再把发射端切到连续导频用非OFDM的纯正弦波做测试发现频谱仪看到的频率与设定频率差了大约12 kHz——这是两块SDR晶振不一致的固定偏差。校正了这个固定偏差之后OFDM信号仍然无法解调。随后我不再怀疑频偏转去抓IQ数据做离线处理。把接收到的原始IQ数据存成文件在MATLAB里跑xcorr帧检测发现自相关峰根本不存在。这时才怀疑分辨率发射端是4倍过采样后发射接收端采样率也设成了4 MHz但接收端代码里fprintf打印的采样率却是1 MHz。问题找到了接收端实际用1 MHz采样却按照4 MHz的符号速率去解析信号所有符号宽度全部错位。修正接收采样率后星座图立刻出来了。这件事让我意识到一个问题原型系统里90%的问题不是算法bug而是参数没有对齐。仿真环境里参数天然一致硬件环境里采样率、过采样率、频点、增益这些参数散落在多个脚本里一不小心就各说各话。6.4 频谱仪使用的几个建议在没有专业频谱仪的情况下用SDR本身做频谱观测也能凑合但有几点要注意RBW分辨率带宽设太大会把OFDM的窄带子载波包络抹平设太小扫频速度又慢。1 MHz带宽信号RBW建议10~30 kHz扫描范围要覆盖中心频率正负200 kHz以上防止频偏导致信号跑到扫描范围之外看频谱时关掉接收机的AGC手动固定增益不然信号功率波动会把AGC拉来拉去看起来像频谱在抖。7. 再往前走一步从原型到NTN、OTFS与完整链路第一版OFDM卫星原型能稳定解调后你会发现这套平台的价值远不止先把它跑通。它就像一个通信实验室的小型试验床很多前沿方向都能在上面验证。7.1 从OFDM到OTFS对抗高动态更狠的调制OFDM在LEO场景下的核心痛点是高速运动带来的多普勒变化。正交时频空间调制OTFS把信息映射在时延-多普勒域天生应对双选信道近几年学术界非常热。MATLAB从R2023b开始在通信工具箱里提供了OTFS相关函数你可以在现有SDR平台上把发射机换成OTFS调制接收端做相应解调对比同一颗卫星过境数据下OFDM和OTFS的误码率差异。这样做出来的对比结果比单纯跑仿真可靠得多写论文也有说服力。当然OTFS也还处在从理论走向工程的过程中接收端均衡复杂度比OFDM高一级SDR平台上要做到实时处理需要不少优化。但作为原型实验先离线处理完全可行。7.2 结合5G NTN做链路设计第三代合作伙伴计划3GPP的NTN非地面网络标准化路线里大量采用OFDM族波形来兼容地面5G生态。如果你的目标是把自己的原型跟NTN场景对齐可以在现有OFDM原型基础上增加这些模块随机接入前导、HARQ、自适应调制编码AMC、波束赋形。MATLAB的5G Toolbox提供nrOFDM相关函数可以生成与标准对齐的帧结构再通过SDR推出去。一个经常会遇到的问题是多普勒预补偿地面终端在发射前就根据卫星星历和多普勒预测先把频率偏移掉让信号到达卫星时中心频率刚好落在卫星接收带宽中央。这个功能放在MATLAB里实现很简单查一下卫星的TLE轨道参数用satelliteScenario对象算出实时多普勒再在发射端乘一个对应的复指数校正信号。这一套算下来接收端的频率搜索压力会大幅下降。7.3 从点对点向全链路演进我的建议是不要把原型系统停在点对点收发这一层。往下走可以接入真实的SDR和天线做外场实验往上走可以把多用户接入、资源调度、重传机制加进来让它从一个物理层演示系统变成一个能传实际数据的通信系统。到这一步你手里的东西就不只是课程作业了它已经是一个具备原型验证能力的卫星通信实验平台。如果条件允许尽量把基带处理和射频前端分离基带用MATLAB实时处理或C代码生成部署到Zynq平台上射频前端用USRP或板载射频芯片。这样一套结构无论是继续做论文研究、工程项目还是转行做通信系统工程师都会是一个很拿得出手的实战经验。最后分享一个我自己的经验做这种仿真硬件项目不要按先全部做完再测试的思路推而是按最小系统先通再逐步加功能的思路走。我第一次搭OFDM卫星原型的时候从仿真到硬件全链路第一版只用了最简单的DQPSK、64点FFT、无信道编码信号用SMA线缆直连目的只有一个——让数据先通起来。通了之后再加编码、加导频、换天线、加多普勒补偿每一步都只改一个变量出了问题立刻能定位。如果你也被这个方向卡住了或者已经买好了SDR却不知道怎么下手不妨从这篇文章里的参数表出发先把发射链路仿真跑起来再拿着波形去接硬件。卫星通信的门槛没有想象中那么高但每一步都得走得扎实。
返回列表