Direction of arrival estimation of multiple signals using Capon (MVDR) beamformer
조회 수: 76 (최근 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);
댓글 수: 0
채택된 답변
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
댓글 수: 1
Lachlan Davies
2023년 2월 10일
편집: Lachlan Davies
2023년 2월 10일
This enhancement gives a similar result unfortunately
추가 답변 (3개)
Shirleyuue Jiang
2019년 8월 28일
I will replace your signal definition with the following
x = x + amp(k)*aU(k,:).'*s1;
댓글 수: 0
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
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
Stefan Zete
2022년 5월 11일
Can someone help me with an implementation of AoA algoritm for a project, please?
Tony Azar
2022년 6월 1일
Please see example "Conventional and Adaptive Beamformers" at:
This example compares Conventional to Adaptive (MVDR & LCMV) Beamformers.
댓글 수: 0
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!