ShlezingerLab / SubspaceNet

34 stars 8 forks source link

SubspaceNet: Deep Learning-Aided Subspace Methods for DoA

This repository includes the source code used in our recent paper:

Dor H. Shmuel, Julian P. Merkofer, Guy Revach, Ruud J. G. van Sloun, and Nir Shlezinger, "SubspaceNet: Deep Learning-Aided Subspace Methods for DoA Estimation"

Absract

Direction of arrival (DoA) estimation is a fundamental task in array processing. A popular family of DoA estimation algorithms are subspace methods, which operate by dividing the measurements into distinct signal and noise subspaces. Subspace methods, such as MUSIC and Root-MUSIC, rely on several restrictive assumptions, including narrow-band non-coherent sources and fully calibrated arrays, and their performance is considerably degraded when these do not hold. In this work we propose SubspaceNet; a data-driven DoA universal estimator which learns how to divide the observations into distinguishable subspaces. This is achieved by utilizing a dedicated deep neural network to learn the empirical autocorrelation of the input, by training it as part of the Root-MUSIC method, leveraging the inherent differentiability of this specific DoA estimator, while removing the need to provide a ground-truth decomposable autocorrelation matrix. Once trained, the resulting SubspaceNet serves as a universal surrogate covariance estimator that can be applied in combination with any subspace-based \ac{doa} estimation method, allowing its successful application in challenging setups. SubspaceNet is shown to enable various DoA estimation algorithms to cope with coherent sources, wideband signals, low SNR, array mismatches, and limited snapshots, while preserving the interpretability and the suitability of classic subspace methods.

Overview

This repository consists of following Python scripts:

Requirements

This script requires that pyenv\requirements.txt will be installed within the Python environment you are running in.

Another option in the activate pyEnv\SubspaceNetEnv python environment.

Getting started

If you just want to run the code, run main.py script (for nominal scenario, as detiled in the script). For changing simulation parameters follow the documentaion in main.py script.