Klobuchar (iono) model doens't seem to respect specification (typo)
jonathanmuller opened this issue · comments
Klobuchar model is defined as
def klobuchar(pos, az, el, time, iono_coeffs):
"""
Details are taken from [5]: IS-GPS-200H, Fig. 20-4
Note: result is referred to the GPS L₁ frequency;
if the user is operating on the GPS L₂ frequency, the correction term must
be multiplied by γ = f₂²/f₁¹ = 0.6071850227694382
:param pos: [lat, lon, alt] in radians and meters
"""
...
# ionospheric delay
amp = iono_coeffs[0] + phi * (iono_coeffs[1] + phi *
(iono_coeffs[2] + phi * iono_coeffs[3]))
per = iono_coeffs[4] + phi * (iono_coeffs[5] + phi *
(iono_coeffs[6] + phi * iono_coeffs[7]))
...
But specification ( https://www.gps.gov/technical/icwg/IS-GPS-200H.pdf ) requires amp and per to be
So the 3rd element is currently multiplied by phi to the power of 2, rather than phi to the power of 3
Shall I open a PR ?
I would have to do some tests to confirm this, not sure when I will have time for that. Can you show what difference that makes in the delay in some realistic cases?
At my current location, time, and with uBlox provided klobuchar parameters, the current version return 4.53[m], and the corrected one 5.98[m].
It seems RTKLib is also using the power 3 calculation : https://github.com/rtklibexplorer/RTKLIB/blob/d2030fbfc8ae71f83d1481dba7b9ad6b4b14b794/src/rtkcmn.c#L3606
Here is some calculated values based on my position (Switzerland) with various elevation / azimuth
All values are in meters :
25% quartile | 50% quartile | 75% quartile |
---|---|---|
1.2 | 1.3 | 1.8 |
Azimuth | Elevation | Current Output (Power 2) | Corrected Output (Power 3) | Difference |
---|---|---|---|---|
π/0 | π/0 | 12.6 | 16.9 | 4.3 |
π/0 | π/1 | 5.8 | 7.9 | 2.0 |
π/0 | π/2 | 3.8 | 5.2 | 1.3 |
π/0 | π/3 | 3.7 | 5.0 | 1.3 |
π/0 | π/4 | 2.5 | 3.4 | 0.9 |
π/1 | π/0 | 13.2 | 16.4 | 3.2 |
π/1 | π/1 | 6.1 | 8.0 | 1.9 |
π/1 | π/2 | 3.9 | 5.2 | 1.3 |
π/1 | π/3 | 3.7 | 5.0 | 1.3 |
π/1 | π/4 | 2.5 | 3.4 | 0.9 |
π/2 | π/0 | 11.6 | 14.3 | 2.7 |
π/2 | π/1 | 6.2 | 8.0 | 1.8 |
π/2 | π/2 | 3.9 | 5.2 | 1.3 |
π/2 | π/3 | 3.7 | 4.9 | 1.3 |
π/2 | π/4 | 2.5 | 3.4 | 0.9 |
π/3 | π/0 | 11.6 | 14.3 | 2.7 |
π/3 | π/1 | 6.2 | 8.0 | 1.8 |
π/3 | π/2 | 3.9 | 5.2 | 1.3 |
π/3 | π/3 | 3.7 | 4.9 | 1.3 |
π/3 | π/4 | 2.5 | 3.4 | 0.9 |
π/4 | π/0 | 13.2 | 16.4 | 3.2 |
π/4 | π/1 | 6.1 | 8.0 | 1.9 |
π/4 | π/2 | 3.9 | 5.2 | 1.3 |
π/4 | π/3 | 3.7 | 5.0 | 1.3 |
π/4 | π/4 | 2.5 | 3.4 | 0.9 |
Will double check next week with my tests and merge if that looks good! Thanks for the help!