smrt-model / smrt

Snow Microwave Radiative Transfert model to compute thermal emission and backscatter from snowpack
Other
48 stars 20 forks source link

Backscatter at nadir (zero degrees) from specular reflector #9

Closed robbiemallett closed 3 years ago

robbiemallett commented 4 years ago

Thought I'd query the behaviour of the reflector substrate at low, snow-penetrating frequencies at zero degrees. Seems that it's scattering rather than reflecting.

When a thin (1cm), low-density snowpack is placed over a totally reflecting plate I would expect the (monostatic) backscatter to be high at zero degrees, since there's normal reflection from the plate and negligible scattering.

Similarly at non-zero angles I would expect backscatter to be negligible, as waves geometrically reflect like a mirror and do not return to the sensor.

Instead the backscatter intensity is a very smooth function of angle, as if the waves are being scattered by the reflecting plate rather than specularly reflected. Furthermore, there's a relatively high cross-pol return, which also implies the plate is scattering rather than reflecting.

Can anybody explain this behaviour to me?

image

Working example:


import numpy as np
from smrt import make_snowpack, make_model, sensor_list, make_ice_column, PSU
from smrt.permittivity.saline_snow import saline_snow_permittivity_geldsetzer09
import matplotlib.pyplot as plt
import itertools
import smrt
from smrt.substrate.reflector_backscatter import make_reflector

frequency = 10e9
angles = np.arange(-10,70,5)

snow_depth = [0.05]
snow_CL_e5 = 10
snow_density = 400
snow_temperature = 265
snow_salinity = 0

substrate = make_reflector(temperature=265,
                           specular_reflection={'V': 1,
                                                'H': 1},
                          )

snowpack = make_snowpack(thickness= snow_depth,
                 microstructure_model="exponential",
                 density=snow_density,
                 temperature= snow_temperature,
                 corr_length= snow_CL_e5*1e-5,
                 salinity= snow_salinity,
                 substrate=substrate
                )

sensor = smrt.sensor.active(frequency, angles, polarization_inc= ['V'],polarization=['V','H'])

m = make_model("iba", "dort")

res = m.run(sensor, snowpack)

###############################################

# Process results

results = {}

for pol in ['V','H']:

    s_res = res.sigma_dB_as_dataframe(polarization_inc='V',
                                  polarization=pol)

    results[f'V{pol}'] = np.array(s_res['sigma'])

##################################################

# Plot results

for key in results.keys():

    if 'VV' in key:
        linestyle = '-'
    else:
        linestyle = '--'

    plt.plot(angles,results[key], label = key,
         marker='.', linestyle = linestyle,
         color='b')

plt.legend(fontsize='x-large',
   loc='lower left')

plt.ylabel('Backscatter (dB)',fontsize='xx-large')
plt.xlabel('Angle',fontsize='xx-large')
plt.xticks(fontsize='x-large')
plt.yticks(fontsize='x-large')
plt.show()
ghislainp commented 4 years ago

The result makes sense. At 80 GHz, 5cm of snow with 100um grains has an expected high backscatter (e.g. see Picard 2012, Nat. Clim. Change). Moreover with the perfect reflector you put below, the wave going through the medium is reflected back and has another chance to be scatterered on the way back through the medium. This is equivalent to 10cm of snow... (double bounce mechanism).

Edit: seems there is an issue with copy/paste, as I received the code by email with 80e9 (and I get the same value as your plot) and I see than you've edited it with 10GHz (then I get lower values).

Edit2: if you use the optimisation branch, which is in principle better but less stable, the results are quite different... about 10dB lower. I'm going to investigate why this difference...

robbiemallett commented 4 years ago

Apologies for that typo (left in after I checked the difference between high frequency and low frequency, changed now).

The effect persists even in the L-band (1 GHz) with a 1cm snow cover. The backscatter is low at non-zero angles (expected), but I still thought I'd see a spike representing the reflection at 0 deg rather than a smooth function?

Edit: I'll check the situation for the bistatic reflection case and see if I can learn anything (e.g. 30 degree transmit, -30 degree receive).

image

ghislainp commented 4 years ago

No no, at least this point is correct. In the modeling, the surface is supposed to be infinitely large and the sensor infinitely far with a perfect antenna pattern (a dirac). It results that the specular (or any coherent wave) is not contributing. What you describe is what you'd get with a ground-based radar with a 'wide' antenna pattern or a non-perfectly flat surface. You could try to use IEM if you want to reproduce this spike (not sure it work though...) but because it is an instrumental effect the backscatter would depend on the antenna pattern... whcih is absent here.

robbiemallett commented 4 years ago

Okay thanks for this information. I've been trying to simulate observations from a ~13 GHz ground based radar at 0 degrees (which in reality captures significant specular reflection from the underlying ice), but also has a fairly wide beam. I'll definitely check out IEM, and appreciate your help with this issue!

ghislainp commented 4 years ago

I solved the problem of difference between the two branches, it was in the optimisaiton branch, the least stable. You can now use it.