Refinement of Direction of Arrival Estimators by Majorization-Minimization Optimization on the Array Manifold
This repository contains implementation for the algorithms and experiments of the paper Refinement of Direction of Arrival Estimators by Majorization-Minimization Optimization on the Array Manifold by Robin Scheibler and Masahito Togami.
We propose a generalized formulation of direction of arrival estimation that includes many existing methods such as steered response power, subspace, coherent and incoherent, as well as speech sparsity-based methods. Unlike most conventional methods that rely exclusively on grid search, we introduce a continuous optimization algorithm to refine DOA estimates beyond the resolution of the initial grid. The algorithm is derived from the majorization-minimization (MM) technique. We derive two surrogate functions, one quadratic and one linear. Both lead to efficient iterative algorithms that do not require hyperparameters, such as step size, and ensure that the DOA estimates never leave the array manifold, without the need for a projection step. In numerical experiments, we show that the accuracy after a few iterations of the MM algorithm nearly removes dependency on the resolution of the initial grid used. We find that the quadratic surrogate function leads to very fast convergence, but the simplicity of the linear algorithm is very attractive, and the performance gap small.
- Robin Scheibler
- Masahito Togami
We work with anaconda to simplify the environement setup.
conda env create -f environment.yml
conda activate doamm
For the experiment on simulated data, run the following.
# Generate Fig. 1 and Table 2
# - this will create the folder ./sim_results/YYYMMDD-HHmmss_experiment1_effect_grid_size
python ./doa_experiment_para.py ./doa_experiment_para.py ./config_experiment_grid.yml
# - plot Fig. 1
python ./make_figure1.py ./sim_results/YYYYmmdd-HHMMSS_experiment1_effect_grid_size
# - plot Table 2
python ./make_table_runtime.py ./sim_results/YYYYmmdd-HHMMSS_experiment1_effect_grid_size
# Generate Table 1
# - this will create the folder ./sim_results/YYYMMDD-HHmmss_experiment1_effect_s
python ./doa_experiment_para.py ./doa_experiment_para.py ./config_experiment_s.yml
python ./make_table1.py ./sim_results/YYYYmmdd-HHMMSS_experiment1_effect_s
For the experiment on recorded data, it is necessary to download the Pyramic dataset here
git clone https://github.com/fakufaku/pyramic-dataset
wget -qO- https://zenodo.org/record/1209563/files/pyramic_segmented_<sample_type>.tar.gz | tar xzv
Then, run the following
# Run the experiment
python ./doa_experiment_pyramic.py run ./pyramic-dataset/calibration/calibrated_locations.json --sources 1 --output ./sim_results/pyramic_doa_results.json
# Plot Fig. 2
python ./doa_experiment_pyramic.py plot ./sim_results/pyramic_doa_results.json -s figures/pyramic_figure.pdf
This code is released under MIT License.
Copyright 2021 Robin Scheibler and Masahito Togami