Vielen Dank für die guten Ratschläge!
Mein FFT-Problem habe ich inzwischen gelöst und ich komme ohne den rekursiven Aufruf der Procedur aus. Es wird innerhalb der Procedur so lange gerechnet, bis das Ergebnis fertig ist. Dazu war es notwendig, das Ganze noch einmal zu durchdenken. In der ELV-Dokumentation zur digitalen Signalverarbeitung habe ich dann endlich die Lösung zum zusammenbasteln gefunden.
Code: Alles auswählen
OpenConsole("Schleifenkonstruktion FFT")
EnableGraphicalConsole(1)
Global Dim z.f(1024,1)
Global Dim xIn.f(1024)            ;Real-Teil   
Global Dim yIn.f(1024)            ;Imag-Teil
Global e.l
Procedure Beispiel1(e.l)
  n.l=Pow(2,e)
  PrintN("")
  PrintN("Eingangssignal FFT nach DecimationInFrequency-Methode")
  For i=0 To n-1
    xIn(i)=Sin(3*2*i*#PI/n)+Cos(5*2*i*#PI/n)
    yIn(i)=0
    PrintN(Str(i)+" : "+ StrF(xIn(i),5)+ " + i* "+StrF(yIn(i),5))
  Next
EndProcedure
Procedure Schleife(m.i)
  Beginn= ElapsedMilliseconds()
  
;bei n=8 ist seq= 8/2=4. i muss nacheinander die Werte 0, 1, 2, 3 & 0, 1 + 4, 5 & schließlich 0 + 2 + 4 + 6 annehmen
;                                                     |__________| |___________|             |_____________|
;das entspricht den Sequenzen:                              1            2                          3
;Bei seq=4 entspricht das den Faktoren                    1*4=4       2*2=4                     4*1=4
  n=Pow(2,m)  
  Dim w.f(n,1)
 
  For i=0 To n-1                 ;Eingangswerte in das Array z(x,y) transferieren
    z(i,0)=xIn(i)                ;x(i)=xIn(i)
    z(i,1)=yIn(i)                ;y(i)=yIn(i)
  Next
  
  For j=0 To n-1                ;Drehfaktor
    w(j,0)= Cos(j*2*#PI/n)
    w(j,1)=-Sin(j*2*#PI/n)
  Next
  
  lauf=n
  seq=lauf/2
  wx=0
  wi=1
  For d=0 To m-1        ;Anzahl der Sequenzen, Auflösung, übergebene Variable m
    For i=0 To lauf-1
      j=i+seq
      tr.f=z(i,0)+z(j,0)                   ;Summe real
      ti.f=z(i,1)+z(j,1)                   ;Summe imag
      sr.f=(z(i,0)-z(j,0))                 ;Differenz real
      si.f=(z(i,1)-z(j,1))                 ;Differenz imag
      z(i,0)=tr
      z(i,1)=ti
      If wx<>0
        z(j,0)=(sr * w(wx,0)-si * w(wx,1)) ;Differenz * Drehfaktor real
        z(j,1)=(sr * w(wx,1)+si * w(wx,0)) ;Differenz * Drehfaktor imag
      Else
        z(j,0)=sr
        z(j,1)=si
      EndIf
      wx=(wx+wi)%(n/2)  
      If ((i+1)/seq)%2=1
        i=i+seq
      EndIf
      
    Next
    seq=seq/2
     wx=0
     wi=wi*2
  Next
  nv2=n/2
  nm1=n-1
  j=1
  For i=1 To nm1              ;Ausgängsbreite sortieren 0,4,2,6,1,5,3,7 wird zu 0,1,2,3,4,5,6,7
    If i<j
      tr=z(j-1,0)
      ti=z(j-1,1)
      z(j-1,0)=z(i-1,0)
      z(j-1,1)=z(i-1,1)
      z(i-1,0)=tr
      z(i-1,1)=ti
    EndIf
    k=nv2
    While k<j
      j=j-k
      k=k/2
    Wend
    j=j+k
  Next 
  Zeit=ElapsedMilliseconds()-Beginn
  For i=0 To n-1
  Next
  PrintN("")
  PrintN("Durchlaufzeit folgender FFT-Schleife: "+Str(Zeit)+" Millisekunden")
EndProcedure
Procedure Lauf()
  
  Print("Exponent e der Stützstellenzahl n=2^e, e= ")
  e$=Input(): e=Val(e$)
  Beispiel1(e)
  Schleife(e)
EndProcedure
Eingabe:
Lauf()
n=Pow(2,e)
PrintN("Ausgangssignal FFT")
For i=0 To n-1
  a$=StrD(z(i,0)/n,5)
  b$=StrD(z(i,1)/n,5)
  PrintN(Str(i)+" : "+a$ +" +i* "+b$)
Next
For i=0 To n-1
  xIn(i)=z(i,1)
  yIn(i)=z(i,0)
Next
Schleife(e)
PrintN("Ausgangssignal iFFT (Real- und Imag-Ein- und Ausgang vertauscht)")
For i=0 To n-1
  a$=StrD(z(i,1)/n,5)
  b$=StrD(z(i,0)/n,5)
  PrintN(Str(i)+" : "+a$ +" +i* "+b$)
Next
Print("Ein weiterer Durchlauf? [j]+[Enter]: ")
a$=Input()
If a$="j"
  ClearConsole()
Else
  End
EndIf
Goto Eingabe:
Sicher gibt es im Code noch Verbesserungsmöglichkeiten, aber zu ersten Ausprobieren reicht dies kleine Konsolenprogramm! Vielleicht kann jemand das ja gebrauchen.
P.S.: Wie kann ich eigentlich kennzeichnen, dass das Problem gelöst ist?