% shofftalgo.m Skript zur Demonstration einer FFT
% Die globale Variable 'ndim' muss vorausdefiniert werden
%    ein Vektor fin kann vordefiniert werden, muss aber nicht
% in den Stufen x=2,4,8 sind 
%    Ex und Ox fuer die Zusammenfassungen Even/Odd
%    Tx fuer die Transformation
%    Ux fuer Umkehrung der Anordnung unscramble
%    Fxs die Resultate dirkt nach Tx, scrambled
%    F Original fft-Resultat zum Vergleich
%    GUx die Zusammengefassten g und u-Werte
% 
%
   if exist('fin') ==1
% falls eine Vektorfunktion 'fin' existiert gilt diese
     f = fin;
   else
% die besten allgemeinen Testf\"alle sind Random-Vektoren
      f = rand(ndim,1);
   end
   F = fft(f);
% 1-- ohne Zerlegung
   difvec1 =  dftmatrix(ndim)*f - fft(f);
disp(' 1 -- Differenz DFT volle Matrix - FFT')
   difsum1 = sum(abs(difvec1))
% 2 -- eine Zerlegung
if ndim > 2
  [U2, T2, E2, O2] = xfftmatrix(ndim,1);
  GU2 = (E2+O2)*f;   
  F2s = T2*(E2+O2)*f;    
  difvec2 = U2*T2*(E2+O2)*f - fft(f);   
disp(' 2 -- Differenz DFT 1 Zerlegung - FFT')
   difsum2 = sum(abs(difvec2))
end 
% 3 -- 2 Zerlegungen
if ndim > 4
  [U4, T4, E4, O4] = xfftmatrix(ndim/2,2);
  GU4 =  (E4+O4)*(E2+O2)*f ;   
  F4s = T4*(E4+O4)*(E2+O2)*f ;   
  difvec3 = U2*U4*T4*(E4+O4)*(E2+O2)*f - fft(f);   
disp(' 3 -- Differenz DFT 2 Zerlegungen - FFT')
   difsum3 = sum(abs(difvec3))
end 
% 4 -- 3 Zerlegungen
if ndim > 8
  [U8, T8, E8, O8] = xfftmatrix(ndim/4,4);
  GU8 = (E8+O8)*(E4+O4)*(E2+O2)*f ;   
  F8s = T8*(E8+O8)*(E4+O4)*(E2+O2)*f ;   
  difvec4 = U2*U4*U8*T8*(E8+O8)*(E4+O4)*(E2+O2)*f - fft(f);   
disp(' 4 -- Differenz DFT 3 Zerlegungen - FFT')
   difsum4 = sum(abs(difvec4))
end 
