%-----------------------------------------------------------------
%     *** 2.161 Signal Processing - Continuous and Discrete  ***
%                      Tutorial MATLAB Function
%
% xinterp -  simple radix-2 data interpolation function based on
%              cardinal reconstruction.
%
% Source:	Class handout: Data Resampling: Interpolation (Up-
%		Sampling) and Decimation (Down-Sampling)
%
% Usage:	fout = xinterp(fin, K)
%      	where	fin  - input vector of data,
%      		K    - interpolation factor.
%   The length of the interpolated data array fout will be 2^K times
%   the length of the input array fin.
%
%   Author:   D. Rowell
%   Revision: 2.0 9-23-2007
%
%------------------------------------------------------------------
%
function fout = xinterp(fin,K)
fdummy = fin;
% Repeat the procedure K times, each time doubling the length of
% the output array by inserting a point at the mid-point of the
% intervals.
for k = 1:K
   N=size(fdummy,2);
   % Create an empty output vector
   fout = zeros(1,2*N);
   for i=1:N
      fout(2*i-1) = fdummy(i);
      for j=1:N
         fout(2*i) = fout(2*i) + fdummy(j)*(-1)^(j-i)/(i-j+0.5);   
      end
      fout(2*i) = fout(2*i)/pi;  
   end
fdummy=fout;
end
% 
fout=fdummy;
