1

Oui bon je sais j'ai des cours la dessus, mais alors extrême flemme de les sortir et de les relire zzz

Et donc j'aurait besoin d'une lib (ou d'un bout de code ou d'explication simples (mon cerveau est assez sur Off ses derniers temps hehe)) simple permettant de faire une analyse fréquentielle sur un signal.

Je connais FFTW, mais c'est GPL et trop lourd pour ce que je veux.

Ouala

merci ^^
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

2

[HS trollless] pkoi "mais" c'est GPL ?[/HS]
sinon dslé je connais pas la FFT :/

3

[HS ossi] pke la GPL c trop restrictif, c de la contre liberte ! [/HS]

koi, tu connais pas les transformees de Fourier, oh l'autre, espece de matheux va !

GodZil: demande a ex-Miles, je pense qu'il doit avoir qqch pour toi..

4

[autre HS trollfull] les maths pour la physique c'est pas des vraies maths, ca ne m'interesse pas hehe[/...]

5

en passant, c'est pas tres long a coder une transforme de fourrier

6

F(f)=S(f*e^(-j*w*t),t,-infinity,infinity)

C'est ça que tu veux ?
avatar

7

Presque, mais la version discrète et grandement optimisable appelée "FFT" (transformée de Fourier rapide en français) largement utilisée en traitement du signal numérique.
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

8

Si ça peut te servir, j'ai ça qui traine depuis mon TIPE : http://casta.nerim.net/archives/telephone-src.zip ça commence a dater (t'ain, bientot 4 ans !!), mais ça peut ptet te servir.
Dans fft.c y a une fft récursive pas top efficace, dans fft2.c t'as une fft itérative plus rapide. Y a d'autres bouts de code avec des filtres discrets toussa
La licence je sais meme plus ce que c'est, mais tu peux en faire ce que tu veux smile
Mon site perso : http://www.xwing.info

9

Ximoon :
Presque, mais la version discrète et grandement optimisable appelée "FFT" (transformée de Fourier rapide en français) largement utilisée en traitement du signal numérique.

-able+é non ?

guilc: merci je vais voir
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

10

je dois avoir chez moi un TI MAG (pas sur, une revue sur les maths et les caltos de l'époque où j'étais au lycée) avec un exemple de FFT en tibasic... par contre ça sera pas avant le WE du 6 aout...
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

11

Il me semble que Bhuvanesh Bhatt a fait une FFT. Qu'elle soit rapide, par contre, n'est pas sûr.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

12

Ok merci. Non pasque la j'ai sous la main un de mes codes utilisant la FFT, mais je ne calcule que les harmoniques d'un signal, mais pas la fréquence fondamentales triso bref sorry (en plus j'ai de fort doute sur la véracité de mon code ^^)


Bref (En fait j'ai besoin de récupérer le taux de certaines fréquences (en gros) dans un échantillon)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

13

Godzil
:
Ximoon :
Presque, mais la version discrète et grandement optimisable appelée "FFT" (transformée de Fourier rapide en français) largement utilisée en traitement du signal numérique.

-able+é non ?

la FFT à la base c'est un algo générique, après c'est toi qui adapte selon ta machine happy (mais oui c'est déjà optimisé par rapport à une FT de base grin)
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

14

Ba mon but est pas trop de cibler de l'ultra optimisé hein ^^

A partir du moment ou sa arrive a marcher sur un echantillonage de 100/200ms a la volée ça me suffit ^^
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

15

Lionel Debroux :
Il me semble que Bhuvanesh Bhatt a fait une FFT. Qu'elle soit rapide, par contre, n'est pas sûr.

Il me semble aussi, c'etait dispo sous forme d'application flash, non ?

16

FFT rapide que j'ai un peu retouchée, principalement utilisée dans l'audio.
unsigned char NumberOfBitsNeeded (long PowerOfTwo)
{
  for (unsigned char i=0; i<=16; i++) {
    if (PowerOfTwo==(1UL<<i)) return i;}
  return 0;
}

bool IsPowerOfTwo (long x)
{
  if (x<2) return false;
  if (!(x&(x-1))) return true;
  return false;
}

long ReverseBits (long Index, unsigned char NumBits)
{
  long Rev = 0;
  for (unsigned char i=0; i<NumBits; i++)
  {
    Rev = (Rev*2)|(Index&1);
    Index = Index/2;
  } 
  
  return Rev;
}

//bool FFTAudio (long NumSamples, short *RealIn, float *RealOut, float *ImagOut)
bool FFTAudio (long NumSamples, float *RealIn, float *RealOut, float *ImagOut)
{
  /* In this case, NumSamples isn't included (since it's always the same),
     and the imaginary components are left out since they have no meaning here.
     
     I've use Signles instead of Doubles pretty much everywhere. I think this
     makes it faster, but due to type conversion, it actually might not. I should
     check, but I haven't.
     
     The imaginary components have no meaning in this application. I just left out
     the parts of the calculation that need the imaginary input values (which is a
     big speed improvement right there), but we still need output array because
     it's used in the calculation. It's static so that it doesn't get reallocated. 
  */ 
  
  unsigned char NumBits;
  long i, j, k, n;
  long BlockSize, BlockEnd;
  float DeltaAngle, DeltaAr;
  float Alpha, Beta;
  float TR, TI, AR, AI;
  
  /*if ((!IsPowerOfTwo (NumSamples)) || NumSamples<2) {
    printf ("Error in procedure Fourier: NumSamples is %ld, which is not a positive integer power of two.\n", NumSamples);
    return false;}*/
  
  NumBits = NumberOfBitsNeeded (NumSamples);

  for (i=0; i<NumSamples; i++)
  {
    j = ReverseBits (i, NumBits); //I saved time here by pre-calculating all these values
    RealOut [j] = RealIn [i];
    ImagOut [j] = 0;
  }
  
  BlockEnd = 1; BlockSize = 2;
  
  while (BlockSize<=NumSamples)
  {
    DeltaAngle = AngleNumerator/BlockSize;
    
    Alpha = sin(0.5*DeltaAngle);
    Alpha = 2*Alpha*Alpha;
    Beta = sin(DeltaAngle);
    
    i = 0;
    while (i<NumSamples)
    {
      AR = 1; AI = 0;
      
      j = i;
      for (n=0; n<BlockEnd; n++)
      {
        k = j+BlockEnd;
        TR = AR*RealOut [k]-AI*ImagOut [k];
        TI = AI*RealOut [k]+AR*ImagOut [k];
        
        RealOut [k] = RealOut [j]-TR;
        ImagOut [k] = ImagOut [j]-TI;
        RealOut [j] = RealOut [j]+TR;
        ImagOut [j] = ImagOut [j]+TI;
        DeltaAr = Alpha*AR+Beta*AI;
        AI = AI-(Alpha*AI-Beta*AR);
        AR = AR-DeltaAr;
        j++;
      }
      
      i += BlockSize;
    }
    
    BlockEnd = BlockSize;
    BlockSize = BlockSize*2;
  }
  
  return true;
}


/*void iDCT (long size, float *data_in, float *data_out)
{
  unsigned long i, j;
  
  memset (data_out, 0, sizeof(float)*size);
  for (i=0; i<size; i++)
  {
 	for (j=0; j<size; j++)
	  data_out [i] += data_in [j]*cos(M_PI*(float)j*(((float)i+0.5)/(float)size));
	data_out [i] *= 2.0/(float)size;
  }
}*/

void iDCT (long size, float *data_in, float *data_out)
{
  float *din, *dout, k, s = float(size);
  unsigned long i, j;
  
  dout = (float *)memset (data_out, 0, sizeof(float)*size);
  for (i=0; i<size; i++)
  {
    k = (((float)i+0.5)/s);
    for (j=0,din = data_in ; j<size; j++)
      *dout += *din++ * cos(M_PI*(float)j*k);
    *dout++ *= 2.0/(float)size;
  }
}


La fonction a utiliser est FFTAudio, j'ai la flemme de faire un tri.
Sinon faut pas oublier que le paramètre NumSamples doit être une puissance de 2.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

17

Pour un analyseur de spectre, euh là t'es une feignasse car c'est vraiment fastoche à faire.
J'en avait fait un d'ailleur pour mon programme de reconnaissance vocale.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

18

trifus j'ai EXACTEMENT la meme sources, mais en Visual Basic :

Attribute VB_Name = "AudioFFT"
'----------------------------------------------------------------------
' Audio FFT
'----------------------------------------------------------------------
' This code is basically a stripped-down and ironed-out version of
' my VB FFT Library (available on the Deeth website) done entirely
' with digital audio in mind.
' My VB FFT Library (and thusly -- this as well) is heavily based on
' Don Cross's FFT code.
'----------------------------------------------------------------------
' Murphy McCauley (MurphyMc@Concentric.NET) 08/14/99
'----------------------------------------------------------------------


Option Explicit

'These don't change in this program, so I made them constants so they're
'as fast as can be.
Public Const AngleNumerator = 6.283185   ' 2 * Pi = 2 * 3.14159265358979
Public Const NumSamples = 1024
Public Const NumBits = 10

'Used to store pre-calculated values
Private ReversedBits(0 To NumSamples - 1) As Long

Sub DoReverse()
    'I pre-calculate all these values.  It's a lot faster to just read them from an
    'array than it is to calculate 1024 of them every time FFTAudio() gets called.
    Dim I As Long
    For I = LBound(ReversedBits) To UBound(ReversedBits)
        ReversedBits(I) = ReverseBits(I, NumBits)
    Next
End Sub

Function ReverseBits(ByVal Index As Long, NumBits As Byte) As Long
    Dim I As Byte, Rev As Long
    
    For I = 0 To NumBits - 1
        Rev = (Rev * 2) Or (Index And 1)
        Index = Index \ 2
    Next
    
    ReverseBits = Rev
End Function

Sub FFTAudio(RealIn() As Integer, RealOut() As Single)
    'In this case, NumSamples isn't included (since it's always the same),
    'and the imaginary components are left out since they have no meaning here.
    
    'I've used Singles instead of Doubles pretty much everywhere.  I think this
    'makes it faster, but due to type conversion, it actually might not.  I should
    'check, but I haven't.
    
    'The imaginary components have no meaning in this application.  I just left out
    'the parts of the calculation that need the imaginary input values (which is a
    'big speed improvement right there), but we still need the output array because
    'it's used in the calculation.  It's static so that it doesn't get reallocated.
    Static ImagOut(0 To NumSamples - 1) As Single
    
    'In fact... I declare everything as static!  They all get initialized elsewhere,
    'and Staticing them saves from wasting time reallocating and takes pressure off
    'the heap.
    Static I As Long, j As Long, k As Long, n As Long, BlockSize As Long, BlockEnd As Long
    Static DeltaAngle As Single, DeltaAr As Single
    Static Alpha As Single, Beta As Single
    Static TR As Single, TI As Single, AR As Single, AI As Single
    
    For I = 0 To (NumSamples - 1)
        j = ReversedBits(I) 'I saved time here by pre-calculating all these values
        RealOut(j) = RealIn(I)
        ImagOut(j) = 0 'Since this array is static, gotta make sure it's clear
    Next
    
    BlockEnd = 1
    BlockSize = 2
    
    Do While BlockSize <= NumSamples
        DeltaAngle = AngleNumerator / BlockSize
        Alpha = Sin(0.5 * DeltaAngle)
        Alpha = 2! * Alpha * Alpha
        Beta = Sin(DeltaAngle)
        
        I = 0
        Do While I < NumSamples
            AR = 1!
            AI = 0!
            
            j = I
            For n = 0 To BlockEnd - 1
                k = j + BlockEnd
                TR = AR * RealOut(k) - AI * ImagOut(k)
                TI = AI * RealOut(k) + AR * ImagOut(k)
                RealOut(k) = RealOut(j) - TR
                ImagOut(k) = ImagOut(j) - TI
                RealOut(j) = RealOut(j) + TR
                ImagOut(j) = ImagOut(j) + TI
                DeltaAr = Alpha * AR + Beta * AI
                AI = AI - (Alpha * AI - Beta * AR)
                AR = AR - DeltaAr
                j = j + 1
            Next
            
            I = I + BlockSize
        Loop
        
        BlockEnd = BlockSize
        BlockSize = BlockSize * 2
    Loop
End Sub




avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

19

En effet puisque cette source sort de vb, comme je l'ai dit je l'ai un peu modifiée suivant l'utilisation que j'en ai fait. Maintenant si tu veux un truc vraiment rapide bah faut trouver une autre solution.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

20

non moi pas chercher truc rapide
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

21

je dois avoir sur un disque dur une routine de FFT qui traîne, mais elle est faite pour travailler dans Z/nZ et pas dans C ^^ (enfin ça doit pas changer gd-chose à l'algorithme lui-même, il suffit de changer les appels de fonction)

Enfin ça doit vraiment pas être dur à trouver, non ? Google me parle de http://www.dsprelated.com/showmessage/36380/1.php ou http://sourceforge.net/projects/kissfft/ ...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

22

Oui mais pomper un code sans le comprendre c'est se planter dans 99% des cas
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

23

faudrait savoir, tu veux te fouler ou pas ?
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

24

un minimum oui quand meme grin

Juste que mon cours est a plus 200km de moi, qu'il est ecrit par moi, bref tte les caracteristiques du cours pas tres utilisable cheeky
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

25

bah si tu veux te fouler un minimum mais que t'as la flemme de réfléchir : http://en.wikipedia.org/wiki/Cooley-Tukey_FFT_algorithm smile

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

26

Godzil :
Ok merci. Non pasque la j'ai sous la main un de mes codes utilisant la FFT, mais je ne calcule que les harmoniques d'un signal, mais pas la fréquence fondamentales triso bref sorry (en plus j'ai de fort doute sur la véracité de mon code ^^)
Bref (En fait j'ai besoin de récupérer le taux de certaines fréquences (en gros) dans un échantillon)

Alors il est faux grin
Comme le dit Pollux, implémente l'algo de Cooley Tukey - sachant que c'est pour des puissances de 2 -, il est super rapide, facile à comprendre à partir du moment où on sait ce qu'est un butterfly.
Si tu es juste en réels, tu peux aussi utiliser l'algo de Bergland qui utilise moins d'espace mémoire et un butterfly modifié, mais c'est pas utile dans les applications non temps-réel ou embarquées.
Si tu dois le faire sur des entiers, il te faudra faire attention, dans la FFT traditionnelle, tu as un coefficient devant l'une des transformation pour que la transformée puis son inverse te donne le résultat de départ, et ce coefficient peut tout mettre en la'air si tu ne fais pas gaffe. Je ne sais plus exactement comment ça s'appelle, j'avais fait ça en stage, mais c'était il y a un an...

27

ex-Miles
:
Godzil :
Ok merci. Non pasque la j'ai sous la main un de mes codes utilisant la FFT, mais je ne calcule que les harmoniques d'un signal, mais pas la fréquence fondamentales triso bref sorry (en plus j'ai de fort doute sur la véracité de mon code ^^)
Bref (En fait j'ai besoin de récupérer le taux de certaines fréquences (en gros) dans un échantillon)

Alors il est faux grin
Comme le dit Pollux, implémente l'algo de Cooley Tukey - sachant que c'est pour des puissances de 2 -, il est super rapide, facile à comprendre à partir du moment où on sait ce qu'est un butterfly.
Si tu es juste en réels, tu peux aussi utiliser l'algo de Bergland qui utilise moins d'espace mémoire et un butterfly modifié, mais c'est pas utile dans les applications non temps-réel ou embarquées.
Si tu dois le faire sur des entiers, il te faudra faire attention, dans la FFT traditionnelle, tu as un coefficient devant l'une des transformation pour que la transformée puis son inverse te donne le résultat de départ, et ce coefficient peut tout mettre en la'air si tu ne fais pas gaffe. Je ne sais plus exactement comment ça s'appelle, j'avais fait ça en stage, mais c'était il y a un an...

Non mais si mon algo est bon dans le principe, c'est juste qu'il est fait pour retrouver les harmoniques (2F, 3F & co) et pas la valeur de la fréquence de la fondamentale. Enfin pas tel qu'il est, et il passe par une astuce mathématique.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

28

vince :
je dois avoir chez moi un TI MAG (pas sur, une revue sur les maths et les caltos de l'époque où j'étais au lycée) avec un exemple de FFT en tibasic... par contre ça sera pas avant le WE du 6 aout...

je viens de chercher, j'ai retrouvé le classeur dans lequel c'était rangé, je l'ai vidé tsss une seule explication est possible : c'est passé au tri

donc ça doit être rendu dans un carton d'archive chez mes parents...

je suis désolé sad
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

29

Godzil :
Non mais si mon algo est bon dans le principe, c'est juste qu'il est fait pour retrouver les harmoniques (2F, 3F &amp; co) et pas la valeur de la fréquence de la fondamentale. Enfin pas tel qu'il est, et il passe par une astuce mathématique.

Ce n'est pas si rentable que cela alors. Avec une FFT, tu calcules tout - sauf si tu veux économiser une ou 2 multiplications, mais c'est pas rentable du tout, ça permet d'avoir une idée de la décroissance initiale et du niveau de bruit de fond -, et c'est en O(n ln(n)) tandis que si tu calcules tout de manière standard, ça sera du O(n²).
Si ta complexité est en O(n ln(n)) et que tu ne calcules pas les premiers termes, je veux bien avoir un lien vers la publi où c'est expliqué wink

30

Cet algo marche plus rapidement car il utilise la convolution discrete (ce qui explique le ln)

Je veux bien aussi avoir un prog sur ma TI qui fait la transformation. Si possible, un truc qui calcule la transformée de delta.

Mais il faut aussi avoir un pas d'échantillonage comme il faut non?


Tout ce qui passe pas par le port 80, c'est de la triche.