You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ionospheric phase estimation module for topsStack (#326)
* ionosphere correction for topsStack
* Update README.md
* Update Alos2ProcPublic.py
* Update Stack.py
Currently the script writes the `invertIon.py` command pointing to 'ion' and writing to 'ion_dates'. However we need the absolute paths in order to find the 'ion' directory from within the run_files directory (similar to how the `computeIon.py` function is written at l.1488)
* Add files via upload
* Add files via upload
* Add files via upload
* Add files via upload
* Add files via upload
Co-authored-by: Oliver Stephenson <[email protected]>
#this proves to be not accurate. Adjusting first frame is OK, but adjusting following frames would cause discontinuities between frames. C. Liang, 20-dec-2021
This workflow is basically similar to the previous one. The difference is that the interferograms are not unwrapped.
166
166
167
167
#### 5. Execute the commands in run files (run_01*, run_02*, etc) in the "run_files" folder ####
168
+
169
+
170
+
171
+
-----------------------------------
172
+
### Ionospheric Phase Estimation
173
+
174
+
Ionospheric phase estimation can be performed for each of the workflow introduced above. Generally, we should do ionospheric phase estimation for data acquired at low latitudes on ascending tracks. However, ionospheric phase estimation only works well in areas with high coherence since it requires phase unwrapping. Details about Sentinel-1 ionospheric correction can be found in
175
+
176
+
+ C. Liang, P. Agram, M. Simons, and E. J. Fielding, “Ionospheric correction of InSAR time series analysis of C-band Sentinel-1 TOPS data,” IEEE Transactions on Geoscience and Remote Sensing, vol. 57, no. 9, pp. 6755-6773, Sep. 2019.
177
+
178
+
Ionospheric phase estimation has more requirements than regular InSAR processing. The most important two requirements include
179
+
180
+
- All the acquistions need to be connected in the entire network.
181
+
182
+
- The swath starting ranges need to be the same among all acquistions; otherwise a phase offset between adjacent swaths need to be estimated in order to maintain consistency among the swaths, which might not be accurate enough.
183
+
184
+
#### 1. select the usable acquistions ####
185
+
186
+
In stack ionospheric phase estimation, acquistions with same swath starting ranges are put in a group. A network is formed within a group. Extra pairs are also processed to connect the different groups so that all acquistions are connected. But we need to estimate a phase offset for these extra pairs, which might not be accurate. Therefore, for a particualr swath starting ranges, if there are only a few acquistions, it's better to just discard them so that we don't have to estimate the phase offsets.
Acquistions to be used need to fully cover the south/north bounds. After running this command, acquistion not to be used will be put in a folder named 'not_used'. It's OK to run this command multiple times.
193
+
194
+
#### 2. generate configure and run files ####
195
+
196
+
In stackSentinel.py, two options are for ionospheric phase estimation
197
+
198
+
- --param_ion
199
+
- --num_connections_ion
200
+
201
+
An example --param_ion file 'ion_param.txt' is provided in the code directory. For example, we want to do ionospheric phase estimation when processing a stack of interferograms
If ionospheric phase estimation is enabled in stackSentinel.py, it will generate the following run files. Here ***ns*** means number of steps in the original stack processing, which depends on the type of stack (slc, correlation, interferogram, and offset).
208
+
209
+
- run_ns+1_subband_and_resamp
210
+
- run_ns+2_generateIgram_ion
211
+
- run_ns+3_mergeBurstsIon
212
+
- run_ns+4_unwrap_ion
213
+
- run_ns+5_look_ion
214
+
- run_ns+6_computeIon
215
+
- run_ns+7_filtIon
216
+
- run_ns+8_invertIon
217
+
218
+
Note about **'areas masked out in ionospheric phase estimation'** in ion_param.txt. Seperated islands or areas usually lead to phase unwrapping errors and therefore significantly affect ionospheric phase estimation. It's better to mask them out. Check ion/date1_date2/ion_cal/raw_no_projection.ion for areas to be masked out. However, we don't have this file before processing the data. To quickly get this file, we can process a stack of two acquistions to get this file. NOTE that the reference of this two-acquisition stack should be the same as that of the full stack we want to process.
219
+
220
+
**run_ns+1_subband_and_resamp**
221
+
222
+
Two subband burst SLCs are generated for each burst. For secondary acquistions, the subband burst SLCs are also resampled to match reference burst SLCs. If the subband burst SLCs already exists, the program simply skips the burst.
223
+
224
+
**run_ns+2_generateIgram_ion**
225
+
226
+
Generate subband burst interferograms.
227
+
228
+
**run_ns+3_mergeBurstsIon**
229
+
230
+
Merge subband burst interferograms, and create a unique coherence file used in ionospheric phase estimation. This will be done swath by swath if the two acquistions of the pair has different swath starting ranges.
231
+
232
+
**run_ns+4_unwrap_ion**
233
+
234
+
Unwrap merged subband interferograms. This will be done swath by swath if the two acquistions of the pair has different swath starting ranges.
235
+
236
+
**run_ns+5_look_ion**
237
+
238
+
Take further looks on the unwrapped interferograms, and create the unique coherence file based on the further number of looks. This will be done swath by swath if the two acquistions of the pair has different swath starting ranges.
239
+
240
+
**run_ns+6_computeIon**
241
+
242
+
Compute ionospheric phase. This will be done swath by swath if the two acquistions of the pair has different swath starting ranges, and then the swath ionospheric phase will be merged.
243
+
244
+
**run_ns+7_filtIon**
245
+
246
+
Filter ionospheric phase.
247
+
248
+
**run_ns+8_invertIon**
249
+
250
+
Estimate ionospheric phase for each date. We highly recommend inspecting all pair ionospheric phases ion/date1_date2/ion_cal/filt.ion, and exclude those with anomalies in this command.
251
+
252
+
Typical anomalies include dense fringes caused by phase unwrapping errors, and a range ramp as a result of errors in estimating phase offsets for pairs with different swath starting ranges (check pairs_diff_starting_ranges.txt).
253
+
254
+
#### 3. run command files generated ####
255
+
256
+
Run the commands sequentially.
257
+
258
+
#### 4. check results ####
259
+
260
+
Results from ionospheric phase estimation.
261
+
262
+
- reference and coreg_secondarys: now contains also subband burst SLCs
263
+
- ion: original ionospheric phase estimation results
264
+
- ion_dates: ionospheric phase for each acquistion
- ion/date1_date2/ion_cal/raw_no_projection.ion: original ionospheric phase
267
+
- ion/date1_date2/lower/merged/fine_look.unw: unwrapped lower band interferogram
268
+
- ion/date1_date2/upper/merged/fine_look.unw: unwrapped upper band interferogram
269
+
270
+
If ionospheric phase estimation processing is swath by swath because of different swath starting ranges, there will be swath processing directories including
271
+
272
+
- ion/date1_date2/ion_cal_IW*
273
+
- ion/date1_date2/lower/merged_IW*
274
+
- ion/date1_date2/upper/merged_IW*
275
+
276
+
After processing, we can plot ionospheric phase estimation results using plotIonPairs.py and plotIonDates.py. For example
0 commit comments