In breveAt a glance
43 immagini Sentinel-1 (ESA/Copernicus) della stessa orbita, dal 2026-01-03 al 2026-09-01: radar in banda C, polarizzazione VH, prodotto IW SLC (immagine complessa, con la fase).
43 Sentinel-1 images (ESA/Copernicus) from the same orbit track, 2026-01-03 to 2026-09-01: C-band radar, VH polarisation, IW SLC product (complex image, phase included).
Tomografia SAR multi-baseline: il satellite ripassa ogni volta da una posizione leggermente diversa, e le piccole differenze di fase fra i passaggi dicono a che quota sta chi riflette.
Multi-baseline SAR tomography: the satellite comes back each time from a slightly different position, and the small phase differences between passes tell the height of whatever reflects.
La quota del deserto intorno alle piramidi si misura con un errore di circa 12,3 m.
The height of the desert around the pyramids is measured to about 12.3 m.
Le piramidi non si ricostruiscono: la risoluzione verticale di questi dati è 132 m, quanto l’intera Cheope. Nessuna struttura interna è visibile.
The pyramids are not reconstructed: the vertical resolution of these data is 132 m, as tall as the whole of Khufu. No internal structure is visible.
La pagina interattivaThe interactive page
Le pagine interattive hanno i comandi in italiano.
The interactive pages have their controls in Italian.
Come è stato fattoHow it was done
- Scaricamento e ritaglio. Dal Copernicus Data Space si scaricano gli SLC; di ogni immagine si tiene il riquadro delle tre piramidi più un margine.
- Download and crop. The SLCs are downloaded from the Copernicus Data Space; from each image only the box around the three pyramids plus a margin is kept.
- Allineamento (coregistrazione). Tutte le immagini si sovrappongono a quella del 2026-05-03, pixel su pixel, dopo aver tolto la rampa di fase propria della modalità TOPS. Lo spostamento residuo si sceglie come quello che rende le immagini più coerenti fra loro, non con il picco della cross-correlazione, che qui sbaglia di un pixel.
- Alignment (co-registration). Every image is laid on top of the 2026-05-03 one, pixel by pixel, after removing the phase ramp of the TOPS acquisition mode. The residual shift is the one that makes the images most coherent with each other, not the cross-correlation peak, which is one pixel off here.
- Interferogrammi. Ogni immagine si moltiplica per il coniugato di quella di riferimento; la fase dovuta alla geometria (terra piatta e rilievo di riferimento) si calcola dalle orbite e dalla griglia di geolocalizzazione del prodotto e si toglie.
- Interferograms. Each image is multiplied by the conjugate of the reference one; the phase due to geometry (flat earth and reference relief) is computed from the orbits and the product’s geolocation grid and removed.
- Inversione in quota. Per ogni pixel si cerca la quota che spiega meglio le 43 fasi (periodogramma). La relazione fase-quota cambia da pixel a pixel, quindi il calcolo si fa pixel per pixel.
- Height inversion. For every pixel, the height that best explains the 43 phases is searched (periodogram). The phase-to-height relation changes from pixel to pixel, so it is computed per pixel.
- Soglia di qualità non scelta a mano. Si simula la stessa inversione su fasi puramente casuali con le baseline vere (20000 prove): il 99° percentile del risultato, 0,43, è la soglia. Sotto, un pixel non si distingue dal rumore.
- Quality threshold not chosen by hand. The same inversion is simulated on purely random phases with the real baselines (20000 trials): the 99th percentile of the result, 0.43, is the threshold. Below it, a pixel cannot be told from noise.
- Micro-moto. Lo spettro Doppler di ogni pixel si divide in 12 sotto-aperture, come nel metodo di Biondi e Malanga; le differenze fra sotto-aperture sono un attributo in più della superficie.
- Micro-motion. The Doppler spectrum of each pixel is split into 12 sub-apertures, as in the Biondi and Malanga method; the differences between sub-apertures are one more surface attribute.
- Verifica. Le piramidi si simulano con la loro forma nota nella stessa geometria radar, e la quota misurata si confronta con quella simulata. Le quote note entrano solo nella simulazione di confronto, mai nella misura.
- Check. The pyramids are simulated with their known shape in the same radar geometry, and the measured height is compared with the simulated one. Known heights enter only the comparison simulation, never the measurement.
I numeriThe numbers
| immagini Sentinel-1 impilateSentinel-1 images stacked | 43 |
| periodotime span | 2026-01-03 → 2026-09-01 |
| immagine di riferimentoreference image | 2026-05-03 |
| banda, polarizzazioneband, polarisation | C (5.55 cm), VH |
| angolo di incidenzaincidence angle | 36.8° |
| escursione delle baselinebaseline spread | 297.1 m |
| risoluzione verticale δzvertical resolution δz | 132 m |
| precisione attesa sulla quota σhexpected height precision σh | 8.3 m |
| errore misurato sulla piana (robusto)measured error on the plain (robust) | 12.3 m |
| coerenza medianamedian coherence | 0.42 |
| soglia di qualità (dal rumore simulato)quality threshold (from simulated noise) | 0.43 |
| pixel sopra sogliapixels above threshold | 47 % |
| rilievo di Cheope: misurato / simulatoKhufu relief: measured / simulated | 9.7 / 108 m |
| rilievo di Chefren: misurato / simulatoKhafre relief: measured / simulated | 8.4 / 113 m |
Che cosa dicono i datiWhat the data show
La piana si misura. L’errore della quota sul deserto, stimato in modo robusto, è 12,3 m, dello stesso ordine della precisione attesa (8,3 m): il bilancio d’errore regge.
The plateau is measured. The robust height error over the desert is 12.3 m, the same order as the expected precision (8.3 m): the error budget holds.
Le piramidi no. Il rilievo misurato di Cheope è 9,7 m contro i 108 m attesi, quello di Chefren 8,4 m contro 113. La ragione è geometrica: le facce salgono a 52°, più ripide dell’angolo con cui il radar guarda (37°). Le facce rivolte al satellite sono in layover — punti a quote diverse finiscono nello stesso pixel — e quelle opposte sono in ombra. Il riflettore dominante resta appena sopra il deserto.
The pyramids are not. Khufu’s measured relief is 9.7 m against the 108 m expected, Khafre’s 8.4 m against 113. The reason is geometric: the faces rise at 52°, steeper than the angle at which the radar looks (37°). The faces turned towards the satellite are in layover — points at different heights land in the same pixel — and the opposite faces are in shadow. The dominant reflector stays just above the desert.
Il micro-moto resta un attributo di superficie. In modalità TOPS Sentinel-1 illumina un punto per 143 ms, con 313 Hz di banda Doppler; le analisi di Biondi e Malanga usano immagini spotlight con decine di kHz. Con questi dati le sotto-aperture non danno una profondità.
Micro-motion remains a surface attribute. In TOPS mode Sentinel-1 illuminates a point for 143 ms, with 313 Hz of Doppler bandwidth; the Biondi and Malanga analyses use spotlight images with tens of kHz. With these data the sub-apertures do not yield depth.
Le figureFigures


I dati della corsaRun data
I riassunti completi della corsa sono qui sotto, dentro la pagina: sono i file da cui vengono i numeri della tabella. Sono scritti in italiano, come il programma.
The full run summaries are below, inside the page: they are the files the table numbers come from. They are written in Italian, like the program.
Riassunto completo della corsa — meta.json, 64 KB
{
"generato": "2026-09-07 10:16:07",
"programma": "piramidi_v02.py (revisione 2026-08-28)",
"metodo": "stack interferometrico multi-baseline VH + periodogramma in quota + attributi di micro-moto Doppler",
"polarizzazione": "VH (cross-pol, scattering di volume)",
"sorgente_geometria": "annotation.xml (orbite, geolocation grid, quota di riferimento)",
"sorgente_misura": "tiff VH, pixel per pixel",
"date": [
"20260103",
"20260109",
"20260115",
"20260121",
"20260127",
"20260202",
"20260208",
"20260214",
"20260220",
"20260226",
"20260304",
"20260310",
"20260316",
"20260322",
"20260328",
"20260403",
"20260409",
"20260415",
"20260421",
"20260427",
"20260428",
"20260503",
"20260509",
"20260521",
"20260522",
"20260527",
"20260602",
"20260603",
"20260608",
"20260615",
"20260620",
"20260627",
"20260703",
"20260709",
"20260715",
"20260721",
"20260727",
"20260802",
"20260808",
"20260814",
"20260820",
"20260826",
"20260901"
],
"master": "20260503",
"coregistrazione": [
{
"data": "20260103",
"b_perp_m": 0.06,
"b_temp_giorni": -120.0,
"shift_px": [
0.774,
-0.256
],
"shift_geo_px": [
-0.101,
-0.256
],
"shift_corr_px": [
-1.1,
-0.1
],
"coerenza_geo": 0.2773,
"coerenza_corr": 0.1867,
"coerenza_finale": 0.3462,
"offset_finestra_px": [
0,
33
],
"burst": 2,
"sorgente_shift": "coer",
"psr": 12.88
},
{
"data": "20260109",
"b_perp_m": -124.74,
"b_temp_giorni": -114.0,
"shift_px": [
0.455,
-0.005
],
"shift_geo_px": [
0.455,
-0.005
],
"shift_corr_px": [
-17.25,
-0.05
],
"coerenza_geo": 0.1863,
"coerenza_corr": null,
"coerenza_finale": 0.1863,
"offset_finestra_px": [
4508,
106
],
"burst": 5,
"sorgente_shift": "geo",
"psr": 9.98
},
{
"data": "20260115",
"b_perp_m": -38.53,
"b_temp_giorni": -108.0,
"shift_px": [
1.553,
0.091
],
"shift_geo_px": [
-0.072,
-0.159
],
"shift_corr_px": [
-40.35,
-0.05
],
"coerenza_geo": 0.1986,
"coerenza_corr": null,
"coerenza_finale": 0.3215,
"offset_finestra_px": [
2,
42
],
"burst": 2,
"sorgente_shift": "coer",
"psr": 8.52
},
{
"data": "20260121",
"b_perp_m": -47.68,
"b_temp_giorni": -102.0,
"shift_px": [
3.203,
1.933
],
"shift_geo_px": [
0.453,
0.433
],
"shift_corr_px": [
5.55,
-0.95
],
"coerenza_geo": 0.1792,
"coerenza_corr": null,
"coerenza_finale": 0.1928,
"offset_finestra_px": [
4509,
76
],
"burst": 5,
"sorgente_shift": "coer",
"psr": 11.19
},
{
"data": "20260127",
"b_perp_m": -139.67,
"b_temp_giorni": -96.0,
"shift_px": [
1.29,
-0.073
],
"shift_geo_px": [
-0.21,
0.052
],
"shift_corr_px": [
11.05,
-1.1
],
"coerenza_geo": 0.2137,
"coerenza_corr": null,
"coerenza_finale": 0.3295,
"offset_finestra_px": [
-5,
70
],
"burst": 2,
"sorgente_shift": "coer",
"psr": 10.03
},
{
"data": "20260202",
"b_perp_m": -23.71,
"b_temp_giorni": -90.0,
"shift_px": [
-1.545,
2.55
],
"shift_geo_px": [
-0.295,
-0.2
],
"shift_corr_px": [
-13.6,
-0.0
],
"coerenza_geo": 0.1803,
"coerenza_corr": null,
"coerenza_finale": 0.1906,
"offset_finestra_px": [
4510,
58
],
"burst": 5,
"sorgente_shift": "coer",
"psr": 10.74
},
{
"data": "20260208",
"b_perp_m": -152.61,
"b_temp_giorni": -84.0,
"shift_px": [
-0.162,
0.174
],
"shift_geo_px": [
-0.162,
0.174
],
"shift_corr_px": [
-0.0,
-0.05
],
"coerenza_geo": 0.3341,
"coerenza_corr": 0.3381,
"coerenza_finale": 0.3341,
"offset_finestra_px": [
-1,
68
],
"burst": 2,
"sorgente_shift": "geo",
"psr": 17.18
},
{
"data": "20260214",
"b_perp_m": -84.2,
"b_temp_giorni": -78.0,
"shift_px": [
0.157,
-0.09
],
"shift_geo_px": [
0.157,
-0.09
],
"shift_corr_px": [
40.25,
-1.1
],
"coerenza_geo": 0.1809,
"coerenza_corr": null,
"coerenza_finale": 0.1809,
"offset_finestra_px": [
4509,
83
],
"burst": 5,
"sorgente_shift": "geo",
"psr": 12.19
},
{
"data": "20260220",
"b_perp_m": -100.9,
"b_temp_giorni": -72.0,
"shift_px": [
-1.112,
-0.47
],
"shift_geo_px": [
-0.487,
-0.345
],
"shift_corr_px": [
-0.05,
2.2
],
"coerenza_geo": 0.2611,
"coerenza_corr": 0.1831,
"coerenza_finale": 0.2826,
"offset_finestra_px": [
6,
47
],
"burst": 2,
"sorgente_shift": "coer",
"psr": 12.03
},
{
"data": "20260226",
"b_perp_m": -138.77,
"b_temp_giorni": -66.0,
"shift_px": [
3.126,
-0.358
],
"shift_geo_px": [
0.376,
-0.233
],
"shift_corr_px": [
4.15,
-0.15
],
"coerenza_geo": 0.183,
"coerenza_corr": null,
"coerenza_finale": 0.2452,
"offset_finestra_px": [
4509,
93
],
"burst": 5,
"sorgente_shift": "coer",
"psr": 12.88
},
{
"data": "20260304",
"b_perp_m": -60.89,
"b_temp_giorni": -60.0,
"shift_px": [
-0.423,
0.447
],
"shift_geo_px": [
-0.423,
0.447
],
"shift_corr_px": [
1.15,
-0.15
],
"coerenza_geo": 0.2849,
"coerenza_corr": 0.2051,
"coerenza_finale": 0.2849,
"offset_finestra_px": [
6,
35
],
"burst": 2,
"sorgente_shift": "geo",
"psr": 13.77
},
{
"data": "20260310",
"b_perp_m": -186.24,
"b_temp_giorni": -54.0,
"shift_px": [
-2.458,
-1.959
],
"shift_geo_px": [
-0.083,
0.416
],
"shift_corr_px": [
-40.9,
0.05
],
"coerenza_geo": 0.1783,
"coerenza_corr": null,
"coerenza_finale": 0.1906,
"offset_finestra_px": [
4509,
104
],
"burst": 5,
"sorgente_shift": "coer",
"psr": 9.81
},
{
"data": "20260316",
"b_perp_m": -109.31,
"b_temp_giorni": -48.0,
"shift_px": [
1.318,
-0.27
],
"shift_geo_px": [
0.318,
-0.27
],
"shift_corr_px": [
2.1,
2.15
],
"coerenza_geo": 0.2147,
"coerenza_corr": null,
"coerenza_finale": 0.2451,
"offset_finestra_px": [
7,
45
],
"burst": 2,
"sorgente_shift": "coer",
"psr": 10.3
},
{
"data": "20260322",
"b_perp_m": -146.47,
"b_temp_giorni": -42.0,
"shift_px": [
2.935,
2.262
],
"shift_geo_px": [
0.185,
0.137
],
"shift_corr_px": [
4.9,
0.05
],
"coerenza_geo": 0.1794,
"coerenza_corr": null,
"coerenza_finale": 0.1929,
"offset_finestra_px": [
4511,
96
],
"burst": 5,
"sorgente_shift": "coer",
"psr": 10.93
},
{
"data": "20260328",
"b_perp_m": -101.53,
"b_temp_giorni": -36.0,
"shift_px": [
0.452,
-0.267
],
"shift_geo_px": [
0.452,
-0.267
],
"shift_corr_px": [
11.3,
-0.0
],
"coerenza_geo": 0.2562,
"coerenza_corr": null,
"coerenza_finale": 0.2562,
"offset_finestra_px": [
7,
43
],
"burst": 2,
"sorgente_shift": "geo",
"psr": 9.21
},
{
"data": "20260403",
"b_perp_m": -83.54,
"b_temp_giorni": -30.0,
"shift_px": [
0.09,
-0.006
],
"shift_geo_px": [
0.09,
-0.006
],
"shift_corr_px": [
1.15,
-1.05
],
"coerenza_geo": 0.178,
"coerenza_corr": 0.1762,
"coerenza_finale": 0.178,
"offset_finestra_px": [
4511,
77
],
"burst": 5,
"sorgente_shift": "geo",
"psr": 12.44
},
{
"data": "20260409",
"b_perp_m": -115.25,
"b_temp_giorni": -24.0,
"shift_px": [
1.601,
-0.227
],
"shift_geo_px": [
0.226,
-0.102
],
"shift_corr_px": [
-32.4,
-0.0
],
"coerenza_geo": 0.213,
"coerenza_corr": null,
"coerenza_finale": 0.2979,
"offset_finestra_px": [
4,
49
],
"burst": 2,
"sorgente_shift": "coer",
"psr": 10.6
},
{
"data": "20260415",
"b_perp_m": -163.95,
"b_temp_giorni": -18.0,
"shift_px": [
2.795,
1.621
],
"shift_geo_px": [
0.045,
-0.004
],
"shift_corr_px": [
-1.15,
83.9
],
"coerenza_geo": 0.179,
"coerenza_corr": null,
"coerenza_finale": 0.1939,
"offset_finestra_px": [
4511,
100
],
"burst": 5,
"sorgente_shift": "coer",
"psr": 9.7
},
{
"data": "20260421",
"b_perp_m": -143.85,
"b_temp_giorni": -12.0,
"shift_px": [
0.854,
-0.371
],
"shift_geo_px": [
0.229,
-0.246
],
"shift_corr_px": [
1.85,
-0.0
],
"coerenza_geo": 0.2112,
"coerenza_corr": 0.1991,
"coerenza_finale": 0.2248,
"offset_finestra_px": [
10,
41
],
"burst": 2,
"sorgente_shift": "coer",
"psr": 10.72
},
{
"data": "20260427",
"b_perp_m": -113.31,
"b_temp_giorni": -6.0,
"shift_px": [
2.313,
2.182
],
"shift_geo_px": [
-0.437,
-0.193
],
"shift_corr_px": [
-5.25,
-1.05
],
"coerenza_geo": 0.1748,
"coerenza_corr": null,
"coerenza_finale": 0.1877,
"offset_finestra_px": [
4513,
67
],
"burst": 5,
"sorgente_shift": "coer",
"psr": 8.75
},
{
"data": "20260428",
"b_perp_m": -85.18,
"b_temp_giorni": -5.0,
"shift_px": [
0.206,
-0.307
],
"shift_geo_px": [
0.206,
-0.307
],
"shift_corr_px": [
1.2,
-0.05
],
"coerenza_geo": 0.3707,
"coerenza_corr": 0.2954,
"coerenza_finale": 0.3707,
"offset_finestra_px": [
4542,
58
],
"burst": 5,
"sorgente_shift": "geo",
"psr": 13.84
},
{
"data": "20260503",
"b_perp_m": 0.0,
"b_temp_giorni": 0.0,
"shift_px": [
0.0,
0.0
],
"shift_geo_px": [
0.0,
0.0
],
"shift_corr_px": [
0.0,
0.0
],
"coerenza_geo": null,
"coerenza_corr": null,
"coerenza_finale": null,
"offset_finestra_px": [
0,
0
],
"burst": 2,
"sorgente_shift": "master",
"psr": null
},
{
"data": "20260509",
"b_perp_m": -176.69,
"b_temp_giorni": 6.0,
"shift_px": [
-0.346,
-0.25
],
"shift_geo_px": [
-0.346,
-0.25
],
"shift_corr_px": [
-2.3,
-1.1
],
"coerenza_geo": 0.1777,
"coerenza_corr": 0.1784,
"coerenza_finale": 0.1777,
"offset_finestra_px": [
4513,
87
],
"burst": 5,
"sorgente_shift": "geo",
"psr": 10.86
},
{
"data": "20260521",
"b_perp_m": -130.26,
"b_temp_giorni": 18.0,
"shift_px": [
1.101,
0.345
],
"shift_geo_px": [
0.476,
0.47
],
"shift_corr_px": [
35.05,
-0.05
],
"coerenza_geo": 0.3507,
"coerenza_corr": null,
"coerenza_finale": 0.3989,
"offset_finestra_px": [
4538,
81
],
"burst": 5,
"sorgente_shift": "coer",
"psr": 10.89
},
{
"data": "20260522",
"b_perp_m": -142.62,
"b_temp_giorni": 19.0,
"shift_px": [
0.37,
0.333
],
"shift_geo_px": [
0.37,
0.333
],
"shift_corr_px": [
1.1,
1.25
],
"coerenza_geo": 0.3201,
"coerenza_corr": 0.2255,
"coerenza_finale": 0.3201,
"offset_finestra_px": [
4541,
82
],
"burst": 5,
"sorgente_shift": "geo",
"psr": 10.23
},
{
"data": "20260527",
"b_perp_m": 86.65,
"b_temp_giorni": 24.0,
"shift_px": [
0.31,
-0.321
],
"shift_geo_px": [
-0.315,
-0.321
],
"shift_corr_px": [
1.1,
-0.05
],
"coerenza_geo": 0.3674,
"coerenza_corr": 0.3236,
"coerenza_finale": 0.4111,
"offset_finestra_px": [
3,
-12
],
"burst": 2,
"sorgente_shift": "coer",
"psr": 14.45
},
{
"data": "20260602",
"b_perp_m": -64.63,
"b_temp_giorni": 30.0,
"shift_px": [
1.436,
-0.358
],
"shift_geo_px": [
0.061,
-0.358
],
"shift_corr_px": [
-29.25,
-1.05
],
"coerenza_geo": 0.2274,
"coerenza_corr": null,
"coerenza_finale": 0.3571,
"offset_finestra_px": [
4540,
58
],
"burst": 5,
"sorgente_shift": "coer",
"psr": 9.57
},
{
"data": "20260603",
"b_perp_m": -116.35,
"b_temp_giorni": 31.0,
"shift_px": [
-0.114,
-0.154
],
"shift_geo_px": [
-0.114,
-0.154
],
"shift_corr_px": [
1.15,
-0.85
],
"coerenza_geo": 0.2954,
"coerenza_corr": 0.2096,
"coerenza_finale": 0.2954,
"offset_finestra_px": [
4543,
69
],
"burst": 5,
"sorgente_shift": "geo",
"psr": 11.28
},
{
"data": "20260608",
"b_perp_m": 28.79,
"b_temp_giorni": 36.0,
"shift_px": [
0.42,
-0.071
],
"shift_geo_px": [
-0.08,
-0.071
],
"shift_corr_px": [
-1.05,
-0.15
],
"coerenza_geo": 0.3701,
"coerenza_corr": 0.2281,
"coerenza_finale": 0.3969,
"offset_finestra_px": [
4,
1
],
"burst": 2,
"sorgente_shift": "coer",
"psr": 12.42
},
{
"data": "20260615",
"b_perp_m": -102.73,
"b_temp_giorni": 43.0,
"shift_px": [
0.076,
0.271
],
"shift_geo_px": [
0.076,
0.271
],
"shift_corr_px": [
22.2,
-0.05
],
"coerenza_geo": 0.3107,
"coerenza_corr": null,
"coerenza_finale": 0.3107,
"offset_finestra_px": [
4542,
71
],
"burst": 5,
"sorgente_shift": "geo",
"psr": 11.91
},
{
"data": "20260620",
"b_perp_m": 5.23,
"b_temp_giorni": 48.0,
"shift_px": [
0.53,
-0.042
],
"shift_geo_px": [
-0.095,
0.083
],
"shift_corr_px": [
-21.35,
0.05
],
"coerenza_geo": 0.3518,
"coerenza_corr": null,
"coerenza_finale": 0.4044,
"offset_finestra_px": [
2,
1
],
"burst": 2,
"sorgente_shift": "coer",
"psr": 10.19
},
{
"data": "20260627",
"b_perp_m": -166.94,
"b_temp_giorni": 55.0,
"shift_px": [
0.401,
-0.171
],
"shift_geo_px": [
0.401,
-0.171
],
"shift_corr_px": [
7.0,
0.05
],
"coerenza_geo": 0.1797,
"coerenza_corr": null,
"coerenza_finale": 0.1797,
"offset_finestra_px": [
10429,
-126
],
"burst": 9,
"sorgente_shift": "geo",
"psr": 10.02
},
{
"data": "20260703",
"b_perp_m": -153.95,
"b_temp_giorni": 61.0,
"shift_px": [
1.24,
-0.047
],
"shift_geo_px": [
-0.385,
-0.047
],
"shift_corr_px": [
29.9,
1.15
],
"coerenza_geo": 0.2038,
"coerenza_corr": null,
"coerenza_finale": 0.319,
"offset_finestra_px": [
4539,
87
],
"burst": 5,
"sorgente_shift": "coer",
"psr": 10.11
},
{
"data": "20260709",
"b_perp_m": -184.01,
"b_temp_giorni": 67.0,
"shift_px": [
1.295,
-0.498
],
"shift_geo_px": [
-0.08,
-0.373
],
"shift_corr_px": [
-11.05,
-0.0
],
"coerenza_geo": 0.205,
"coerenza_corr": null,
"coerenza_finale": 0.2633,
"offset_finestra_px": [
4540,
-24
],
"burst": 5,
"sorgente_shift": "coer",
"psr": 11.47
},
{
"data": "20260715",
"b_perp_m": -113.0,
"b_temp_giorni": 73.0,
"shift_px": [
1.346,
-0.396
],
"shift_geo_px": [
-0.404,
-0.396
],
"shift_corr_px": [
-0.05,
0.15
],
"coerenza_geo": 0.1971,
"coerenza_corr": 0.2134,
"coerenza_finale": 0.3658,
"offset_finestra_px": [
4537,
66
],
"burst": 5,
"sorgente_shift": "coer",
"psr": 12.94
},
{
"data": "20260721",
"b_perp_m": -210.46,
"b_temp_giorni": 79.0,
"shift_px": [
0.218,
-0.11
],
"shift_geo_px": [
0.218,
-0.11
],
"shift_corr_px": [
12.8,
-0.05
],
"coerenza_geo": 0.2547,
"coerenza_corr": null,
"coerenza_finale": 0.2547,
"offset_finestra_px": [
4540,
-25
],
"burst": 5,
"sorgente_shift": "geo",
"psr": 11.06
},
{
"data": "20260727",
"b_perp_m": -131.8,
"b_temp_giorni": 85.0,
"shift_px": [
0.929,
-0.174
],
"shift_geo_px": [
0.179,
-0.049
],
"shift_corr_px": [
0.2,
-1.1
],
"coerenza_geo": 0.2827,
"coerenza_corr": 0.2244,
"coerenza_finale": 0.3315,
"offset_finestra_px": [
4537,
76
],
"burst": 5,
"sorgente_shift": "coer",
"psr": 10.35
},
{
"data": "20260802",
"b_perp_m": -142.62,
"b_temp_giorni": 91.0,
"shift_px": [
1.76,
0.47
],
"shift_geo_px": [
0.385,
0.47
],
"shift_corr_px": [
-38.2,
-0.0
],
"coerenza_geo": 0.2032,
"coerenza_corr": null,
"coerenza_finale": 0.251,
"offset_finestra_px": [
4540,
-42
],
"burst": 5,
"sorgente_shift": "coer",
"psr": 10.13
},
{
"data": "20260808",
"b_perp_m": -148.42,
"b_temp_giorni": 97.0,
"shift_px": [
0.559,
-0.008
],
"shift_geo_px": [
-0.316,
-0.008
],
"shift_corr_px": [
0.1,
-2.15
],
"coerenza_geo": 0.2798,
"coerenza_corr": 0.1961,
"coerenza_finale": 0.3362,
"offset_finestra_px": [
4537,
80
],
"burst": 5,
"sorgente_shift": "coer",
"psr": 11.53
},
{
"data": "20260814",
"b_perp_m": -97.71,
"b_temp_giorni": 103.0,
"shift_px": [
1.006,
-0.063
],
"shift_geo_px": [
-0.369,
0.062
],
"shift_corr_px": [
1.0,
-1.1
],
"coerenza_geo": 0.2077,
"coerenza_corr": 0.2129,
"coerenza_finale": 0.2652,
"offset_finestra_px": [
4541,
-54
],
"burst": 5,
"sorgente_shift": "coer",
"psr": 11.72
},
{
"data": "20260820",
"b_perp_m": -187.45,
"b_temp_giorni": 109.0,
"shift_px": [
0.784,
-0.001
],
"shift_geo_px": [
-0.466,
-0.001
],
"shift_corr_px": [
-33.85,
0.05
],
"coerenza_geo": 0.2429,
"coerenza_corr": null,
"coerenza_finale": 0.3414,
"offset_finestra_px": [
4534,
88
],
"burst": 5,
"sorgente_shift": "coer",
"psr": 10.94
},
{
"data": "20260826",
"b_perp_m": -118.91,
"b_temp_giorni": 115.0,
"shift_px": [
0.234,
0.471
],
"shift_geo_px": [
-0.391,
0.346
],
"shift_corr_px": [
-0.05,
-1.15
],
"coerenza_geo": 0.27,
"coerenza_corr": 0.2043,
"coerenza_finale": 0.2948,
"offset_finestra_px": [
4539,
-52
],
"burst": 5,
"sorgente_shift": "coer",
"psr": 12.26
},
{
"data": "20260901",
"b_perp_m": -129.12,
"b_temp_giorni": 121.0,
"shift_px": [
1.597,
-0.425
],
"shift_geo_px": [
0.472,
-0.3
],
"shift_corr_px": [
-43.2,
-1.1
],
"coerenza_geo": 0.2562,
"coerenza_corr": null,
"coerenza_finale": 0.3483,
"offset_finestra_px": [
4534,
74
],
"burst": 5,
"sorgente_shift": "coer",
"psr": 10.64
}
],
"budget": {
"wavelength": 0.05546576,
"slant_range": 850842.1797933187,
"incidence_deg": 36.83484649658203,
"b_spread": 297.10359990481487,
"b_std": 63.4577204828207,
"n_baselines": 43,
"delta_z_slant": 79.42113147974727,
"delta_z_vertical": 132.47663543091855,
"ambiguity_height": 12715.882941661179,
"target_height": 138.5,
"gamma_typ": 0.4193578362464905,
"sigma_h": 8.282142046387673
},
"budget_a_priori": {
"wavelength": 0.05546576,
"slant_range": 850842.1797933187,
"incidence_deg": 36.83484649658203,
"b_spread": 297.10359990481487,
"b_std": 63.4577204828207,
"n_baselines": 43,
"delta_z_slant": 79.42113147974727,
"delta_z_vertical": 132.47663543091855,
"ambiguity_height": 12715.882941661179,
"target_height": 138.5,
"gamma_typ": 0.6,
"sigma_h": 5.101124692796365
},
"coerenza_mediana_misurata": 0.4194,
"soglia_qualita_gamma": 0.4315,
"distribuzione_nulla_periodogramma": {
"mediana_nulla": 0.2903,
"p90_nulla": 0.3615,
"p99_nulla": 0.4315,
"p99_9_nulla": 0.4833,
"soglia_usata": 0.4315,
"percentile_usato": 99.0,
"prove": 20000
},
"nodi_despicati": 463,
"contrasto_per_polarizzazione": {
"vh": {
"data": "20260509",
"fondo_dB": -13.59,
"contrasto_per_fascia_dB": {
"layover_alto_gt80m": 1.7,
"medio_40_80m": 2.56,
"basso_lt40m": -0.93
},
"picco_dB": {
"Cheope (Khufu)": 12.99,
"Chefren (Khafre)": 7.5
}
}
},
"piano_sub_aperture": {
"b_cd": 313.0,
"b_dl": 156.5,
"b_sub": 156.5,
"b_shift": 28.169999999999998,
"step": 11.666363636363638,
"n_d": 12,
"df_bin": 2.1927901996888064,
"bins_per_sub": 71.37025695491067,
"k_a": -2188.2693637370594,
"k_t": 1491.5443452737063,
"t_illum": 0.14303540742601642,
"dt_step": 0.0053313197313333395,
"dt_shift": 0.012873186668341476,
"t_window": 0.058644517044666736,
"f_sample": 187.57081743246047,
"f_max_obs": 38.8404217915701,
"f_min_obs": 17.05189249386004,
"aperture_m": 958.33722975431,
"lambda_sound_m": 154.47824002009773,
"delta_z_acoustic": 68507.46268656716
},
"segno_k_z": -1.0,
"layover": {
"angolo_di_incidenza_deg": 36.83,
"angolo_di_vista_off_nadir_deg": 32.73,
"soglia_layover_deg": 36.83,
"soglia_ombra_deg": 53.17,
"piramidi": [
{
"piramide": "Cheope (Khufu)",
"pendenza_faccia_deg": 51.84,
"incidenza_locale_faccia_vicina_deg": -15.01,
"incidenza_locale_faccia_lontana_deg": 88.67,
"faccia_vicina": "layover",
"faccia_lontana": "illuminata",
"estensione_slant_faccia_vicina_m": 41.8,
"compressione": 2.8
},
{
"piramide": "Chefren (Khafre)",
"pendenza_faccia_deg": 53.13,
"incidenza_locale_faccia_vicina_deg": -16.3,
"incidenza_locale_faccia_lontana_deg": 89.96,
"faccia_vicina": "layover",
"faccia_lontana": "illuminata",
"estensione_slant_faccia_vicina_m": 44.6,
"compressione": 2.4
},
{
"piramide": "Micerino (Menkaure)",
"pendenza_faccia_deg": 51.34,
"incidenza_locale_faccia_vicina_deg": -14.51,
"incidenza_locale_faccia_lontana_deg": 88.17,
"faccia_vicina": "layover",
"faccia_lontana": "illuminata",
"estensione_slant_faccia_vicina_m": 18.2,
"compressione": 2.8
}
],
"nota": "Tutte e tre le facce rivolte al sensore superano l'angolo di incidenza: sono in layover pieno, e le facce opposte sono in ombra. E' geometria, non un artefatto del processing. Le fonti raccomandano di preferire il lato in layover: comprime piu' diffusori nella stessa cella di range ma li separa lungo l'asse di elevazione, che e' esattamente l'asse ricostruito qui."
},
"validazione": {
"livello_1_geometria": {
"regressione_misurato_vs_simulato": {
"pixel": 223,
"pendenza": -0.058,
"pendenza_theil_sen": 0.041,
"ic95": [
0.005,
0.077
],
"mediane_per_fascia": [
{
"simulato_m": [
5,
30
],
"celle": 70,
"misurato_mediano_m": 3.4
},
{
"simulato_m": [
30,
60
],
"celle": 52,
"misurato_mediano_m": 5.3
},
{
"simulato_m": [
60,
90
],
"celle": 60,
"misurato_mediano_m": 5.4
},
{
"simulato_m": [
90,
null
],
"celle": 41,
"misurato_mediano_m": 8.5
}
],
"pendenza_attesa": 1.0,
"errore_standard_pendenza": 0.149,
"t_pendenza": -0.4,
"intercetta_m": -2.9,
"correlazione_r": -0.026,
"rmse_m": 78.4,
"esito": "nessuna dipendenza significativa dalla quota simulata"
},
"Cheope (Khufu)": {
"celle_simulate": 345,
"celle_di_qualita": 90,
"celle_di_sommita": 11,
"rilievo_misurato_m": 9.7,
"rilievo_simulato_m": 108.3,
"errore_m": -98.7,
"entro_2_sigma_h": false,
"rilievo_misurato_alla_base_m": 1.1
},
"Chefren (Khafre)": {
"celle_simulate": 309,
"celle_di_qualita": 135,
"celle_di_sommita": 24,
"rilievo_misurato_m": 8.4,
"rilievo_simulato_m": 113.2,
"errore_m": -104.8,
"entro_2_sigma_h": false,
"rilievo_misurato_alla_base_m": 4.2
},
"Micerino (Menkaure)": {
"celle_simulate": 77,
"celle_di_qualita": 22,
"celle_di_sommita": 3,
"rilievo_misurato_alla_base_m": 1.6
},
"_quota_mediana_piana_m": 65.0,
"_sigma_h_attesa_m": 8.3,
"_soglia_qualita_gamma": 0.432,
"_distribuzione_nulla": {
"mediana_nulla": 0.2903,
"p90_nulla": 0.3615,
"p99_nulla": 0.4315,
"p99_9_nulla": 0.4833,
"soglia_usata": 0.4315,
"percentile_usato": 99.0,
"prove": 20000
},
"_riferimento": "le quote note da letteratura archeologica entrano SOLO nella simulazione di confronto, mai nella catena che produce la superficie misurata"
},
"livello_2_misura": {
"pixel_buoni_frazione": 0.4661,
"gamma_mediana": 0.4178,
"gamma_p90": 0.6888,
"dispersione_quota_sulla_piana_m": 69.2,
"dispersione_robusta_sulla_piana_m": 12.3,
"sigma_h_teorica_m": 8.3,
"nota": "la dispersione ROBUSTA misurata sulla piana e' il controllo empirico della sigma_h teorica: se le due sono dello stesso ordine il budget di precisione e' onesto; la deviazione standard e' riportata per completezza ma e' dominata dalla coda degli errori grossolani (F27)"
},
"livello_3_struttura": {
"layover": {
"angolo_di_incidenza_deg": 36.83,
"angolo_di_vista_off_nadir_deg": 32.73,
"soglia_layover_deg": 36.83,
"soglia_ombra_deg": 53.17,
"piramidi": [
{
"piramide": "Cheope (Khufu)",
"pendenza_faccia_deg": 51.84,
"incidenza_locale_faccia_vicina_deg": -15.01,
"incidenza_locale_faccia_lontana_deg": 88.67,
"faccia_vicina": "layover",
"faccia_lontana": "illuminata",
"estensione_slant_faccia_vicina_m": 41.8,
"compressione": 2.8
},
{
"piramide": "Chefren (Khafre)",
"pendenza_faccia_deg": 53.13,
"incidenza_locale_faccia_vicina_deg": -16.3,
"incidenza_locale_faccia_lontana_deg": 89.96,
"faccia_vicina": "layover",
"faccia_lontana": "illuminata",
"estensione_slant_faccia_vicina_m": 44.6,
"compressione": 2.4
},
{
"piramide": "Micerino (Menkaure)",
"pendenza_faccia_deg": 51.34,
"incidenza_locale_faccia_vicina_deg": -14.51,
"incidenza_locale_faccia_lontana_deg": 88.17,
"faccia_vicina": "layover",
"faccia_lontana": "illuminata",
"estensione_slant_faccia_vicina_m": 18.2,
"compressione": 2.8
}
],
"nota": "Tutte e tre le facce rivolte al sensore superano l'angolo di incidenza: sono in layover pieno, e le facce opposte sono in ombra. E' geometria, non un artefatto del processing. Le fonti raccomandano di preferire il lato in layover: comprime piu' diffusori nella stessa cella di range ma li separa lungo l'asse di elevazione, che e' esattamente l'asse ricostruito qui."
},
"separabilita_piramide_vs_piana": {
"delta_quota_mediana_m": 5.3,
"errore_standard_m": 5.29,
"z_score": 1.0,
"pixel_su_piramide": 236,
"pixel_su_piana": 3665
},
"avvertenza_interna": "delta_z verticale 132 m contro 138 m di altezza: la piramide occupa 1.05 celle di RISOLUZIONE. Nessuna struttura interna e' separabile con questi dati. Le camere note (Grande Galleria, camera del Re, camera della Regina) hanno dimensioni di alcuni metri, due ordini di grandezza sotto."
},
"calibrazione_segno_k_z": {
"segno_+1": {
"quota_mediana_piramidi_m": -8.79,
"quota_mediana_piana_m": -0.95,
"margine_m": -7.85,
"pixel_su_piramide": 73,
"pixel_su_piana": 3275
},
"segno_-1": {
"quota_mediana_piramidi_m": 8.79,
"quota_mediana_piana_m": 0.95,
"margine_m": 7.85,
"pixel_su_piramide": 73,
"pixel_su_piana": 3275
},
"segno_scelto": -1,
"criterio": "le piramidi devono risultare sopra la piana; si sceglie il segno che massimizza la mediana(quota sulle impronte) - mediana(quota sulla piana)",
"margine_scelto_m": 7.85
}
},
"analisi_colonne": {
"Cheope (Khufu)": {
"pixel_nella_colonna": 276,
"intensita_media_dB": -8.01,
"solidita_media": 0.0663,
"solidita_max": 0.1014,
"quota_del_massimo_m": 6.2
},
"Chefren (Khafre)": {
"pixel_nella_colonna": 240,
"intensita_media_dB": -10.47,
"solidita_media": 0.0631,
"solidita_max": 0.1323,
"quota_del_massimo_m": 6.2
},
"Micerino (Menkaure)": {
"pixel_nella_colonna": 55,
"intensita_media_dB": -15.56,
"solidita_media": 0.0236,
"solidita_max": 0.0505,
"quota_del_massimo_m": 3.1
},
"deserto_controllo": {
"pixel_nella_colonna": 99,
"posizione_enu_m": [
394.1,
-821.2
],
"intensita_media_dB": -7.2,
"solidita_media": 0.18
},
"separabilita_vs_deserto": {
"Cheope (Khufu)": {
"delta_intensita_dB": -0.81,
"delta_solidita": -0.1137
},
"Chefren (Khafre)": {
"delta_intensita_dB": -3.27,
"delta_solidita": -0.1169
},
"Micerino (Menkaure)": {
"delta_intensita_dB": -8.36,
"delta_solidita": -0.1564
}
}
},
"geolocation_grid_xml": {
"descrizione": "F35/F36: i nodi VERI (non interpolati) della geolocation grid dello .xml. Non sono un piano: coprono tutta la scena con un rilievo reale fino a centinaia di metri. height_ref/xml_ref sono ora la bilineare LOCALE (F36) fra i quattro nodi reali della cella che contiene il ritaglio -- non una spline globale sui 231 nodi -- ma la spaziatura del reticolo e' enormemente piu' larga del ritaglio delle piramidi, quindi quella cella non ha rilievo locale da mostrare, e il risultato e' correttamente quasi piatto: e' un limite di risoluzione del riferimento, non un errore di calcolo.",
"spaziatura_reticolo_px": [
1511,
1333
],
"nodo_piu_vicino_al_ritaglio_km": 3.17,
"nodo_piu_vicino_al_ritaglio_quota_m": 64.0,
"rilievo_vero_su_tutta_la_scena_m": [
1.0,
610.0
]
},
"correzioni_applicate": [
{
"id": "F01",
"gravita": "critico",
"descrizione": "Il cubo tomografico ora contiene l'interferogramma y_i = s_i * conj(s_m) normalizzato, non le SLC grezze. Con le SLC grezze la fase di ogni data e' dominata dal termine di propagazione exp(-j4piR_i/lambda), che varia di migliaia di cicli fra date e sommerge completamente il termine k_z*z su cui si regge l'inversione."
},
{
"id": "F02",
"gravita": "critico",
"descrizione": "La fase di terra piatta e di topografia di riferimento e' rimossa analiticamente da orbita + geolocation grid (delta_R geometrico), non con una regressione su np.unwrap di uno scatter mascherato e appiattito, che su dati decorrelati e' un random walk e iniettava uno schermo di fase casuale."
},
{
"id": "F03",
"gravita": "alto",
"descrizione": "Interpolazione orbitale di Lagrange all'ordine 8 al posto di np.interp lineare. I vettori di stato distano 10 s: l'interpolazione lineare sbaglia di metri, e l'escursione di baseline utile e' di appena ~163 m."
},
{
"id": "F04",
"gravita": "alto",
"descrizione": "k_z calcolato con lo slant range e l'angolo di incidenza PROPRI di ciascuna acquisizione e di ciascun pixel (K_z = 4*pi*B_perp/(lambda*r_i*sin(theta))), non con un R medio scalare."
},
{
"id": "F05",
"gravita": "alto",
"descrizione": "Il segno di k_z non e' piu' assunto: viene calibrato sui dati verificando che le piramidi risultino SOPRA la piana e non sotto, e il margine della decisione viene riportato (validazione di livello 1, ch15)."
},
{
"id": "F06",
"gravita": "alto",
"descrizione": "Le sub-bande Doppler master/slave restano dentro lo spettro. Prima l'ultima sub-apertura slave sconfinava a 0.583*B_cD contro un limite di 0.5*B_cD, quindi le ultime marce del banco leggevano spettro vuoto."
},
{
"id": "F07",
"gravita": "alto",
"descrizione": "Il micro-moto si calcola su un chip esteso in azimuth (1024 linee dentro il burst) invece che sulle ~185 linee del chip tomografico. Con 185 linee la griglia Doppler ha 7.8 Hz per bin su 313 Hz totali: le 12 sub-aperture distavano meno di due bin l'una dall'altra e la decomposizione era priva di significato."
},
{
"id": "F08",
"gravita": "medio",
"descrizione": "Finestratura di Hann sulle sub-bande al posto del rect, che generava lobi laterali sinc in azimuth e sporcava il pixel tracking."
},
{
"id": "F09",
"gravita": "alto",
"descrizione": "L'energia di micro-moto e' la deviazione standard del vettore di shift COMPLESSO demediato, non std(|shift|). Con std(|shift|) una vibrazione a modulo costante -- il caso dell'oscillatore a 2 gradi di liberta' delle fonti, eq. (20) -- restituiva energia nulla."
},
{
"id": "F10",
"gravita": "medio",
"descrizione": "La griglia del micro-moto e' riportata al reticolo pieno con map_coordinates sulle coordinate reali dei nodi, non con zoom: zoom introduceva un offset di mezza finestra (~8 px) e poteva restituire una forma diversa da quella del cubo, rompendo il broadcast."
},
{
"id": "F11",
"gravita": "medio",
"descrizione": "I profili verticali mediano in POTENZA e convertono in dB alla fine. Mediare direttamente i dB introduce un bias sistematico."
},
{
"id": "F12",
"gravita": "medio",
"descrizione": "La colonna di deserto di controllo e' scelta dentro la copertura effettiva e verificata non vuota. Prima poteva cadere fuori dal chip, restituire zeri e produrre una separabilita' falsa."
},
{
"id": "F13",
"gravita": "medio",
"descrizione": "Il master e' il 'supermaster' che minimizza il costo di decorrelazione combinato (baseline + temporale), non semplicemente la prima data."
},
{
"id": "F14",
"gravita": "alto",
"descrizione": "Geocodifica per interpolazione bilineare LOCALE (F36) sulla geolocation grid, che e' un reticolo regolare 11x21. Prima si usava griddata + nan_to_num(media): i punti fuori dall'inviluppo venivano riempiti con la media, deformando la geometria."
},
{
"id": "F15",
"gravita": "concettuale",
"descrizione": "Separazione fra RISOLUZIONE e PRECISIONE. delta_z ~ 227 m e' la separazione di Rayleigh fra due diffusori nella stessa cella; la precisione sulla quota di un diffusore dominante e' sigma_h = lambda*R*sin(theta)*sigma_phi / (4*pi*sigma_Bperp) e con 11 baseline vale alcune decine di metri. La versione precedente concludeva 'non risolvibile' confondendo le due cose, e per questo non disegnava alcuna superficie."
},
{
"id": "F16",
"gravita": "concettuale",
"descrizione": "Layover e foreshortening sono calcolati e riportati. Con incidenza 39.4 gradi (angolo di vista ~34.8) e facce a 52 gradi la faccia rivolta al sensore e' in layover pieno: e' una proprieta' della geometria, non un artefatto, e va dichiarata prima di interpretare (ch14)."
},
{
"id": "F17",
"gravita": "nuovo",
"descrizione": "Superficie reale ricostruita pixel per pixel: quota di riferimento dalla geolocation grid dello .xml piu' quota residua stimata dal periodogramma multi-baseline sui .tiff VH, con maschera di qualita' sulla coerenza di fit. Prima il 3D mostrava solo piramidi geometriche ideali disegnate da costanti scritte a mano."
},
{
"id": "F18",
"gravita": "nuovo",
"descrizione": "Vista 3D con molti gradi di liberta': imbardata, beccheggio, rollio, traslazione, zoom, prospettiva/ortografica, esagerazione verticale, doppia soglia in quota, soglia di intensita', piano di sezione, attributo di colore selezionabile, illuminazione orientabile, livelli commutabili, controlli da tastiera e rispetto di prefers-reduced-motion."
},
{
"id": "F19",
"gravita": "basso",
"descrizione": "meta.json viene scritto una volta sola invece che due, e l'analisi dei profili non e' piu' annidata dentro la funzione di salvataggio."
},
{
"id": "F20",
"gravita": "basso",
"descrizione": "Ordinamento painter esplicito dal piu' lontano al piu' vicino, sia per i voxel sia per le facce della superficie. Prima l'ordine era ascendente su una profondita' di segno non verificato."
},
{
"id": "F21",
"gravita": "basso",
"descrizione": "Autotest interno (--selftest) che blocca le convenzioni di segno di apply_shift, del tracker sub-pixel e dell'interpolatore orbitale."
},
{
"id": "F22",
"gravita": "critico",
"descrizione": "La soglia di qualita' sulla superficie e' calibrata sulla DISTRIBUZIONE NULLA del periodogramma, non fissata a mano. Con 11 baseline e fasi puramente casuali il picco normalizzato ha gia' mediana 0.56 e 99mo percentile 0.80: una soglia scritta a mano a 0.35 accettava il 100 per cento dei pixel, rumore compreso, e faceva sembrare misurato cio' che non lo era."
},
{
"id": "F23",
"gravita": "alto",
"descrizione": "Stimatore di coerenza corretto. Poiche' y_i = s_i*conj(s_m)/|s_m|, la media di y_i NON e' la media di s_i*conj(s_m): la coerenza va ricostruita ripesando per l'ampiezza del master, altrimenti e' uno stimatore diverso e distorto."
},
{
"id": "F24",
"gravita": "critico",
"descrizione": "L'impronta delle piramidi e' calcolata nella GEOMETRIA RADAR, proiettando in avanti la superficie 3D attraverso range-Doppler, non come impronta al suolo. Un punto a 138 m di quota si sposta di h*cos(theta) in slant range, cioe' ~48 pixel: la maschera al suolo NON copriva i pixel dove l'apice cade davvero, e quindi calibrazione del segno e validazione guardavano i pixel sbagliati."
},
{
"id": "F28",
"gravita": "nuovo",
"descrizione": "L'area processata e' stretta sulle sole piramidi in GEOMETRIA RADAR piu' un margine di 150 m, invece di un rettangolo di 1.8 x 2.2 km su tutta la piana. Il ritaglio comprende lo spostamento in slant dovuto alla quota, altrimenti gli apici resterebbero fuori. Le celle da elaborare scendono da ~50 000 a ~8 000: il calcolo e' piu' rapido, il rendering 3D e' fluido, e la statistica non e' piu' diluita dal deserto circostante. --full-scene ripristina il comportamento precedente."
},
{
"id": "F29",
"gravita": "critico",
"descrizione": "La vista 3D non rispondeva ai comandi. Due cause: con prefers-reduced-motion attivo il ciclo di disegno non partiva affatto e la pagina restava all'unico fotogramma iniziale, quindi nessun cursore aveva effetto; e senza quell'impostazione il disegno rifaceva a ogni fotogramma 8 000 poligoni ordinati, con la stringa di colore ricostruita ogni volta, a pochi fotogrammi al secondo. Ora il disegno e' a richiesta su flag di aggiornamento, i vertici sono proiettati una volta sola per fotogramma invece di quattro volte per poligono, i colori vengono da una tabella precalcolata, e durante il trascinamento si disegna a risoluzione ridotta."
},
{
"id": "F27",
"gravita": "medio",
"descrizione": "Despicatura dichiarata della superficie per il rendering: i nodi che si discostano dalla mediana locale piu' di 3 sigma_h sono errori grossolani di aggancio su un lobo laterale, valgono centinaia di metri e da soli dominavano la scala delle quote, rendendo illeggibile una superficie che per il 98 per cento sta in poche decine di metri. La quota grezza resta nei .npy; il conteggio delle sostituzioni e' riportato."
},
{
"id": "F26",
"gravita": "concettuale",
"descrizione": "Il canale VH e' documentato come una SCELTA, con la sua misura di costo. La versione precedente lo giustificava come 'cross-pol, sensibile allo scattering di volume e alla vibrazione del suolo'. La misura dice il contrario: nella zona di layover le piramidi emergono di +1.7 dB in VH e di +8.4 dB in VV, e il picco su Cheope vale +10.5 dB in VH contro +22.2 dB in VV. Il ritorno delle facce a gradoni e' co-polarizzato; il cross-pol butta via oltre 10 dB proprio sui bersagli da misurare. Il programma resta su VH come richiesto, ma misura e riporta il costo, e --pol vv permette il confronto diretto."
},
{
"id": "F25",
"gravita": "alto",
"descrizione": "La validazione di livello 1 e' una REGRESSIONE fra quota misurata e quota simulata in geometria radar su tutti i pixel di qualita', non il percentile 90 della quota dentro l'impronta al suolo. Con le facce in layover il percentile 90 misurava la coda del rumore e restituiva rilievi di 300 m dove ce ne sono 138."
},
{
"id": "F30",
"gravita": "alto",
"descrizione": "La superficie misurata non e' piu' disegnata come maglia di poligoni ne' come campo continuo di celle: e' una NUVOLA DI PUNTI, un punto per nodo misurato, sia nella vista 3D sia nel pannello matplotlib. Il poligono univa quattro nodi qualsiasi e riempiva il vuoto fra di essi, quindi mostrava come superficie continua un campo in cui solo il 23 per cento delle celle supera la soglia calibrata sul nullo: il 77 per cento del colore sullo schermo era interpolazione, non misura. I nodi sotto soglia restano visibili come punti piccoli e spenti, e non passano piu' per misura solo perche' un vicino affidabile li tirava dentro un poligono; il filtro sulle celle di qualita' li toglie del tutto. Le sole maglie rimaste sono i riferimenti dichiarati - piramidi ideali e superficie simulata - che non sono misure. Il disegno resta sul budget di F29: i dischetti vengono da un atlante precalcolato, uno per colore della tabella, e in movimento la nuvola si decima di un fattore due per riga e colonna."
},
{
"id": "F31",
"gravita": "critico",
"descrizione": "Il canale di coerenza del micro-moto era vuoto. Era calcolato come |media(dev)| / media(|dev|) con dev = shifts - media(shifts): il numeratore e' la media di un vettore appena demediato, cioe' zero per costruzione, su ogni pixel e per qualsiasi dato. Il canale esisteva, veniva salvato in mm_coh.npy e non conteneva nulla. Ora la domanda e' quella del modello a 2 gradi di liberta' (ch12): la traccia e' un tono singolo o rumore bianco? Si risponde con lo spettro della traccia - che e' il blocco 9 delle fonti applicato alla singola marcia - e la misura e' la CONCENTRAZIONE spettrale, cioe' la quota di energia nella riga dominante esclusa la continua: 1 per un tono puro, 1/(N_D-1) = 0.091 per rumore bianco con N_D = 12. Insieme alla concentrazione viene ora riportata la frequenza meccanica della riga dominante, coerente con N_D come frequenza di campionamento della vibrazione (ch11), e la frazione di celle la cui riga cade dentro la banda osservabile dichiarata dal banco."
},
{
"id": "F32",
"gravita": "nuovo",
"descrizione": "Tre livelli nuovi nella scena 3D. (a) SUPERFICIE DI RIFERIMENTO: le quote dei pixel lette dalla geolocation grid degli .annotation.xml e interpolate con la bilineare locale di F14/F36, disegnate come fondale a filo di ferro. Non e' un DEM del plateau: sono 231 nodi su tutto lo swath, e sul ritaglio delle piramidi l'escursione totale e' di poco piu' di due metri; il valore e' scritto nella barra laterale perche' chi guarda non la scambi per topografia. (b) PUNTI DI MICRO-MOTO: un punto per pixel la cui traccia di vibrazione supera la soglia di concentrazione spettrale di F31, colorato sull'energia. Poggiano sulla superficie .xml perche' il micro-moto e' un attributo di superficie: il banco di sub-aperture non gli assegna una profondita', e disegnarlo a quote diverse suggerirebbe una tomografia che questi dati non fanno. (c) STRUTTURE INTERNE NOTE di Cheope e Chefren, prese da piramide_cheope_3d.py e piramide_kefren_3d.py, che restano la sorgente unica di quelle quote. Sono un riferimento archeologico e sono disegnate come tale, a filo di ferro e mai come punti: con delta_z verticale di 242 m e camere che misurano metri, nessuna di esse e' rilevabile da questi dati, e la sovrapposizione serve a dare la scala di quel divario, non a suggerire una rilevazione."
},
{
"id": "F33",
"gravita": "nuovo",
"descrizione": "Quattro correzioni alla scena 3D (goal utente 2026-08-31). (a) La superficie SIMULATA (il layover geometrico di simulate_pyramids_radar) non e' piu' disegnata: restava l'ultima delle maglie di riferimento che poteva essere confusa con una ricostruzione. La simulazione resta internamente per la validazione di livello 1 (regressione misurato-vs-simulato, F25) e per pyr_mask: non e' un risultato, e' un termine di paragone, e ora si vede solo li'. (b) La superficie di riferimento .xml e i punti di micro-moto che vi poggiano hanno un proprio reticolo (xml_ref), l'intera griglia multilooked n_l x n_p, mai decimato da surface_max_nodes: prima condividevano il reticolo rado della nuvola misurata e coincidevano con l'intera griglia solo per la dimensione di questo dataset, non per costruzione. (c) Le piramidi ideali e le strutture interne note condividono esattamente centro, angolo di rotazione (azimuth_deg, oggi 0 per tutte e tre) e quota di base, e sono proiettate dalla stessa project() rigida della vista: restano solidali sotto qualunque imbardata, beccheggio o rollio, verificato a vista ruotando la scena. (d) I voxel sono ora colorati per indice di PIENO/VUOTO (solidity_index, F31: energia del periodogramma x coerenza x (1 - micro-moto), quindi il micro-moto entra nel colore), non piu' per la sola ampiezza; il valore esportato e' ristirato per percentili solo ai fini del colore, il dato scientifico in solidity.npy resta la formula dichiarata. Resta un discriminante multi-attributo, non una rilevazione di cavita' risolta in profondita' (avvertenza invariata, ch08-ch09)."
},
{
"id": "F34",
"gravita": "alto",
"descrizione": "La superficie .xml (F33) non si vedeva come pixel. Era disegnata come maglia di quadrilateri semitrasparenti: su un terreno quasi piatto (poco piu' di 2 m di escursione sul ritaglio) il riempimento si fondeva otticamente con la griglia di sfondo a 100 m, e i singoli pixel del reticolo xml_ref non erano piu' riconoscibili come tali, anche se il dato sotto era gia' corretto e completo (F33). Ora e' un punto per pixel, come la nuvola misurata (F30), colorato sulla propria quota con una rampa grigio-acciaio dedicata (mai la rampa calda della misura, cosi' il riferimento resta riconoscibile), disegnato con lo stesso atlante precalcolato del resto della scena (F29) per restare fluido sugli ~8 000 pixel del ritaglio anche in movimento."
},
{
"id": "F35",
"gravita": "chiarimento",
"descrizione": "F34 documentava il quasi-piano di xml_ref (~2 m di escursione) come un fatto del ritaglio, senza spiegare la causa: i punti della geolocation grid dello .xml sono posizioni fisiche di pixel con una quota propria, NON un piano -- sull'intera scena il rilievo vero arriva a centinaia di metri (raw_gcp_nodes). Ma quella grid ha solo 11 x 21 = 231 nodi su tutta la scena, spaziati circa 1500 linee x 1300 pixel, mentre il ritaglio delle piramidi ne occupa una piccola frazione di UNO: nessun nodo reale cade abbastanza vicino da portare rilievo dentro la spline locale (height_ref/xml_ref), che quindi esce correttamente quasi piatta -- limite di risoluzione del riferimento .xml, non errore di calcolo. Ora i nodi grezzi (non interpolati) sono esposti nel payload e in un pannello dedicato della UI, con la distanza del nodo piu' vicino e il rilievo vero sulla scena, cosi' il limite e' ispezionabile invece che implicito."
},
{
"id": "F36",
"gravita": "critico",
"descrizione": "F35 spiegava perche' xml_ref esce quasi piatta, ma Geocoder usava ancora una spline bicubica GLOBALE (kx=ky=3) su tutti e 231 i nodi della scena: verificato sui quattro nodi VERI che racchiudono il ritaglio delle piramidi (linee 7540/9048, pixel 1304/2608, quote 80.0/51.0/64.0/64.0 m -- 29 m di escursione fra loro), la spline dava 70.0 m al centro del ritaglio mentre la bilineare fra quei quattro nodi da' 63.7 m: 6 m di differenza per curvatura importata da nodi a decine di km, non dal terreno locale. Il ritaglio sta interamente dentro UNA cella del reticolo (F35): la geocodifica ora usa RegularGridInterpolator bilineare, che per un punto in una cella usa esclusivamente i quattro nodi reali di quella cella -- i valori letti dallo .xml corrispondente, non un adattamento globale. L'estrapolazione lineare oltre il bordo del reticolo (fill_value=None) sostituisce la vecchia estrapolazione della spline, con lo stesso comportamento definito ovunque."
},
{
"id": "F37",
"gravita": "richiesta",
"descrizione": "Rimosso lo strato 3D 'Superficie .xml' (drawRef/buildRefColors/XCIDX): su questo ritaglio la quota di riferimento varia di poco piu' di 1 m (F35/F36), quindi disegnata come nuvola propria non aggiungeva nulla che il pannello 'Nodi grezzi della geolocation grid' non mostrasse gia' in forma numerica ispezionabile. NOTA sui file .xml: non esiste un tag <position> con la quota dei singoli pixel -- i 17 nodi <position> dell'annotation.xml sono i VETTORI DI STATO ORBITALI del satellite (coordinate ECEF x/y/z), non posizioni al suolo. L'unica quota per pixel nello .xml e' <geolocationGridPoint><height>, 231 nodi per scena: e' quella che height_ref/xml_ref usano (F36), presa dal file .annotation.xml del MASTER -- l'unico geometricamente corretto da usare per l'intero stack, perche' tutte le date sono coregistrate sul suo reticolo di pixel."
},
{
"id": "F38",
"gravita": "richiesta",
"descrizione": "Aggiunto il layer 'suolo (DEM)', portato da _fetch_dem() di piramide_acustica_vh.py / piramide_unificato.py (Piramid_V3): un DEM ESTERNO vero (Copernicus via l'API di elevazione Open-Meteo), campionato su un reticolo fitto SOLO nell'area del ritaglio e interpolato (RegularGridInterpolator bilineare) sulla stessa griglia (east, north) di height_ref. Risolve il rilievo che la geolocation grid dello .xml non puo' dare a questa scala (F35/F36): verificato, 18..94 m di escursione su un campione dello stesso ritaglio, contro gli ~1 m della bilineare .xml. E' un RIFERIMENTO esterno (fetch_dem_suolo(), cache in dem_suolo.npz, disattivabile con cfg.fetch_dem=False), non entra in nessun calcolo tomografico: la geometria .xml resta l'unica usata per fase, k_z e geocodifica. CORRETTO da F39: vedi sotto."
},
{
"id": "F39",
"gravita": "richiesta",
"descrizione": "Il 'suolo (DEM)' di F38 non seguiva il profilo delle piramidi e non era sul datum dei dati. Tre difetti, tutti verificati sui dati. (a) Il DEM esterno le piramidi non le contiene: interrogando l'API di elevazione esattamente sui tre apici noti restituisce 66 / 76 / 78 m, cioe' il plateau nudo -- l'apice di Cheope, che sta a ~198 m, usciva 130 m piu' in basso e il 'suolo' passava DENTRO le piramidi invece di seguirne le facce. Non era il passo del reticolo: anche interrogando il singolo punto dell'apice il valore resta 66 m. (b) Il livello veniva da un dataset con un datum verticale suo: 68.6 m di mediana sul ritaglio e 75.5 m sotto Cheope, contro i 63.1..64.2 m delle quote .xml, cioe' fino a ~12 m di scarto rispetto alla superficie misurata, che poggia sul datum .xml. (c) Se lo scaricamento falliva il layer spariva del tutto. Ora ground_dem_suolo() lo costruisce in tre pezzi dichiarati: DATUM = le quote lette dai file di stack_slc (<geolocationGridPoint><height> degli annotation.xml, bilineare locale del master, F36), lette da TUTTE le date come controllo di consistenza (plateau_heights_from_stack(): 11 date VH IW2, tutte 64.0 m sul nodo grezzo piu' vicino, che cade a 2.2-3.2 km); RILIEVO = il DEM esterno riportato su quel datum togliendo il suo scarto mediano sull'impronta delle piramidi, e senza rete resta la bilineare .xml, cosi' il layer c'e' comunque; PIRAMIDI = pyramid_profile_enu(), z = base + altezza * (1 - max(|dx|,|dy|)/semilato) sul reticolo ENU, con la base presa dal terreno sotto ciascuna impronta (non dal base_alt_m di letteratura) perche' il layer sia continuo con il terreno intorno, composto con np.maximum. Corretto anche il reticolo di query: l'API accetta 100 coordinate per richiesta e prima se ne mandava una sola, quindi il reticolo era bloccato a 10x10 (~170 m di passo); ora la richiesta e' spezzata in blocchi e cfg.dem_grid vale 24 (~70 m). Interruttori: cfg.suolo_dem (il layer), cfg.fetch_dem (il rilievo esterno), cfg.dem_pyramids (il profilo delle piramidi)."
},
{
"id": "F41",
"gravita": "richiesta",
"descrizione": "La nuvola di voxel mette il 46.4% dei punti SOPRA la superficie e il 23.4% sopra l'apice di Cheope, e la pagina non diceva perche'. Non e' un difetto del disegno, sono due fatti sovrapposti. (1) L'asse z e' un intervallo di RICERCA simmetrico attorno al datum (+-elev_max = 400 m): meta' sta in aria per costruzione e nulla nell'inversione obbliga la soluzione a stare sottoterra. (2) Dove finisce l'energia lo decide la PSF verticale della pila, e con 8 baseline quella PSF non discrimina. Misurato sul ritaglio delle piramidi da vertical_lobe_profile(): picco a -12.5 m, cioe' sulla superficie, corretto; lobo principale a -3 dB largo 150 m (da -87.5 a +62.5 m); ma il LOBO LATERALE PEGGIORE sta a -1.16 dB, poco piu' di un dB sotto il picco, e ai bordi dell'asse la curva vale ancora -1.9 / -2.7 dB, per 5.07 dB di contrasto su tutti gli 800 m dell'asse. Un picco che i suoi lobi quasi eguagliano non localizza nulla in profondita'. Aggravante di resa: l'asse e' campionato a 3.125 m, 91 volte piu' fitto della delta_z di Rayleigh (283.5 m), quindi la nuvola sembra dettagliata per sovracampionamento. build_html disegna ora quel profilo nel pannello 'Lobi verticali' accanto ai comandi dei voxel, con la riga dei -3 dB, la barra di delta_z in scala e le due frazioni di voxel sopra il suolo. La nuvola NON viene ritagliata a z<=0: nasconderne meta' darebbe un'immagine piu' credibile e piu' falsa. La correzione vera e' piu' baseline, non un filtro sul disegno."
},
{
"id": "F42",
"gravita": "critico",
"descrizione": "Ogni data veniva LETTA alla stessa finestra assoluta del master e riallineata dopo con apply_shift(), che e' una traslazione CIRCOLARE via rampa di fase. Vale per frazioni di pixel, non per l'inquadramento del prodotto: sulla stessa traccia relativa 58 il bersaglio di Giza cade a -4510 linee nei prodotti S1A e a +30 nei S1D rispetto al master S1C, e fino a -108 pixel in range. Con 89 linee di ritaglio, per 16 date su 28 lo 'slave' era un pezzo di deserto a 63 km di distanza, ripiegato su se stesso dalla traslazione circolare e per giunta dirampato con i parametri del burst sbagliato: interferogrammi di puro rumore, e la pila multi-missione (che e' esattamente cio' che allarga l'escursione di baseline da 163 a 273 m) non era utilizzabile. Anche restando su una sola missione l'offset in range di alcune decine di pixel faceva avvolgere una colonna su otto del ritaglio. Ora l'offset INTERO entra nella finestra di lettura e nell'indice di burst passato al deramping TOPS; alla rampa di fase resta il solo residuo sub-pixel. Se il ritaglio spostato scavalcherebbe il bordo del burst o del prodotto la data viene scartata e detta a voce alta, perche' il deramping TOPS non e' definito a cavallo di due burst."
},
{
"id": "F43",
"gravita": "alto",
"descrizione": "_omogenea() separava le acquisizioni per il solo verso di passaggio. Due tracce ascendenti DIVERSE sono incompatibili quanto un'ascendente e una discendente: guardano lo stesso punto da posizioni orbitali distanti centinaia di chilometri, quindi baseline fuori scala e coerenza nulla. Il criterio ora e' verso + orbita relativa, letta dal manifest.safe accanto all'annotation (con ricaduta sul solo verso nel layout piatto, dove il manifest non c'e')."
},
{
"id": "F44",
"gravita": "medio",
"descrizione": "Il default di --gamma-min era 0.35, cioe' proprio la costante che F22 aveva tolto, e main() lo passava sempre alla Config (che ha default 0.0). Restava innocuo solo perche' la soglia calibrata sul nullo e' piu' alta di 0.35 con le pile finora usate; con una pila abbastanza numerosa la soglia nulla scende e il pavimento tornerebbe a decidere lui. Il default e' ora 0.0, coerente con Config."
},
{
"id": "F45",
"gravita": "medio",
"descrizione": "ground_dem_suolo() usava `m_lat` nella riga di resoconto del reticolo DEM, ma in quello scope il nome non esiste: NameError. Il ramo scatta solo al PRIMO scaricamento riuscito (nessuna cache .npz) e con verbose, quindi bastava avere gia' il file per non vederlo mai. Ora usa la costante M_PER_GRADO_LAT. Trovato con mypy, non a occhio."
},
{
"id": "F46",
"gravita": "critico",
"descrizione": "Il residuo sub-pixel di coregistrazione veniva preso dal picco della cross-correlazione di fase dell'intero chip ogni volta che il rapporto picco/mediana superava 8 e il picco stava entro 2 pixel dal residuo geometrico: 14 date su 41. Misurato sul VH di Giza (master 20260503): quel picco cadeva quasi sempre a UN PIXEL INTERO dal residuo geometrico (+1.15, -1.10, +1.85 ...) e, applicato, ABBASSAVA la coerenza con il master -- 0.277 -> 0.187 il 3 gennaio, 0.320 -> 0.225 il 22 maggio -- mentre lo spostamento che la massimizza sta entro un pixel dal residuo geometrico e la porta a 0.346 e 0.327. Su un chip di 90 x 372 pixel in cross-pol con coerenza 0.3 la correlazione di fase sbianca lo spettro e insegue le strutture di ampiezza (il layover delle piramidi), non la fase. Ora il residuo lo decide la coerenza stessa: refine_shift_by_coherence() parte dal residuo geometrico e cerca su una griglia grossa-fine (raggio 2 px, passo 0.5 -> 0.125) lo spostamento che massimizza la coerenza mediana con il master. Il picco di correlazione resta calcolato e riportato accanto, per confronto. Autotest 8."
},
{
"id": "F47",
"gravita": "alto",
"descrizione": "CDSE consegna i prodotti a fette lungo l'orbita, e la stessa passata puo' arrivare in due fette adiacenti con la stessa data (le due S1D del 2026-06-27). _stack_safe() le metteva entrambe in pila. Per quella che non contiene Giza l'inversione della geocodifica, vincolata al reticolo, si fermava sul bordo e ne usciva un offset di finestra senza senso (-4408 linee), scartato da F42 per caso e con un messaggio fuorviante; se entrambe lo avessero contenuto (zona di sovrapposizione) la stessa acquisizione sarebbe entrata due volte con baseline identica, un campione contato doppio nel periodogramma, nel nullo e nella scelta del supermaster. Ora Geocoder.dentro() riconosce il bersaglio fuori prodotto e una data entra una volta sola, PRIMA del calcolo delle baseline, con il motivo detto a voce alta."
},
{
"id": "F48",
"gravita": "medio",
"descrizione": "--dates valeva 11 per default: con 42 prodotti sul disco il programma ne usava in silenzio i primi 11 in ordine di data, e la pila multi-missione che allarga l'escursione di baseline restava fuori a meno di ricordarsi --dates 99. Ora 0 (il default) significa tutte le date presenti; un valore positivo resta un limite esplicito."
},
{
"id": "F49",
"gravita": "medio",
"descrizione": "plateau_heights_from_stack() confrontava fra le date la quota del nodo grezzo della geolocation grid PIU' VICINO alle piramidi. In una pila a piu' missioni l'inquadramento cambia da un prodotto all'altro (4500 linee fra S1A e S1C), quindi il nodo piu' vicino non e' lo stesso punto di terreno: 39 m in un prodotto, 64 m nell'altro, e l'avviso 'le date non concordano sul datum' scattava su un disaccordo che non esiste. Ora si confronta la grandezza usata davvero come datum, la bilineare locale di ciascuna data valutata sulle piramidi, e lo scarto massimo fra le date viene riportato come incertezza del layer. Misurato sulla pila a 41 date: 44..64 m, cioe' 20 m di incertezza sul datum a seconda del prodotto che fa da master."
},
{
"id": "F50",
"gravita": "basso",
"descrizione": "Il controllo di livello 2 confrontava sigma_h (8.5 m) con la deviazione STANDARD della quota sulla piana (77 m), dominata dalla coda degli errori grossolani da centinaia di metri che F27 toglie solo dal disegno: il confronto falliva sempre per costruzione. Ora viene riportata anche la dispersione robusta (1.4826 * MAD), che descrive il nucleo gaussiano ed e' la grandezza confrontabile con sigma_h."
}
],
"avvertenza": "La superficie e' una misura: quota di riferimento dallo .xml piu' quota del diffusore dominante stimata dai .tiff. La sua precisione e' ~8 m. La RISOLUZIONE verticale e' 132 m: nessuna struttura interna e' separabile. L'indice di solidita' e' un discriminante multi-attributo, non una rilevazione di cavita'."
}Budget tomografico e piano delle sub-aperture — budget_tomografico.txt, 3 KB
----------------------------------------------------------------------------
BUDGET TOMOGRAFICO MULTI-BASELINE
----------------------------------------------------------------------------
lunghezza d'onda radar = 5.55 cm
slant range R = 850.84 km
angolo di incidenza th = 36.83 gradi
baseline impilate = 43
escursione baseline ortogonali = 297.1 m
deviazione standard delle baseline = 63.5 m
RISOLUZIONE (separazione di Rayleigh fra due diffusori)
delta_z = lambda*R/(2*B) in slant = 79.4 m
proiettata in verticale = 132.5 m
altezza di ambiguita' = 12715.9 m
celle sull'altezza del target = 1.05
>> struttura interna separabile? NO
PRECISIONE (quota di UN diffusore dominante) -- F15
coerenza tipica assunta gamma = 0.42
sigma_h = lambda*R*sin(th)*sigma_phi/(4*pi*sigma_B)
= 8.3 m
altezza del target = 138.5 m
>> superficie reale misurabile? SI
Le due righe non si contraddicono: separare due diffusori dentro la
stessa cella e stimare la quota di quello dominante sono problemi
diversi. Confonderli e' l'errore concettuale corretto in F15.
----------------------------------------------------------------------------
----------------------------------------------------------------------------
BANCO DI SUB-APERTURE DOPPLER (micro-moto)
----------------------------------------------------------------------------
banda Doppler totale B_cD = 313.00 Hz
banda di guardia B_DL = 156.50 Hz
larghezza sub-banda B_sub = 156.50 Hz
separazione master/slave B_shift = 28.17 Hz
passo di marcia = 11.67 Hz
sub-aperture N_D = 12
risoluzione griglia Doppler = 2.193 Hz/bin
bin per sub-banda = 71.4
MAPPATURA FREQUENZA -> TEMPO (dal Doppler rate dell'annotation)
azimuth FM rate k_a = -2188.3 Hz/s
rate TOPS combinata k_t = 1491.5 Hz/s
tempo di illuminazione del target = 143.0 ms
passo temporale fra sub-aperture = 5.33 ms
ritardo master-slave = 12.87 ms
finestra osservata (marcia completa)= 58.64 ms
campionamento meccanico f_s = 187.57 Hz
frequenza osservabile max (Nyquist) = 38.84 Hz
frequenza osservabile min (finestra)= 17.05 Hz
>> il banco risolve una banda di frequenze meccaniche
PERCHE' LA TOMOGRAFIA ACUSTICA DELLE FONTI QUI NON E' APPLICABILE
apertura sintetica L_sa = 958 m
lambda acustica a 38.8 Hz (v=6000 m/s) = 154 m
delta_z acustica = lambda*R/(2*L_sa) = 68.5 km
Limite dei dati: il TOPS di Sentinel-1 illumina un bersaglio per
143 ms soltanto, quindi la traccia di vibrazione dura 59 ms
e la frequenza meccanica accessibile e' di decine di Hz. Le fonti
lavorano su spotlight con B_cD ~ 22 kHz e indagano a 12.5 kHz: due
ordini di grandezza in piu'. E' questa la ragione per cui qui la
profondita' viene dalle baseline orbitali e non dal micro-moto, che
resta un attributo di superficie e nulla di piu'.
----------------------------------------------------------------------------