synth
is a package to generate synthetic stacks of single-look complex (SLC) SAR data for InSAR time series analysis.
Realistic results are achieved by using the global seasonal coherence dataset to create realistic decorrelation, and by using the troposim
package to generate tropospheric turbulence noise.
The overall workflow for generating a stack of SLCs is as follows:
- Choose an area of interest (AOI) and set the parameters for the noise sources
- Generate the "truth phase"/"propagation phase" sources, which may include deformation, tropospheric turbulence, and phase ramps
- Download the coherence and backscatter data to use for correlation models
- For each pixel, create a coherence matrix using the decorrelation model and the truth phase differences
- Generate correlated noise samples for this pixel and multiply by the average backscatter
The SLCs are saved in GeoTIFF format, one raster per requested date. The propagation phases are also saved as 3D data cubes in HDF5 files.
Note that the "truth" phase sources include tropospheric noise and phase ramps. One common use is to compare phase linking algorithms, which estimate a wrapped phase time series; in this case, the desired outputs include all "propagation phases".
The tropospheric turbulence noise uses the troposim
package (Staniewicz, 2024), which uses an isotropic representation of the power spectral density (PSD) (cite: Hanssen, 2001).
To simulate longer-wavelength noise sources, we allow simple planar phase ramps to be added at each date. The maximum amplitude may be set, and the orientation of each date's phase ramp is randomized
Currently, the following deformation sources are supported:
- Gaussian blob
- (to move from
troposim
): Okada model - (to move from
troposim
): Geertsma reservoir source model
At each pixel, we use some decorrelation model to create a coherence matrix
To generate correlated random samples,
- Find
$L$ such that$T = L L^H$ using the Cholesky factor1. - Generate an instance
$\mathbf{y}$ of Circular Complex Gaussian (CCG) noise. - Multiply
$\mathbf{z} = T \mathbf{y}$ to obtain the correlated sample. - (optional) If we want the amplitudes to match real data, we can multiply
$A \mathbf{z}$ , where$A = \text{diag}(\mathbf{\boldsymbol{\sigma} })$ .
Here, we use the coherence matrix, which is power-normalized. The relation to the sample covariance matrix covariance matrix
where
Choosing random decorrelation parameters for each pixel in space would not be conducive for running real workflows that rely on averaging pixels in space. Therefore, we use the global coherence dataset to estimate the decorrelation parameters for each pixel.
The coherence dataset, publicly available on AWS, contains seasonal coherence models and average backscatter. The model for coherence
$$
\gamma(t) = (1 - \rho_{\infty})\exp(-t / \tau) + \rho_{\infty}
$$
where
Two example
To create an exponentially decaying correlation matrix, we could attempt to blend all four seasons' model parameters; however, for the current version, we have simply chosen the minimum
This is a heuristic to shrink all long-term coherences toward zero, where the
Since certain regions show large differences for
where
Footnotes
-
Any factorization such that $\Sigma = L L^{T}$ would work. The
multivariate_normal
function has three options: Cholesky, eigenvalue decomposition witheigh
, and SVD. The Cholesky is the fastest, but least robust if your covariance matrix is near-singular. ↩ -
While it's true that the Kellndorfer paper says the bias is very low due to the number of looks they took, my initial Central Valely test had very few regions that looks like pure noise even after 1 year. ↩