汇总表(主码=Mcps,二次码=bps,电文= symbols/s):

频段/分量 主码速率 RC 主码长度 L 主码周期 二次码(长度) 二次码速率 二次码周期 导航电文速率 RD
E1-B(数据) 1.023 4092 4 ms 250
E1-C(导频) 1.023 4092 4 ms CS25(25) 250 100 ms
E5a-I(数据) 10.230 10230 1 ms CS20(20) 1000 20 ms 50
E5a-Q(导频) 10.230 10230 1 ms CS100(100) 1000 100 ms
E5b-I(数据) 10.230 10230 1 ms CS4(4) 1000 4 ms 250
E5b-Q(导频) 10.230 10230 1 ms CS100(100) 1000 100 ms
E6-B(数据) 5.115 1000
E6-C(导频) 5.115 CS100(100) =RC/L=RC/L=RC/L(L 未公开) 100×(L/RC)100×(L/RC)100×(L/RC)
  • 为何 E5a-I/E5b-I 也有二次码? ICD 的 Table 14 明确给出:E5a-I 的二次码长度为 20,E5b-I 的二次码长度为 4;对应的分级码周期分别为 20 ms4 ms(主码周期 1 ms,二次码速率因此都是 1000 bps)。
  • 二次码指派:E5a-I→CS20¹,E5a-Q→CS100¹⁻⁵⁰,E5b-I→CS4¹,E5b-Q→CS100⁵¹⁻¹⁰⁰,E1-C→CS25¹,E6-C→CS100¹⁻⁵⁰。

长度(L / N)周期(T)速率(R) 三者关系。

通用关系(记住这几条就够)

  • 速率 ↔ 周期:$ R=\frac{1}{T}$, T=1RT=\frac{1}{R}T=R1

  • 主码(Primary)

    • 码片速率:RCR_CRC(chips/s)
    • 码长:LLL(chips)
    • 主码周期Tprimary=LRCT_{\text{primary}}=\frac{L}{R_C}Tprimary=RCL
  • 二次码(Secondary,长度 N 位)

    • (二次码按“每个主码周期跳 1 位”)
    • 二次码速率Rsec=RCL=1TprimaryR_{\text{sec}}=\frac{R_C}{L}=\frac{1}{T_{\text{primary}}}Rsec=LRC=Tprimary1(bps)
    • 二次码周期Tsec=NRsec=N⋅LRC=N⋅TprimaryT_{\text{sec}}=\frac{N}{R_{\text{sec}}}=N\cdot\frac{L}{R_C}=N\cdot T_{\text{primary}}Tsec=RsecN=NRCL=NTprimary
  • 导航数据(数传路)

    • 符号速率:RDR_DRD(symbols/s)
    • 符号周期TD=1RDT_D=\frac{1}{R_D}TD=RD1
    • 每符号包含的码片数DC=RCRD\displaystyle DC=\frac{R_C}{R_D}DC=RDRC(chips/symbol)

快速代入几个你常用的例子

  • E1(主码 4092,RC=1.023R_C=1.023RC=1.023 Mcps)

    • Tprimary=40921.023 ⁣× ⁣106≈4T_{\text{primary}}=\frac{4092}{1.023\!\times\!10^6}\approx4Tprimary=1.023×10640924 ms
    • E1-C 二次码 CS25:Rsec=1.023 ⁣× ⁣1064092=250R_{\text{sec}}=\frac{1.023\!\times\!10^6}{4092}=250Rsec=40921.023×106=250 bps;Tsec=25×4 ms=100 msT_{\text{sec}}=25\times4\text{ ms}=100\text{ ms}Tsec=25×4 ms=100 ms
    • E1-B 数据 RD=250R_D=250RD=250 sps:TD=4T_D=4TD=4 ms,DC=1.023 ⁣× ⁣106250=4092DC=\frac{1.023\!\times\!10^6}{250}=4092DC=2501.023×106=4092
  • E5(主码 10230,RC=10.23R_C=10.23RC=10.23 Mcps)

    • Tprimary=1023010.23 ⁣× ⁣106=1T_{\text{primary}}=\frac{10230}{10.23\!\times\!10^6}=1Tprimary=10.23×10610230=1 ms
    • E5a-I(50 sps):DC=10.23 ⁣× ⁣10650=204,600DC=\frac{10.23\!\times\!10^6}{50}=204{,}600DC=5010.23×106=204,600(=20×主码周期)
    • E5b-I(250 sps):DC=10.23 ⁣× ⁣106250=40,920DC=\frac{10.23\!\times\!10^6}{250}=40{,}920DC=25010.23×106=40,920(=4×主码周期)
    • E5a-Q / E5b-Q 二次码(CS20/CS4):Rsec=1000R_{\text{sec}}=1000Rsec=1000 bps;周期分别 20 ms / 4 ms
  • E6(RC=5.115R_C=5.115RC=5.115 Mcps)

    • E6-B 数据 RD=1000R_D=1000RD=1000 sps:TD=1T_D=1TD=1 ms,DC=5.115 ⁣× ⁣1061000=5115DC=\frac{5.115\!\times\!10^6}{1000}=5115DC=10005.115×106=5115

    • E6-C 二次码 CS100:主码长度 LLL 未公开,所以

      • Rsec=RCLR_{\text{sec}}=\frac{R_C}{L}Rsec=LRC
      • Tprimary=LRCT_{\text{primary}}=\frac{L}{R_C}Tprimary=RCL
      • Tsec=100×LRCT_{\text{sec}}=100\times\frac{L}{R_C}Tsec=100×RCL

实做时最常用的三个离散式

  • 主码索引:code_idx=i mod L\text{code\_idx}=i\bmod Lcode_idx=imodL
  • 二次码索引:sec_idx=⌊i/L⌋ mod N\text{sec\_idx}=\big\lfloor i/L\big\rfloor \bmod Nsec_idx=i/LmodN
  • 数据索引:data_idx=⌊i/DC⌋\text{data\_idx}=\big\lfloor i/DC\big\rfloordata_idx=i/DC

有了这几条,就能从“长度/速率”互推“周期”,并把计数器步进(码片、二次码、数据)对齐到同一芯片时钟下实现。

二次码是按“主码的整周期”为节拍在切换的。主码跑完一圈(L 个芯片)才把二次码推进到下一位;在这一整圈里,二次码保持不变。

用两行公式说清

  • 连续时间:二次码索引
    k(t)=⌊tTprimary⌋ mod Nsk(t)=\Big\lfloor \dfrac{t}{T_\text{primary}}\Big\rfloor \bmod N_sk(t)=TprimarytmodNs
    其中 Tprimary=L/RCT_\text{primary}=L/R_CTprimary=L/RC(主码周期),NsN_sNs 是二次码长度(位数)。
  • 离散芯片时钟:
    k[n]=⌊nL⌋ mod Nsk[n]=\Big\lfloor \dfrac{n}{L}\Big\rfloor \bmod N_sk[n]=LnmodNs(n 为芯片计数)

组合:分层码 = 主码 × 二次码
clayer[n]=cprimary(n mod L)×bsecondary ⁣(k[n])c_{\text{layer}}[n]=c_{\text{primary}}(n\bmod L)\times b_{\text{secondary}}\!\big(k[n]\big)clayer[n]=cprimary(nmodL)×bsecondary(k[n])

直白举例

  • E1-C(导频)RC=1.023R_C=1.023RC=1.023 Mcps,L=4092L=4092L=4092 → 主码周期 Tprimary=4T_\text{primary}=4Tprimary=4 ms;二次码 CS25
    ⇒ 二次码在 0–4 ms 用 CS25 的第 0 位,4–8 ms 用第 1 位……到第 24 位后回到第 0 位(总周期 25×4 ms=100 ms)。
  • E5a-I(数传)RC=10.23R_C=10.23RC=10.23 Mcps,L=10230L=10230L=10230Tprimary=1T_\text{primary}=1Tprimary=1 ms;二次码 CS20
    ⇒ 二次码每 1 ms跳一位;20 ms 走完一圈。
    (E5a-Q 也是每 1 ms 跳一位,但用 CS100,100 ms 一圈)
  • E5b-I / E5b-Q:同上,每 1 ms 跳一位;I 用 CS4(4 ms 一圈),Q 用 CS100(100 ms 一圈)。
  • E6-C(导频)RC=5.115R_C=5.115RC=5.115 Mcps,但 主码长度 L 未公开,仍按“Tprimary=L/RCT_\text{primary}=L/R_CTprimary=L/RC 秒跳一位”;用 CS100(总周期 100×L/RC100\times L/R_C100×L/RC)。

为什么要这样做

  • 把整体码周期从“几 ms 的主码”扩展到“几十/上百 ms 的二次码×主码”,降低相关假峰、增强同步鲁棒性
  • 节拍与主码完全对齐,切换只发生在码片边界,不会在一圈内部破坏相关性。

实现怎么写(FPGA/SDR)

// 参数:L=主码长度,Ns=二次码长度
i_chip    += 1                            // 每个码片+1
code_idx   = i_chip % L                   // 0..L-1
sec_idx    = (i_chip / L) % Ns            // 每跑完 L 片 → +1
primary    = C[code_idx]                  // 取主码芯片(±1或0/1)
secondary  = B[sec_idx]                   // 取二次码位(±1或0/1)
layer_code = primary * secondary          // 无二次码时把 secondary 固定为 +1

和导航数据的关系

数据比特用自己的速率 RDR_DRD 前进:
m[n]=⌊n/DC⌋,  DC=RC/RDm[n]=\big\lfloor n/DC\big\rfloor,\;DC=R_C/R_Dm[n]=n/DC,DC=RC/RD
很多 Galileo 路别让 DC 是 L 的整数倍(比如 E1-B:DC=4092=1×L;E5a-I:DC=204600=20×L;E5b-I:DC=40920=4×L),这样数据边界也与主码/二次码边界对齐,实现更简单、同步更牢靠。

常见坑

  • 不能用“固定速率计时器”去推进二次码,要以主码计数器回零为触发;这样不论你实际采样率/码速如何抖动,二次码都与主码严格同相。
  • 0/1 与 ±1 的表示要一致:若码仓是 0/1,做异或;若是 ±1,做乘法(0→+1、1→−1 的映射)。

主扩频码(Primary code)到底怎么按 ICD 生成


要点一:两类主码

  • LFSR 型 PN 码:由两条 M 序列按同相位 XOR 组合得到(“组合截断”法)。Galileo 的 LFSR 主码就是这样做的。
  • 优化(memory)码:直接给出一串已优化的 PN 序列,要存表。E1-B/E1-C 属于这种“memory codes”(十六进制在 Annex C 提供)。

要点二:LFSR 结构与“截断重装载”

  • 两个并行移位寄存器:基寄存器1/2,长度 R。每个寄存器有一组反馈抽头 {ai,j}\{a_{i,j}\}{ai,j}输出主码 = 两条 M 序列的 XOR,两序列无相对移位
  • 为得到所需主码长度 N(如 E5 的 10230 芯片),跑满 N 个芯片后把两个寄存器“重置”为起始值 {si,j}\{s_{i,j}\}{si,j}——这就把无限长 M 序列截断成周期为 N 的主码

要点三:抽头与起始值的表示(八进制→二进制→向量

  • ICD 用八进制写反馈抽头与起始值。转换规则:先转成二进制,再从低位到高位编号。

    • 反馈抽头向量:位索引 jjj0 开始数到 R,用于 ai,ja_{i,j}ai,j。注意 ai,R=1a_{i,R}=1ai,R=1ai,0a_{i,0}ai,0 不计入反馈。
    • 起始值向量:位索引 jjj1R(和抽头的编号起点不同,这是常见坑)。示例里为了凑满 14 位,最高位补 0。

E5 主码(E5a/E5b)怎么具体生成

  • 它们是 LFSR 码,寄存器长度 R=14,各路的**反馈抽头(八进制)**如下(表 15):

    • E5a-I:Reg1=40503,Reg2=50661
    • E5a-Q:Reg1=40503,Reg2=50661
    • E5b-I:Reg1=64021,Reg2=51445
    • E5b-Q:Reg1=64021,Reg2=43143
  • 基寄存器1的起始值:所有单元都置 1(四路 E5 都一样)。基寄存器2的起始值随“码号/SVID”而变,ICD 在表 16–19 给出(八进制),并附了该主码前 24 个芯片的十六进制校对

  • 实现步骤(伪代码思路)

    1. 把 Reg1/Reg2 的八进制“抽头”按规则转成二进制抽头向量 a1,j,a2,ja_{1,j},a_{2,j}a1,j,a2,j

    2. Reg1 起始:全 1;Reg2 起始:查表(比如 E5a-I 码号 1 的 Reg2 起始值是 30305(八))。

    3. 每个芯片时钟:

      • 计算 Reg1/Reg2 的反馈位(抽头 XOR);分别右移并将反馈位移入。
      • 取两寄存器的输出位(通常取最高位或最低位,按图 10/表 15 的实现口径)做 XOR 得到主码芯片
    4. 计满 N=10230 个芯片后,把两个寄存器重装载到起始值(形成“截断”周期)。

    5. 之后再按“分层码”规则每个主码周期跳一次二次码位(你前面已经掌握)。

参考定位:图 10(LFSR 生成器)、图 11(抽头向量示例)、图 12(起始值示例);表 15(E5 抽头)、表 16–19(各路/各码号的 Reg2 起始值)。


E1 主码怎么做

  • E1-B / E1-C 主码是优化 memory 码:ICD 直接在 Annex C 给出十六进制序列(50 个成员),你按十六进制装到 ROM/LUT 里顺序读即可。

快速 FAQ

  • E5 的寄存器长度 R 是多少? 14,比特位宽在示例里明确到“为凑满 14 位补 0”。
  • 为什么要“重置”寄存器? 为把无限长 M 序列“截断”为所需长度 NNN,保证主码周期 = NNN 芯片。
  • 二次码怎么叠? 每个主码周期跳 1 位(XOR 或 ±1 乘法),这就是“分层码”。
  • SVID / 码号如何对应? 主码按**码号 n(1–36)**分配到 SVID n;二次码分配见表 22(E5a-I→CS20,E5b-I→CS4,E5a-Q/E5b-Q→CS100,E1-C→CS25;E1-B/E6-B N/A)。

LFSR 型 PN 码与优化(memory)码使用场景的区别?


下面这份对比,专讲什么时候用 LFSR 型 PN 码、什么时候用优化(memory)码

一图流(结论表)

维度 LFSR 型 PN 码 优化(memory)码
生成方式 两个(或多个)M 序列按抽头多项式产生并 XOR(可“截断重装载”得到目标长度) 事先离线优化好的序列,整串存表
资源/复杂度 几百个门级就能跑(极省 LUT/触发器),几乎不占 RAM 占 ROM(每条码=长度×1 bit),但运算极简(读表)
可扩展性 改种子/起始值即可生成大量 PRN,长度可很长 码数固定;要新增/替换需重新分发码表
相关性/谱形 由多项式决定;自/互相关与谱形较难全局最优 可按目标(低旁瓣、低互相关、特定谱掩模、与他制系统共存)定向优化
一致性/复现 只要多项式与起始值一致,各家实现一致;无需分发大表 需要分发权威码表(ICD/附件);实现时直接照表
安全与保密 结构型码,可推导;不适合拿“保密/鉴权”做文章 可选择不公开码表(如商业/受控服务),便于访问控制
典型应用 大量 PRN、长码、资源受限的星载/接收机/仿真器 需要严格控制互/自相关与频谱,或要与他制系统精确共存

在 Galileo 里的用法(你最关心)

  • E5a/E5b(四路):主码为 LFSR 组合+截断(寄存器长度 14,码长 10230),导/数传路都叠相应二次码(a-I:CS20,a-Q:CS100,b-I:CS4,b-Q:CS100)。
    ⇒ 适合逻辑生成(不占 ROM),也可预先展开到 LUT 以简化时序。
  • E1-B/E1-C:主码为优化 memory 码(每路 4092 芯片,ICD 附录给十六进制)。
    ⇒ 直接装 ROM 表最省事,能保证跨厂一致的相关/谱形表现。
  • E6-B/E6-C:主码不公开(受控/商业服务),C 路叠 CS100 二次码
    ⇒ 做物理层模拟可用“占位长伪码”+正确速率/功分;要闭环跟踪需授权码表。

你该怎么选(发射模拟机角度)

  • 目标是标准一致性/快速落地

    • E1:直接读 Annex C 十六进制主码表(memory 码)→ 码 ×(CS25:仅 C 路)× 调制;
    • E5:用 LFSR 方案(或离线一次性展开后烧 ROM),再做 AltBOC 组合;
    • E6:若无授权主码,用长伪码占位 + CS100(C 路)+ 50/50 功分,满足频谱/结构一致性。
  • 资源很紧(FPGA/ASIC):优先选 LFSR 在线生成(E5 天然合适;E1 也可把内存码预展成短循环段或外接串行 ROM)。

  • 要可控的相关/谱特性(与 GPS/北斗共存、抗假峰):优先选 memory 码(这也是 E1 选 memory 码的工程动机之一)。

小贴士

  • 无论哪类主码,二次码都是“每个主码周期跳 1 位”;二次码速率 = RC/LR_C/LRC/L
  • 做仿真/发射时,统一用 ±1 表示(0→+1,1→−1),主码×二次码×数据一路乘法最干净。
  • 只要你的节拍(主码、二次码、数据)对齐,memory 与 LFSR 在空口不可区分;区别只是实现路径与管理方式。

表 16–19中,Start Value 与Initial Sequenc的含义


这两个列名在表 16–19(E5a-I / E5a-Q / E5b-I / E5b-Q 的 LFSR 主码配置表)里含义不一样,作用也不同:

一句话区分

  • Start Value:给基寄存器 2(base register 2)起始装载值(八进制表示)。每跑满 N=10230 个芯片后也要用它重新装载,实现“截断到 N”的主码周期。基寄存器 1 的起始值固定为全 1(所有码相同),所以表里只列寄存器 2。
  • Initial Sequence:该主码从 芯片 0 开始的前 24 个芯片,按 Annex C 的“十六进制编码约定”压成 6 个十六进制字符,用来校验你生成器的极性/位序是否正确(相当于一个“黄金前缀”对照值)。

为什么这样设计

  • 同一分量的多条 PRN(例如 E5a-I 的 50 条),其反馈多项式相同,靠**Start Value(寄存器2不同)**来区分各条码;
  • Initial Sequence给你一个快速自测:把两条 LFSR 按表中多项式与起始值跑起来,主码输出(寄存器1 XOR 寄存器2)从第 0 片开始取 24 片,按 Annex C 的规则(左→右=早→晚;每个 hex=4 芯片;末组不足补 0)转成 hex,应当等于表格里的 Initial Sequence。不一致通常是**位序(MSB/LSB)或极性(0/1↔±1 映射)**弄反了。

实现小抄(你在 HDL/脚本里要注意)

  • 寄存器长度 R=14;两个寄存器同相位输出 XOR 得到主码。
  • Start Value(八进制)→ 二进制时要按 ICD 的位编号规则展开;寄存器 1 初值=全 1,寄存器 2 初值=表中 Start Value。
  • 截断重装载:计满 10230 片后,把两个寄存器装回各自起始值(保证主码周期=10230)。
  • 生成正确后,用 **Initial Sequence(24 芯片)**做一次“冒烟测试”,再进入二次码叠加与 AltBOC 组合。

“Initial Sequence”那一列到底是在验证什么、怎么用


下面把它讲透+给你一套可直接照做的校验流程。

它到底是什么

Initial Sequence = 该主码从时间起点(第 0 片)开始的前 24 个码片,用 Annex C 的“4 片→1 个十六进制”的规则压缩成 6 个十六进制符号。
作用:给工程实现做“冒烟测试”。你按表的抽头与起始值把 LFSR 生成器跑起来后,取输出的前 24 个逻辑码片(0/1 表示),按 4 位一组转成 6 个 hex,必须与表中这列一模一样;否则就是你的实现哪里(位序、极性、输出 tap、移位方向或重装载时机)搞错了。

注意:这 24 片只是“正确性指纹”,不是二次码,也不是另一个参数。

它与 “Start Value”的关系

  • Start Value(八进制):给 基寄存器2起始装载值(基寄存器1固定全 1)。不同 PRN 的区别就靠它。
  • Initial Sequence:是“抽头 + 基寄存器1全1 + 该 PRN 的 Start Value”运行 LFSR后“自然产生”的前 24 片的十六进制表示,用来让你对拍。

Annex C 的“4片→1 hex”规则(你转换时要严格遵守)

  • 1 个十六进制符号 = 时间上相邻的4 个码片左→右 = 早→晚)。
  • 组内位权:左边那片是最高位(MSB),右边那片是最低位(LSB)。
  • 码片是逻辑 0/1(不是 ±1)。
  • 例:[1 0 1 1] → 二进制 1011 → 十六进制 B
  • 10230 这种长度不是 4 的整数倍时,只有最后一组才补 0(但 Initial Sequence 只取前 24 片,不涉及补 0)。

一步步怎么用它来“验码”(强烈建议照这个流程跑一次)

  1. 装载起始值

    • Reg1(基寄存器1):14 位全 1
    • Reg2(基寄存器2):用该 PRN 在表 16/17/18/19 的 **Start Value(八进制)**展开成 14 位二进制后装载。
  2. 按抽头反馈运行两条 LFSR(图 10 的结构;两条序列无相对移位)。

  3. 主码输出定义:每个码片时刻输出

    c[i]=out_reg1[i]⊕out_reg2[i] c[i] = \text{out\_reg1}[i] \oplus \text{out\_reg2}[i] c[i]=out_reg1[i]out_reg2[i]

    (输出 tap 用图 10/表 15 所指的输出位;别随便换“取最低位/最高位”)。

  4. 抓取前 24 片:得到 c[0..23]c[0..23]c[0..23] 的 0/1 串。

  5. 4 片分组 → 十六进制:分成 6 组,每组 4 位,按 MSB 在前 转十六进制,得到 6 个 hex 字符。

  6. 比对:和表中的 Initial Sequence 完全一致即通过。

一个小例子(演示“4 片→1 hex”)

假设生成器吐出的前 8 片是:1 0 1 1 0 1 1 1

  • 前 4 片 1 0 1 1B
  • 后 4 片 0 1 1 17
    → 这 8 片对应的 Initial Sequence 前两位应是 B7

常见踩坑(Initial Sequence 对不上通常就栽在这里)

  • 位序颠倒:把 4 片的 MSB/LSB 顺序反了,或把“左→右=早→晚”搞反。
  • 极性不一致:你内部用的是 ±1,转换成 0/1 时没有统一:请固定 +1→0,−1→1(或反过来也行,但生成与转换两端必须一致)。
  • 输出位取错:有的实现误把“反馈异或结果”当输出,或取了寄存器的另一端。要按图 10/表 15 规定的输出位。
  • 移位方向/反馈抽头解码错:表里的抽头与起始值是八进制,需要按 ICD 的规则展成 14 位向量;同时注意移位方向抽头位编号
  • 忘了“截断重装载”的时机:虽然 Initial Sequence 只用前 24 片,不到截断点,但你的总体代码里还是要在 N=10230 片时重装载到起始值,形成正确周期。
  • 引入了相对移位:两条 LFSR 的相对相位必须为 0(同相位 XOR),任何相位偏移都会把前缀搞乱。

小结(你可以把它当“自检指纹”)

  • Start Value 决定“你是哪一条 PRN”。
  • Initial Sequence那条 PRN 的前 24 片十六进制指纹,只用于对拍你的 LFSR 实现
  • 一旦通过比对,你的“主码发生器”基本就对了;再叠二次码(每个主码周期跳 1 位)和数据,按 E5 AltBOC 或 E1 CBOC 等体制组合即可。

SVID与Code No还有Code Identifier 的关系


结论(谁对应谁)

  • SVID ↔ 主码 Code No(Primary)
    对于 E5a-I、E5a-Q、E5b-I、E5b-Q、E1-B、E1-C:SVID = n 就用主码编号 = n(每路各有 1…50 条主码,系统分配到 1…36 的卫星)。

  • SVID ↔ 二次码 Code Identifier(Secondary)
    100-bit 家族按星唯一,4/20/25-bit 家族全星共用:

    • **E5a-Q:**SVID = n ⇒ 用 CS100n(例:SVID1→CS1001)。
    • **E5b-Q:**SVID = n ⇒ 用 CS100(n+50)(例:SVID1→CS10051)。
    • **E5a-I:**所有 SVID 都用 CS20(同一条)。
    • **E5b-I:**所有 SVID 都用 CS4(同一条)。
    • **E1-C:**所有 SVID 都用 CS25(同一条)。
    • (E1-B、E6-B 无二次码;E6-C 使用 CS100¹–⁵⁰ 家族)
  • Code Identifier 是什么?
    就是二次码的“序列名”,ICD 在表 20/21 里给出每条 CS 码的长度、hex 串(例如 CS4=“E”、CS20=“842E9”、CS25=“380AD90”;CS100ₖ 各有 25 个 hex)。

例子(照着用就行)

  • SVID 1

    • 主码:各分量用 Code No = 1
    • 二次码:E5a-I=CS20,E5b-I=CS4,E1-C=CS25,E5a-Q=CS1001,E5b-Q=CS10051
  • SVID 27

    • 主码:各分量用 Code No = 27
    • 二次码:E5a-I=CS20,E5b-I=CS4,E1-C=CS25,E5a-Q=CS10027,E5b-Q=CS10077

小贴士:ICD 还专门说明了二次码家族与分配规则(100-bit 按主码/按星唯一;4/20/25-bit 全星共用)。


Code No、CS100的个数与SVID个数不一样,这怎么一一对应


“数量不相等”其实是有富余、按规则取前一段来用的设计:

怎么一一对应

  • 主码(Primary):每个分量有 50 条主码,但在用的 SVID 只有 1–36。规则是
    SVID n → 主码编号 n(1≤n≤36);多出来的 #37–#50 作为储备/未来扩展,不分配给现役星。

  • 100 位二次码(CS100):一共给了 100 条,用来覆盖两条 Q 路(每条最多 50 颗星):

    • E5a-Q:用 CS100ₙ(SVID n 用 CS100_n_,只用到 1…36;37…50 作为富余)。
    • E5b-Q:用 CS100ₙ₊₅₀(SVID n 用 CS100_{n+50},对应 51…86;87…100 为富余)。
  • 4/20/25 位二次码:这些是全星共用一条,与 SVID 数量无关:
    E5a-I→CS20、E5b-I→CS4、E1-C→CS25(所有 SVID 都用同一条)。

小例子

  • SVID 1 → 主码 #1;E5a-Q 用 CS1001,E5b-Q 用 CS10051;E5a-I=CS20、E5b-I=CS4、E1-C=CS25。
  • SVID 36 → 主码 #36;E5a-Q=CS10036,E5b-Q=CS10086;其余同上。

结论:“数量不等”不是矛盾,而是为了给两条 Q 路各预留到 50 颗星、并给主码留出 #37–#50 的预备/扩展。现阶段只对 SVID 1–36 做一一对应,剩余的编号是未使用的富余

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐