This repository hosts an implementation of Newton's method for solving the maximum likelihood estimation problem for a covariance matrix that is known to be Toeplitz:
with decision variable
NML
, along with possible
applications can be found in our paper.
The MATLAB installation assumes that CBLAS
, LAPACKE
and FFTW3
are installed on your system. After having installed these dependencies NML
can be built with
git clone https://github.com/dance858/Toeplitz-covariance-estimation.git
make -f make_matlab
A Python interface is under development. Please reach out if you need a Python interface as soon as possible.
NML
is written in C and uses CBLAS
and LAPACKE
for linear algebra operations,
and FFTW3
to compute fast Fourier transforms. After having installed these packages you can build NML
using the provided CMake configuration.
In this example we show how the maximum-likelihood Toeplitz covariance estimate can be used to enhance the performance of the multiple-signal classification algorithm (MUSIC) for direction-of-arrival estimation.
The MATLAB interface exposes the function
[x, y, grad_norm, obj, solve_time, iter] = NML(real_Z, imag_Z, n, K, verbose, tol, beta, alpha, max_iter)
The input parameters are defined as follows.
-
real_Z
- the real part of the data points, stacked along columns -
imag_Z
- the imaginary part of the data points, stacked along columns -
n
- the covariance matrix to be estimated has dimension$n + 1$ -
K
- the number of measurements -
verbose
- if true the progress is printed out in every iteration -
tol
- the algorithm terminates when the Newton decrement is smaller thantol
-
beta
andalpha
- backtracking parameters, -
max_iter
- maximum number of iterations
Typical values are tol
= beta
= alpha
=
The output parameters are defined as follows.
x
andy
- The real and imaginary parts of the maximum likelihood Toeplitz estimate. The corresponding covariance matrix can be reconstructed with the commandtoeplitz([2*x(1); x(2:end) + 1i*y])
grad_norm
- Euclidean norm of the gradientobj
- objective valuesolve_time
- solve time in secondsiter
- number of iterationsreal_Z
- the real part of the data points, stacked along columnsimag_Z
- the imaginary part of the data points, stacked along columns
An example of how this function is called is given in demo.m
in the examples
-folder. Running demo.m
results in the following figure:
This figure shows the mean-squared estimation error for MUSIC when used with the sample covariance matrix (labelled with MSE_SC
) and the maximum likelihood estimate (labelled with MSE_NML
), versus the number of measurements
If you find this repository useful, please consider giving it a star. If you wish to cite this work you may use the following BibTex:
@article{Ced24,
title = {Toeplitz covariance estimation with applications to MUSIC},
journal = {Signal Processing},
volume = {221},
pages = {109506},
year = {2024},
issn = {0165-1684},
doi = {https://doi.org/10.1016/j.sigpro.2024.109506},
author = {Daniel Cederberg},
}