![Developpez.com Index du Forum](topic_fichiers/logo_developpez.gif) |
Pour faire une
recherche sur le forum :
évitez les heures de pointes connectez vous sur
le forum avant 10 h, ou entre 12 h et 14
h, ou après 18 h, ou le week end quand
vous voulez | |
![]()
|
|
|
Voir
le sujet précédent :: Voir
le sujet suivant |
Auteur |
Message |
phuphus Invité de passage
![Invité de passage Invité de passage](topic_fichiers/status_bar_rank1_0.gif)
Inscrit le: 20 Mar 2003 Messages:
4
|
Posté le: Jeu Avr 17,
2003 21:25 Sujet du
message: |
|
|
Sur demande de Sub0, je
vais essayer d'expliquer tout ça (et merci pour la bienvenue
!).
.............N B(k) = sum
A(n)*exp(-j*2*pi*(k-1)*(n-1)/N), 1 <= k <= N.
...........n=1
En fait, à l'heure actuelle, tu as
une petite portion de son qui est stockée dans un buffer.
Cette portion de son représente un certain temps de signal, et
donc un certain nombre de points. On peut donc considérer que
tu as un tableau de N points, N étant donc le nombre
d'échantillons dans le buffer.
A ce tableau de N
points, qui est le signal temporel du son, on peut faire
correspondre un autre tableau de N/2 points, qui lui
représente le signal fréquentiel du son, à savoir les
amplitudes des diverses fréquences contenues dans ton son.
B(k), qui est l'élément numéro k de ton tableau de N/2
points, est donc égal à la somme écrite plus haut. Le symbole
'exp' est la fonction exponentielle, ici une exponentielle
complexe.
Pour calculer tous les points de ton tableau
de gréquence, il faut donc calculer tous les B(k), k allant de
1 à N/2 (il faut aller jusqu'à N pour la transformée complète,
mais comme une transformée de Fourier discrète est symétrique,
ce n'est pas la peine). Ensuite, le module du premier point
représente l'amplitude pour une fréquence de 0 Hz, le dernier
point l'amplitude pour une fréquence égale à la fréquence
d'échantillonnage divisée par 2.
En fait, comme dit
plus haut, chaque amplitude n'est pas celle d'une fréquence
fixe mais d'une bande de fréquence (largeur de bande =
fréquence d'échantillonnage / N).
Exemple : tu as un
son échantilloné à 48 kHz. Tu prends des buffers de 1024
points, et donc tu fais des DFT donnant comme résultats des
tableaux de 512 nombres complexes. Le module de chaque nombre
complexe représente l'amplitude de ton signal dans une bande
de fréquence de largeur 48000/1204 = 46,875 Hz.
Le
premier point de ton tableau résultat est donc repréentatif de
la bande 0-46,874 Hz, le deuxième de la bande 46,875-93,75 Hz,
le troisième de la bande 93,75-140,675 Hz, etc., et enfin le
dernier la bande 23953,125-24000 Hz. Ensuite, soit tu diminue
le nombre de points (genre dans ton cas, une transformée de 16
points serait amplement suffisante pour faire une ch'tit
bar-graphe de 16 barres), soit tu additiones les points dans
les bandes de fréquence qui t'intéressent.
L'avantage
par rapport à la série de Fourier, c'est qu'ici tu as direct
en une formule une multitude de fréquences entre 0 et
freq_ech/2 Hz.
Néanmoins, cette formule, qui est la
formule brute de la DFT, n'est pas vraiment avantageuse. Et
surtout, d'un point de vue numérique, elle peut largement être
améliorée : la FFT. Mais pour le coup, je n'ai aucune doc ni
aucune connaissance sur l'algorithme de FFT. La FFT est un
moyen rapide de trouver le résultat d'une DFT, en exploitant
ses propriétés mathématiques. Au pire, il existe sur le net
des algorithmes FFT tout faits pour Delphi (mais la plupart
sont payants). Je vais voir si j'en vois un
gratuit. | |
Revenir
en haut |
|
![](topic_fichiers/spacer.gif) |
paradise Membre confirmé
![Membre confirmé Membre confirmé](topic_fichiers/stars-1-0.gif)
Inscrit le: 12 Juin 2002 Messages:
204 Localisation: Montpellier
|
Posté le: Ven Avr 18,
2003 15:08 Sujet du
message: |
|
|
Salut,
phuphus a
écrit: |
Néanmoins, cette formule, qui est la
formule brute de la DFT, n'est pas vraiment avantageuse.
Et surtout, d'un point de vue numérique, elle peut
largement être améliorée : la FFT. Mais pour le coup, je
n'ai aucune doc ni aucune connaissance sur l'algorithme
de FFT. La FFT est un moyen rapide de trouver le
résultat d'une DFT, en exploitant ses propriétés
mathématiques. Au pire, il existe sur le net des
algorithmes FFT tout faits pour Delphi (mais la plupart
sont payants). Je vais voir si j'en vois un
gratuit. | Voilà un lien vers "FFT algorithm for
Delphi 2", jamais testé donc je sais pas ce que ça vaut :
http://www.gnomehome.demon.nl/uddf/pages/graphics.htm#graphics2
A+ | |
Revenir
en haut |
|
![](topic_fichiers/spacer.gif) |
|
Arrêter
de surveiller ce sujet
|
Vous pouvez poster de nouveaux sujets dans ce
forum Vous pouvez répondre aux sujets dans ce
forum Vous pouvez éditer vos messages dans ce
forum Vous pouvez supprimer vos messages dans ce
forum Vous pouvez voter dans les sondages de ce
forum
|
|