first commit

This commit is contained in:
2026-06-23 09:13:51 +03:00
commit f6c7db328f
103 changed files with 1618 additions and 0 deletions
+34
View File
@@ -0,0 +1,34 @@
from __future__ import annotations
from dataclasses import dataclass
from math import exp
@dataclass(frozen=True)
class P833Coefficients:
gamma_db_per_m: float
max_attenuation_db: float
def p833_attenuation(
depth_m: float,
freq_hz: float,
forest_type: str,
coefficients: P833Coefficients | None = None,
) -> float:
if depth_m <= 0:
return 0.0
if freq_hz <= 0:
raise ValueError("freq_hz must be positive")
if coefficients is None:
raise NotImplementedError(
"P.833 coefficients must be supplied from ITU-R tables for "
f"forest_type={forest_type}"
)
coeff = coefficients
if coeff.max_attenuation_db <= 0:
raise ValueError("max_attenuation_db must be positive")
return coeff.max_attenuation_db * (
1 - exp(-(depth_m * coeff.gamma_db_per_m) / coeff.max_attenuation_db)
)