Source code for sense.surface.oh1992


import matplotlib.pyplot as plt
import numpy as np

from ..core import Fresnel0, Reflectivity
from .scatter import SurfaceScatter


[docs] class Oh92(SurfaceScatter): """Oh et al. (1992) empirical surface backscattering model. Reference: Ulaby et al. (2014), Chapter 10.5 """ def __init__(self, eps, ks, theta): """Parameters. eps : complex, ndarray Relative dielectric permittivity. ks : float Product of wavenumber and RMS height (same units). theta : float, ndarray Incidence angle [rad]. """ super().__init__(eps=eps, ks=ks, theta=theta) # Fresnel reflectivities self.G0 = Fresnel0(self.eps) # Nadir Fresnel reflectivity self.G = Reflectivity(self.eps, self.theta) # Model parameters self.p = self._calc_p() self.q = self._calc_q() # Backscatter coefficients self._vv0 = self._calc_vv() self.vv = self._vv0 self.hh = self.p * self._vv0 self.hv = self.q * self._vv0 def _calc_p(self): a = 1.0 / (3.0 * self.G0.x) return (1.0 - (2.0 * self.theta / np.pi) ** a * np.exp(-self.ks)) ** 2 def _calc_q(self): return 0.23 * np.sqrt(self.G0.x) * (1.0 - np.exp(-self.ks)) def _calc_vv(self): a = 0.7 * (1.0 - np.exp(-0.65 * self.ks ** 1.8)) b = np.cos(self.theta) ** 3 * (self.G.v + self.G.h) / np.sqrt(self.p) return a * b
[docs] def plot(self): fig, ax = plt.subplots() t = np.rad2deg(self.theta) ax.plot(t, 10 * np.log10(self.hh), color='blue', label='hh') ax.plot(t, 10 * np.log10(self.vv), color='red', label='vv') ax.plot(t, 10 * np.log10(self.hv), color='green', label='hv') ax.grid(True) ax.set_ylim(-25.0, 0.0) ax.set_xlim(0.0, 70.0) ax.legend() ax.set_xlabel('Incidence angle [deg]') ax.set_ylabel('Backscatter coefficient [dB m²/m²]') plt.show()