Update to new BeiDou PRN assignments

See http://www.beidou.gov.cn/yw/xwzx/202603/t20260320_29266.html
This commit is contained in:
Carles Fernandez
2026-09-29 13:01:30 +02:00
parent ef928a5e1f
commit 2e682cce8e
3 changed files with 50 additions and 71 deletions
@@ -1,7 +1,8 @@
; BeiDou B2a (5D) file-input example: 8-bit signed real IF.
; Tracks B2a_I (data) at 1 ms primary-code epochs; telemetry combines five
; epochs per symbol and applies 64-ary LDPC(96,48) decoding and CRC-24Q.
; GEO / BDS-2 (PRN 1-18 and 59-63) are not assigned B2a channels.
; GEO PRNs 1-5 and 59-63 are excluded: GEO B2a decoding/PVT is not supported.
; The 2026 reassignment places BDS-3 IGSO/MEO satellites at PRNs 6-8 and 11-14.
;
; PVT policy (B2a-only SPP):
; - RTKLIB slot 0 holds 5D; satwavelen BDS frq2 stays B3, lam[0] is c/FREQ5.
+4 -3
View File
@@ -2517,16 +2517,17 @@ void GNSSFlowgraph::set_signals_list()
{
if (signal_str == "1D")
{
if ((prn >= 1U && prn <= 5U) || (prn >= 59U && prn <= 63U))
// The 2026-03-20 CSNO allocation adds B1C on GEO PRNs 1-4.
if (prn == 5U || (prn >= 59U && prn <= 63U))
{
continue; // GEO satellites do not broadcast B1C (ICD section 3.1)
continue;
}
}
if (signal_str == "5D")
{
if ((prn >= 1U && prn <= 5U) || (prn >= 59U && prn <= 63U))
{
continue; // GEO satellites do not broadcast B2a RNSS (ICD §2)
continue; // GEO B2a decoding/PVT is not supported.
}
}
if (signal_str == "J5" && prn > QZSS_L5_MAX_PRN)
+44 -67
View File
@@ -611,148 +611,125 @@ std::string Gnss_Satellite::what_block(const std::string& system_, uint32_t PRN_
}
if (system_ == "Beidou")
{
// Check https://en.wikipedia.org/wiki/List_of_BeiDou_satellites
// Post-upgrade allocation announced by CSNO on 2026-03-20:
// http://www.beidou.gov.cn/yw/xwzx/202603/t20260320_29266.html
// These display labels describe that allocation, not historical recordings.
// Signal processing must not infer orbit type or signal availability from them.
switch (PRN_)
{
case 1:
block_ = std::string("BeiDou-2 GEO01*"); // GEO 140.0°E; launched 2010/01/16 (Retired)
block_ = std::string("BeiDou-3 GEO04"); // Former PRN 62; GEO 140.0 E
break;
case 2:
block_ = std::string("BeiDou-2 GEO06"); // GEO 80°E; launched 2012/10/25
block_ = std::string("BeiDou-3 GEO02"); // Former PRN 60; GEO 80 E
break;
case 3:
block_ = std::string("BeiDou-2 GEO07"); // GEO 110.5°E; launched 2016/06/12
block_ = std::string("BeiDou-3 GEO03"); // Former PRN 61; GEO 110.5 E
break;
case 4:
block_ = std::string("BeiDou-2 GEO04"); // GEO 160.0°E; launched 2010/10/31
break;
case 5:
block_ = std::string("BeiDou-2 GEO05"); // GEO 58.75°E; launched 2012/02/24
block_ = std::string("BeiDou-3 GEO01"); // Former PRN 59; GEO 160 E
break;
case 6:
block_ = std::string("BeiDou-2 IGSO01"); // 55° inclination IGSO 118°E; launched 2010/07/31
block_ = std::string("BeiDou-3 IGSO01"); // Former PRN 38
break;
case 7:
block_ = std::string("BeiDou-2 IGSO02"); // 55° inclination IGSO 118°E; launched 2010/12/17
block_ = std::string("BeiDou-3 IGSO02"); // Former PRN 39
break;
case 8:
block_ = std::string("BeiDou-2 IGSO03"); // 55° inclination IGSO 118°E; launched 2011/04/09
block_ = std::string("BeiDou-3 IGSO03"); // Former PRN 40
break;
case 9:
block_ = std::string("BeiDou-2 IGSO04"); // 55° inclination IGSO 95°E; launched 2011/07/27
block_ = std::string("BeiDou-2 IGSO06"); // Former PRN 13
break;
case 10:
block_ = std::string("BeiDou-2 IGSO05"); // 55° inclination IGSO 118°E; launched 2011/12/01
block_ = std::string("BeiDou-2 IGSO07"); // Former PRN 16
break;
case 11:
block_ = std::string("BeiDou-2 MEO03*"); // Slot A07; launched 2012/04/29 (Retired)
block_ = std::string("BeiDou-3 MEO25"); // Former PRN 47
break;
case 12:
block_ = std::string("BeiDou-2 MEO04*"); // Slot A08; launched 2012/04/29 (Retired)
block_ = std::string("BeiDou-3 MEO26"); // Former PRN 48
break;
case 13:
block_ = std::string("BeiDou-2 IGSO06"); // launched 2016/03/30
block_ = std::string("BeiDou-3 MEO27"); // Former PRN 49; PRN 13 now identifies a MEO satellite
break;
case 14:
block_ = std::string("BeiDou-2 MEO06*"); // launched 2012/09/19 (Retired)
break;
case 16:
block_ = std::string("BeiDou-2 IGSO07"); // launched 2018/07/10
break;
case 18:
block_ = std::string("BeiDou-3 GEOG8"); // launched 2019/05/17
block_ = std::string("BeiDou-3 MEO28"); // Former PRN 50
break;
case 19:
block_ = std::string("BeiDou-3 MEO01"); // Slot B07; launched 2017/11/05
block_ = std::string("BeiDou-3 MEO01");
break;
case 20:
block_ = std::string("BeiDou-3 MEO02"); // Slot B05; launched 2017/11/05
block_ = std::string("BeiDou-3 MEO02");
break;
case 21:
block_ = std::string("BeiDou-3 MEO03"); // Slot B0?; launched 2018/02/12
block_ = std::string("BeiDou-3 MEO03");
break;
case 22:
block_ = std::string("BeiDou-3 MEO04"); // Slot B06; launched 2018/02/12
block_ = std::string("BeiDou-3 MEO04");
break;
case 23:
block_ = std::string("BeiDou-3 MEO05"); // Slot C07; launched 2018/07/29
block_ = std::string("BeiDou-3 MEO05");
break;
case 24:
block_ = std::string("BeiDou-3 MEO06"); // Slot C01; launched 2018/07/29
block_ = std::string("BeiDou-3 MEO06");
break;
case 25:
block_ = std::string("BeiDou-3 MEO11"); // Slot C08; launched 2018/08/24
block_ = std::string("BeiDou-3 MEO11");
break;
case 26:
block_ = std::string("BeiDou-3 MEO12"); // Slot C02; launched 2018/08/24
block_ = std::string("BeiDou-3 MEO12");
break;
case 27:
block_ = std::string("BeiDou-3 3M3"); // Slot A04; launched 2018/01/11
block_ = std::string("BeiDou-3 MEO07");
break;
case 28:
block_ = std::string("BeiDou-3 3M4"); // Slot A05; launched 2018/01/11
block_ = std::string("BeiDou-3 MEO08");
break;
case 29:
block_ = std::string("BeiDou-3 3M7"); // Slot A02; launched 2018/03/29
block_ = std::string("BeiDou-3 MEO09");
break;
case 30:
block_ = std::string("BeiDou-3 3M8"); // Slot A03; launched 2018/03/29
block_ = std::string("BeiDou-3 MEO10");
break;
case 31:
block_ = std::string("BeiDou-3 MEO22"); // Former PRN 44
break;
case 32:
block_ = std::string("BeiDou-3 MEO13"); // Slot B01; launched 2018/09/19
block_ = std::string("BeiDou-3 MEO13");
break;
case 33:
block_ = std::string("BeiDou-3 MEO14"); // Slot B03; launched 2018/09/19
block_ = std::string("BeiDou-3 MEO14");
break;
case 34:
block_ = std::string("BeiDou-3 MEO15"); // Slot B03; launched 2018/10/15
block_ = std::string("BeiDou-3 MEO15");
break;
case 35:
block_ = std::string("BeiDou-3 MEO16"); // Slot B03; launched 2018/10/15
block_ = std::string("BeiDou-3 MEO16");
break;
case 36:
block_ = std::string("BeiDou-3 MEO17"); // Slot B03; launched 2018/11/18
block_ = std::string("BeiDou-3 MEO17");
break;
case 37:
block_ = std::string("BeiDou-3 MEO18"); // Slot B03; launched 2018/11/18
block_ = std::string("BeiDou-3 MEO18");
break;
case 38:
block_ = std::string("BeiDou-3 IGSOI1"); // launched 2019/04/20
block_ = std::string("BeiDou-3 MEO21"); // Former PRN 43
break;
case 39:
block_ = std::string("BeiDou-3 IGSOI2"); // launched 2019/04/20
block_ = std::string("BeiDou-3 MEO23"); // Former PRN 45
break;
case 40:
block_ = std::string("BeiDou-3 IGSOI3"); // launched 2019/11/04
block_ = std::string("BeiDou-3 MEO24"); // Former PRN 46
break;
case 41:
block_ = std::string("BeiDou-3 MEO19"); // Slot B02, launched 2019/12/16
block_ = std::string("BeiDou-3 MEO19");
break;
case 42:
block_ = std::string("BeiDou-3 MEO20"); // Slot B04, launched 2019/12/16
break;
case 43:
block_ = std::string("BeiDou-3 MEO21"); // Slot A06, launched 2019/11/23
break;
case 44:
block_ = std::string("BeiDou-3 MEO22"); // Slot A08, launched 2019/11/23
break;
case 45:
block_ = std::string("BeiDou-3 MEO23"); // Slot C03, launched 2019/09/22
break;
case 46:
block_ = std::string("BeiDou-3 MEO24"); // Slot C05, launched 2019/09/22
break;
case 59:
block_ = std::string("BeiDou-3 GEOG1"); // launched 2018/11/01
break;
case 60:
block_ = std::string("BeiDou-3 GEOG2"); // launched 2020/03/20
break;
case 61:
block_ = std::string("BeiDou-3 GEOG3"); // launched 2020/06/2023
block_ = std::string("BeiDou-3 MEO20");
break;
default:
// PRNs 5 and 15-18 are reserved; 43-63 are not in this allocation.
block_ = std::string("Unknown");
}
}