function f1=interpolation2(g,f,down,N2)


% g gegebenes reduziertes Signal (Zeilenvektor)
% down sampling Rate des Downsamplings
% Interpolationsfunktion unten wŠhlen
% Anzahl der zu rekonstruierenden Daten mit kubischen Polynomen
% 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



g2=[g(1),g,g(N),g(N-1)]; %Erweiterung des reduzierten Signals durch Spiegelung
  for j=1:N2
    k1=floor((j-1)/down);
	f1(j)=g2(k1+1)*kub((j-1)/down-k1+1)+g2(k1+2)*kub((j-1)/down-k1)+g2(k1+3)*kub((j-1)/down-k1-1)+g2(k1+4)*kub((j-1)/down-k1-2);
  end;
  for j=1:10*(N2-1)+1	
	k1=floor((j-1)/(down*10));
	f2(j)=g2(k1+1)*kub(j/down/10-k1+1)+g2(k1+2)*kub(j/down/10-k1)+g2(k1+3)*kub(j/down/10-k1-1)+g2(k1+4)*kub(j/down/10-k1-2);
  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


% kubische Interpolationsfunktion

function g1=kub(x)
if abs(x)>=2 g1=0;
elseif (x>=0)&(x<=1) g1=(x-2)*x*x+1;
elseif (x>1)         g1=4+x*(-8+x*(5-x));
elseif (x>=-1)&(x<0) g1=1-x*x*(2+x);
elseif (x<-1)        g1=4+x*(8+x*(5+x));
end;
