Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TRANSFORMEE DE FOURIER SIMPLE.


Information sur la source

Catégorie :Maths & Algorithmes Source .NET ( DotNet ) Classé sous : transformation, fourier, tfd Niveau : Initié Date de création : 24/07/2004 Date de mise à jour : 24/07/2004 22:12:56 Vu : 14 963

Note :
Aucune note

Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

Description

Voilà un source qu'aimeront les débutants, simple à comprendre, commenté comme il faut. Il propose le calcul d'une Transformée de Fourier Discrète (TFD, qui n'est pas une FFT, attention !).
Seul soucis avec ce source, il est vraiment très lent... Pour l'exemple, il demande 2 minutes de traitement pour une trame d'une seconde de son... hem !
Enfin, j'espère en tout cas qu'il apportera des réponses à ceux qui galèrent comme j'ai pu le faire, les résultats qu'il envoie sont 100% exactes, testé en parallèle avec Mathlab.
 

Source

  • public double[] Calcul_TFD(double[] donnees)
  • {
  • // calcul de Omega qui ne bouge pas selon les termes
  • omega_tfd= (2*Math.PI)/donnees.Length;
  • an = new double[donnees.Length]; // tableau de la partie Réelle
  • bn = new double[donnees.Length]; // tableau de la partie Imaginaire
  • en = new double[donnees.Length]; // tableau résultat de la TFD
  • // Calcul du Fondamental (premier terme, seulement en a0, une bête somme
  • for(int t = 0 ; t < donnees.Length; t++) {
  • an[0] += donnees[t];
  • }
  • en[0] = an[0]/1024; // Résultat du Fondamental
  • bn[0] = 0; // premier terme de la suite B(n)
  • // Calcul de la TFD... plutôt court comme algo ! ici, n est le niveau de la TFD
  • for(int n = 1 ; n < donnees.Length ; n++)
  • {
  • an[n] = bn[n] = 0; // initialisation des termes à 0
  • // on fait les sommes qui suivent sur les 1024 termes du tableau
  • for(int t = 0 ; t < donnees.Length ; t++)
  • {
  • an[n] += donnees[t]*Math.Cos(n*omega_tfd*t); // Partie Réelle
  • bn[n] += donnees[t]*Math.Sin(n*omega_tfd*t); // Partie Imaginaire
  • }
  • // et finalement, le calcul de l'amplitude en = an² + bn²
  • en[n] = Math.Pow(an[n], 2) + Math.Pow(bn[n], 2); }
  • return en; // on renvoie le tableau, et c'est dans la poche !
  • }
public double[] Calcul_TFD(double[] donnees)
{
	// calcul de Omega qui ne bouge pas selon les termes
	omega_tfd= (2*Math.PI)/donnees.Length;	
	an	= new double[donnees.Length];	// tableau de la partie Réelle
	bn	= new double[donnees.Length];	// tableau de la partie Imaginaire
	en	= new double[donnees.Length];	// tableau résultat de la TFD

	// Calcul du Fondamental (premier terme, seulement en a0, une bête somme
	for(int t = 0 ; t < donnees.Length; t++) {			
		an[0] += donnees[t];
	}

	en[0] = an[0]/1024;			// Résultat du Fondamental
	bn[0] = 0;				// premier terme de la suite B(n)

	// Calcul de la TFD... plutôt court comme algo ! ici, n est le niveau de la TFD
	for(int n = 1 ; n < donnees.Length ; n++)			
	{
		an[n] = bn[n] = 0;		// initialisation des termes à 0

		// on fait les sommes qui suivent sur les 1024 termes du tableau
		for(int t = 0 ; t < donnees.Length ; t++)
		{
			an[n] += donnees[t]*Math.Cos(n*omega_tfd*t);   // Partie Réelle
			bn[n] += donnees[t]*Math.Sin(n*omega_tfd*t);	    // Partie Imaginaire
		}

		// et finalement, le calcul de l'amplitude en = an² + bn²
		en[n] = Math.Pow(an[n], 2) + Math.Pow(bn[n], 2);				}

	return en;	// on renvoie le tableau, et c'est dans la poche !
}

Conclusion

Pour ceux qui le testeront, ils verront à quel point ce source est lent, le fait est que même optimisé, il reste trop lent pour un traitement continu. Cependant, il permet de bien comprendre la mise en place d'un tel calcul.
Je travaille actuellement sur la mise en place d'un algorithme de FFT (par la méthode du Papillon) en vue d'un logiciel de Reconnaissance Vocale, j'enverrai le source quand il sera prêt, d'ici-là si quelqu'un sait comment faire ca, je suis preneur !

Voili voilou, bonne lecture !
 

Historique

24 juillet 2004 22:12:56 :
Je viens de terminer l'algorithme de la FFT, avis aux amateurs !

Commentaires et avis

signaler à un administrateur
Commentaire de Jhep le 04/11/2005 22:17:46

Salut. D'où sort le 1024 ?
en[0] = an[0]/1024;
ne serait-ce pas donnees.Length plutôt ?

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

C# - Caractères spéciaux - transformation. [ par lordmeul ] Bonjour, Je voudrais travailler sur des chars dans differents formats.par exemple pour un symbole vertical tabjai dans un string : &lt;VT&gt;et je veu Comment éviter la perte des espaces lors d'une transformation xslt ? [ par virgul ] Bonjour,Voila j'ai un webservice qui me fait une transformation xslt mais le seul problème c'est qu'il me tronque les espaces que j'ai entre mes balis classe transformation xquery [ par mathmax ] Bonjour,Je recherche une classe qui permette de faire une transformation xquery, c'est à dire appliquer une requête xquery à  un document xml passé en Transformation xml par xslt sur CF [ par nonold ] Bonjour,je cherche depuis pas mal de jours deja une solution pour pouvoir faire une transformation d'un xml via xslt pour en faire une page web. Sur l Pb Transformation xsd -> Dataset [ par cedkat ] Bonjour,J'ai un document xsd et je veux le transformer en dataset, et pour cela j'utilise xsd.exe. Mais il m'indique qu'il ne peut pas traduit l'eleme Image dans une transformation XML->RTF ou XML->PDF [ par DeadEye0112 ] Bonjour,J'ai un problème avec les images et la transformation XSLT.Lors de la création d'un fichier (RTF ou PDF) à l'aide d'un XSLT, je réussis à mett transformation d'un polygone en une zone reactive [ par cann ] bonjour,debutant en c#, donc je reprend à partir de certaines bases (prog ne servant a rien mais m'apprenant le c#)je cherche à transformer le polygon les regles de transformation de xml en sql3 [ par amouna23 ] bon soir à tous, je veux travailler sur le mapping d'un schéma xml en un sql3mais je veux connaitre les étapes à suivre pour faire ça, et sur tous les


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,593 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.