필터 지우기
필터 지우기

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);

채택된 답변

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
Stefan Zete
Stefan Zete 2022년 5월 11일
Can someone help me with an implementation of AoA algoritm for a project, please?

댓글을 달려면 로그인하십시오.


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

카테고리

Help CenterFile Exchange에서 Direction of Arrival Estimation에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by