added formulas

This commit is contained in:
2026-06-26 12:23:46 +03:00
parent 4df70fa270
commit 83ca6bc12c
8 changed files with 456 additions and 23 deletions
+32 -2
View File
@@ -472,11 +472,24 @@ EIRP = P_{tx} + G_{ant}(azimuth, 0^\circ)
$$
$$
P_{rx} = EIRP - L_{path} - L_{veg} + G_{rx}
P_{rx} = EIRP - L_{path} - L_{veg} - L_{surface} + G_{rx}
$$
`L_path` выбирается по `model`: FSPL, ITM или p1812-like.
Surface obstruction (`L_surface`) считается через Bullington/P.526 по профилю
`ground + max(building, canopy)`:
- для `fspl`: добавляется полный Bullington loss по surface profile;
- для `itm` и `p1812`: добавляется только excess от buildings/canopy поверх
terrain-only профиля:
$$
L_{surface} = \max(0,\ L_{surface\_profile} - L_{terrain\_profile})
$$
Это снижает риск двойного учёта terrain diffraction, уже входящей в ITM/p1812-like path loss.
Алгоритм контура:
1. Для каждого азимута от 0 до 360 градусов.
@@ -484,6 +497,23 @@ $$
3. Пока $P_{rx} \ge level\_dbm$, точка считается покрытой.
4. Последняя покрытая точка образует радиальный контур.
Raster export:
1. Вокруг TX строится UTM-сетка с пикселем `range_step_m`.
2. Размер bbox: $2R \times 2R$, где $R = radius_m$.
3. Для центра каждой ячейки считается расстояние и азимут от TX.
4. Если расстояние больше `radius_m`, пишется NoData `-9999`.
5. Иначе в ячейку пишется $P_{rx}$ в дБм.
GeoTIFF хранит float32 `rx_power_dbm` с CRS/transform. PNG хранит 8-bit preview,
масштабированный по min/max конечных значений:
$$
png = 1 + \frac{P_{rx} - P_{min}}{P_{max} - P_{min}} \cdot 254
$$
Нулевое значение PNG зарезервировано под NoData.
API: `/coverage` → Celery job → `/jobs/{id}`.
## 14. Viewshed
@@ -563,7 +593,7 @@ API: `/buildings/query`, косвенно terrain/link.
4. P.452, ITM и P.676 делегированы внешним библиотекам.
5. `deygout()` оставлен для совместимости, но новый код использует явное `bullington_equivalent_loss()`.
6. `link_viable` зависит только от `fade_margin_db > 0`, не от качества Френеля.
7. Coverage строится радиальными контурами, не полноценной 2D-сеткой.
7. Coverage с buildings/canopy требует surface profile на лучах/ячейках и может быть дорогим на мелком `range_step_m`.
8. Viewshed не использует `k_factor`.
9. `diffraction_db` в `/link/budget` оставлен для обратной совместимости; для новой интеграции лучше читать `propagation_excess_db` и `knife_edge_diffraction_db`.