Habib Bouaziz-Viallet
Guest
Thu Aug 09, 2007 8:46 am
Bonjour à tous !
Est que quelqu'un ici a déja réalisé en C l'algo de Goertzel pour le
couple Puissance/Fréquence d'un signal.
En pratique il y a quelque part :
1/ fs/fech = k/N
et
2/ 2 * cos(2*pi* k/N)
(avec N=256 et fech=8000). On tombe à l'évidence sur des k réels et des
coeffs qui le sont aussi.
A tout hasard, est-ce que quelqu'un a déja réalisé des calculs
de ce genre en C en évitant la bibliothèque <math.h> ?
Je sais voit bien que dans ce cas on ne peut pas travailler avec des
entiers mais si il y avait une astuce pour faire des calculs sur des
pseudo-réels sans toute l'artillerie usuelle, je serais intéressé, merci.
Habib.
PulkoMandy
Guest
Fri Aug 10, 2007 4:56 pm
Quote:
Je sais voit bien que dans ce cas on ne peut pas travailler avec des
entiers mais si il y avait une astuce pour faire des calculs sur des
pseudo-réels sans toute l'artillerie usuelle, je serais intéressé, merci.
Travailler en virgule fixe ?
PulkoMandy
Guest
Fri Aug 10, 2007 8:41 pm
Quote:
Comment as tu fait ?
Mon application marche bien sur PC (avec la bibliothèque <math.>) mais je
voudrais la porter vers une plateforme qui dispose pas assez de puissance
et en tout cas sûrement pas de FPU intégrée.
On trouve des librairies sur le net...
Rien de standard à ma connaissance en C. Mais je code plutôt en assembleur
z80, donc je ne t'en dirai pas beaucoup plus...
Pour les fonctions log, la trigo et ce genre de trucs, il peut être
judicieux de précalculer des tables de valeur... à toi de voir si tu as
plus de mémoire à perdre que de temps machine.
Il doit exister des librairies optimisées pour certaines architectures
(avec des morceaux d'assembleur dedans, peut-être). Un bon point de départ
pour une recherche sur le web semble être '"fixed point" math C library'
ou quelque chose de ce genre... il y a des choses assez variées, tu peux
travailler sur 16 ou sur 32 bits, et ainsi de suite... à toi de faire le
tri selon tes besoins. Tu peux aussi fouiller du côté de
http://code.google.com ...
Habib Bouaziz-Viallet
Guest
Sat Aug 11, 2007 7:42 am
Le Fri, 10 Aug 2007 22:41:53 +0200, PulkoMandy a écrit:
Quote:
Comment as tu fait ?
Mon application marche bien sur PC (avec la bibliothèque <math.>) mais je
voudrais la porter vers une plateforme qui dispose pas assez de puissance
et en tout cas sûrement pas de FPU intégrée.
On trouve des librairies sur le net...
Rien de standard à ma connaissance en C. Mais je code plutôt en assembleur
z80, donc je ne t'en dirai pas beaucoup plus...
Pour les fonctions log, la trigo et ce genre de trucs, il peut être
judicieux de précalculer des tables de valeur... à toi de voir si tu as
plus de mémoire à perdre que de temps machine.
Il doit exister des librairies optimisées pour certaines architectures
(avec des morceaux d'assembleur dedans, peut-être). Un bon point de départ
pour une recherche sur le web semble être '"fixed point" math C library'
ou quelque chose de ce genre... il y a des choses assez variées, tu peux
travailler sur 16 ou sur 32 bits, et ainsi de suite... à toi de faire le
tri selon tes besoins. Tu peux aussi fouiller du côté de
http://code.google.com ...
Bonjour,
Ok merci pour la réponse. Un copain vient de me donner ce lien :
http://home.clara.net/tixy/source/documentation/classFix-members.html
Porter les membres de cette classe C++ vers C me semble assez facile. En
fait tout est dans le source fix.cpp
Je vais dans un premier temps voir ce qu'on gagne à utiliser fix.cpp au
lieu de <math.h>.
Habib
Habib Bouaziz-Viallet
Guest
Sat Aug 11, 2007 5:43 pm
Le Sat, 11 Aug 2007 07:42:01 +0000, Habib Bouaziz-Viallet a écrit:
Quote:
Le Fri, 10 Aug 2007 22:41:53 +0200, PulkoMandy a écrit:
Comment as tu fait ?
Mon application marche bien sur PC (avec la bibliothèque <math.>) mais je
voudrais la porter vers une plateforme qui dispose pas assez de puissance
et en tout cas sûrement pas de FPU intégrée.
On trouve des librairies sur le net...
Rien de standard à ma connaissance en C. Mais je code plutôt en assembleur
z80, donc je ne t'en dirai pas beaucoup plus...
Pour les fonctions log, la trigo et ce genre de trucs, il peut être
judicieux de précalculer des tables de valeur... à toi de voir si tu as
plus de mémoire à perdre que de temps machine.
Il doit exister des librairies optimisées pour certaines architectures
(avec des morceaux d'assembleur dedans, peut-être). Un bon point de départ
pour une recherche sur le web semble être '"fixed point" math C library'
ou quelque chose de ce genre... il y a des choses assez variées, tu peux
travailler sur 16 ou sur 32 bits, et ainsi de suite... à toi de faire le
tri selon tes besoins. Tu peux aussi fouiller du côté de
http://code.google.com ...
Bonjour,
Ok merci pour la réponse. Un copain vient de me donner ce lien :
http://home.clara.net/tixy/source/documentation/classFix-members.html
Porter les membres de cette classe C++ vers C me semble assez facile. En
fait tout est dans le source fix.cpp
Je vais dans un premier temps voir ce qu'on gagne à utiliser fix.cpp au
lieu de <math.h>.
Ca marche !
fix.cpp marche *vraiment bien*. Même si pour l'architecture PC/Intel on ne
gagne pas grand chose, je suis persuadé que pour des architectures "soft
float" plus légères (i.e. ARM, Etrax) on doit gagner vraiment beaucoup par
rapport aux calcul par flottants.
Quote:
Habib
Habib.
jj
Guest
Sat Aug 11, 2007 6:54 pm
Habib Bouaziz-Viallet a écrit :
Quote:
Le Sat, 11 Aug 2007 07:42:01 +0000, Habib Bouaziz-Viallet a écrit:
Le Fri, 10 Aug 2007 22:41:53 +0200, PulkoMandy a écrit:
Comment as tu fait ?
Mon application marche bien sur PC (avec la bibliothèque <math.>) mais je
voudrais la porter vers une plateforme qui dispose pas assez de puissance
et en tout cas sûrement pas de FPU intégrée.
On trouve des librairies sur le net...
Rien de standard à ma connaissance en C. Mais je code plutôt en assembleur
z80, donc je ne t'en dirai pas beaucoup plus...
Pour les fonctions log, la trigo et ce genre de trucs, il peut être
judicieux de précalculer des tables de valeur... à toi de voir si tu as
plus de mémoire à perdre que de temps machine.
Il doit exister des librairies optimisées pour certaines architectures
(avec des morceaux d'assembleur dedans, peut-être). Un bon point de départ
pour une recherche sur le web semble être '"fixed point" math C library'
ou quelque chose de ce genre... il y a des choses assez variées, tu peux
travailler sur 16 ou sur 32 bits, et ainsi de suite... à toi de faire le
tri selon tes besoins. Tu peux aussi fouiller du côté de
http://code.google.com ...
Bonjour,
Ok merci pour la réponse. Un copain vient de me donner ce lien :
http://home.clara.net/tixy/source/documentation/classFix-members.html
Porter les membres de cette classe C++ vers C me semble assez facile. En
fait tout est dans le source fix.cpp
Je vais dans un premier temps voir ce qu'on gagne à utiliser fix.cpp au
lieu de <math.h>.
Ca marche !
fix.cpp marche *vraiment bien*. Même si pour l'architecture PC/Intel on ne
gagne pas grand chose, je suis persuadé que pour des architectures "soft
float" plus légères (i.e. ARM, Etrax) on doit gagner vraiment beaucoup par
rapport aux calcul par flottants.
Habib
Habib.
très intéressant!
ah si j'avais eu ça quand je programmais des 6502 en assembleur...
Ces routines utilisant des tables doivent sans aucun doute être bien
plus rapides que des calculs en développements limités.
une remarque toutefois : comme il s'agit de nombres bornés comme des
entiers, il faut bien prendre les mêmes précautions qu'avec des
entiers.. attention aux dépassements de gamme.
jj