Hi all. I'm a student from Italy. I'm working on a project for an exam
at the university. As a matter of fact I'm trying to realize the DOA in
Matlab for a linear antennas array trough the SVD algorithm. The first columns
of the V matrix will be the steering vector while the zeros showed by the other
column will realize the DOA. So this is the scenario: there is a linear array
capturing two signals at the same frequency interfering each other, but arriving
with two different angles (respect the local normal in the plane of the array)
so ,in the hypothesis of far field and of narrow band signals (complex
sinusoids) every signal is captured by every antenna with a different phase from
the previous one so the signals are spatially incorrelated, but correlated in
time. The SVD works well in recognizing one single signal or two or many with
different frequencies, but doesn't recognize two signals with the same
frequency. Here you are a piece of my code:
close all
clear
c= 3e8; % m/s velocitdel segnale nel vuoto
fc = 1; % freqenza di campionamento
A = 1;
freq = .25;
freq2= .25;
fi = 0; %sfasamento iniziale
t=0:1e4-1;
sigma = input('SNR [dB] -> ');
sigma = A/sqrt(2)*10^(-sigma/20); %Modificata da noi
%
% Simulazione delle uscite dei sensori
%
N = input('Numero di sensori -> ');
ti1 = input('Angolo di incidenza del fronte d''onda [deg] ->
');
ti2 = input('Angolo di incidenza del fronte d''onda interferente
[deg] -> ');
D = c/(2*freq);
theta1 = pi/180*ti1;
theta2 = pi/180*ti2;
for i=1:N
ritardi1(i) = (i-1) * D * sin(theta1)/c;
ritardi2(i) = (i-1) * D * sin(theta2)/c;
% fasi(i) = (i-1) * D * sin(theta)/ lambda * freq;
%
%
xxx1 = zeros(size(t));
xxx2 = zeros(size(t));
xxx1 = A.*exp(j*(2*pi*freq*(t - ritardi1(i))));
xxx2 = A.*exp(j*(2*pi*freq2*(t - ritardi2(i))));
x(i,:) = xxx1+xxx2;
n(i,:) = sigma * (randn(2*size(t)) + j*randn(2*size(t)));
end
s = x + n;
% figure(1)
% subplot(3,1,1)
% plot(t,real(s'))
% title('Received signals')
% subplot(3,1,2)
% plot(20*log10(abs(fft(s.'))))
% title('Spectra of the received signals')
% subplot(3,1,3)
% mesh(real(s'))
% title('Received signals')
%
% SVD per la stima dell'angolo di incidenza
%
sss = s(:,1:100).'; %Riduzione del tempo di osservazione per messaggio out
of memory e trasposizione
%perchin svd il numero di colonne deve essere < del
%numero di righe
[U,S,V] = svd(sss);
U = U(:,1:N); % Segnali normalizzati
S = S(1:N,1:N); % potenza nei segnali estratti
V; % coefficienti dei "filtri spaziali" usati
nell'estrazione dei segnali
figure(2)
title('Valori singolari')
plot(1:N,diag(S),'*')
Does someone can help me? Do the SVD is useful for DOA in this case or have I to
find another way? Thanks in advance.