La transformée de fourier rapide à une dimension

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 192 fois - Téléchargée 31 fois

Contenu du snippet

La transformée de Fourier rapide qui réduit l'algorithme de Fourier en 2 log(2) au lieu de 2^N. elle peut etre utiliser en traitement du signal ou autre application mathématique

Source / Exemple :


bool FFT(int dir,int m,double *x,double *y)
{
	long nn,i,i1,j,k,i2,l,l1,l2;
	double c1,c2,tx,ty,t1,t2,u1,u2,z;

	/* Calculate the number of points */
	nn = 1<<m;

	/* Do the bit reversal */
	i2 = nn >> 1;
	j = 0;
	for (i=0;i<nn-1;i++) {
		if (i < j) {
			tx = x[i];
			ty = y[i];
			x[i] = x[j];
			y[i] = y[j];
			x[j] = tx;
			y[j] = ty;
		}
		k = i2;
		while (k <= j) {
			j -= k;
			k >>= 1;
		}
		j += k;
	}

	/* Compute the FFT */
	c1 = -1.0;
	c2 = 0.0;
	l2 = 1;
	for (l=0;l<m;l++) {
		l1 = l2;
		l2 <<= 1;
		u1 = 1.0;
		u2 = 0.0;
		for (j=0;j<l1;j++) {
			for (i=j;i<nn;i+=l2) {
				i1 = i + l1;
				t1 = u1 * x[i1] - u2 * y[i1];
				t2 = u1 * y[i1] + u2 * x[i1];
				x[i1] = x[i] - t1;
				y[i1] = y[i] - t2;
				x[i] += t1;
				y[i] += t2;
			}
			z =  u1 * c1 - u2 * c2;
			u2 = u1 * c2 + u2 * c1;
			u1 = z;
		}
		c2 = sqrt((1.0 - c1) / 2.0);
		if (dir == 1)
			c2 = -c2;
		c1 = sqrt((1.0 + c1) / 2.0);
	}

	/* Scaling for forward transform */
	if (dir == 1) {
		for (i=0;i<nn;i++) {
			x[i] /= (double)nn;
			y[i] /= (double)nn;
		}
	}

   return true;
}

A voir également

Ajouter un commentaire

Commentaires

Messages postés
3
Date d'inscription
mercredi 16 septembre 2009
Statut
Membre
Dernière intervention
17 septembre 2009

C'est pour le traitement d'un signal electrique
Messages postés
4
Date d'inscription
mercredi 21 mai 2003
Statut
Membre
Dernière intervention
17 septembre 2009

faudrait me donner le contexte précis de ton exo, parceque là ca remonte à deux ans,
c'est dans une image? ou un signal electrique?
Messages postés
3
Date d'inscription
mercredi 16 septembre 2009
Statut
Membre
Dernière intervention
17 septembre 2009

D'accord, mais on m'avait conseillé de faire une FFT et de "ne sélectionner que le composant correspondant a 50 Hertz, (en dimensionnant subtilement mes fenêtres d'analyses...".

Mais je ne vois pas comment faire ça avec cet algo, à moins que cela ne soit a faire apres...
Messages postés
4
Date d'inscription
mercredi 21 mai 2003
Statut
Membre
Dernière intervention
17 septembre 2009

late2201 : c'est ecrit un peu plus haut au dessus "* m est egale à log2 ( nn ) (environs deux heures pour le comprendre....) "

loicus : euh il me veut quoi le gamin ?
Messages postés
3
Date d'inscription
mercredi 16 septembre 2009
Statut
Membre
Dernière intervention
17 septembre 2009

Salut,

Voila je m'interesse depuis peu a la transformée de Fourier dans le but de faire un filtre numérique.

Certains l'ont deja demandé mais ils n'ont pas eu de réponse alors je réessaie :p

Serait-il possible d'avoir plus de détails sur l'algo en lui-même ?

A quoi correspond le paramètre m, et comment influence-t-il l'algo ?

Merci d'avance.
Afficher les 31 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.