% Sinc function weighting example steps through points of a sampled
% rectangular pulse to interpolate points between existing points (based
% on a higher sampling frequency). This demonstrates sinc weighting on
% neighboring points to interpolate points between existing points.
% In the graphics of this script notice the intersection of the sinc
% with all the other existing samples, resulting in a weighted
% contribution to the interpolated point.
%
% Create discrete time axis for sampling signal
fs =5;
t = [-3*fs:3*fs]/fs;
% Generate rectangular pulse
sig = rectpuls(t,1); % With width of 2 seconds centered on 0.
% Create more densely sampled time axis for sinc function interpolator
fsc = fs*10; % Increase sampling rate by factor of 10
tc = [-3*fsc:3*fsc]/fsc;
% Loop to slide sinc function along axis one FSC sample at a time
% start just before middled of signal at t =0;
for k = fix(length(tc)/2):fix(length(tc)/2)+11
stem(t,sig) % Plot stem plot of original signal at sample points
hold on
s = sinc((tc-tc(k))*fs); % Supperimpose sinc shifted by a submultiple of sampling increment
plot(tc,s,'r', [tc(k) tc(k)], [0 1], 'g--') % Draw a green vertical line at interpolation point
xlabel('Seconds')
ylabel('Amplitude')
title('Sinc function weights on surrounding points to interpolate at green broken line')
axis([-1, 1, -.5, 1.1]) % Limit axis around t=0 to get a better look
hold off
disp('Hit any key to continue')
pause
end