! ************************************
! Frequentierespons SinusSinuszaal.txt
! ************************************

Declareer N; k; c; f; f0; Nfft; GrafiekHoogte

Wis buffers
  Wis buffer (F1...F32, S1, S2, S3)  S1|S2|S3
Wis buffers
  Wis buffer (F1...F32, S1, S2, S3)  F1|F2|F3|F4
Wis buffers
  Wis buffer (F1...F32, S1, S2, S3)  F5|F6|F7|F8|F9

Naam Buffer F1 = Sinuszaal
Naam Buffer F3 = AmpSinus
Naam Buffer F5 = Re
Naam Buffer F6 = Im
Naam Buffer F7 = Fase

!-----------------------------------------------------
! Instel parameters:
N    = 500     ! duur sinustoon in smp; Bijv. als N = 200,
Nfft = 2^16    ! aantal samples FFT venster

!-----------------------------------------------------
f0 = Fs/N      ! duur sinustoon als frequentie in Hz
!                dan is duur N/Fs = 200/44100 = 4,5 msec
Print f0

GrafiekHoogte = 450
FOR k = 1 TO 12
  !-----------------------------------------------------
  ! Maak sinustoon(tje) als pulsrespons van 'Sinuszaal':
  ! k = 4
  f = k*f0      ! frequentie van boventoon k
  c = 2*pi*f*Ts
  Print f
  Bewerk signaal
    n0          0
    n1          N-1
    Bewerking   Sinuszaal[n] = sin(c*n)
  
  
  ! Sinustoontje afbeelden in blauw, grafiek links:
  Grafiekpapier
    Linkerbovenhoek x; y (pix)   10; 10     ! + (k-1)*(GrafiekHoogte + 10)
    Breedte; Hoogte (pix)        600; GrafiekHoogte
    Domein x1; x2                -1; 2*N
    Bereik y1; y2                -2; 2
    Rooster x; y                 N/4; 1/2
  
  Pen
    Kleur   blauw
    Dikte   3
    Modus   continu
  
  Grafiek van functie met 1 variabele
    f[x]     Sinuszaal[x]
    Domein   0; N
    Modus    continu
    Stap     auto
  
  
  !-----------------------------------------------------
  ! Ampspectrum
  FFT
    In Re                Sinuszaal[0]
    In Im                nvt
    Out Re               Re[0]
    Out Im               Im[0]
    Amp                  AmpSinus[0]
    Fase                 Fase[0]
    Venster (in smp)     Nfft
    Hann? ('j' of 'n')   n
  
  Print (Fs/N)
  ! Fs/N is de afstand in Hz tussen twee nulpunten in het spectrum.
  ! Alle harmonischen van een toon met frequentie (Fs/N) Hz zullen
  ! worden tegengehouden BEHALVE die met boventoonnummer k.
  
  Grafiekpapier
    Linkerbovenhoek x; y (pix)   620; 10 ! + (k-1)*(GrafiekHoogte + 10)
    Breedte; Hoogte (pix)        600;450
    Domein x1; x2                0; 12*Fs/N    ! in Hz
    Bereik y1; y2                0; 2
    Rooster x; y                 Fs/N; 1/8
  Pen
    Kleur   rood
    Dikte   5
    Modus   continu
  
  ! De buffer AmpSinus bevat Nfft amplitudewaarden die moeten
  ! worden afgebeeld op het frequentiebereik 0 tot Fs Hz, dus:
  ! f(x=0)  = AmpSinus[0] en
  ! f(x=Fs) = AmpSinus[Nfft]
  ! Als c = Nfft/Fs, dan is
  ! f(c*Fs) = AmpSinus[c*Fs]
  !         = AmpSinus[(Nfft/Fs)*Fs] = AmpSinus[Nfft]
  
  c = Nfft/Fs
  Grafiek van functie met 1 variabele
    f[x]     2*AmpSinus[c*x] * (Nfft/N)
    Domein   0; 1200
    Modus    continu
    Stap     auto
  
NEXT k

