rfft
Prev | Opcodes et opérateurs de l'orchestre | Next

## rfft

rfft — Transformée de Fourier rapide d'un tableau de valeurs réelles.

## Description

Applique une transformée de Fourier rapide directe à un tableau unidimensionnel de valeurs réelles. La sortie est un autre tableau contenant la transformée, non redondante, seulement le spectre non négatif. Si le tableau d'entrée a pour taille une puissance de deux, la taille du tableau de sortie sera égale à celle du tableau d'entrée, les deux premiers points contenant les coefficients de 0 Hz et de la fréquence de Nyquist. Sinon, la sortie aura deux valeurs supplémentaires (taille d'entrée + 2) et le coefficient de Nyquist sera placé en kin[taille d'entrée]. Les positions kin[1] et kin[taille d'entrée+1] seront nulles.

## Syntaxe

    kout[] rfft kin[]

## Exécution

kout[] -- tableau de sortie contenant la transformée. Créé s'il n'existe pas.

kin[] -- tableau contenant les valeurs réelles d'entrée.

## Exemples

Voici un exemple de l'opcode rfft. Il utilise le fichier rfft.csd.

Example 767. Exemple de l'opcode rfft.

Voir les sections Audio en temps réel et Options de la ligne de commande pour plus d'information sur l'utilisation des options de la ligne de commande.

    <CsoundSynthesizer>
    <CsOptions>
    -d -o dac
    </CsOptions>
    <CsInstruments>
    ;ksmps needs to be an integer div of hopsize
    ksmps = 64

    instr 1

     ihopsize = 256   ; hopsize
     ifftsize = 1024  ; FFT size
     iolaps = ifftsize/ihopsize ; overlaps
     ibw = sr/ifftsize ; bin bandwidth
     kcnt init 0    ; counting vars
     krow init 0

     kOla[] init ifftsize ; overlap-add buffer
     kIn[] init ifftsize  ; input buffer
     kSw[] init ifftsize
     kOut[][] init iolaps, ifftsize ; output buffers

     a1 diskin2 "fox.wav",1,0,1 ; audio input
     ks  expon  100, p3, 1000
     asw vco2  k(a1), ks

     /* every hopsize samples */
     if kcnt == ihopsize then
       /* window and take FFT */
       kWin[] window kIn,krow*ihopsize
       kSpec[] rfft kWin
       kWin window kSw,krow*ihopsize
       kSpec2[] rfft kWin
       kProd[] cmplxprod kSpec, kSpec2

       /* IFFT + window */
       kRow[] rifft kProd
       kWin window kRow, krow*ihopsize
       /* place it on out buffer */
       kOut setrow kWin, krow

       /* zero the ola buffer */
       kOla = 0
       /* overlap-add */
       ki = 0
       until ki == iolaps do
         kRow getrow kOut, ki
         kOla = kOla + kRow
         ki += 1
       od

      /* update counters */
      krow = (krow+1)%iolaps
      kcnt = 0
     endif

     /* shift audio in/out of buffers */
     kIn shiftin a1
     kSw shiftin asw
     a2 shiftout kOla
        out a2/iolaps

     /* increment counter */
     kcnt += ksmps

    endin

    </CsInstruments>
    <CsScore>
    i1 0 10
    </CsScore>
    </CsoundSynthesizer>

## Voir aussi

Opcodes vectoriels, array

## Crédits

Auteur : Victor Lazzarini
NUI Maynooth
2014

Nouveau dans la version 6.04

Prev | Up | Next
rezzy | Home | rifft