ARTICLE DETAIL

资讯详情

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

北斗B1I信号MATLAB仿真:从扩频码生成到接收机捕获与解扩

北斗B1I信号MATLAB仿真:从扩频码生成到接收机捕获与解扩 简介本资源是一套面向卫星导航与通信方向本科生、研究生及科研人员的MATLAB实践代码包聚焦北斗B1I频段扩频信号建模与接收仿真解决从理论码生成到实际解调全流程的动手验证难题。压缩包共含若干MATLAB脚本与Simulink模型文件具体数量未提供核心为扩频码生成、B1I载波调制、信道加噪、码同步滑动相关/早迟门、匹配滤波与解调等关键模块实现适用于导航信号处理算法学习、课程设计及系统性能初步评估。资源体积仅7KB轻量紧凑便于快速部署与调试已有264人下载学习可直接运行复现B1I路信号的端到端仿真流程获取完整可执行逻辑、典型参数配置如长码周期、码率、载波频率及基础同步策略实现思路是理解北斗民用信号体制与MATLAB通信仿真实践结合的实用入门材料。 之前在一个导航接收机预研项目里需要把北斗B1I信号的完整收发链路在MATLAB里跑通干的事情听起来不多生成扩频码、扩频、调制然后接收端做捕获、跟踪、解扩。但真正动手以后发现每一步都有讲究尤其是扩频码的生成细节和接收端捕获参数的选择稍不注意仿真结果就完全不对。这篇文章把我整理好的B1I信号仿真思路完整写下来重点是扩频码结构、发射端信号生成、接收端捕获与解扩以及我反复踩过的几个坑适合正在做北斗B1I信号仿真、扩频码验证或者准备基于MATLAB做导航接收机算法的同学参考。1. 动工之前必须吃透的B1I信号协议细节1.1 频点、码率、码长三个数字决定整个仿真框架北斗B1I信号是B1频点上最经典的民用信号之一载波频率为1561.098 MHz测距码速率为2.046 Mcps码长为2046个码片码周期正好是1 ms。这三个数字几乎决定了后续仿真里的所有参数采样率选多少、FFT点数取多少、一个数据比特持续多长时间全部从它们推导出来。先算一个最基础的关系码周期等于码长除以码速率2046 ÷ 2.046e6 1 ms。这个1 ms是黄金时间基准因为B1I信号里每个扩频码周期正好1 ms接收机捕获时做相干积分通常就取整数个码周期。如果采样率取16.368 MHz也就是码速率的8倍那么1 ms对应16368个采样点这个数字是FFT捕获算法里最常碰到的长度。B1I的调制方式是BPSK-R(2)括号里的2表示码速率是基准1.023 MHz的2倍。相比GPS L1 C/A码的1.023 McpsB1I的码速率更高带宽更大理论上测距精度也更好。仿真中带宽和采样率的选择要匹配这个码速率否则生成的信号频谱会混叠相关峰会畸变。另外提一句B1I信号实际上是I/Q双支路结构I支路调制测距码加导航电文Q支路只调制测距码。绝大多数仿真验证只需要I支路我在项目里也是先做I支路Q支路后面再叠加。1.2 D1/D2电文与NH码的叠加关系B1I信号的导航电文分两种D1电文速率50 bps由MEO/IGSO卫星播发D2电文速率500 bps由GEO卫星播发。两种电文都长为30秒的主帧结构但对仿真来说第一个要关心的是D1电文前面还有一道NH码二次编码。NH码的全称是Neumann-Hoffman码B1I的D1电文使用一个20 bit的NH码序列码速率1 kbps。意思是导航电文的一个数据比特持续20 ms这个比特先要和NH码的20个码片逐位相乘每个NH码片持续1 ms。而1 ms正好对应一个完整的扩频码周期所以一个导航电文比特里包含了20个扩频码周期。这个叠层关系在发射仿真里很容易处理只要按层级复制就行电文比特复制20次得到NH码级序列再对每个NH码片复制2046次得到扩频码片级序列。NH码本身是已知的固定序列B1I用的是00000100110101001110顺序以北斗ICD为准。GEO卫星的D2电文不经过NH码二次编码所以仿真GEO卫星时这层可以直接跳过。接收端解调时就要反过来先剥离扩频码得到1 ms一个的NH码片软信息再找到NH码的起始位置完成20 ms相干累加才能真正判决出一个导航电文比特。很多初学者只做了扩频码的解扩发现电文解出来全是乱的大概率就是漏了NH码这一层。1.3 为什么B1I要用Gold码而非单一m序列B1I的测距码是Gold码由两个11级的m序列模2加生成。为什么不直接用单个m序列因为m序列的互相关特性不够好不同卫星之间信号容易互相干扰。导航系统里每颗卫星都要有自己的测距码而且接收机要同时区分多颗卫星的信号码之间必须保持良好的互相关性。Gold码的核心优势在于由一对优选m序列生成的一组Gold码任意两个码之间的互相关值被限定在少数几个离散值上最大互相关值远小于m序列的随机互相关水平。对于11级寄存器生成的Gold码序列长度为2047但B1I实际使用的码长为2046等于把2047位Gold码周期截掉了1位。这一点在代码实现里要特别注意生成完2047位以后要取前2046位不能直接当2047位用。自相关方面B1I测距码周期为2046个码片时理想自相关峰值是2046其他位置的自相关值很小。接收机捕获就是利用这种尖锐的自相关峰来搜索码相位码相位对齐时相关值最大没对齐时接近零。2. 扩频码生成两个移位寄存器和一个相位抽头表2.1 G1/G2生成多项式与寄存器初始化北斗B1I测距码生成的核心是两个11级线性反馈移位寄存器G1和G2。G1的生成多项式是G1(X) 1 X X^7 X^8 X^9 X^10 X^11G2的生成多项式是G2(X) 1 X X^2 X^3 X^4 X^5 X^8 X^9 X^10 X^11这两个多项式在MATLAB里可以写成反馈抽头索引的形式。以G1为例参与反馈的寄存器级是第1、7、8、9、10、11级把这些输出异或以后作为第1级的输入然后整个寄存器右移一位。G2同理参与反馈的级是第1、2、3、4、5、8、9、10、11级。两个寄存器的初相都设为全1。这里有个容易搞混的细节多项式里的1对应的是移位寄存器第一级的位置。实现时从低位到高位排列还是从高位到低位排列会直接影响输出的码序列和ICD中给出的序列是否一致。比较稳妥的做法是先在代码里生成几颗卫星的码和已知参考序列的前几十位做对比确认顺序无误后再批量生成。2.2 卫星号到相位抽头的映射B1I的Gold码生成方式和GPS C/A码类似G1寄存器直接输出完整m序列G2寄存器则从两个指定的寄存器级各取一路输出异或后得到G2序列再与G1序列模2加得到最终测距码。每一颗卫星对应一对不同的G2相位抽头也就是卫星号到抽头对的映射表。例如B1I ICD中部分卫星的G2相位抽头对应关系是PRN 1对应2和7PRN 2对应3和4PRN 3对应5和6PRN 4对应1和9PRN 5对应2和9。完整映射表在北斗系统ICD文件里可以查到工程实现时最好把它们做成一个表按PRN索引读取不要写死在代码分散的地方。需要注意抽头的编号是从1开始还是从0开始。不同资料写法不一样如果按C/A码的惯例通常编号从1开始对应寄存器第1级到第11级。写代码前先统一约定否则后面排查起来很痛苦。2.3 MATLAB生成2046码片Gold码的完整代码下面是我在项目中实际使用的生成函数输入PRN号输出长度为2046的双极性码序列1对应10对应-1function code generateB1ICode(prn) % B1I测距码生成输出2046长度的1/-1序列 g1 ones(1, 11); g2 ones(1, 11); % G1反馈抽头: 1,7,8,9,10,11 % G2反馈抽头: 1,2,3,4,5,8,9,10,11 g1Tap [1 7 8 9 10 11]; g2Tap [1 2 3 4 5 8 9 10 11]; % 抽头映射表这里只列前5颗完整版查ICD phaseMap {[2 7]; [3 4]; [5 6]; [1 9]; [2 9]}; if prn length(phaseMap) error(PRN not in table); end phase phaseMap{prn}; code zeros(1, 2046); for i 1:2046 g1out g1(11); fb1 mod(sum(g1(g1Tap)), 2); g1 [fb1 g1(1:10)]; g2out1 g2(11 - phase(1) 1); g2out2 g2(11 - phase(2) 1); g2out xor(g2out1, g2out2); fb2 mod(sum(g2(g2Tap)), 2); g2 [fb2 g2(1:10)]; code(i) xor(g1out, g2out); end code 1 - 2 * code; % 转双极性 end注意这里取抽头输出的时候用了11 - phase 1原因是寄存器数组的索引方向和处理方式有关。如果直接按文档顺序把第1级放在数组最右边就不需要这样换算但多数MATLAB实现习惯把最新反馈放在数组首位所以需要做一次索引反转。这段代码生成结果正确的前提是每颗卫星的抽头对和ICD表格一致如果发现PRN 1生成出来的序列对不上参考序列优先检查这个索引换算。2.4 用自相关/互相关曲线验证码的正确性生成完扩频码不能直接用先做验证。最直观的方法是算自相关和互相关。自相关函数在零偏移处应该有尖锐峰值2046其他位置的值非常小两个不同PRN的码互相关值应该保持在较小的水平。code1 generateB1ICode(1); code2 generateB1ICode(2); % 自相关 [acor, lag] xcorr(code1, code1, 100); figure; plot(lag, acor); title(PRN 1 自相关); % 互相关 [ccor, lag] xcorr(code1, code2, 100); figure; plot(lag, ccor); title(PRN 1 与 PRN 2 互相关);我实际跑出来的结果是自相关峰值正好是2046旁边几个位置的相关值都非常低互相关最大值一般不超过几十。如果自相关峰值不是2046说明码长或者序列生成有问题如果互相关出现接近2046的尖峰说明两颗卫星的码没有区分开多半是抽头映射表写错了。一个容易被忽略的验证点是B1I码是2046位而非2047位。如果你在循环里把寄存器完整跑完2047位再输出相关峰会比预期多出一些特征导致后续捕获结果偏差。用上面的代码直接输出2046位即可别多跑。3. 发射端仿真从导航电文比特到B1I中频信号3.1 电文编码、NH码调制与扩频的先后关系发射端的第一步是准备导航电文仿真时通常用随机比特代替。假设要发送20个电文比特速率50 bps总时长400 ms。在D1电文结构下每个电文比特要先与NH码的20个码片相乘变成速率1 kbps的NH码片序列这一步本质是把原始比特扩展到20 ms长度。我习惯用矩阵操作替代for循环效率高很多。先生成20个电文比特的行向量再复制20次与NH码序列的列向量相乘得到20×20的矩阵展开成一维就是400个NH码片。接下来每个NH码片持续1 ms对应一个完整扩频码周期所以把每个NH码片复制2046次就得到扩频前的基带码片序列。最终发射端的扩频码片速率为2.046 Mcps整个400 ms信号总共包含818400个码片。这个序列在发给后面的调制模块之前必须完成极性转换因为电文比特和NH码都是0/1逻辑值而BPSK调制需要的是1/-1双极性电平。3.2 BPSK调制与采样率选择BPSK调制的本质就是把双极性码片序列乘上一个载波。基带表达式为s(t) d(t) * c(t) * cos(2πf_c t)其中d(t)是导航电文含NH码c(t)是测距码f_c是载波频率。在MATLAB仿真里必须先把连续时间信号离散化所以要确定采样率。采样率选择有一个关键原则最好让每个码片对应整数个采样点。码速率2.046 Mcps如果采样率取16.368 MHz那么每个码片正好8个采样点。这样码片边界和采样点位置严格对齐相关性计算不会因为采样点落在边界处而产生额外损耗。如果采样率不是码速率的整数倍虽然也能仿真但捕获时的相关峰会变成不那么标准的三角形峰值定位精度下降。中频载波频率我习惯取4.092 MHz也就是码速率的2倍。这个值不算高可以在16.368 MHz采样率下每个载波周期采4个点既满足奈奎斯特采样定理又方便数字下变频时用正交混频实现。想要更贴近真实射频链路可以取更高中频但仿真里意义不大反而增加计算量。调制过程可以用一个复数基带信号乘上载波实现也可以直接生成实信号。接收端仿真通常先产生复数基带信号再上变频到中频这样处理多普勒频移时更灵活因为多普勒可以直接加在基带相位上不需要真的去修改载波频率。3.3 多普勒频移和噪声的仿真注入北斗卫星在轨运动会导致接收信号产生多普勒频移静止地面接收机观测到的B1I多普勒范围大约在±5 kHz以内。仿真中这个频移可以直接叠加到载波频率上也就是把s(t)里的cos(2πf_c t)换成cos(2π(f_c f_d)t)其中f_d就是多普勒频移。为了验证接收机的频率搜索能力我通常把多普勒设成一个固定值比如3000 Hz同时再叠加一个很小的频率变化率模拟动态这样捕获和跟踪环节都能得到考验。噪声仿真的核心参数是载噪比C/N0单位是dB-Hz。导航信号带宽很宽信号淹没在噪声里单看时域波形根本发现不了信号捕获全靠相关增益把信噪比提上来。B1I信号在接收机端的典型C/N0大约在35到50 dB-Hz之间。计算噪声功率时要先确定仿真带宽也就是采样率的一半然后按公式N0 10^((C/N0)/10)换算成噪声功率谱密度。如果信号功率归一化为1那么采样率fs下的噪声方差就是fs / (2 * 10^((C/N0)/10))。从C/N0到相关前信噪比的经验换算1 ms相干积分可以获得约10 * log10(2046 * 8 / 2) ≈ 39 dB的处理增益具体数字和采样点数有关。所以C/N0为45 dB-Hz时捕获后信噪比大约在10 dB以上捕获检测已经非常可靠。这个数量级可以在仿真结果里直接验证。3.4 发射信号频谱与相关结果检查信号生成完以后我会先看频谱确认信号确实是带限的BPSK。BPSK-R(2)信号的频谱是sinc函数形状主瓣零点带宽为2倍的码速率即4.092 MHz左右。如果频谱形状不对比如出现明显的离散谱线或者带宽明显偏窄说明扩频序列周期特性有问题或者极性映射错了。再看自相关。把生成的发射信号和本地扩频码做相关运算在零偏移处应该出现明显的相关峰。这里要注意如果把整个发射信号和单个码周期做相关由于信号跨了多个码周期需要在相关前先取一个码周期的数据。这也是接收端捕获时的标准操作。在实际项目中我还会额外检查信号功率和噪声功率的比例是否符合预期。方法是用数字下变频后的基带信号计算信号功率再用纯噪声段估算噪声功率。如果比值和理论设定差很多通常是C/N0计算公式里的带宽搞错了或者噪声添加的位置不对。4. 接收端仿真二维捕获、跟踪环路与解扩4.1 捕获的本质码相位和多普勒的二维搜索接收机收到信号后不知道卫星的码相位也不知道载波多普勒频率捕获的任务就是同时估计这两个参数。码相位有2046种可能多普勒频率如果搜索±10 kHz范围、步进500 Hz就有41个频率单元。两者组合起来是一个2046×41的二维搜索平面。最朴素的串行搜索就是在每个频率假设下把本地码逐码片滑动做相关计算量巨大2046个相位 × 41个频率 × 2046次相关完全不现实。工程上通常用FFT做并行码相位搜索一次FFT就能同时计算所有码相位的相关值搜索效率提升几个数量级。这就是为什么前面强调采样率要选好FFT点数固定为1 ms数据长度计算量完全可控。捕获算法的判定依据是相关峰与噪声底部的比值。通常设定一个门限超过门限就认为捕获成功并输出此时的多普勒估计值和码相位估计值。门限设置要折中门限太低容易虚警门限太高在弱信号下漏检。仿真时可以通过多次蒙特卡洛仿真确定合适的门限一般取噪声基底标准差的4到6倍。4.2 基于FFT的并行码相位搜索实现FFT并行码相位搜索的原理是时域相关等价于频域共轭相乘。接收信号与本地载波混频去除载波后取1 ms数据做FFT本地扩频码也做FFT取共轭两者相乘后再IFFT结果的模值平方就是每个码相位下的相关功率。代码逻辑大致如下fs 16.368e6; fc 4.092e6; fd 3000; % 真实多普勒 CNo 45; % dB-Hz N 16368; % 1ms采样点 % 假设rxSig是接收到的中频信号coarseFreq是搜索频率 for fk -10000:500:10000 n 0:N-1; lo exp(1j*2*pi*(fcfk)/fs*n); baseband rxSig .* lo; spec fft(baseband, N); corr ifft(spec .* conj(fft(localCode, N))); power abs(corr).^2; [peak, idx] max(power); if peak threshold codePhase idx - 1; freqEst fk; break; end end这段代码有几个细节需要说明。第一载波混频用的是复数本振可以同时得到I/Q两路信号避免单个实信号混频后出现镜像分量问题。第二FFT输出与码相位的对应关系是循环移位关系第idx个输出对应码相位idx-1不是1对1直接套用捕捉到峰值后要按这个关系换算成码片延迟。第三如果接收信号的多普勒频率恰好落在两个搜索频率格点中间相关峰值会下降所以频率步进不能太大。多普勒搜索步进的上限由相干积分时间决定。积分时间1 ms时频率响应主瓣宽度约1 kHz步进取500 Hz是安全的峰值损耗不超过1 dB左右。如果想缩小步进提高精度搜索次数会增加仿真时间也成倍增长。实际项目中可以先粗捕步进1 kHz锁定后再用跟踪环精确估计频率。4.3 码环与载波环的联合跟踪捕获给出的码相位和频率估计精度还不够高后续要靠跟踪环路精确锁定。跟踪模块包含两个主要环路码延迟锁定环DLL和载波锁定环PLL。码环通常用早迟相关器实现。本地生成三份扩频码分别是超前半个码片、即时、滞后半个码片分别与接收信号做相关运算。当环路锁定时即时相关值最大超前和滞后相关值相等。误差信号通过码环滤波器后反馈给码NCO调整本地码相位。载波环我用的是Costas环因为它对导航电文的180度相位翻转不敏感。载波NCO产生本地载波与接收信号混频后得到I/Q两路用Q路符号乘I路的符号构成鉴相器输出相位误差。环路滤波器为二阶带宽通常取15到30 Hz。带宽太小环路响应慢动态性能差带宽太大会引入更多噪声。B1I信号中等动态场景下取20 Hz左右比较合适。跟踪环的MATLAB实现比捕获更繁琐因为每个采样点都要更新NCO和环路滤波器状态。我采用的方式是每1 ms处理一次相关结果环路更新率1 kHz所有相关累加在采样级完成这样既贴近真实接收机架构又不会让仿真慢到无法接受。4.4 解扩后的电文恢复与误码验证跟踪稳定后即时支路的相关输出就是解扩后的基带信号。对D1电文来说这个输出的速率是1 kbps也就是每个值对应1 ms的NH码片。要恢复50 bps的电文比特还需要做NH码同步。NH码同步的简单做法是先取20个连续的1 ms相关值与NH码的20个可能移位逐一求相关相关值最大的移位就是NH码起始位置。找到起点后每20个相关值乘上对应位置的NH码位再累加就得到一个电文比特的软信息符号判决得到01比特。完成解调后我会和发送端原始电文比特做对比统计误码率。在C/N0为45 dB-Hz时电文解调误码率应该非常低跑几百个比特也不会出现错误。如果误码率很高需要逐个环节排查捕获是否正确、跟踪是否收敛、NH码同步是否成功。这三个环节任何一个出错最终电文都是乱的。5. 仿真过程中反复踩的坑和排查思路5.1 扩频码序列反了G2初相与输出顺序的歧义我最开始生成B1I扩频码时直接把G2寄存器初始化为全1然后从末级输出结果相关验证时就发现峰值不对。仔细对照参考序列发现生成的码和标准序列差了相当多位数后来确认是G2抽头索引换算错了。G2寄存器的输出顺序和抽头序号的关系取决于你把寄存器的哪一端当作第1级。排查这个问题的最快办法是从ICD或公开资料里找一颗卫星的前几十位参考码序列和你的生成结果比对。如果前几位全对后面开始错说明反馈连接有问题如果从头就完全不同多半是抽头换算或者初相设置错。这个坑相当隐蔽因为代码本身可以正常跑相关峰也能出现但捕获结果整体偏移。5.2 相关峰始终不明显先从采样率找原因我曾遇到过一次相关峰特别平坦的情况幅度远低于预期。排查了半天最后发现采样率设成了15 MHz而不是16.368 MHz导致每个码片对应大约7.33个采样点码片边界处的采样位置漂移相关积分损失严重。把采样率改成码速率的整数倍后相关峰立刻恢复正常。另一个常见原因是极性映射问题。扩频码和电文都用0/1逻辑值参与运算时如果忘记在调制前转换为双极性相关结果就会错位。这类问题有个明显特征相关峰不是没有而是整体偏低且带符号翻转现象。建议在发射端和接收端都打印一小段基带码片序列确认数值域是±1还是0/1形成统一约定。5.3 多普勒搜索步进与相干积分时间的矛盾捕获时频率搜索步进取太大会导致漏检。最初我用1 kHz步进捕一个C/N0只有35 dB-Hz的弱信号反复试都捕获不到。原因是真实多普勒频率落在两个搜索点正中间时1 ms相干积分的相关峰衰减接近3 dB本来就弱的信号更容易被门限拒掉。把步进缩小到500 Hz以后问题立刻消失。这一点在仿真里很容易忽略因为仿真时间会随着搜索次数增加而变长但如果信号功率本来就紧张500 Hz步进几乎是不能妥协的。若要进一步降低步进可以先粗搜再用插值精化频率估计不必把步进设到100 Hz这类小尺度否则搜索次数太多仿真跑不起。5.4 人为加入延迟的码相位竟然对不上这个坑比较有意思。我在接收端人为把发射信号延迟了10个码片然后做捕获期望捕获到的码相位是真实相位加10但实际结果总是差一段。后来意识到FFT捕获算法默认接收信号是循环移位的也就是说我延迟10个码片峰值出现在本地码循环移位10个码片的位置。如果信号跨了码周期边界或者延迟值不是整数码片峰值位置还会出现偏移和幅度下降。处理方式是捕获输出的是以本地码起点为参考的循环码相位计算真实延迟时要按mod(相位, 2046)来解读同时确认信号截取起始位置和码周期起点对齐。仿真中给接收信号添加延迟时最好明确规定延迟的参考点比如从某个码片边界开始延迟整数个码片这样捕获结果可以直接验证。6. 仿真验证与往多星、多径场景扩展6.1 一个自洽的验证链路完整仿真做完以后不要只盯着同步结果整体验证链路的自洽性很重要。我通常分四步验证第一步扩频码自相关互相关验证第二步发射信号频谱和功率验证第三步无噪声条件下捕获是否给出正确参数第四步加噪声后统计解调误码率。每一步通过后再进入下一步能快速定位问题。无噪声条件下的验证尤其推荐。把C/N0设成极大值理论上捕获、跟踪、解调全过程都应该完美工作。如果无噪声就出问题说明是逻辑错误而不是噪声影响如果无噪声通过、加噪声后性能很差才能放心去调环路参数和门限。6.2 从单星到多星信号叠加与互相关影响单星链路跑通后扩展多星场景是自然而然的需求。多颗北斗卫星的信号在空间叠加接收机收到的总信号是各卫星信号乘以各自幅度后的和。仿真时每颗卫星用各自的扩频码PRN设置不同的码延迟和多数勒生成后叠加到一起再加噪声。多星接收时捕获阶段的核心问题是一颗卫星的强信号可能淹没另一颗弱信号出现远近效应。Gold码即使互相关特性好也架不住功率差太大。比如一颗卫星C/N0为50 dB-Hz另一颗只有35 dB-Hz强信号的互相关底噪可能把弱信号的峰值盖住。解决方法是捕获到强信号后把它重构出来并从总信号中减去再搜下一颗星或者用串行干扰消除的思想逐次剥离。6.3 后续可以扩展的方向这个仿真框架的扩展空间不小。如果关注复杂信道可以加入多径衰落模型观察多径对码跟踪环的延迟估计偏差如果关注与其他系统互操作可以用同样思路扩展到北斗B1C或B3I只要改一下码生成多项式和调制参数。接收端想做得更接近工程实现可以在捕获后加精细频率估计用插值或二次曲线拟合提高多普勒估计精度减少跟踪环的初始误差。我自己的下一步打算是把发射端做成一个可配置的多卫星信号生成脚本统一管理每颗卫星的功率、延迟、多普勒和电文内容这样接收端算法验证时可以直接喂进去一组标准测试向量比每次手动改参数方便得多。回头再看整个B1I仿真过程核心其实不是MATLAB代码本身而是对信号结构的理解。扩频码怎么生成、NH码叠在哪一层、采样率和码速率为什么必须保持整数比关系、捕获搜索为什么按500 Hz步进这些问题想通了代码只是最后落笔的事。建议第一次做仿真的同学从单颗卫星、无噪声、固定多普勒的简单场景开始一步步把链路跑通再逐步加复杂度这样排错成本最低。本文还有配套的精品资源点击获取
返回列表