Changeset 11134 in ntrip
- Timestamp:
- Oct 28, 2026, 10:05:43 AM (3 hours ago)
- Location:
- trunk/BNC
- Files:
-
- 4 edited
-
CHANGELOG.md (modified) (1 diff)
-
src/bncantex.cpp (modified) (1 diff)
-
src/bncantex.h (modified) (2 diffs)
-
src/bnchelp.html (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/CHANGELOG.md
r11133 r11134 41 41 - FIXED: Combination: the satellite offset of an AC was not reset after an outlier 42 42 - FIXED: Combination: text of the combination logfile was lost 43 - CHANGED: GPS attitude model ('Computed'): Block IIF satellites in the Earth's shadow yaw at a constant rate from their yaw at shadow entry to the nominal yaw at shadow exit (before: nominal yaw-steering with maximum rate, up to 37 deg off during eclipses, i.e. 25 cm in the APC/CoM conversion with the IIF x offset of 0.39 m) 43 44 - FIXED: GPS attitude model ('Computed'): at the end of a noon/midnight turn the yaw jumped to the nominal yaw (e.g. by 95 deg); the satellite now keeps yawing at its maximum rate until it has caught up with the nominal yaw 44 45 - FIXED: GLONASS attitude model ('Computed'): the yaw was frozen while the nominal yaw rate exceeded the maximum rate and then jumped to the nominal yaw; now following Dilssner et al. (2011), the satellite yaws at the maximum rate (0.25 deg/s) during noon turns until it has caught up, and in the Earth's shadow until it reaches the nominal yaw at shadow exit -
trunk/BNC/src/bncantex.cpp
r11123 r11134 632 632 prn.toLatin1().data(), Mjd, beta*180.0/M_PI, mu*180.0/M_PI, 633 633 st.yaw*180.0/M_PI, psiNom*180.0/M_PI, callGap*1440.0); 634 st.valid = false; 635 st.inTurn = false; 634 st.valid = false; 635 st.inTurn = false; 636 st.inShadow = false; 637 } 638 639 // Block IIF in the Earth's shadow (cylinder, around midnight for |mu| < 640 // muShadow): the satellite yaws at a constant rate from its yaw at shadow 641 // entry to the nominal yaw at shadow exit (Kouba 2009, Dilssner 2010) 642 // ------------------------------------------------------------------------- 643 if (blockType == "IIF") { 644 const double RE = 6378137.0; 645 double cosMuShadow = sqrt(std::max(0.0, 1.0 - RE * RE / (r * r))) / cos(beta); 646 bool inShadow = (cosMuShadow < 1.0 && cos(mu) > cosMuShadow); 647 if (inShadow) { 648 double muExit = acos(cosMuShadow); 649 if (!st.inShadow) { 650 double psiExit = atan2(-tanBeta, sin(muExit)); // nominal yaw at shadow exit 651 double tRem = (muExit - mu) / nRate; // remaining time in the shadow [s] 652 st.inShadow = true; 653 st.shadowYaw0 = st.valid ? st.yaw : psiNom; 654 st.shadowRate = (tRem > 0.0) ? remainder(psiExit - st.shadowYaw0, 2.0 * M_PI) / tRem : 0.0; 655 st.shadowMjd0 = Mjd; 656 _gpsYawLog += QString().asprintf( 657 "%s gpsYaw SHADOW-ENTER Mjd=%.6f beta=%6.3f mu=%7.2f yaw=%7.2f exit=%7.2f rate=%6.3f\n", 658 prn.toLatin1().data(), Mjd, beta*180.0/M_PI, mu*180.0/M_PI, st.shadowYaw0*180.0/M_PI, 659 psiExit*180.0/M_PI, st.shadowRate*180.0/M_PI); 660 } 661 double psiEff = st.shadowYaw0 + st.shadowRate * (Mjd - st.shadowMjd0) * 86400.0; 662 while (psiEff > M_PI) psiEff -= 2.0 * M_PI; 663 while (psiEff < -M_PI) psiEff += 2.0 * M_PI; 664 st.yaw = psiEff; 665 st.lastCallMjd = Mjd; 666 st.valid = true; 667 st.inTurn = false; 668 return psiEff; 669 } 670 else if (st.inShadow) { 671 // shadow exit: a remaining difference to the nominal yaw is caught up 672 // at the maximum rate (catch-up branch below) 673 st.inShadow = false; 674 st.inTurn = true; 675 st.turnSign = (remainder(psiNom - st.yaw, 2.0 * M_PI) >= 0.0) ? 1.0 : -1.0; 676 _gpsYawLog += QString().asprintf( 677 "%s gpsYaw SHADOW-EXIT Mjd=%.6f beta=%6.3f mu=%7.2f yaw=%7.2f nominal=%7.2f\n", 678 prn.toLatin1().data(), Mjd, beta*180.0/M_PI, mu*180.0/M_PI, st.yaw*180.0/M_PI, psiNom*180.0/M_PI); 679 } 636 680 } 637 681 -
trunk/BNC/src/bncantex.h
r11123 r11134 126 126 inTurn = false; 127 127 turnSign = 1.0; 128 inShadow = false; 129 shadowYaw0 = 0.0; 130 shadowRate = 0.0; 131 shadowMjd0 = 0.0; 128 132 } 129 133 double yaw; … … 132 136 bool inTurn; // true while in a constrained noon/midnight turn 133 137 double turnSign; // direction of the turn (sign of the nominal yaw rate at its start) 138 bool inShadow; // Block IIF in the Earth's shadow 139 double shadowYaw0; // yaw at shadow entry [rad] 140 double shadowRate; // constant yaw rate in the shadow [rad/s] 141 double shadowMjd0; // shadow entry 134 142 }; 135 143 -
trunk/BNC/src/bnchelp.html
r11130 r11134 5262 5262 <pre> 5263 5263 G attitude check G14 09:42:30-10:25:30: yaw difference to the model 362 deg, clock change vs. consensus 8.2 cm, predicted 10.7 cm (max 10.7 cm), slope 0.77, clock RMS 6.1 -> 2.0 cm: SSR yaw consistent with the clocks 5264 G attitude check G25 07:53:00-08:51:30: yaw difference to the model 39 deg, clock change vs. consensus -9.8 cm, predicted -0.0 cm (max 1.2 cm), slope 1.84, clock RMS 5.9 -> 5.8 cm: clock change not explained by the yaw difference (the other ACs model this turn differently?)5265 5264 </pre> 5266 5265 <p> … … 8379 8378 <ul> 8380 8379 <li><b>Computed</b> (default): BNC applies its own kinematic attitude model: 8381 GPS noon/midnight turn manoeuvres (Kouba 2009/2015, Bar-Sever 1996), 8380 GPS noon/midnight turn manoeuvres (Kouba 2009/2015, Bar-Sever 1996), with Block IIF satellites in the Earth's 8381 shadow yawing at a constant rate from their yaw at shadow entry to the nominal yaw at shadow exit, 8382 8382 GLONASS-M noon turns and midnight turns in the Earth's shadow (Dilssner et al. 2011), and 8383 8383 Galileo / BDS orbit-normal mode switching (Kouba 2017, Dai et al. 2015, Steigenberger et al. 2018).</li>
Note:
See TracChangeset
for help on using the changeset viewer.
