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