%
% REGEN_S
% _____
%
%       Regenera la serie temporal en cada uno 
% de los tres sensores a partir de las amplitudes
% incidente y reflejada calculadas con clsquare_s.
% 
%   eta = regen_s(f,Zi,Zr,x,h,xd)
%
%
% Variables de entrada:
% ---------------------
%   f: vector de frecuencias (Hz)
%   Zi: vector de amplitudes de las ondas incidentes
%   Zr: vector de amplitudes de las ondas reflejadas
%   x:  posiciones relativas entre los sensores (m) 
%        vector (3) 
%   h:  profundidad de agua (m) 
%   xd: distancia al dique
%
% Variables de salida:
% --------------------
%   eta: elevacion de la superficie libre (m)
%        matriz(ndat x 3)
%   etai oleaje incidente 
%   etar oleaje reflejado
%   eta2 serie reconstruida
%
% Funciones que utiliza:
% ----------------------
%  wavnum, fdek, para el calculo del numero de onda
%
%                                  Asuncion Baquerizo
%   Grupo de Puertos y Costas, Universidad de Granada
%                                       Abril de 2002
%____________________________________________________
%
function [etai,etar,eta,etad,etaid,etard]  = regen_s(f,Zi,Zr,x,h,xd)

ndat = (length(Zi)-1)*2;
c(1,:)=[0 0 0];  ci(1,:)=[0 0 0];  cr(1,:)=[0 0 0]; 

xn=-xd;
cd(1)=0;  cid(1)=0;  crd(1) =0;

for j=2:ndat/2
    
    k = wavnum(1/f(j),h);
    c(j,:) = Zi(j)*exp(i*k*x)+Zr(j)*exp(-i*k*x);
    ci(j,:)=Zi(j)*exp(i*k*x);
    cr(j,:)=Zr(j)*exp(-i*k*x);
    
    kxn(j)=k*xn; entkxn(j)=floor(k*xn/(2*pi)); kxn(j)=kxn(j)-entkxn(j)*2*pi;
    cd(j) = Zi(j)*exp(i*kxn(j))+Zr(j)*exp(-i*kxn(j));
    cid(j) = Zi(j)*exp(i*kxn(j));
    crd(j) = Zr(j)*exp(-i*kxn(j));

    c(ndat+2-j,:) = conj(c(j,:));
    ci(ndat+2-j,:) = conj(ci(j,:));
    cr(ndat+2-j,:) = conj(cr(j,:));
    cd(ndat+2-j) = conj(cd(j));
    cid(ndat+2-j) = conj(cid(j));
    crd(ndat+2-j) = conj(crd(j));
end
j = ndat/2+1;
k = wavnum(1/f(j),h);
kxn(j)=k*xn;  entkxn(j)=floor(k*xn/(2*pi)); kxn(j)=kxn(j)-entkxn(j)*2*pi;

ci(j,:)=Zi(j)*exp(i*k*x);
etai = real(ifft(ci*ndat));  

cr(j,:)=Zr(j)*exp(-i*k*x);
etar = real(ifft(cr*ndat)); 

c(j,:) = Zi(j)*exp(i*k*x)+Zr(j)*exp(-i*k*x);
eta = real(ifft(c*ndat));   

cd(j) = Zi(j)*exp(i*kxn(j))+Zr(j)*exp(-i*kxn(j));
etad=real(ifft(cd*ndat)); 

cid(j) = Zi(j)*exp(i*kxn(j));
etaid=real(ifft(cid*ndat)); 

crd(j) = Zr(j)*exp(-i*kxn(j));
etard=real(ifft(crd*ndat)); 

