( FFT_Test)

( Test data N.B. waveform array is complex - imaginary part is zero)  

-1 DPL !

( n ...)
: addwf_const FLOAT npts @ 0 DO DUP I rd_waveform I add_waveform LOOP DROP ;

: addwf_sin(wx)     ( w...)
  FLOAT npts @ 0 DO DUP I npts @ xk F* FSIN 0 ( Sin{w*f{xk}} )
                  I add_waveform 
                 LOOP DROP ;

: addwf_cos(wx)     ( w...)
  FLOAT npts @ 0 DO DUP I npts @  xk F* FCOS 0 ( Cos{w*f{xk}},0 )
                   I add_waveform 
                 LOOP DROP ;

: mult_waveform ( factor fp, ....)
   FLOAT npts @ 0 DO DUP I rd_waveform   ( f,f,a,b...)
                   ROT  z*f              ( f,fa,fb...)
                   I wr_waveform         ( f...)
                  LOOP DROP ;

: calc&display 
        see_waveform plot_real
        FFT view_fft plot_complex
        IFFT view_FFT->f(x) plot->f(x) ;

( Test1 - all Cosines  - Real)
: just_cosine   ( f1,f2 ...)
        fullscreen_std zero_waveform
        1 addwf_cos(wx)
        10 mult_waveform
        calc&display ;

: 2*cosine
        fullscreen_std zero_waveform
        2 addwf_cos(wx)
        10 mult_waveform
        calc&display ;

: 4*cosine
        fullscreen_std zero_waveform
        4 addwf_cos(wx)
        10 mult_waveform
        calc&display ;

: square_pulse  ( square waveform - 1 pulse)
    fullscreen_std zero_waveform
    20 0 DO 10 FINT 0 FINT I add_waveform LOOP
    calc&display ;

: spike  ( n...)
    fullscreen_std zero_waveform
    10 FINT 0 FINT ROT add_waveform
    calc&display ;

: just_sine ( all Sines)
     fullscreen_std zero_waveform
     1 addwf_sin(wx)
     10 mult_waveform
     calc&display ;

: sin+cos+level
     fullscreen_std zero_waveform
     1 addwf_sin(wx)
     1 addwf_cos(wx)
     1 addwf_const 5 mult_waveform
     calc&display ;

