|
| 1 | +# Low Frequency / Medium Frequency (LF/MF) Propagation Model, Python® Wrapper # |
| 2 | + |
| 3 | +[![NTIA/ITS PropLib][proplib-badge]][proplib-link] |
| 4 | +[![PyPI Release][pypi-release-badge]][pypi-release-link] |
| 5 | +[![GitHub Actions Unit Test Status][gh-actions-test-badge]][gh-actions-test-link] |
| 6 | +[![GitHub Issues][gh-issues-badge]][gh-issues-link] |
| 7 | +[![DOI][doi-badge]][doi-link] |
| 8 | + |
| 9 | +[proplib-badge]: https://img.shields.io/badge/PropLib-badge?label=%F0%9F%87%BA%F0%9F%87%B8%20NTIA%2FITS&labelColor=162E51&color=D63E04 |
| 10 | +[proplib-link]: https://ntia.github.io/propagation-library-wiki |
| 11 | +[gh-actions-test-badge]: https://img.shields.io/github/actions/workflow/status/NTIA/LFMF-python/pytest.yml?branch=main&logo=pytest&logoColor=ffffff&label=Tests&labelColor=162E51 |
| 12 | +[gh-actions-test-link]: https://github.com/NTIA/LFMF-python/actions/workflows/pytest.yml |
| 13 | +[pypi-release-badge]: https://img.shields.io/pypi/v/proplib-lfmf?logo=pypi&logoColor=ffffff&label=Release&labelColor=162E51&color=D63E04 |
| 14 | +[pypi-release-link]: https://pypi.org/project/proplib-lfmf |
| 15 | +[gh-issues-badge]: https://img.shields.io/github/issues/NTIA/LFMF-python?logo=github&label=Issues&labelColor=162E51 |
| 16 | +[gh-issues-link]: https://github.com/NTIA/LFMF-python/issues |
| 17 | +[doi-badge]: https://zenodo.org/badge/896234119.svg |
| 18 | +[doi-link]: https://zenodo.org/badge/latestdoi/896234119 |
| 19 | + |
| 20 | +This code repository contains a Python wrapper for the NTIA/ITS implementation of the |
| 21 | +Low Frequency / Medium Frequency (LF/MF) Propagation Model. LF/MF predicts basic transmission |
| 22 | +loss in the frequency range 0.01 - 30 MHz for propagation paths over a smooth Earth and antenna |
| 23 | +heights less than 50 meters. This Python package wraps the [NTIA/ITS C++ implementation](https://github.com/NTIA/LFMF). |
| 24 | + |
| 25 | +## Getting Started ## |
| 26 | + |
| 27 | +This software is distributed on [PyPI](https://pypi.org/project/proplib-lfmf) and is easily installable |
| 28 | +using the following command. |
| 29 | + |
| 30 | +```cmd |
| 31 | +pip install proplib-lfmf |
| 32 | +``` |
| 33 | + |
| 34 | +General information about using this model is available on |
| 35 | +[its page on the **NTIA/ITS Propagation Library Wiki**](https://ntia.github.io/propagation-library-wiki/models/LFMF/). |
| 36 | +Additionally, Python-specific instructions and code examples are available |
| 37 | +[here](https://ntia.github.io/propagation-library-wiki/models/LFMF/python). |
| 38 | + |
| 39 | +If you're a developer and would like to contribute to or extend this repository, |
| 40 | +please review the guide for contributors [here](CONTRIBUTING.md) or open an |
| 41 | +[issue](https://github.com/NTIA/LFMF-python/issues) to start a discussion. |
| 42 | + |
| 43 | +## Development ## |
| 44 | + |
| 45 | +This repository contains code which wraps [the C++ shared library](https://github.com/NTIA/LFMF) |
| 46 | +as an importable Python module. If you wish to contribute to this repository, |
| 47 | +testing your changes will require the inclusion of this shared library. You may retrieve |
| 48 | +this either from the |
| 49 | +[relevant GitHub Releases page](https://github.com/NTIA/LFMF/releases), or by |
| 50 | +compiling it yourself from the C++ source code. Either way, ensure that the shared library |
| 51 | +(`.dll`, `.dylib`, or `.so` file) is placed in `src/ITS/Propagation/LFMF/`, alongside `__init__.py`. |
| 52 | + |
| 53 | +Below are the steps to build and install the Python package from the source code. |
| 54 | +Working installations of Git and a [currently-supported version](https://devguide.python.org/versions/) |
| 55 | +of Python are required. Additional requirements exist if you want to compile the shared |
| 56 | +library from C++ source code; see relevant build instructions |
| 57 | +[here](https://github.com/NTIA/LFMF?tab=readme-ov-file#configure-and-build). |
| 58 | + |
| 59 | +1. Optionally, configure and activate a virtual environment using a tool such as |
| 60 | +[`venv`](https://docs.python.org/3/library/venv.html) or |
| 61 | +[`conda`](https://docs.conda.io/projects/conda/en/latest/user-guide/install/index.html). |
| 62 | + |
| 63 | +1. Clone this repository, then initialize the Git submodule containing the test data. |
| 64 | + |
| 65 | + ```cmd |
| 66 | + # Clone the repository |
| 67 | + git clone https://github.com/NTIA/LFMF-python |
| 68 | + cd LFMF-python |
| 69 | +
|
| 70 | + # Initialize Git submodule containing test data |
| 71 | + git submodule init |
| 72 | +
|
| 73 | + # Clone the submodule |
| 74 | + git submodule update |
| 75 | + ``` |
| 76 | +
|
| 77 | +1. Download the shared library (`.dll`, `.so`, or `.dylib`) from a |
| 78 | +[GitHub Release](https://github.com/NTIA/LFMF/releases). Then place the |
| 79 | +downloaded file in `src/ITS/Propagation/LFMF/` (alongside `__init__.py`). |
| 80 | +
|
| 81 | +1. Install the local package and development dependencies into your current environment: |
| 82 | +
|
| 83 | + ```cmd |
| 84 | + pip install .[dev] |
| 85 | + ``` |
| 86 | +
|
| 87 | +1. To build the wheel for your platform: |
| 88 | +
|
| 89 | + ```cmd |
| 90 | + hatchling build |
| 91 | + ``` |
| 92 | +
|
| 93 | +### Running Tests ### |
| 94 | +
|
| 95 | +Python unit tests can be run to confirm successful installation. You will need to |
| 96 | +clone this repository's test data submodule (as described above). Then, run the tests |
| 97 | +with pytest using the following command. |
| 98 | +
|
| 99 | +```cmd |
| 100 | +pytest |
| 101 | +``` |
| 102 | + |
| 103 | +## References ## |
| 104 | + |
| 105 | +- [ITS Propagation Library Wiki](https://ntia.github.io/propagation-library-wiki) |
| 106 | +- [LFMF Wiki Page](https://ntia.github.io/propagation-library-wiki/models/LFMF) |
| 107 | +- [`ITS.Propagation.LFMF` C++ API Reference](https://ntia.github.io/LFMF) |
| 108 | +- Bremmer, H. "Terrestrial Radio Waves" _Elsevier_, 1949. |
| 109 | +- DeMinco, N. "Medium Frequency Propagation Prediction Techniques and Antenna Modeling for Intelligent Transportation Systems (ITS) Broadcast Applications", [_NTIA Report 99-368_](https://www.its.bldrdoc.gov/publications/2399.aspx), August 1999 |
| 110 | +- DeMinco, N. "Ground-wave Analysis Model For MF Broadcast System", [_NTIA Report 86-203_](https://www.its.bldrdoc.gov/publications/2226.aspx), September 1986 |
| 111 | +- Sommerfeld, A. "The propagation of waves in wireless telegraphy", _Ann. Phys._, 1909, 28, p.665 |
| 112 | +- Wait, J. "Radiation From a Vertical Antenna Over a Curved Stratified Ground", _Journal of Research of the National Bureau of Standards_. Vol 56, No. 4, April 1956. Research Paper 2671 |
| 113 | + |
| 114 | +## License ## |
| 115 | + |
| 116 | +See [LICENSE](./LICENSE.md). |
| 117 | + |
| 118 | +"Python" and the Python logos are trademarks or registered trademarks of the Python Software Foundation, used by the National Telecommunications and Information Administration with permission from the Foundation. |
| 119 | + |
| 120 | +## Contact ## |
| 121 | + |
| 122 | +For technical questions, contact <[email protected]>. |
| 123 | + |
| 124 | +## Disclaimer ## |
| 125 | + |
| 126 | +Certain commercial equipment, instruments, or materials are identified in this project were used for the convenience of the developers. In no case does such identification imply recommendation or endorsement by the National Telecommunications and Information Administration, nor does it imply that the material or equipment identified is necessarily the best available for the purpose. |
0 commit comments