% ============================================================
% Interpolacion  en  tiempo,  CLASE  7  de la  teoria.
% ============================================================
% Se impone la hermiticidad de la TDF para poder evaluar en indices no
% enteros.


clear all;close all;close all

L=10; % relacion de interpolacion. L-1 muestras por cada muestra original.

x=[0.25,0.5,0.25]; % En este caso existe un numero impar de muestras ...

N0=length(x);
N=N0+1; % ;)
x(N)=0; % ... zero padding para obtener numero par de muestas
N=length(x);
X=fft(x); % TDF
Nint=L*N;

% Interpolacion en "tiempo" evaluando la TDF inversa para valores
% no enteros del subindice n:

xint=zeros(1,Nint);

for n=1:Nint
    xint(n)=X(1);
    for k=2:N/2   % hermiticidad impuesta
        nn=(n-1.0)/L;
        W1=X(k)*exp(+1i*2*pi*(k-1)*nn/N);
        W2=conj(W1);
        xint(n)=xint(n)+W1+W2;
    end
end

xint=(1.0/N)*real(xint);

% remuevo muestras extrapoladas

xint=xint(1:(L*N0-L+1));

x=x(1:N0);  % dato original
t=(0:N0-1); % tiempos originales
tint=(0:N0*L-L)/L; % tiempos interpolados


% ============================================================
% GRAFICOS
% ============================================================


figure(1)
hold on
stem(t,x,'color','b',"markersize",7,'filled','b')
stem(tint,xint,'g-')
stem(t,x,'b-')
hold off
axis([-1 N0 -1.2*min(x) 1.2*max(x)])