function f1=interpolation1(g,f,down,N2,art)


% g    gegebenes reduziertes Signal (Zeilenvektor)
% down sampling Rate des Downsamplings
% Interpolationsfunktion unten wŠhlen
% N2   Anzahl der zu rekonstruierenden Daten
% art  Art der Interpolation (konstant=1, linear=2, abgeschnittene sinc-Funktion=3
% Es wird angenommen, dass die erste Komponente von g und dem zu konstruierenden Signal Ÿbereinstimmen.

[L,N]=size(g); % d.h. N ist die Anzahl der gegebenen Daten im reduzierten Signal g

g1= [g,g(N)];  %Erweiterung des reduziertenten Signals um einen Wert
if art==1
  for j=1:N2                   % Rekonstruktion von f durch konstante Interpolation
    k= round((j-1)/down);
	f1(j)=g1(k+1);
  end;
  for j=1:10*(N2-1)+1
    k=round((j-1)/(down*10));
	f2(j)=g1(k+1);
  end;
end;  
 
if art==2                      % Rekonstruktion von f durch lineare Interpolation
  for j=1:N2
    k1=floor((j-1)/down);
	f1(j)=g1(k1+1)+	 (g1(k1+2)-g1(k1+1))*(j-k1*down-1)/down;
  end;
  for j=1:10*(N2-1)+1	
	k1=floor((j-1)/(down*10));
	f2(j)=g1(k1+1)+	 (g1(k1+2)-g1(k1+1))*(j-k1*down*10-1)/(down*10);
  end;
end;  	

if art==3                     % Rekonstruktion von f mittels abgeschnittener sinc-Funktion
g2=[0,g,0,0];                 % Erweiterung des reduzierten Signals um Nullwerte
  for j=1:N2
    k1=floor((j-1)/down);
	f1(j)=g2(k1+1)*truncsinc((j-1)/down-k1+1)+g2(k1+2)*truncsinc((j-1)/down-k1)+g2(k1+3)*truncsinc((j-1)/down-k1-1)+g2(k1+4)*truncsinc((j-1)/down-k1-2);
  end;
  for j=1:10*(N2-1)+1	
	k1=floor((j-1)/(down*10));
	f2(j)=g2(k1+1)*truncsinc(j/down/10-k1+1)+g2(k1+2)*truncsinc(j/down/10-k1)+g2(k1+3)*truncsinc(j/down/10-k1-1)+g2(k1+4)*truncsinc(j/down/10-k1-2);
  end;
end;  	

x=0:0.1:N2-1;
y=0:1:N2-1;
z=0:down:N2-1;

% Plotten der Signale f2, f und g in einem Bild
plot(x,f2)
hold on
plot(y,f1, 'bd')
plot(y,f, 'g+')
plot(z,g, 'ro')
hold off


% abgeschnittene sinc-Funktion

function g1=truncsinc(x)
if abs(x)<2 g1=sinc(x); else g1=0; end; % abgeschnittene sinc-Funktion

function z=sinc(x)
%skalierte sinc-Funktion
if (abs(x)<0.00001) z=1-(pi*x).^2./6+(pi*x).^4/120-(pi*x).^6/5040;
else z=sin(pi*x)./(pi*x);
end;