function f=franklin(l,q,S);

%                   f=franklin(l,q,S);
%
% Ce programme calcule la projection orthogonale d'un signal analogique S
% de taille (1,N=2^q+1), affine par morceaux avec noeuds aux points
% 1+k*2^l, k=0,1,..., sur le sous espace des signaux de taille (1,N),
% affines par morceaux avec noeuds aux points 1+k*2^(l+1), k=0,1,...
% L'algorithme peut être itére comme suit pour réaliser une décomposition
% orthogonale de S en résumé-details. On part de S, avec size(S)=(1,2^q+1). 
% 
% R1=franklin(0,q,S);
% D1=s-R1;
% R2=franklin(1,q,R1);
% D2=R1-R2;
% R3=franklin(2,q,R2);
%     ...
% Rq=franklin(q-1,q,R(q-1));
%
% les sous-programmes utilisés sont gram et frankaux.  

SS=ones(1,2^(q-l)+1);
  for k=1:2^(q-l)+1,
  SS(k)=S(1+(k-1)*2^l);
  end
  C=frankaux(q-l-1);
  C1=C';
  g1=gram(l,q);
  C2=g1*C';
  y1=SS*C2;
  y=y1';
  g=gram(l+1,q);
  u=inv(g)*y;
  t=u';
  s1=t*C; 
  w=s1';
  for p=(q-l):(q-1),
  w=(frankaux(p)')*w;
  end
  f=w';