JuliaComputing / xtrx_julia

XTRX LiteX/LitePCIe based design for Julia Computing
BSD 2-Clause "Simplified" License
1 stars 0 forks source link

Experiment #2: Over-the-air calibration #56

Open staticfloat opened 2 years ago

staticfloat commented 2 years ago

Miguel and Sören have been working for a while on an over-the-air calibration technique that may allow us to get away with not having continual calibration setup applied to the XYNC. With a modified setup from Experiment #1, we could build an array that looks like the following:


 ┌──────────────┐    ┌──────────┐
 │  XTRX #1     │    │Antenna #1│
 │         rx[1]│◄── └──────────┘
 │              │
 │         rx[2]│ ◄─────────┐
 └──────────────┘           │
                            └─── ┌────────┐
 ┌──────────────┐                │   RF   │
 │  XTRX #2     │                │splitter│◄───┐
 │         rx[1]│ ◄───────────── └────────┘    │
 │              │                              │
 │         rx[2]│ ◄── ┌──────────┐             │
 └──────────────┘     │Antenna #2│             └── ┌────────┐     ┌────────┐
                      └──────────┘                 │   RF   │◄─── │Sinusoid│
                                                   │splitter│     └────────┘
 ┌──────────────┐     ┌──────────┐             ┌── └────────┘
 │  XTRX #1     │     │Antenna #3│             │
 │         rx[1]│ ◄── └──────────┘             │
 │              │                              │
 │         rx[2]│ ◄───────────── ┌────────┐    │
 └──────────────┘                │   RF   │◄───┘
                                 │splitter│
 ┌──────────────┐           ┌─── └────────┘
 │  XTRX #2     │           │
 │         rx[1]│ ◄─────────┘
 │              │
 │         rx[2]│ ◄── ┌──────────┐
 └──────────────┘     │Antenna #4│
                      └──────────┘

With this setup, we can certainly perform continual phase calibration, however this is somewhat undesirable, as we are sacrificing half of our rx channels for calibration, and it may still retain some thermal effects even within channels from a single XTRX device, as to be determined from Experiment 1 (#55).

A potentially superior setup would be to simply setup multiple antennas, and then implement the phase calibration technique worked out by Miguel and Sören, re-calibrating every X minutes during signal reception. I will leave it up to Miguel and Sören to fill out the details, along with code details for running the calibration on a live device.

staticfloat commented 2 years ago

I don't think this is top-priority for report #4; I'd rather integrate the GPS calibration stuff that Sören is doing, and if we require synchronization, we can sacrifice half our channels as in the diagram above.

mbaz commented 2 years ago

I will continue (and give priority to) my experiments with over-the-air pilots to determine the phase mismatch between receivers. To recap, the theory seems sound, it works in simulation, but the real-world experiment is failing due to the weird behavior of the phase in my B210. I have a few pointers to follow.

staticfloat commented 2 years ago

Experimental results so far:

@mbaz has done the experiment with cables and over-the-air again, and his results seem to point to the inter-channel phase offset being multipath-related. Experimental results for the cables showed the following phase measurements:

0cm distance

20cm distance

60cm distance

Which look very good; experiments over the air with the same setup are much noisier; Miguel will do some more experiments in the near term to try and characterize the issue, but we hypothesize that multipath truly is the limiting factor here.

staticfloat commented 2 years ago

I had originally suggested that we move forward by converting to a spread-spectrum pulse, but on second thought, we can't generate nearly enough bandwidth to allow us to properly disambiguate different different ranges; our range resolution at 40MHz bandwidth is an enormous 7 meters, which is orders of magnitude larger than we'd want for multipath reflection in a room. Outside surrounded by buildings, no problem, but that's not the task at hand at the moment.

I wonder if we can probe multiple frequencies and disambiguate things, or if we might need to throw this at an ML model to try and filter out interference. I'll think about this some more and see if any bright ideas pop up.