% SIGNAL REGISTRATION 1D
% Author: C. Prati
% 5-4-2023
clear 
close all
%GENERAZIONE DEL SEGNALE DI RIFERIMENTO
N=51;
n=-(N-1)/2:(N-1)/2;
p=-1.45;


x1=sinc(n/5);
x2=sinc((n-p)/5);
figure(1)
plot(x1)
grid
figure(1)
hold on
plot(x2,'r')
hold off
pause

% cross-correlazione
R=xcorr(x1,x2);
M=length(R);
m=-(M-1)/2:(M-1)/2;
figure(2)
plot(m,R)
grid
hold on
pause
plot(m,R,'om')
grid on
 % posizione (intero) del massimo della cross-correlazioene
[Rmax,nmax]=max(R);
 n0=nmax;
 shift_intero=n0-N

 % Interpolatore parabolico su 3 campioni 
    n_right=nmax+1;
    n_left=nmax-1;
    R0=Rmax;
    Rr=R(n_right);
    Rl=R(n_left);
    a=Rr/2+Rl/2-R0;
    b=Rr/2-Rl/2;
    c=R0;
    
    
   % rappresentazione grafica della parabola per 3 campioni
    t=(-1.5:.01:1.5);
    y=a*t.^2+b*t+c;
    pause
    figure(2)
    hold on
    plot(t+shift_intero,y,'r')
    grid on
    hold off

     % calcolo del massimo della parabola per 3 campioni
    dnmax=-b/(2*a);
    % shift frazionario stimato
    shift_stimato=shift_intero+dnmax
pause

% shift del segnale x2 tramite DFT utilizzando shift_stimato
X2=fft(x2);
espo=exp(-j*2*pi*shift_stimato*n/N);
figure(3)
stem(n,angle(espo))
pause
stem((0:N-1),ifftshift(angle(espo)))
X2shift=X2.*ifftshift(espo);
x2shift=real(ifft(X2shift));
figure(1)
subplot(211)
plot(x1)
grid
subplot(212)
plot(x2shift,'m')
grid






