Source code for sigma0.oh_model

# Copyright (c) 2018, TU Wien, Department of Geodesy and Geoinformation (GEO).
# All rights reserved.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

import cmath
import numpy as np


[docs]def gammah(eps, theta): """ Incoherent reflectivity for H-pol. Parameters ---------- eps : complex number Complex dielectric constant. theta : float Angle in degrees. Returns ------- gammah : float Incoherent reflectivity for H-pol. """ theta_rad = theta / 180.0 * cmath.pi costheta = np.cos(theta_rad) neliojuuri = np.sqrt(eps - np.sin(theta_rad) ** 2) gammah = np.abs((costheta - neliojuuri) / (costheta + neliojuuri)) ** 2 return gammah
[docs]def gammav(eps, theta): """ Incoherent reflectivity for V-pol. Parameters ---------- eps : complex number Complex dielectric constant. theta : float Angle in degrees. Returns ------- gammav : float Incoherent reflectivity for V-pol. """ theta_rad = theta / 180.0 * cmath.pi costheta = np.cos(theta_rad) neliojuuri = np.sqrt(eps - np.sin(theta_rad) ** 2) gammav = np.abs((eps * costheta - neliojuuri) / (eps * costheta + neliojuuri)) ** 2 return gammav
[docs]def sigma0_bare(theta, eps_low, f_rms, f, eps_top=1): """ Oh et.al. (1992) surface backscatter calculations This functions calculations surface backscatter using the Oh et al. (1992) surface model. References Oh et al., 1992, An empirical model and an inversion technique for rader scattering from bare soil surfaces. IEEE Trans. Geos. Rem., 30, pp. 370-380 Parameters ---------- theta : float incidence angle in degrees eps_low : complex number complex permittivity of lower medium f : float frequency in hertz f_rms: float fractional rms height. rms_height in meters divided by wavelength eps_top : complex number, optional complex permittivity of upper(incoming) medium Returns ------- sigma0 : float Surface backscatter. """ k_rms = (2. * cmath.pi) * f_rms eps_eff = eps_low / eps_top gam0 = gammah(eps_eff, 0) gamh = gammah(eps_eff, theta) gamv = gammav(eps_eff, theta) theta = theta / 180.0 * cmath.pi # precalulcate cosines of angles ct = np.cos(theta) # Oh model equations g = 0.7 * (1. - np.exp(-0.65 * k_rms ** 1.8)) root_p = 1. - ((2. * theta / cmath.pi) ** (1. / (3. * gam0))) * np.exp(-k_rms) # p = (1 - (2 * theta / cmath.pi) ** (1 / (3 * gam0)) * np.exp(-1 * k_rms)) ** 2 q = 0.23 * np.sqrt(gam0) * (1. - np.exp(-k_rms)) sigma0 = {} sigma0['vv'] = g * (ct * (ct * ct)) * (gamv + gamh) / root_p # sig0vv = ((g*(cos(theta))^3)/sqrt(p))*(gamv+gamh); sigma0['vh'] = q * sigma0['vv'] sigma0['hh'] = root_p * root_p * sigma0['vv'] return sigma0