MROP¶
Description¶
The Modulated Rank-One Projection (MROP) is a new approach to radio-interferometric (RI) data dimensionality reduction, which can be applied to the RI data during antenna acquisition or post-correlation. For an RI array with $Q$ antennas observing $B$ short-time inegration intervals (or batches), the RI data volume scales as $\mathcal{O}(Q^2B)$. MROP compresses the $Q \times Q$ batchwise covariance matrix into a smaller number $P$ of random Rank-One Projections (ROPs) and compresses across time by trading $B$ for a smaller number $M$ of random modulations of the ROP measurement vectors.
Given visibility data $\boldsymbol{y} \in \mathbb{C}^{VB}$ observed by an RI array with $V = Q(Q-1)/2$ baselines, corresponding to the upper triangular part of the covariance matrix at all batches, MROP first compresses the $Q \times Q$ covariance matrix $\boldsymbol{C}_{b}$ at each batch $b$ into $P$ ROP measurement vectors by projecting it onto the rank-one matrix $\boldsymbol{\alpha}_{p} \boldsymbol{\beta}_{p}^*$, where $\boldsymbol{\alpha}_{p} = (\alpha_{p1}, \dots, \alpha_{pQ})^{\top} \sim_{\text{i.i.d.}} \boldsymbol{u}$ for some random vector $\boldsymbol{u} \in \mathbb{C}^{Q}$ applying phase delays with $$u_{q} \sim_{\text{i.i.d.}} P^{-1/4}\exp(i\mathcal{U}[0, 2\pi))$$ (and similarly for $\boldsymbol{\beta}_{p}$). The resulting ROP vectors $(\boldsymbol{y}_{b})^B_{b=1}$ at batch $b$ is defined as $\boldsymbol{y}_{b} := (y_{pb})^P_{p=1}$, where
$$ y_{pb} = \boldsymbol{\alpha}_{p}^* \boldsymbol{C}_{b} \boldsymbol{\beta}_{p}.$$
MROP follows from introducing a second layer of dimensionality reduction, consisting in applying $M$ random modulations of the ROP vectors before integrating them across batches. The $m$-th modulated ROP vector are given by
$$\overline{\boldsymbol{z}}_{m} = \sum_{b=1}^B \gamma_{mb} \boldsymbol{y}_{b},$$
where each component of the modulation vectors is given by $$\boldsymbol{\gamma}_{mb} \sim_{\text{i.i.d.}} M^{-1/2} \mathcal{U}\{\pm 1\}.$$
The MROP vector $\boldsymbol{z} \in \mathbb{C}^{P\times M}$ is given as the concatenation of the $M$ modulated ROP vectors $\overline{\boldsymbol{z}}_{m}$, effectively reducing the dimensionality of the RI data from $VB$ to $D=PM$.
A variant of MROP in the case where modulation is not applied is coined concatenated ROP (CROP).
The details of MROP are discussed in the following papers:
[1] Leblanc, O, Chu, C. S., Jacques, L. & Wiaux, Y., MROP: Modulated Rank-One Projections for compressive radio interferometric imaging, MNRAS 543 (2), 1727-1747, arXiv:2504.18446
[2] Leblanc, O, Wiaux, Y. & Jacques, L., Compressive radio-interferometric sensing with random beamforming as rank-one signal covariance projections, IEEE TCI 11, 1229-1242, arXiv:2409.15031
Cloning Repository¶
You can clone the repoistory to the current directory by running the command below.
git clone https://github.com/basp-group/mrop-measurement-operator.git
cd ./mrop-measurement-operator
import argparse
from scipy.io import loadmat
args = argparse.Namespace()
args.data_file = "data/3c353_data.mat"
data = loadmat(args.data_file, variable_names=["Q", "B", "y"])
args.B = data["B"].item()
args.Q = data["Q"].item()
print(f"VB = {data['y'].size}")
print(f"Q = {args.Q}, B = {args.B}, Q(Q-1)B/2 = {args.Q*(args.Q-1)*args.B//2}")
VB = 5447232 Q = 64, B = 2702, Q(Q-1)B/2 = 5447232
To utilise the MROP operator, we first need to define a few parameters, namely:
B: number of batches, used for reshaping the data vector into $B$ $Q \times Q$ symmetrised covariance matrices.Q: number of antennas, used for reshaping the data vector into $B$ $Q \times Q$ symmetrised covariance matrices.ROP_type: type of ROP operator to be used, eitherMROPorCROP.P: number of ROPs to be used.M: number of modulations to be used.ROP_seed: random seed for reproducibility.output_path: path to save the compressed data.device: device to be used for computation, eithercpuorcuda.
args.ROP_type = "MROP"
args.ROP_rv_type = "unitary"
args.ROP_P = 80
args.ROP_M = 800
args.ROP_seed = 1337
args.output_path = None
args.device = "cpu"
from example_mrop import apply_ROP
Having defined all the necessary paramters as args, we can now call the function apply_ROP imported from example_mrop.py with args as input. The function will generate the MROP operator and apply it to the data. The compressed data will be saved in output_path is it is specified.
apply_ROP(args)
{'Q': 64, 'P': 80, 'M': 800, 'B': 2702, 'rv_type': 'unitary', 'ROP_type': 'MROP', 'ROP_seed': 1337}
INFO: Using random generator with base seed 1337.
INFO: Using Modulated Rank-One Projection (MROP) for dimensionality reduction.
INFO: Generating P = 80 unitary random variables for Rank-One Projection (ROP).
INFO: number of batches (B) = 2702, number of antennas (Q) = 64
INFO: ROP type = MROP, ROP random variable type = unitary
INFO: number of ROPs (P) = 80, number of modulation (M) = 800
INFO: data size before MROP: VB = 5447232, after MROP: D = 64000
INFO: corresponding to a data-to-visibility compression ratio D/VB = 1.175e-02
The printout of the function shows the data size before and after MROP, i.e. $VB$ and $PM$, as well as the data-to-visibility compression ratio $D/VB$, in this case $1.174\times 10^{-2}$, to quantify the level of dimensionality reduction MROP offers.
For a tutorial on using the MROP operator during imaging, please refer to the uSARA imaging tutorial.