L9: Rayleigh testi Laskuharjoitus Data on tiedoston Rayleighdata.dat 1. sarake: t = t i Ajan hetket ovat t = t 1, t 2,..., t n, missä n = n = 528 Laske ja plottaa välillä f min = 1/P max ja f max = 1/P min z(f j ) = {[ cos 2πf j (t i t 0 )] 2 + [ sin 2πf j (t i t 0 )] 2 }/n, missä f j testattu frekvenssi, P min = 1.5, P max = 90.0 ja t 0 = 0 Testattavien frekvenssien f j välinen etäisyys on f step = f 0 /OFAC, missä f 0 = 1/ T, T = t n t 1 ja OFAC = 10 Välille f min ja f max sopii testattavia f j frekvenssejä M = INT[(f max f min )/f step] kappaletta, missä INT poistaa argumentin desimaaliosan (Esim: INT[12.34] = 12). Testattavat frekvenssit ovat f j = f min + j f step, missä j = 0, 1, 2, 3,..., M Vihje: ohjelmassa RayleighAliOhjelma1.py kotisivulla laskettu z(f j ) yhdelle frekvenssin arvolle Ohjelman rakenne 1. Lue t 2. Kiinnitä pmin= 1.5, pmax= 90, ofac= 10 3. Laske fmin, fmax, fstep ja M 4. Luo M=M testattavaa frekvenssiä vektoriin f= f j 5. Luo tyhjä periodogrammi z=0.0*f= z(f j )) 6. Tee f looppi, joka laskee arvot z(f j ) arvoille f j ja tallentaa tuloksen vektoriin z 7. Plottaa z versus f 8. Tunnista ja merkitse korkein piikki zbest= z(f best ) kohdassa fbest= f best 9. Kirjoita kuvaan n = 528 ja P best = 1/f best = 2.85 tiedot
L9: Etsintä vektorista: Valinta indeksien avulla import numpy ; a=numpy.arange(3) eli a on [0 1 2] i=(a==max(a)) ; print(i) tulostaa [False False True] ja print(a[i]) tulostaa [2] Ehto a==max(a) toteutuu eli i=true elementille a[2]=2 j=(a==max(a)).nonzero() ; print(j) tulostaa indeksin arvon (array([2]),) ja print(a[j]) tulostaa myös [2] Ehto a==max(a) toteutuu arvolla j=2 elementille a[2]=2 k=((a>0) & (a<2)) ; print(k) tulostaa [False True False] Ehdot a>0 ja a<2 toteutuvat eli i=true elementillä a[1]=1 Laskuharjoituksen korkein piikki esim: j=(z==max(z)).nonzero() fbest=f[j] ; zbest=z[j] Alla olevassa kuvassa piste (fbest,zbest) on merkitty korkeimman z piikin huipussa sinisellä pallolla
Tehospektri Tehospektri (engl. Power spectrum: Scargle 1982, The Astrophysical Journal 263, page 853: Equation. 10) Aikasarja: n = Havaintoa t i = t 1, t 2,..., t n = Havaintoajat y i = y(t i) = y 1, y 2,..., y n = Havainnot m y = [ y i]/n = Havaintojen keskiarvo y i = y i m y Ongelma: Onko aikasarjassa y i periodisuutta? Tehospektrin arvo testattavalla frekvensillä f on z(f ) = { n y i cos [2πf (ti τ)]}2 2 n {cos [2πf (ti + { n y i sin [2πf (ti τ)]}2 τ)]}2 2 n, {sin [2πf (ti τ)]}2 missä τ toteuttaa [ ] [ ] 1 tan (4πf τ) = sin (4πf t i) cos (4πf t i) Paras periodi P best = 1/f best, missä z max = z(f best) = periodogrammin korkein piikki Luonnollinen ensimmäinen reaktio: Onpas karmea risuaita
Testattavat frekvenssit Laskuharjoituksessa testattava periodiväli on P min = 1 ja P max = 10 Testattava frekvenssiväli on f min = 1/P max = 0.1 ja f max = 1/P min = 1. Kahden riippumattoman testattavan frekvenssin etäisyys on f 0 =1/ T, missä T = t n t 1 eli havaintovälin koko pituus Jokaisella testattavalla f toteutuu T(f ± f 0) = f T ± T/ T = f T ± 1 Kun f muuttuu f 0 verran, tehdään kierros enemmän tai vähemmän koko T aikana Koko data sotkettu z(f ) ja z(f ± f 0) ovat toisistaan riippumattomat Testattavien frekvenssien välisen etäisyyden pitää olla tiheämpi Saadaan tarkka f best Valitaan testattavien frekvessien askel (engl. step) f step = f 0 /OFAC, missä OFAC = 10 (engl. Overfilling Factor) Testattavia frekvenssien määrä testattavalla frekvenssivälillä M = INT[(f max f min)/f step], missä INT poistaa argumentin desimaaliosan (Esim: INT[123.45] = 123). Tehospektri z(f j) lasketaan kaikille testattavien frekvenssien arvoille f j = f min + j f step, missä j = 0, 1, 2, 3,..., M
Testattavat frekvenssit Tunnista yksittäisten pallojen liikkeet Punaiset datan alussa Siirtyvät hitaimmin, kun f muuttuu Siniset datan keskellä Siirtyvät nopeammin, kun f muuttuu Vihreät datan lopussa Siirtyvät nopeimmin, kun f muuttuu KAIKKI sotkettu, kun f muuttunut arvoon f + f 0 Alun ja lopun pallot takaisin lähes omille paikoilleen arvolla f + f 0 Usein z(f ) piikkejä arvoilla arvoilla f = f ± f 0 P = 5.85, f = 0.171 0 10 20 30 40 50 60 70 f +0.0 f 0 = 0.171 f +0.2 f 0 = 0.168 f +0.4 f 0 = 0.165 0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0 f +0.6 f 0 = 0.162 f +0.8 f 0 = 0.159 f +1.0 f 0 = 0.156 0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0
Testattavat frekvenssit Alla vasemmalla: Toivottu laskuharjoituksen ratkaisu 7.80 7.75 7.70 7.65 Alla oikealla: Suurennos laskuharjoituksen tehospektristä korkeimman huipun kohdalla 7.60 0 10 20 30 40 f j = monikerta f 0 = vihreät pallot f j = monikerta f step = punaiset pallot Huippu (fbest,zbest) = sininen ruksi Riittävän lyhyt testattavien frekvenssien f j askel f step antaa tarkan parhaan periodin arvon pbest=1/fbest (s.o. korkeimman periodogrammin z piikin paikan) Matka f yksiköissä huipulta perustasoon noin kahden vihreän pallon väli f 0 0.07 0.06 0.05 0.07 n = 100, P = 1.91 0.06 0.05 0.04 0.03 0.02 0.01 0.00 0.2 0.4 0.6 0.8 1.0 0.04 0.03 0.02 0.01 0.00 0.49 0.50 0.51 0.52 0.53 0.54 0.55 0.56 0.57
Laskuharjoitus: Tehospektrin ohjelmointi Ennen looppia: t= t i ja y= y i luettu tiedostosta Sgargletwocolumn.dat. Luo ydot= y i = y i m y ja f= f j Luo tyhjä periodiogrammi z=0*f For loopissa: f= f j frekvenssi muuttuu f j muuttuu t i ja y i ei muutu f j muuttuu τ muuttuu z(f j ) muuttuu 1. Valitse testattava f j = f(j) 2. Laske tau (loopissa x=4*pi*f*t) τ = 1 [ n atan sin (4πf ] jt i ) 4πf n j cos (4πf jt i ) 3. Laske osoittajat ( x=2*pi*f*(t-tau)) z 1 (f j ) = { y i cos [2πf j(t i τ)]} 2 z 2 (f j ) = { y i sin [2πf j(t i τ)]} 2 4. Laske nimittäjät ( x=2*pi*f*(t-tau)) z 3 (f j ) = 2 {cos [2πf j (t i τ)]} 2 z 4 (f j ) = 2 {sin [2πf j (t i τ)]} 2 5. Laske z(j)= z(f j ) = z 1(f j ) z 3 (f j ) + z 2(f j ) z 4 (f j ) 6. Palaa kohtaan 1. ja valitse seuraava testattava frekvenssi f j For looppi loppuu kohtaan 6. Muita tapoja: koko kaava kerralla, s.o. 3., 4. ja 5. samalla rivillä Muita tapoja: for korvattu while
Ohjelmointi 7. Plottaa z(f j ) 8. Tunnista korkein piikki z max = z(f j = f best ) 9. Anna pyydetty informaatio n = 100 ja P = 1.91 Harjoitustyössä pyydetetään plottaamaan havainnot kuvan yläosaan Kuvassa havaittu yöllä eli P 1 ikkuna Ylemmän kuvan silmälasit, koska P 2 vaihtelu näyttää maksimin ja minimin joka toinen yö Tehospektrin P varmasti oikea, jos sinikäyrä on oikea malli havainnoille 7.80 7.75 7.70 7.65 Vihje: Aiemmassa laskuharjoituksessa laskettiin τ, z 1 (f j ) ja z 2 (f j ) arvot yhden testattavan frekvenssin f tapaukselle 7.60 0 10 20 30 40 0.07 n = 100, P = 1.91 0.06 0.05 0.04 0.03 0.02 0.01 0.00 0.2 0.4 0.6 0.8 1.0