Forums

MVDR filtering: Singular Correlation Matrix

Started by Master of Signals February 18, 2005
Hello Folks,

I am trying to implement a MVDR (Minimum Variance Distortionless
Response) filter instead of the usual correlation processing (matched
filtering) for a pulsed radar application. The pulse waveform that we
use is a linear FM chirp (so that the correlation operation is
essentially a pulse compression). I having trouble with this because
the signal correlation matrix always ends up being singular.

The radar system model is very simple. I model the received signal as a
convolution of the reflection profile (sampled range bins) and the
transmit waveform.

y(n) = F(n)*s(n) + v(n) = \sum_{j = 1}^{N} s(j)F*(n-j) + v(n)

s(n) is an N-length (N = 166, in our case) sampled transmit pulse and
F(n) is the reflection profile (just like the multipath impuse response
in communications). The received signal is processed using a N-length
weight vector to obtain an estimate of F(n), namely, Fe(n) = w^H
y_w(n), where y_w(n) = [ y(n), y(n+1), ... y(n+N-1) ]^T. (I am guessing
that the problem of channel estimation in communications is an
equivalent problem to this one).

The MVDR criterion I am using for estimation is that:

min ||w^H y_w(n)||^2 such that w^H s = 1

where s = [s(1), ..., s(N)] - just the N x 1 sampled transmit pulse.
The above is done for each range bin to find a weight vector and then
apply it to the received samples to estimate F(n). Here, I am trying to
minmize the output energy of the filtered output such that a
distortion-less response is maintained for the signal that arrives at
the n^th range bin, i.e., when y_w(n) = s

Now, the solution to the above obviously is w =
inv(Ryy)*s/(s'*inv(Ryy)*s), where Ryy is the N x N correlation matrix
of y_w(n). Since our radar system has a reasonably high PRF, I have
several snapshots of the data available to construct a time-averaged
version of Ryy. Here is where I am running into trouble. The
correlation matrix always turns out be singular. Right now, I could
guess only two reasons why this happens.

1. There is significant correlation between the elements y_w(n) - the
received vector.
2. The samples within y_w(n) have a large dynamic range.

Unfortunately, I might have both of the above problems. The received
signal does have a really wide dynamic range (60-80 dB, atleast within
one window over with the algorithm operates).

I tried diagnol loading, but it introduces a lot of undesirable
artifacts into the estimation process (it increases the noise floor to
begin with...).

So my questions would be:

1. Am I missing some big picture here ? Does MVDR filtering work for
such problems ?
2. Is there any data-conditioning that I can do to increase the
condition number of the correlation matrix without introducing unwanted
artifacts into the processing ?

Any insight to this problem, or any related references would be greatly
appreciated !

Thanks,
Vijay.

Master of Signals wrote:
> Hello Folks, > > I am trying to implement a MVDR (Minimum Variance Distortionless > Response) filter instead of the usual correlation processing (matched > filtering) for a pulsed radar application. The pulse waveform that we > use is a linear FM chirp (so that the correlation operation is > essentially a pulse compression). I having trouble with this because > the signal correlation matrix always ends up being singular.
I don't do active. I do passive so I'm extrapolating to your problem, which may be somewhat bogus. If you don't have any interferers and your MVDR steering vector ( constraint vector) is pointing at the the correct direction, MVDR reduces to matched filtering. The biggest problem with MVDR is that the constraints have to be matched to the signal of interest which are typically unknown, so the MVDR filter will often surpreses the signal of interest. A way to get around this is to form a whole lot of cells. Multipath also introduces problems in correlation matrix estimation. There is some literature on this topic. You should also look at Dominant Mode Rejection. This is basically MVRD with diagonal loading and some other tricks. The jist of most of this is that MVDR is kind of fussy and takes a lot of resources to do correctly. In many problem it just isn't worth the trouble.
> > The radar system model is very simple. I model the received signal as a > convolution of the reflection profile (sampled range bins) and the > transmit waveform. > > y(n) = F(n)*s(n) + v(n) = \sum_{j = 1}^{N} s(j)F*(n-j) + v(n) > > s(n) is an N-length (N = 166, in our case) sampled transmit pulse and > F(n) is the reflection profile (just like the multipath impuse response > in communications). The received signal is processed using a N-length > weight vector to obtain an estimate of F(n), namely, Fe(n) = w^H > y_w(n), where y_w(n) = [ y(n), y(n+1), ... y(n+N-1) ]^T. (I am guessing > that the problem of channel estimation in communications is an > equivalent problem to this one). > > The MVDR criterion I am using for estimation is that: > > min ||w^H y_w(n)||^2 such that w^H s = 1 > > where s = [s(1), ..., s(N)] - just the N x 1 sampled transmit pulse. > The above is done for each range bin to find a weight vector and then > apply it to the received samples to estimate F(n). Here, I am trying to > minmize the output energy of the filtered output such that a > distortion-less response is maintained for the signal that arrives at > the n^th range bin, i.e., when y_w(n) = s > > Now, the solution to the above obviously is w = > inv(Ryy)*s/(s'*inv(Ryy)*s), where Ryy is the N x N correlation matrix > of y_w(n). Since our radar system has a reasonably high PRF, I have > several snapshots of the data available to construct a time-averaged > version of Ryy. Here is where I am running into trouble. The > correlation matrix always turns out be singular. Right now, I could > guess only two reasons why this happens. > > 1. There is significant correlation between the elements y_w(n) - the > received vector. > 2. The samples within y_w(n) have a large dynamic range. > > Unfortunately, I might have both of the above problems. The received > signal does have a really wide dynamic range (60-80 dB, atleast within > one window over with the algorithm operates). > > I tried diagnol loading, but it introduces a lot of undesirable > artifacts into the estimation process (it increases the noise floor to > begin with...). > > So my questions would be: > > 1. Am I missing some big picture here ? Does MVDR filtering work for > such problems ? > 2. Is there any data-conditioning that I can do to increase the > condition number of the correlation matrix without introducing unwanted > artifacts into the processing ? > > Any insight to this problem, or any related references would be greatly > appreciated ! > > Thanks, > Vijay. >
Master of Signals wrote:
> Hello Folks,
....
> Since our radar system has a reasonably high PRF, I have > several snapshots of the data available to construct a time-averaged > version of Ryy. Here is where I am running into trouble. The > correlation matrix always turns out be singular. Right now, I could > guess only two reasons why this happens. > > 1. There is significant correlation between the elements y_w(n) - the > received vector. > 2. The samples within y_w(n) have a large dynamic range.
You missed the obvious reason (well, at least you didn't list it): You don't have enough snapshots to build a non-singular auto- correlation matrix. Formally, the autocorrelation matrix for a random column vector X is defined as R_XX = E[X X^H] where E[] is the expectation operator. When you want to use an autocorrelation matrix in your computations, you need a non-singilar estimate for R_XX. Define x_i as realization no. i of the random process X above (sorry for being sloppy with terminology here, there are limits to how far into maths i want to go when comiling the LaTeX maths inside my head and not on paper ...). One estimator for R_XX is R'_{x_ix_i} = x_i x_i^H which, obviously, is of rank 1. If the vector x_i is of length N, we basically have two choises as of how to generate a full-rank estimate for the correlation matrix: - We need to use at least N snapshots x_i and estimate R_XX as N R'_xx = sum x_i x_i^H i=1 - Use one of the "usual" autovcorrelation estimators. The price paid for the former is that one needs to spend a lot of time on collecting data, the price paid for the latter is that one must reduce the order of the autocorrelation matrix, or use a heavily biased estimator for the autocorrelation sequence r_xx.
> Unfortunately, I might have both of the above problems. The received > signal does have a really wide dynamic range (60-80 dB, atleast
within
> one window over with the algorithm operates). > > I tried diagnol loading, but it introduces a lot of undesirable > artifacts into the estimation process (it increases the noise floor
to
> begin with...).
With N = 166 samples in your signal wavelet, you need at least 166 snapshots in your estimator. Rune
Thanks for letting me know this important point. I investigated further
into this and found that I can reduce the number of required snapshots
by reducing the degrees of freedom for the weight vector. (Yes, 166
snapshots is very unrealistic even with the high PRF that we currently
have). I am investigating approaches such as using several degrees of
freedom to enfore a quiescent pattern (such as  hamming, hanning etc.,)
and allowing the remaining degrees of freedom to adapt to the data.
Hoping this would work, else I am reverting back to the good 'ol
windows.

-Vijay.