function f1=DCT4(x)

% berechnet die DCT-IV des Vectors x mit Skalierung
% d.h. f1=sqrt(N)*C_N^IV* x


[L,N]=size(x); %x Zeilenvektor der LŠnge N
%Bringe x auf einen Vektor mit ZweierpotenzlŠnge

t=floor(log2(N));
N2=2^t*2;
if N>N2/2 y=zeros(N2); 
else N2=N; y=zeros(N2);
end	
for j=1:N y(j)=x(j); end;
	
% rekursiver Algorithmus
	
sq2=sqrt(2);	
if N2==2 f1(1)=sq2.*(cos(pi/8)*y(1)+sin(pi/8)*y(2));
         f1(2)=sq2.*(sin(pi/8)*y(1)-cos(pi/8)*y(2));
end;

if N2>=4  N3=N2/2; M=4*N2;
          for j=1:N3  u(j)=sq2*(cos((2*j-1)*pi/M)*y(j)+sin((2*j-1)*pi/M)*y(N2+1-j));
			          v(N3+1-j)=sq2*(-sin((2*j-1)*pi/M)*y(j)+cos((2*j-1)*pi/M)*y(N2+1-j));
		  end;
		  for j=1:floor(N3/2) v(2*j)=-v(2*j); end;	  
				  
			  
          v1=DCT2(u);
          v2=DCT2(v);
          for j=1:N3 v(j)=(-1)^(j-1)*v2(N3+1-j); end;	 

          v1=[v1,v];

          for j=2:N3 w(j)=(v1(j)+v1(N3+j-1))/sq2;
                     w(j+N3-1)=(v1(j)-v1(N3+j-1))/sq2;
	      end;
   
          w(1)=v1(1); w(N2)=-v1(N2);	   
          for j=1:N3 f1(2*j-1)=w(j);
	                 f1(2*j)=w(N3+j);
	      end;
end;


	   
	   
				  
	