Direction of arrival estimation of multiple signals using Capon (MVDR) beamformer

68 次查看(过去 30 天)
Hello everyone. I am trying to write a script for comparing two beamforming methods of estimating direction-of-arrval: conventional (Bartlett) beamformer and MVDR (Capon) beamformer. Everything works fine when there is only one signal arriving to the antenna array. But, when I add another signal from different direction, Capon BF returns incorrect spatial power spectrum. Two peaks in this spectrum are always about 2.5 dB above the floor level (regardless of signal to noise ratio). When I change SNR, whole spectrum is shifted up or down but peak-to-floor ratio remains the same. On the other hand, conventional beamformer works fine both for one and two arriving signals. I was struggling with the code but without effect. Do you know how to obtain proper spatial power spectrum for Capon BF in case of two or more signals received? Best regards. Here is my script:
clear all; close all;
fs = 10e6; %sampling frequency
ts = 1/fs;
T = 0.0001; %signal duration
t = 0:ts:T-ts;
Ns = length(t); %number of samples
fc = 1e6; %carrier freqiency
lambda = 3*10^8/fc; %wavelength
M = 10;%number of antenna elements in Unliform Linear Array
d = 0.5*lambda;%distance between neigbouring antennas
%------------------------------------------------------------------
s1 = exp(1i*2*pi*fc*t); %signal arriving to the array phase center (first antenna)
%SINGLE ARRIVING SIGNAL - WORKS FINE BOTH FOR CONVENTIONAL AND CAPON
%BEAMFORMERS
%teta = [40]/180*pi; %direction of arrival in degrees
%TWO ARRIVING SIGNALS - CONVENTIONAL BF - OK, CAPON BF - INVALID SPECTRUM!!!
teta = [0, 40]/180*pi; %directions of arrivals in degrees
amp = [1 1];% amplitudes of signals
delta_fi = -2*pi*d/lambda*sin(teta); %relative phase delay between signals received through neogbouring elements
for m=1:M;
aU(:,m) = exp(1i*((m-1)*delta_fi)); %steering vector
end
x = zeros(M,Ns);
for k=1:length(teta);
x = x + amp(k)*aU(k,:).'*s1*exp(1i*randn()); %data at the outputs of antenna elements
end
SNR = 10; %signal-to-noise ratio in decibels
sz = (2^(-0.5))*sqrt(10^(-SNR/10))*(randn(M,Ns)+1i*randn(M,Ns)); %complex Gaussian noise
Px = var(aU(k,1).'*s1*exp(1i*randn())); %power of signal
x = x + sz; %adding noise
Psz = var(sz(1,:)); %noise variance
Rxx = x*x'/Ns; %data covariance matrix
SNR_true = 10*log10(Px/Psz) %true SNR in dB
iRxx = inv(Rxx); %inverse of covariance matrix
teta_v = -pi/2:pi/180:pi/2; %range of scanned directions in radians
teta_v_deg = teta_v/pi*180; %same as above but in degrees
Nteta = length(teta_v); %number of scanned directions
for k=1:Nteta; %scanning loop
%k
teta = teta_v(k); %current scannig direction
delta_fi = -2*pi*d/lambda*sin(teta); %relateive phase delay
for m=1:M;
aT(m) = exp(1i*((m-1)*delta_fi)); %steering vector
end
a=aT.'; %transpose of steering vector
wbf = a; %weight vector for conventional beamforming
Pbf(k) = wbf'*Rxx*wbf; %spatial power spectrum of conventional beamformer
wMVDR = (iRxx*a)/(a'*iRxx*a); %weight vector for Caponbeamforming
PMVDR(k) = wMVDR'*Rxx*wMVDR/1; %spatial power spectrum of Capon beamformer
end
Pbf_dB = 10*log10(Pbf); %spectrum in log scale
PMVDR_dB = 10*log10(PMVDR);
figure
plot(teta_v_deg, Pbf_dB,'k','LineWidth',2);
axis([-90 90 0 20*log10(M)+5])
xlabel('\theta [\circ]');
ylabel('P(\theta)','rotation',0);
figure
plot(teta_v_deg, PMVDR_dB,'k','LineWidth',2);
xlabel('\theta [\circ]');
ylabel('P(\theta)','rotation',0);

采纳的回答

Honglei Chen
Honglei Chen 2016-8-8
I would replace your signal definition with the following
x = x + amp(k)*aU(k,:).'*exp(1i*randn(size(t)));
HTH

更多回答(3 个)

Shirleyuue Jiang
Shirleyuue Jiang 2019-8-28
I will replace your signal definition with the following
x = x + amp(k)*aU(k,:).'*s1;

Reeha Syed
Reeha Syed 2021-4-22
编辑:Reeha Syed 2021-4-22
I have observed the MUSIC algorithm for 1d and 2d DOA estimations and now want to know the their beamforming patterns for which do I have to write a seperate code for that?
  2 个评论
Sadiq Akbar
Sadiq Akbar 2021-5-19
Dear Reeha Syed, I was searching MUSIC algorithm for 1d and 2d DOA estimations and came to this page. Can you share the code of MUSIC algorithm for 1d and 2d DOA here. Regards

请先登录,再进行评论。


Tony Azar
Tony Azar 2022-6-1
Please see example "Conventional and Adaptive Beamformers" at:
This example compares Conventional to Adaptive (MVDR & LCMV) Beamformers.

标签

Community Treasure Hunt

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

Start Hunting!

Translated by