begin process at 2010 03 20 04:35:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

dlls

 > DLL EFFECTUANT UNE TRANSFORMÉE DE FOURIER RAPIDE

DLL EFFECTUANT UNE TRANSFORMÉE DE FOURIER RAPIDE


 Information sur la source

Note :
8 / 10 - par 2 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :dlls Classé sous :transformee, fourier, dll, calcul, maths Niveau :Débutant Date de création :13/09/2005 Date de mise à jour :24/10/2007 15:24:54 Vu / téléchargé :4 550 / 325

Auteur : Nasman

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Le programme sous nasm effectue une analyse fréquencielle par transformée de Fourier rapide. Les données d'origine sont placées dans une matrice A(2,n) avec n=2^p. A(1,1) contient la partie réelle du premier point, A(2,1) est la partie imaginaire de ce premier point. A(1,2) est la partie réelle du deuxième point et A(2,2) est la partie imaginaire.Etc...
L'appel à la fonction tfr (traitement de Long)s'effectue en donnant 3 paramètres:
- le nombre de valeurs - passage par valeur (n<=65536)
- le premier élément du tableau A(1,1)- passage par référence
- le sens de la transformation (sens direct valeur positive, sens inverse valeur négative) - passage par valeur
Pour la fonction tfrf (flottants simple précision)le nombre de valeurs doit être inférieur à 2^30


 Conclusion

J'ai créé cette dll pour analyser les fichiers wav. Les données sonores sont sauvegardées sous forme de word "voix gauche","voix droite" par point de mesure.
La dll demande 2 dwords par point (partie réelle, partie imaginaire )- La variable contenant les valeurs est modifiée et contient la transformée (partie réelle et imaginaire) au retour.

Dim A(1 To 2, 1 To 65536) As Long     rem A(i,j)doit être compris entre -32768 et 32767

Call tfr(65536, A(1, 1), 0)     rem appel de la fonction pour une transformée direct
Call tfr(65536, A(1, 1), -1)    rem appel de la fonction pour une transformée inverse

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • tfr.asmTélécharger ce fichier [Réservé aux membres club]Voir ce fichier12 258 octets
  • tfr.dllTélécharger ce fichier [Réservé aux membres club]3 222 octets
  • tfr.objTélécharger ce fichier [Réservé aux membres club]1 645 octets

Télécharger le zip


 Historique

08 octobre 2007 13:58:50 :
Quelques optimisations du code dont l'utilisation de l'instruction bsr pour rechercher le "most signifiant" bit. Détermination de la puissance de 2 immédiatement inférieure (ou égale) au nombre de points
08 octobre 2007 14:02:33 :
Quelques optimisations du code dont l'utilisation de l'instruction bsr pour rechercher le "most signifiant" bit. Détermination de la puissance de 2 immédiatement inférieure (ou égale) au nombre de points. La dll peut être appelée à partir de programmes type visual basic ou de bas niveau (assembleur)
24 octobre 2007 15:24:54 :
Utilisation des registres 64 bits mm ou 128 bits xmm pour accélérer le traitement des données. La dll effectue le traitement de données sous forme de long (fonction tfr - limitée à 65536 valeurs) ou de flottants en simple précision (fonction tfrf - limitée à 2^30 valeurs mais j'ai pas testé au delà de 2^22). Le traitement consomme moins de ressources mémoire car il n'est plus nécessaire de réserver de la place pour les données temporaires(Nouveau traitement de la fonction de permutation).

 Sources du même auteur

Source avec Zip REPRÉSENTATION D'UNE SPHÈRE EN 3D (FLAT SHADING)
Source avec Zip CRÉATION DE DIFFÉRENTS EXÉCUTABLES AVEC NASM ET ALINK
Source avec Zip Source avec une capture PROGRAMME DE VISUALISATION ET D'ANALYSE SPECTRALE DE FICHIER...
Source avec Zip CRÉATION DE GRAPHIQUES AVEC LES API WINDOWS
Source avec Zip EXEMPLES SIMPLES DE FICHIERS ÉCRITS AVEC NASM

 Sources de la même categorie

Source avec Zip Source avec une capture DLL ALGORYTHME DE RECHERCHE DE CHEMIN EN A STAR, A*, FASM par Devnix
Source avec Zip DLL MASM32 ET DARKBASIC PRO par Apinew
Source avec Zip DLL AVEC NASM ET ALINK par ibroman
Source avec Zip OBTENIR LE CPUID DE SON PROCESSEUR (DLL) par sibi12
Source avec Zip DLL-FONCTIONS 3D par quoi

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture DLL ALGORYTHME DE RECHERCHE DE CHEMIN EN A STAR, A*, FASM par Devnix
Source avec Zip CRÉATION DE DIFFÉRENTS EXÉCUTABLES AVEC NASM ET ALINK par Nasman
Source avec Zip Source avec une capture PROGRAMME DE VISUALISATION ET D'ANALYSE SPECTRALE DE FICHIER... par Nasman
Source avec Zip CALCULATRICE BÉTON ARMÉ par Rudi Halbeher
Source avec Zip DLL MASM32 ET DARKBASIC PRO par Apinew

Commentaires et avis

Commentaire de Nasman le 19/09/2005 10:27:37

J'ai oublié de préciser que le nombre de valeurs doit être une puissance de deux. A priori la dll devait fonctionner à partir de n=2 mais celà n'aurait pas beaucoup de sens. L'algorythme utilisé est décrit dans le document suivant

http://membres.lycos.fr/huckphilippe/fft.zip

La permutation des indices à la fin des calculs doit s'effectuer en utilisant une variable intermédiaire pour éviter une double permutation. Par exemple pour 16 valeurs:
0  0000 permute avec 0  0000
1  0001              8  1000
2  0010              4  0100
3  0011              12 1100
4  0100              2  0010
5  0101              10 1010
6  0110              6  0110
7  0111              14 1110
8  1000              1  0001
9  1001              9  1001
10 1010              5  0101
11 1011              13 1101
12 1100              3  0011
13 1101              11 1011
14 1110              7  0111
15 1111              15 1111

Permuter sur la moitié des indice ne permet pas de résoudre le problème: la permutation de 2 donnerait 4 qui redonnerait 2

Commentaire de bicoun le 05/10/2007 18:55:55 9/10

Ca tourne tres bien, et surtout tres vite (rien a voir avec certain bout de code en C).

Mais j'ai du mal a interprétrer les résultats de mon essai:
Je rentre un signal composé de 2 sinus (f0 = 200Hz et f1 = 1000Hz)
Après le passage dans la fct de FFT, je trouve bien 2 raies , mais à 4 fois la fréquence (800 et 4000 Hz).
J'ai pris un DeltaF de VitesseDigit / NbPoints = 1e6 / 65536 = 15.3 Hz
pour reconstruire mon echelle en fréquence.

Quelqu'un a une idée pour expliquer et corriger ce facteur 4?
Merci pour vos réponses.

Commentaire de Nasman le 08/10/2007 14:52:32

Bonjour BICOUN,

La formule pour trouver la fréquence en fonction de l'indice est la suivante:

f=indice*Fe/n
où Fe est la fréquence d'échantillonnage de ton signal et n le nombre de points mesurés (puissance de 2)

Si tu effectue un échantilonnage à 44100Hz durant 0,5s, tu auras 0,5*44100 =22050 mesures dont seules 16384 seront utilisées - soit une durée utile de 16384/44100 = 0,371s. Ton pas temporel sera de 1/44100 = 22,68µs.
Si au sortir de ta transformation de Fourier tu a un pic à l'indice i=372 alors la fréquence correspondante sera de
f = 372*44100/16384 = 1001,29Hz
Ton pas fréquenciel est de 44100/16384 = 2,69Hz
Pour améliorer la résolution tu peux:
- augmenter la durée (nombre de points) pour la même fréquence d'échantillonnage
- diminuer la fréquence d'échantillonnage (pour la même durée)
Il faut faire attention au fait que l'analyse n'est valable que jusqu'à Fe/2 (ici 22050 Hz), si tu réduit la fréquence d'échantillonnage à 8000 Hz (par exemple), ta résolution sera de 0,488 Hz mais ton analyse spectrale sera limité à 4000Hz

J'espère que ces explication te permettrons de voir l'origine de ton pb

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Probleme de dll! (arguments...) [ par BlackWizzard ] salut les pro!voila, G une fonction contenu dans une dll mais cette fonction, je ne sait pas comment lui ajouter des arguments...voici un extrait du c [URGENT] Passer des arguments a une DLL [ par BlackWizzard ] Bonjours, je voudrai creer un dll en asm (ce qui est fait) mais je n'arrive pas a passer des arguments a la seul fonction de cette dll.imaginons le co Fonction DLL avec arguments [ par Arnotic ] Bonjour, J'ai une DLL avec une fonction qui prend 2 arguments (en C (char*, int). Lorsque je la charge j'ai aucun problème mais lors de l'appel à calcul du carré en asm (tasm) [ par Eclipz ] Salut !je suis débutant et très nul en asm, quelqu'un aurait une source permettant la saisie d'un nombre et l'élévation de ce dernier au carré et affi Création de DLL [ par HollowSpecter128 ] Salut à tous!Je voudrais savoir si qq1 pourrais montrer comment on fè pour créer 1 DLL entièrement en assembleur sous NASM ou FASM.Quoique pour FASM j DLL sous masm32v8 [ par Stormy ] Serait-il possible de coder une DLL sous masm dans le but d'établir quelques fonctions très régulièrement utilisées. Le but étant de faire appel par l Registres windows [ par S2R ] Bonjour à tous, Est il possible de créer une clé dans la base de registre sans importer de dll?sinon comment fait-on pour importer une dll avec tasm?m DLL avec TASM ??? [ par Maxilie ] Voila, je voudrais créer une DLL avec tasm pour m'en servir sous un prog en VBProblème :-comment compiler une dll avec TASM-la syntaxe du code est-ell Point d'entrée dans une Dll [ par thiosyiasar ] SalutJ'ai une Dll entre les main et j'utilise Dependency pour trouver les points d'entré.J'ai trois méthodes avec leur adresse d'entrée :- ConvertMetr segment partagé en masm32 [ par anthraxx ] bonjour a tous,je connais l'assembleur mais je suis pas tres habitué a masm32, et je me demandais ce qu'il faut mettre pour qu'un segment donné de ma


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,952 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales