%%EE7780 Array Signal Processing
%Tarea 3 semana 1 Código para generar steering vector
%Este código genera un steering vector a partir de la DOA y de la posición de los elementos en el 
%vector p. Esto vale para cualquier geometría!! Ya, de nada ;)

%clear all, close all,
function [sa,p,d]=fSteeringVector(K,fbin,theta_a_deg,phi_a_deg)
disp('>>>>>>>>>>>>>>>>>>>>>>>>>fSteeringVector start')
%K=5;
%fbin = 2e3;

%Obtener las coordenadas del SLA y la distancia entre sensores
[p,d]=fSLA(K,fbin);

%Angulos de llegada de la onda.
%theta_a_deg = 90; % Angulo polar en grados
%phi_a_deg = 90; % angulo de azimut en grados
theta_a_rad = theta_a_deg*pi/180; %en radianes
phi_a_rad = phi_a_deg*pi/180; %en radianes

%direction cosines o Direction of Arrival (DOA)
a=[-sin(theta_a_rad)*cos(phi_a_rad),-sin(theta_a_rad)*sin(phi_a_rad),-cos(theta_a_rad)].';

%Magnitud del wavenumber k=w/c=2*pi*f/c=2*pi/lambda; Pero para un SLA: lambda=2*d;
k=pi/d;

%aT*p es un vector que depende de cada posición de los elementos del array
mkatp = -k*a'*p; %-k*aT*p es el termino exponencial en la página(slide) 14

%Vamos a usar la cabeza para encontrar el steering vector sin hacer un for loop. Fíjate en esto!!
sa = exp(j.*mkatp).'; %Steering vector, s(a).

disp('>>>>>>>>>>>>>>>>>>>>>>>>>fSteeringVector end')