diff --git a/conf/File_input/Beidou/gnss-sdr_BDS_B2a_file.conf b/conf/File_input/Beidou/gnss-sdr_BDS_B2a_file.conf index b64a6f273..a435bece5 100644 --- a/conf/File_input/Beidou/gnss-sdr_BDS_B2a_file.conf +++ b/conf/File_input/Beidou/gnss-sdr_BDS_B2a_file.conf @@ -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. diff --git a/src/core/receiver/gnss_flowgraph.cc b/src/core/receiver/gnss_flowgraph.cc index 356f31a58..9a9f3a760 100644 --- a/src/core/receiver/gnss_flowgraph.cc +++ b/src/core/receiver/gnss_flowgraph.cc @@ -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) diff --git a/src/core/system_parameters/gnss_satellite.cc b/src/core/system_parameters/gnss_satellite.cc index 5894c65f5..0498d8eaf 100644 --- a/src/core/system_parameters/gnss_satellite.cc +++ b/src/core/system_parameters/gnss_satellite.cc @@ -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"); } }