*** JMFFT 8.1 - émulation des FFTs de la SciLib de CRAY - (c) CNRS/IDRIS ***
NOM
SINFFTMLT - Applique une Transformée de Fourier rapide (FFT)
en sinus à un ensemble donné de vecteurs.
SYNTAXE
CALL SINFFTFAX(n, ifax, trigs)
CALL SINFFTMLT(x, work, trigs, ifax, inc, jump, n, m)
IMPLEMENTATION
Ces sous-programmes ne font pas partie de la SCILIB. Mais comme ils
sont fondés sur celle-ci, ils ont été intégrés à JMFFT.
Tous les arguments réels ou complexes doivent être déclarés en
double précision.
DESCRIPTION
SINFFTMLT applique une FFT en sinus à un ensemble
donné de vecteurs. Pour chacun des m vecteurs réels x(j,i),
j = 1 ... m et i = 1 ... n-1,
SINFFTMLT calcule le vecteur réel y(j,i) tel que :
n-1
y(j,i) = Sum x(j,k) sin(k*i*pi/n)
k=1
pour j = 1 ... m et i = 1 ... n-1.
ARGUMENTS
x Tableau du type REAL(KIND=8) de dimension (n, m). (entrée/sortie)
En entrée, il contient les éléments à transformer.
En sortie, il contient les éléments transformés.
La première dimension doit être au moins égale à n.
En fait, grâce à l'emploi des arguments inc et jump, le tableau
x peut être dimensionné de façon différente (voir ci-dessous).
work Tableau du type REAL(KIND==8) de dimension 2*m*n + m*(n+2).
Espace de travail.
trigs Tableau du type REAL(KIND==8) de dimension 3*n. (entrée)
Il contient la table des sinus et cosinus.
L'appel suivant initialise les deux tableaux
trigs et ifax à la fois :
CALL SINFFTFAX(n, ifax, trigs)
Note : Les tableaux ifax et trigs ainsi obtenus peuvent
être également utilisés, sans besoin de les réinitialiser,
dans les sous-programmes CFFTMLT et RFFTMLT
(bien entendu avec la même valeur de n).
En revanche ils ne peuvent pas être utilisés dans COSFFTMLT.
ifax Tableau du type INTEGER de dimension 19. (entrée)
Il contient la liste des facteurs premiers de n.
Il est généré lors de l'appel à SINFFTFAX (voir ci-dessus)
inc Scalaire du type INTEGER. (entrée)
Le pas de déplacement en nombre d'éléments réels dans chaque
vecteur à transformer.
jump Scalaire du type INTEGER. (entrée)
Le déplacement entre les premiers éléments de deux vecteurs
consécutifs.
n Scalaire du type INTEGER. (entrée)
Longueur de chaque vecteur à transformer. n >= 2.
n doit être un nombre pair.
m Scalaire du type INTEGER. (entrée)
Le nombre de vecteurs à transformer.
EXEMPLES
Le programme suivant montre les séquences d'appels à SINFFTFAX et SINFFTMLT
pour calculer la FFT en sinus du tableau A :
INTEGER, PARAMETER :: n = 16, m = 2
INTEGER :: inc = m, jump = 1
REAL(KIND=8), DIMENSION(m, n) :: a
REAL(KIND=8), DIMENSION(3*n) :: trigs
REAL(KIND=8), DIMENSION(2*m*n+m*(n+2) :: work
INTEGER, DIMENSION(19) :: ifax
. . .
CALL SINFFTFAX(n, ifax, trigs)
CALL SINFFTMLT(a, work, trigs, ifax, inc, jump, n, m)
. . .
NOTES
La transformée en sinus est sa propre inverse, au facteur multiplicatif
n/2 près.
© CNRS - IDRIS