Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno OT: Potřeboval bych pochopit Fourierovu transformaci, ale potřebuju nakopnout

Ahoj,
dělám zesilovač a jako jednu z komponent bych tam rád dal spektrální analyzátor (čip tam bude PIC16F887 @ 24Mhz, vývojové prostředí mikroC PRO). Strávil jsem pár hodin hledáním na Googlu, jaký algoritmus/teorie by pro mě byly vhodné a našel jsem Fourierovu transformaci, konkrétně rychlou Fourierovu transformaci (FFT). Našel jsem tenhle zdroj i s příklady, ale pořád to 100% nechápu (nechci to jen jednoduše zkopírovat, ale napsat si to sám):
http://www.codeproject.com/KB/recipes/howtofft.asp x
Teď popíšu, jak to chápu:

Musíme mít analogový signál - ten převedeme do vzorků
[http://cnx.org/content/m11443/latest/analog_sampli ng.jpg]
Píše se tam, že vstupní pole musí být z komplexních čísel - reálná složka čas a imaginární "napětí"? Nebo naopak?
kde počet těchto vzorků musí být mocnina dvou.

2. Otočit u první půlky reálnou a imaginární část??

3. A tady už to pomalu přestávám chápat, jak přichází na řadu ten Danielson-Lanzcos

Dokázal by mě nějaký dobrák nakopnout a přeložit "do lidštiny", co píší v tom odkazu? Byl bych neskonale vděčný. Můj mat. aparát končí asi někde u konce třetího ročníku SŠ (cca. základy integrálů a derivací), proto bych byl rád, kdybyste se snažili vysvětlit mi to polopatě :-).

Díky moc za všechny odpovědi.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
metod je vice, zkus se podivat na toto, snad to lepe pochopis... http://elektronika.kvalitne.cz/ATM…
gd 11.08.2010 21:53
gd
:beer: Tak je mi to zase o trochu jasnější :-). Takže u Cooley-Tukey algoritmu je jako první krok t…
marekdrtic 12.08.2010 07:48
marekdrtic
Tak je mi to zase o trochu jasnější Hele já se Tě jenom trošku zeptám... K čemu je dobrá ta Furiéro…
mikeš 12.08.2010 16:10
mikeš
Chci si postavit spektrální analyzátor - watch A nechci tam cpát 10-30 analogových filtrů, PIC stejn…
marekdrtic 12.08.2010 16:26
marekdrtic
U toho youtube odkazu ma odkaz na postup - je tem i nekompilovaný kód na Atmega8 http://diy.elektrod… nový
CoWayger 19.08.2010 11:25
CoWayger
Uf, tak jsem na konci. Nepotřeboval jsem fourierovu transformaci, stačil mi Goertzelův algoritmus: G… nový
marekdrtic 19.08.2010 14:50
marekdrtic
Alespon sis rozsiril obzory. poslední
JR_Ewing 19.08.2010 14:53
JR_Ewing

:beer:
Tak je mi to zase o trochu jasnější :-).

Takže u Cooley-Tukey algoritmu je jako první krok třeba udělat bitovou inverzi vstupního pole a poté to "motýlkové" zpřeházení viz obrázek?
[http://elektronika.kvalitne.cz/ATMEL/necoteorie/tr   ansformation/AVRFFT/obr/butterfly_DITFFTR21.png]
Když budu mít tedy 64 (256) vzorků, tak bude třeba tohle provést 6 resp. 8 zpřeházení (vždy N, kde 2^N = počet vzorků)?
A potom se tam píše, že je třeba provést vlastní FFT. A tam už mi to není jasné, pokoušel jsem si přepsat ten algoritmus do mat. výrazů, ale bez úspěchu. Konkrétně se mi jedná o tenhle kód:

#define N 8

typedef struct{
    double re;
    double im;
}TCplx;

double tsincos[N]={0.000, 1.000, 0.7071, 0.7071, 1.000, 0.000, 0.7071,-0.7071};
TCplx FFTwarr[N];

void FFTditR2(void)
{
    double dsin,dcos;
    double *Fnk;
    TCplx C;
    TCplx *A,*B;
    int s,k;
    int n=1;
    int angf=N;
        
    while(n<N)
    {
        A=&FFTwarr[0];
        B=&FFTwarr[n];     
        Fnk=&tsincos;
        
        for(k=0;k<n;k++)
        {
            dsin=*Fnk++;
            dcos=*Fnk++;
            
            for(s=0;s<angf;s++)
            {
                C.re=A->re*dcos - A->im*dsin;
                C.im=A->re*dsin + A->im*dcos;
                B->re=A->re - C.re;
                B->im=A->im - C.im;
                A->re+=C.re;
                A->im+=C.im;
                A+=2*n;
                B+=2*n;              
            }
            A-=(N-1);
            B-=(N-1);             
            Fnk+=(angf-2);
        }        
        n<<=1;
        angf>>=1;
    }
}

Chci si postavit spektrální analyzátor - watch
A nechci tam cpát 10-30 analogových filtrů, PIC stejnak nemá ani tolik analogových vstupů. Takhle mi to spočítá, jaké všechny frekvence vzorek hudby obsahuje a dá se s tím krásně pracovat. Taky to využiju do dig. osciloskopu a spekt. analyzátoru s PICama.

Jinak význam té fourierovy transformace spočívá v tom, že ty máš nějakej signál:
[http://ac3filter.net/files/docs/ac3filter_1_30b/pi   c_loudness/a_signal.png]
Třeba po 100 mikrosekundách si zapíšeš hodnoty - třeba 0,7V;1,2V,1,1V,0,2V atd. To proženeš fourierem a vyhodí ti to komplexní čísla - ve výsledku pak dostaneš informace o tom, jaké tam jsou frekvence (třeba 200Hz, 1100Hz, 2200Hz) a jejich amplituda ("síla") a z toho vytvoříš takovýto podobný graf:
[spec50.jpg]
Toto konkrétně vypadá na spektrum obdélníkového signálu.

Když jsem někde napsal blbost, tak mě opravte, taky v tom nejsem zběhlej :-).

Zpět do poradny Odpovědět na původní otázku Nahoru