Browse Source
docs(intel): Finalize 3D energy compression benchmark V2
docs(intel): Finalize 3D energy compression benchmark V2
Detailed Gaussian damping math (2.77) and Resolution Trap normalization for Iteration 14.1843_integration
1 changed files with 77 additions and 0 deletions
@ -0,0 +1,77 @@ |
|||||
|
# 🚩 Benchmark: 3D Energy Compression & Environmental Clutter (Tree Density) |
||||
|
|
||||
|
**Metadata:** |
||||
|
- **Status:** Research & Mitigation Planning (Iteration 14) |
||||
|
- **Domain:** Physics-Based Radar Simulation / ADAS Fidelity |
||||
|
- **Goal:** Resolve signal intensity imbalance between thin targets (Vehicles) and voluminous targets (Trees/Buildings). |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 🔍 1. Problem Statement: The "Super-Reflector" Tree |
||||
|
|
||||
|
In Iteration 13, we identified a significant intensity discrepancy in the Foxglove 3D panel. While NPC vehicles (primary ADAS targets) produced stable but moderate point clouds, environmental objects like **Trees** and **Distant Buildings** generated extremely dense, high-SNR reflections that overwhelmed the CFAR detector. |
||||
|
|
||||
|
### Observed Discrepancies: |
||||
|
- **Visual Clumping:** Trees appeared as solid "walls" of radar points, whereas in real-world 77GHz hardware, trees should appear as sparse, flickering points due to low-RCS foliage. |
||||
|
- **Dynamic Range Mismatch:** The "Magnitude" attribute for a tree (voluminous) was an order of magnitude higher than a sedan (thin metallic surface), violating expected ADAS SNR profiles. |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 🧮 2. Root Cause Analysis |
||||
|
|
||||
|
The issue is a side-effect of how the Shenron pipeline compresses a 3D LiDAR scene into a 2D Radar heatmap. |
||||
|
|
||||
|
### A. The "Shrinking" Math (`heatmap_gen_fast.py`) |
||||
|
The physics engine iterates through all 100k+ LiDAR points and **sums their complex phases** into the ADC signal cube based strictly on **Range (rho)** and **Azimuth (theta)**. |
||||
|
|
||||
|
### B. The Vertical Summation Problem (`Sceneset.py`) |
||||
|
In the current implementation (Line 412): |
||||
|
```python |
||||
|
P_incident = np.power(rho,2) * ... * (1/np.power(rho,tx_dist_loss_exponent)) * K_sq |
||||
|
``` |
||||
|
- **Infinite Vertical Gain:** The radar currently has **no vertical beamwidth** ($G(\phi)$). It "sees" every point from the ground to the sky with equal gain. |
||||
|
- **Energy Integration:** A tree consists of thousands of points spread vertically. When the 3D scene is flattened, the radar treats those 1,000 vertical points as a single, super-powered reflection. |
||||
|
- **Result:** The 2D energy bin for a tree is the **sum of all its vertical slices**, making it look artificially "loud" compared to a 1.5m tall car. |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 🛠️ 3. Proposed Mitigation Strategies |
||||
|
|
||||
|
### Phase A: Vertical Antenna Gain (Boresight Weighting) |
||||
|
Implement a **Gaussian Vertical Beam Pattern** in the `P_incident` calculation to model the directive nature of ADAS antenna arrays. |
||||
|
- **Math:** Introduce a damping factor $G_{elev} = \exp\left(-2.77 \cdot \left(\frac{\phi}{\beta}\right)^2\right)$, where $\phi$ is the elevation angle and $\beta$ is the vertical beamwidth. |
||||
|
- **The "2.77" Constant:** This constant ensures that when the elevation ($\phi$) reaches exactly half the beamwidth ($\beta/2$), the power is attenuated by exactly **3dB (50%)**. This aligns the simulation with standard hardware datasheets. |
||||
|
- **Impact:** Points at the top of a tree or skyscraper are "blinded" by the antenna pattern, ensuring their vertical energy isn't integrated into the horizontal detection bin. |
||||
|
|
||||
|
### Phase B: Density-Based Normalization (The "Resolution Trap") |
||||
|
Solve the physical inconsistency where increasing LiDAR resolution increases Radar intensity. |
||||
|
- **The Concept:** Each LiDAR point is a "proxy" for a small piece of surface area. If the LiDAR resolution doubles (from 32 to 64 channels), each point should logically represent half the area. |
||||
|
- **The Fix:** Normalize the total integrated power by the local point density: $P_{total} = \frac{1}{N} \sum P_i$. |
||||
|
- **Impact:** This makes the simulation **"Sensor Independent."** A car will return the same Radar SNR whether it is sampled with 10 LiDAR points or 1,000. |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 🧭 4. Implementation Steps (Iteration 14) |
||||
|
|
||||
|
1. **Hardware Profile Update:** Define `self.vertical_beamwidth` in `ConfigureRadar.py`. |
||||
|
2. **Physics Engine Implementation:** Add the Gaussian vertical damping logic and $1/N$ normalization to `shenron/Sceneset.py`. |
||||
|
3. **DSP Calibration:** Fine-tune the `threshold` and `guard cells` in `sim_radar_utils/config.yaml` to match the new dynamic range. |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 📚 Annex: Technical Reference |
||||
|
|
||||
|
### Key Files to Reference |
||||
|
| File | Role | Change Required | |
||||
|
| :--- | :--- | :--- | |
||||
|
| **`ConfigureRadar.py`** | Hardware Profiles | Define `vertical_beamwidth` for `awrl1432` and `radarbook`. | |
||||
|
| **`shenron/Sceneset.py`** | Physics Engine | Implement Gaussian $G_{elev}$ and density normalization. | |
||||
|
| **`sim_radar_utils/config.yaml`** | DSP Config | Adjust `threshold` and `guard cells` after vertical energy is balanced. | |
||||
|
|
||||
|
### Knowledge Base |
||||
|
- **Calibration History:** [Shenron_debug.md](file:///d:/CARLA/CARLA_0.9.16/PythonAPI/Fox/intel/radar/Shenron_debug.md) (Iterations 01-13). |
||||
|
- **Architecture Guide:** [context.md](file:///d:/CARLA/CARLA_0.9.16/PythonAPI/Fox/intel/internal/context.md) (AI navigation rules). |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
*Generated by Antigravity AI | 2026-04-07 | Knowledge Transfer Benchmark V2.* |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue