Developpez.com Index du Forum
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

Avant toute chose, lisez les règles du forum Consultez ou téléchargez les Cours et Tutoriels Téléchargez les Outils de développement
Rechercher sur developpez.com
 FAQFAQ   Rechercher sur le forumRechercher sur le forum   Groupes d'utilisateursGroupes d'utilisateurs 
 ProfilProfil   Vous n'avez pas de nouveaux messagesVous n'avez pas de nouveaux messages   Déconnexion [ Sub0 ]Déconnexion [ Sub0 ] 
[média] traitement de son
Aller à la page Précédente  1, 2, 3, 4, 5, 6
 
Poster un nouveau sujet   Répondre au sujet   Version imprimable    Developpez.com Index du Forum -> Delphi
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
phuphus
Invité de passage
Invité de passage


Inscrit le: 20 Mar 2003
Messages: 4

MessagePosté le: Jeu Avr 17, 2003 21:25    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
paradise
Membre confirmé
Membre confirmé


Inscrit le: 12 Juin 2002
Messages: 204
Localisation: Montpellier

MessagePosté le: Ven Avr 18, 2003 15:08    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet   Version imprimable    Developpez.com Index du Forum -> Delphi Toutes les heures sont au format GMT + 2 Heures
Aller à la page Précédente  1, 2, 3, 4, 5, 6
Page 6 sur 6
Arrêter de surveiller ce sujet
 
Sauter vers:  
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
Nous contacter


Powered by phpBB 2 © 2001, 2002 phpBB Group
Traduction par : phpBB-fr.com