Propagation models for Earth-space communications from ITU-R P.618

lloda d698d6ae47 Relax p.676 Earth-space path condition 9 mēneši atpakaļ
.github d698d6ae47 Relax p.676 Earth-space path condition 9 mēneši atpakaļ
config 460ddcbfeb Try github workflow 1 gadu atpakaļ
data ac5000e231 Implement scintillation loss 5 gadi atpakaļ
docs 654bb1e931 Commit the manual output 3 gadi atpakaļ
mod 9469aa68ab Rename .f95 to .f90 3 gadi atpakaļ
sandbox 086b32afd9 Place Guile modules in mod/prop-618 5 gadi atpakaļ
src d698d6ae47 Relax p.676 Earth-space path condition 9 mēneši atpakaļ
test d698d6ae47 Relax p.676 Earth-space path condition 9 mēneši atpakaļ
CMakeLists.txt 9469aa68ab Rename .f95 to .f90 3 gadi atpakaļ
LICENSE 35214e7469 Progress 5 gadi atpakaļ
README.md 4898a7e79c Fix workflow badge 1 gadu atpakaļ
TODO d698d6ae47 Relax p.676 Earth-space path condition 9 mēneši atpakaļ

README.md

prop-618

Propagation models for Earth-space telecommunications systems

This is a translation into code of ITU-R P.618 and other references given there and in this ITU table. The implementations I could find were all in Matlabese (from ITU itself or national offices), which I couldn't use, or don't seem to give the source (like this one).

You probably need to be familiar with the relevant ITU-R papers to use this at all. Eventually there will be a manual in lloda.github.io/prop-618.

The library is written in Fortran (-std=f2018). It uses the C compatibility feature (bind(c)) which makes it easy to call from C, or anything with an FFI. C headers are included, plus bindings for Python and Guile. These are automatically generated from the Fortran.

Building is the usual CMake recipe

cd build && cmake -DCMAKE_INSTALL_PREFIX=somewhere ..
make
make test
make install

Conventions

  • Same units as in ITU's reports (latitude/longitude is in °, probabilities are in %, frequencies are in GHz, and so on).
  • Similar variable names as in ITU's reports. As an exception, I use el instead of θ or th where this means elevation.

Outlook

The library is maybe halfway complete. Look at the TODO file or the tests in test/test-0.f90 to see what's implemented. The functions do work and pass ITU's validation table (linked below) but I'm not settled on function names and error handling, so the interface could change in the future.

  • Calling the library with out-of-range parameters will abort, which is inconvenient if you're using it from Python or Guile. Eventually we'll have some other mechanism to signal errors.
  • Tests depend on . (or the CMake build directory) being in the dynamic library path.

This is the first time I write anything in Fortran; I'm using gfortran 8.2 and 8.3.

Links