/ Forside / Karriere / Uddannelse / Højere uddannelser / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Højere uddannelser
#NavnPoint
Nordsted1 1588
erling_l 1224
ans 1150
dova 895
gert_h 800
molokyle 661
berpox 610
creamygirl 610
3773 570
10  jomfruane 570
Fourier
Fra : Christian


Dato : 20-02-03 12:52

Hej.

Jeg har virkelig brug for nogle overskrifter til at forstår alle de
forskellige Fourier analyse metoder.
Der er jo FFT, IFT, CFFT osv osv. Hvorfor skal nogle metoder bruge
rækker på s^m og andre ikke. Hvad er forskellen i resultatet.
Jeg er sq så forvirret at jeg ikke engang kan stille størgsmålet
korrekt.

Hvis du mener at du kan sprede lidt lys og forståelse, så skriv
endelig et par linier.

På forhånd tak.

 
 
Carsten Svaneborg (20-02-2003)
Kommentar
Fra : Carsten Svaneborg


Dato : 20-02-03 16:52

Christian wrote:
> Der er jo FFT, IFT, CFFT osv osv.

FFT = Fast Fourier Transformation
Mon ikke IFT = Invers Fourier transformation?

CFFT kunne være kompleks Fast Fourier transformation,
dvs. hvor man har en complex række tal istedet
for reele tal.

> Hvorfor skal nogle metoder bruge rækker på s^m og andre ikke.

Den simples Fourier transformation virker uafhængigt af
hvor mange elementer du har, men Fast Fourier transformation
virker bedst når du har 2^n tal. Der skal Fourier transformeres,
dette skyldes den måde algoritmen virker på. Har du ikke 2^n så
kan det være en fordel at addere 0'er i enden indtil man får en
to'er potens af tal, og så bruge en FFT.

Når du laver Fourier transformation så skal du udregne en
masse Cos og Sin funktioner. Så vidt jeg husker noget i
retning af:

a[j] = (1/N) sum_i x[i]*cos(i*j*2pi/N)
b[j] = (1/N) sum_i x[i]*sin(i*j*2pi/N)
med i,j = 0,..,N-1

Du skal udregne hvert a[j] og det kræver N cos udregninger,
dvs. ialt N² udregninger af cos og sin funktionerne.

Dette er dog spild af tid, fordi der findes dog en masse
relationer mellem Cos og Sin f.eks.

Cos(A+B)=Cos(A)*Cos(B)-Sin(A)*Sin(A) og
Sin(A+B)=Sin(A)*Cos(B)+Cos(A)*Sin(B)

Med a=j*2pi/N så skal du altså udregne cos(a*i) og sin(a*i)
for i=0,..,N-1

Du kan omskrive Cos(a*2i)=Cos(a*i+a*i) og bruge ovenstående
ligning til at udtrykke det i form af cos(a*i) og sin(a*i),
og du kan rekursivt fortsætte på den måde indtil du har
cos(a) og sin(a).

Dvs. du kan udregne disse to tal, og så vha. en masse
multiplikationer og summer af kendte tal, udregne cos(a*i) og
sin(a*i) uden at evaluere cos og sin funktioner, og det der
koster CPU tid er evaluering af funktioner, produkter og summer
er meget billige, additionsligningen er ca. 5 gange billigere
i CPU tid end direkte evaluation på en alpha chip.

> Jeg er sq så forvirret at jeg ikke engang kan stille
> størgsmålet korrekt.

Prøv at forklare hvad du vil istedet.

--
Mvh. Carsten Svaneborg
http://www.softwarepatenter.dk


Christian (21-02-2003)
Kommentar
Fra : Christian


Dato : 21-02-03 09:55

Hej Carsten

Tak for dit svar.

Det jeg vil er:
Jeg har en række målinger (temperatur) som jeg gerne vil
frekvensanalysere. Så det jeg har brug for er at komme fra mine
målinger til en frekvensgraf så jeg kan se om temperaturen afhænger af
nogle bestemte frekvenser.

Jeg har jo alle disse værktøjer til rådighed, men er noget i tvivl
hvordan jeg skal anvende dem.
Et eksempel kunne være når jeg laver en fourier transformation i excel
så oplyser den mig om at jeg skal bruge 2^m tal. Og det går jeg ud fra
er fordi det er en FFT. Men jeg mente at når jeg anvender FFT så får
jeg 2^m/2+1 resultater ud. Den giver mig 2^m resultater!
Desuden så ved jeg ikke helt hvad de transformerede tal er for nogle.
Jeg forventer en amplitude/frekvens graf jeg kan se på og de
transformerede tal er vel amplituderne som så skal relateres til
frekvenser. Men hvordan beregner jeg disse frekvenser. (hvis min
opfattelse er helt forkert, så se det bare som et tegn på mit
begynderniveau :)

En anden ting er at jeg mener at have læst at ovenstående alligevel
kan give en graf med for mange oplysninger og at det derfor kan betale
sig at lave en gennemsnitsberegning så støjen filteres væk og de
herskende frekvenser træder frem.
Denne procedure er jeg noget usikker på. Skal der bruges feks. 100
serier, eller kan man lave denne gennemsnitsberegning på bare en
enkelt serie. Jeg har jo ikke meget mere end 2-3 serier med hver ca.
2000 punkter for samme målebetingelser.


Din hjælp er påskønnet.
God weekend

Hilsen Christian

Carsten Svaneborg (21-02-2003)
Kommentar
Fra : Carsten Svaneborg


Dato : 21-02-03 12:24

Christian wrote:
> Jeg har en række målinger (temperatur) som jeg gerne vil
> frekvensanalysere.

Ok. Temperatur er reelt tal.
Hvor mange tal har du?
Hvilke frekvensområde er du interesseret i?

FFT'en vil tage alle dine 2^n tal og lave en fourier
transformation for 2^n frekvenser, der er fordelt fra
1/Tmax hvor Tmax er den største tid (laveste frekvens)
og 1/Tsamle hvor Tsample er tidsrummet mellem du sampler
temperaturen.

Måske har du ikke brug for alle disse, og en primitiv
Fourier transformation vil være nok.

> Så det jeg har brug for er at komme fra mine målinger til
> en frekvensgraf så jeg kan se om temperaturen afhænger af
> nogle bestemte frekvenser.
Hvad er det du måler på?

> Et eksempel kunne være når jeg laver en fourier transformation i excel
> så oplyser den mig om at jeg skal bruge 2^m tal. Og det går jeg ud fra
> er fordi det er en FFT.
Det er uden tvivel korrekt.

> Men jeg mente at når jeg anvender FFT så får
> jeg 2^m/2+1 resultater ud. Den giver mig 2^m resultater!

Har du N tal så skal du få 2N tal ud, hvor sinus komponenten for
bølgen med lavest frekvens f=0 er identisk 0, mens den tilsvarende
cos komponent er gennemsnittet af alle dine tal.

Den frekvensgraf du ønsker er formodeligt at intensiteten
af bølgekomponenterne og den får du ved I[n]= a[n]*a[n]+b[n]*n[n]

hvor a[n] og b[n] er cos og sin komponenterne af den n'te bølge.

> Desuden så ved jeg ikke helt hvad de transformerede tal er for nogle.
Det bør stå i dokumentationen. Jeg kender intet til excell så jeg
kan ikke hjælpe der.

Hvis du kan programmere i et sprog, ville jeg implementere en
primitiv Fourier transformation, så ved du præcist hvad der
foregår. (og lærer også noget)

> Jeg forventer en amplitude/frekvens graf jeg kan se på og de
> transformerede tal er vel amplituderne som så skal relateres til
> frekvenser. Men hvordan beregner jeg disse frekvenser. (hvis min
> opfattelse er helt forkert, så se det bare som et tegn på mit
> begynderniveau :)

Du har målinger T[i] hvor i er et helt tal fra 0 til N-1 hvor
N er antallet af målinger du har. (jeg programmere normalt
i C og tæller derfor fra 0, desuden simplificere det notationen)

Dvs. real tiden der svarer til i er t(i)=i*tsample hvor
tsample er tiden du venter mellem hver temperatur sample.

Fourier transformationen er defineret ved

a[n] = summation T[i] cos(2pi i*n/ N)
i=0,..,N-1

b[n] = summation T[i] sin(2pi i*n/ N)
i=0,..,N-1

Når du har udregnet a[n] og b[n] for n=0,..,N-1 så har du
Fourier transformerede dine data.

Du kan erstatte indekset i med tid, og for at argumentet
til sin funktionen skal være dimensionsløst kan du se at
n så må være en frekvens.

Jeg vil gætte på at frekvensen af den n'te komponent er
f(n)=2pi n/tsample .


Dvs. hvis du plotter og

x[n]=2pi/tsample * n
y[n]=a[n]*a[n]+b[n]*b[n]

så burde du få dit spektrum med frekvens langs x og intensitet
langs y, en top i dette spektrum betyder så at denne frekvens
er hyppig i dine måle data.

> En anden ting er at jeg mener at have læst at ovenstående alligevel
> kan give en graf med for mange oplysninger og at det derfor kan betale
> sig at lave en gennemsnitsberegning så støjen filteres væk og de
> herskende frekvenser træder frem.

Husk blot at tage gennemsnittet på de transformerede data,
og ikke de rå. Du kan tænke på støj som en højfrekvent
signal der er overlejret dit signal. Når du Fourier transformere
så vil du se støjen for høje frekvenser, mens de lave
frekvenser vil være upåvirkede. Opdeler du derimod din
tidssekvens i en række blokke, og analysere hver, og så
tager gennemsnittet af intensiteterne du plotter, så vil
du få et fornuftigt resultat.

> Denne procedure er jeg noget usikker på. Skal der bruges feks. 100
> serier, eller kan man lave denne gennemsnitsberegning på bare en
> enkelt serie. Jeg har jo ikke meget mere end 2-3 serier med hver ca.
> 2000 punkter for samme målebetingelser.

Det kommer an på dit frekvensvindue. Men 2-3 serier er ok at
tage gennemsnit over, selvom jeg ville havde foretrukket 5-10.

Du kan eventuelt tage og klippe dine data serie op i 2 a 1000
punkter istedet. Så får du nogle ekstra serier, men det virker
kun hvis de frekvenser du er interesseret ikke er for korte,
dvs. at der stadig er "flere" tidsperioder af den periode du
leder efter tilbage i hver serie. Fourier transformationen
virker allerede som et gennemsnit, men du kan udregne standard
variationen mellem de forskellige serier, og det er din
usikkerhed.

Dvs. sampler du hver time i 1 måned, og ønsker at kigge på
daglige temperatur svingninger, så har du 30 svingninger i
dit datasæt. Du kan derfor sagtens klippe dem på i 2 serier
a 15 svingninger hver. At klippe påvirker ikke dine gennemsnit,
men gør det muligt at udregne usikkerheder. Ønsker du derimod
at se på temperaturvariationer der tager 10 dage, så har du
kun 3 svingninger, og så er der for lidt.

--
Mvh. Carsten Svaneborg
http://www.softwarepatenter.dk


Christian (25-02-2003)
Kommentar
Fra : Christian


Dato : 25-02-03 16:28

Hej igen Carsten

Det er jo meget godt det her. Dine svar er gode og det hjælper mig til
at forstår når jeg læser teorien.

Jeg har ikke tygget mig igennem hele dit svar, men noget af det. Og
jeg har spørgsmål :)

Ved beregning af frekvensen ”gætter” du på f(n)=2pi
n/tsample
Når jeg plotter dette virker det forkert. Skal det ikke være
f(n)=n*samplefrekvens/antalsamples
Så bliver frekvensområdet 0 til samplefrekvens og det er jo hvad du
skriver at mine fouriertransponerede tal vil ligge imellem (1/Tmax og
1/Tsample)

Når jeg kikker på frekvensspektret for en simpel og almindelig
sinuskurve, så får jeg med ovenstående metode 2 peaks. De ligger
omkring 16 og 86. Hvis jeg anvender en anden måde at beregne
frekvensen på (ifald mit forslag ovenfor er forkert) så ændres tallet,
men ikke formen. Den er jo givet af transponeringen.
Jeg forstår ikke de 2 peaks. Jeg ville have gættet på at der ville
vise en frekvenstop for sinusfrekvensen og så en række lavere toppe
for multipla heraf?
Min sinusfunktion er beregnet/diskretiseret som sin(n) hvor n=1,
2..63)

Håber at du kan hjælpe.


Mvh
Christian



Carsten Svaneborg <zqex@nowhere.on.the.net> wrote in message news:<08253b.5v2.ln@lt30.mpip-mainz.mpg.de>...
> Christian wrote:
> > Jeg har en række målinger (temperatur) som jeg gerne vil
> > frekvensanalysere.
>
> Ok. Temperatur er reelt tal.
> Hvor mange tal har du?
> Hvilke frekvensområde er du interesseret i?
>
> FFT'en vil tage alle dine 2^n tal og lave en fourier
> transformation for 2^n frekvenser, der er fordelt fra
> 1/Tmax hvor Tmax er den største tid (laveste frekvens)
> og 1/Tsamle hvor Tsample er tidsrummet mellem du sampler
> temperaturen.
>
> Måske har du ikke brug for alle disse, og en primitiv
> Fourier transformation vil være nok.
>
> > Så det jeg har brug for er at komme fra mine målinger til
> > en frekvensgraf så jeg kan se om temperaturen afhænger af
> > nogle bestemte frekvenser.
> Hvad er det du måler på?
>
> > Et eksempel kunne være når jeg laver en fourier transformation i excel
> > så oplyser den mig om at jeg skal bruge 2^m tal. Og det går jeg ud fra
> > er fordi det er en FFT.
> Det er uden tvivel korrekt.
>
> > Men jeg mente at når jeg anvender FFT så får
> > jeg 2^m/2+1 resultater ud. Den giver mig 2^m resultater!
>
> Har du N tal så skal du få 2N tal ud, hvor sinus komponenten for
> bølgen med lavest frekvens f=0 er identisk 0, mens den tilsvarende
> cos komponent er gennemsnittet af alle dine tal.
>
> Den frekvensgraf du ønsker er formodeligt at intensiteten
> af bølgekomponenterne og den får du ved I[n]= a[n]*a[n]+b[n]*n[n]
>
> hvor a[n] og b[n] er cos og sin komponenterne af den n'te bølge.
>
> > Desuden så ved jeg ikke helt hvad de transformerede tal er for nogle.
> Det bør stå i dokumentationen. Jeg kender intet til excell så jeg
> kan ikke hjælpe der.
>
> Hvis du kan programmere i et sprog, ville jeg implementere en
> primitiv Fourier transformation, så ved du præcist hvad der
> foregår. (og lærer også noget)
>
> > Jeg forventer en amplitude/frekvens graf jeg kan se på og de
> > transformerede tal er vel amplituderne som så skal relateres til
> > frekvenser. Men hvordan beregner jeg disse frekvenser. (hvis min
> > opfattelse er helt forkert, så se det bare som et tegn på mit
> > begynderniveau :)
>
> Du har målinger T[i] hvor i er et helt tal fra 0 til N-1 hvor
> N er antallet af målinger du har. (jeg programmere normalt
> i C og tæller derfor fra 0, desuden simplificere det notationen)
>
> Dvs. real tiden der svarer til i er t(i)=i*tsample hvor
> tsample er tiden du venter mellem hver temperatur sample.
>
> Fourier transformationen er defineret ved
>
> a[n] = summation T[i] cos(2pi i*n/ N)
> i=0,..,N-1
>
> b[n] = summation T[i] sin(2pi i*n/ N)
> i=0,..,N-1
>
> Når du har udregnet a[n] og b[n] for n=0,..,N-1 så har du
> Fourier transformerede dine data.
>
> Du kan erstatte indekset i med tid, og for at argumentet
> til sin funktionen skal være dimensionsløst kan du se at
> n så må være en frekvens.
>
> Jeg vil gætte på at frekvensen af den n'te komponent er
> f(n)=2pi n/tsample .
>
>
> Dvs. hvis du plotter og
>
> x[n]=2pi/tsample * n
> y[n]=a[n]*a[n]+b[n]*b[n]
>
> så burde du få dit spektrum med frekvens langs x og intensitet
> langs y, en top i dette spektrum betyder så at denne frekvens
> er hyppig i dine måle data.
>
> > En anden ting er at jeg mener at have læst at ovenstående alligevel
> > kan give en graf med for mange oplysninger og at det derfor kan betale
> > sig at lave en gennemsnitsberegning så støjen filteres væk og de
> > herskende frekvenser træder frem.
>
> Husk blot at tage gennemsnittet på de transformerede data,
> og ikke de rå. Du kan tænke på støj som en højfrekvent
> signal der er overlejret dit signal. Når du Fourier transformere
> så vil du se støjen for høje frekvenser, mens de lave
> frekvenser vil være upåvirkede. Opdeler du derimod din
> tidssekvens i en række blokke, og analysere hver, og så
> tager gennemsnittet af intensiteterne du plotter, så vil
> du få et fornuftigt resultat.
>
> > Denne procedure er jeg noget usikker på. Skal der bruges feks. 100
> > serier, eller kan man lave denne gennemsnitsberegning på bare en
> > enkelt serie. Jeg har jo ikke meget mere end 2-3 serier med hver ca.
> > 2000 punkter for samme målebetingelser.
>
> Det kommer an på dit frekvensvindue. Men 2-3 serier er ok at
> tage gennemsnit over, selvom jeg ville havde foretrukket 5-10.
>
> Du kan eventuelt tage og klippe dine data serie op i 2 a 1000
> punkter istedet. Så får du nogle ekstra serier, men det virker
> kun hvis de frekvenser du er interesseret ikke er for korte,
> dvs. at der stadig er "flere" tidsperioder af den periode du
> leder efter tilbage i hver serie. Fourier transformationen
> virker allerede som et gennemsnit, men du kan udregne standard
> variationen mellem de forskellige serier, og det er din
> usikkerhed.
>
> Dvs. sampler du hver time i 1 måned, og ønsker at kigge på
> daglige temperatur svingninger, så har du 30 svingninger i
> dit datasæt. Du kan derfor sagtens klippe dem på i 2 serier
> a 15 svingninger hver. At klippe påvirker ikke dine gennemsnit,
> men gør det muligt at udregne usikkerheder. Ønsker du derimod
> at se på temperaturvariationer der tager 10 dage, så har du
> kun 3 svingninger, og så er der for lidt.

Carsten Svaneborg (25-02-2003)
Kommentar
Fra : Carsten Svaneborg


Dato : 25-02-03 17:01

Christian wrote:
> Ved beregning af frekvensen &#8221;gætter&#8221; du på f(n)=2pi
> n/tsample

Mht. faktorer 2pi så er spørgsmålet om vi taler frekvens f
eller cyklisk frekvens w.

> Når jeg plotter dette virker det forkert. Skal det ikke være
> f(n)=n*samplefrekvens/antalsamples

Det lyder fornuftigt.

> Når jeg kikker på frekvensspektret for en simpel og almindelig
> sinuskurve, så får jeg med ovenstående metode 2 peaks.
Plotter du a[n]*a[n]+b[n]*n[n] eller noget andet?

En sinuskurve med "mange" oscilationer med en bestemt frekvens
skal svarer til alle a[n]=0 og en peak for den b[n] hvor n
svarer til frekvensen af din sinuskurve. Der skal kun være
en og netop en peak.

Tager du en cosinus kurve med samme frekvens, skal det bytte
om på a og b, men ellers ikke have nogen effekt.


> De ligger omkring 16 og 86. Hvis jeg anvender en anden måde at beregne
> frekvensen på (ifald mit forslag ovenfor er forkert) så ændres tallet,
> men ikke formen.

Jeg tror der er ged i din Fourier transformation.

relationen mellem tid og sample nummer er
t(n)=n*tsample

For en given frekvens f er kurven
y(t(n))=y(n) =sin(2pi*f*t(n)) = sin(2pi*f*tsample *n)

Hvis du fourier transformere y så bør du få en peak
omkring f.

> Jeg forstår ikke de 2 peaks. Jeg ville have gættet på at der ville
> vise en frekvenstop for sinusfrekvensen og så en række lavere toppe
> for multipla heraf?

En ren sinusbølge består kun af en frekvens, så der skal ikke
være nogle lavere toppe ved højrere frekvenser. Bredden af frekvens
spektraet er det man kalder båndbredde (der er her det kommer fra),
og båndbredden måler hvor meget information man kan sende igennem
bølgen. En ren sinus/cosinus bølge har båndbredde 0, fordi du har
en meget tynd peak, men man kan f.eks. amplitude eller frekvensmodulere
bølgen.

Hvis du tager en trekant eller firekants bølge med samme frekvens,
så vil der derimod være en masse fourier komponenter der bidrager.
(bredere båndbredde)

Årsagen er at hvis du vil konstruktere en firkant ud af sinus
formede bølger, så skal du bruge en masse højfrekvente bølger
til at få firekant/trekant bølgens skarpe kanter til at være
skarpe.

--
Mvh. Carsten Svaneborg
http://www.softwarepatenter.dk


Jeppe Stig Nielsen (25-02-2003)
Kommentar
Fra : Jeppe Stig Nielsen


Dato : 25-02-03 18:30

Carsten Svaneborg wrote:
>
> Mht. faktorer 2pi så er spørgsmålet om vi taler frekvens f
> eller cyklisk frekvens w.

Er det ikke f der hedder cyklisk frekvens, og w = 2pi·f der hedder
vinkelfrekvens eller vinkelhastighed?

--
Jeppe Stig Nielsen <URL:http://jeppesn.dk/>. «

"Je n'ai pas eu besoin de cette hypothèse (I had no need of that
hypothesis)" --- Laplace (1749-1827)

Carsten Svaneborg (25-02-2003)
Kommentar
Fra : Carsten Svaneborg


Dato : 25-02-03 18:32

Jeppe Stig Nielsen wrote:
>> Mht. faktorer 2pi så er spørgsmålet om vi taler frekvens f
>> eller cyklisk frekvens w.
> Er det ikke f der hedder cyklisk frekvens, og w = 2pi·f der hedder
> vinkelfrekvens eller vinkelhastighed?

Det er det nok, jeg kan aldrig huske forskellen. Jeg kan kun foreslår
folk at regne i enheder hvor 2pi=1, så man slipper for den slags
problemer. ;*)

--
Mvh. Carsten Svaneborg
http://www.softwarepatenter.dk


Jeppe Stig Nielsen (25-02-2003)
Kommentar
Fra : Jeppe Stig Nielsen


Dato : 25-02-03 19:31

Carsten Svaneborg wrote:
>
> >> Mht. faktorer 2pi så er spørgsmålet om vi taler frekvens f
> >> eller cyklisk frekvens w.
> > Er det ikke f der hedder cyklisk frekvens, og w = 2pi·f der hedder
> > vinkelfrekvens eller vinkelhastighed?
>
> Det er det nok, jeg kan aldrig huske forskellen. Jeg kan kun foreslår
> folk at regne i enheder hvor 2pi=1, så man slipper for den slags
> problemer. ;*)

Hvis man for sit indre øje ser er roterende skive, så betegner f hvor
mange omgange (»cyklusser«) den roterer pr. sekund, mens w angiver hvor
stor en vinkel i radianer den drejer sig pr. sekund.

Eksempel: En grammofonplade der roterer med 33+1/3 omdrejninger pr.
minut, drejer sig ca. 0,556 omgange pr. sekund hvilket svarer til at
den drejer sig 1,745 radianer pr. sekund. Altså

f = 0,556 Hz
w = 1,745 rad/s = 1,745 s^(-1)

--
Jeppe Stig Nielsen <URL:http://jeppesn.dk/>. «

"Je n'ai pas eu besoin de cette hypothèse (I had no need of that
hypothesis)" --- Laplace (1749-1827)

Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408946
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste