covariance matrix estimation in MVDR beamforming

Iam working on Minimum Variance Distortionless beamforming in frequency domain.
I have 8 microphones in a spiral shape with different heights(3D array). I have simulated signals(sinusoids) as jammers from 2 directions at -100° and -50° azimuth and my look direction is +100° azimuth. Now, I need to estimate the covariance matrix in frequency domain to place nulls in each jammer direction given by Cxx=1/N(X*X'). Here, X is the fft of entire signal or is it bin by bin as in Cxx=1/N[X(w1)*X(w1)'] where w1=first frequency bin and so on.?
Please help.

Réponses (1)

Honglei Chen
Honglei Chen le 26 Mai 2012

0 votes

That depends on whether you want to process your signal as narrow band or wide band. If you want narrow band, then you can treat everything as one frequency bin. If you want wideband, then you need to estimate for each frequency bin.

4 commentaires

zozo
zozo le 26 Mai 2012
Ok, I have a wideband signal. So, I go about like this (correct me if iam wrong):
1) I have simulated signals falling on 8 channels(microphones). So, I make FFT of each signal (having 1000samples each).
2) Take the first value(bin) from each of the 8 channels to get a 8x1 vector X.
3) Then I find Cxx=1/8(X*X'), to get a 8x8 covariance matrix.
4) I repeat this for all the bins to get 1000 covariance matrices Cxx for each of the bin.
5) Now I average all these covariance matrices as Cxx_all=1/1000(Cxx1+Cxx2+Cxx3...Cxx1000)
6) Now I invert this Cxx_all and multiply it to the steering vector 'a' of look direction as H=Cxx_all\a
to get matrix H(8x1000).
7) Now I multiply H elementwise with the FFT of corresponding signals from the microphones to beamform them towards look direction and place notches at each of the jammer direction in my beampattern.
Is the above procedure correct?
If you want to do it using the subband approach, I would suggest that, at step (5), perform MVDR in each subband and then combine the beamformed data.
zozo
zozo le 29 Mai 2012
I have divided my received signal (8x1000) into 8 segments of 125samples each. Now, FFT each segment, and compute the covariance matrix by selecting corresponding bin(8x1) from each of the segments and averaging them over segments to get the covariance matrix for 1st bin. Repeat the same for all the 125 bins to get 125 covariance matrices (8x8).
Now I compute the steering vector 'a' and the MVDR weights as:
N=125;
t_L; %8x1 vector of time delays from look direction at 100° on each of 8 microphones
omega = fs*[(0:N/2) (-N/2+1:-1)]/N; %frequency bins of impulse response
for v=1:N
Cxx=8x8 matrix computed as stated in above for each bin
a=exp(1i*t_L*2*pi*omega(v)); %8x125 steering vector towards look direction 100°
H_w=Cxx\a; % 8x125 filter coefficients for MVDR
end
Doing this, I get undistorted look direction but NO notches at jammer directions as shown below:
http://i47.tinypic.com/33le2hk.jpg
(Note: my source and 2 jammers are sinusoids of 900Hz,950Hz,1000Hz respectively
Not obvious what is wrong, but two things I noticed: (1) you should have 1 response curve for each bin, why is it only one line in the figure? (2) You are using 8 samples to estimate an 8x8 covariance matrix, there's not enough samples

Connectez-vous pour commenter.

Question posée :

le 25 Mai 2012

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by