L9: Rayleigh testi Laskuharjoitus Data on tiedoston H7binput.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: Luennon 6. ohjelmissa Psub2.py ja Osub2.m on 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 python 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] j=(a==max(a)).nonzero() ; print(j) tulostaa indeksin arvon (array([2]),) ja print(a[j]) tulostaa myös [2] k=((a>0) & (a<2)) ; print(k) tulostaa [False True False] Harjoituksen korkein piikki esim: j=(z==max(z)).nonzero() fbest=f[j] ; zbest=z[j] octave valinta indeksin avulla a=[0,1,2]; j=((a>0) & (a<2)); disp(j) tulostaa 0 1 0 ja disp(a(j)) antaa 1 j=find((a>0) & (a<2)); disp(j) tulostaa 2 ja disp(a(j)) antaa myös 1 Harjoituksen korkein piikki esimerkiksi j=find(z==max(z)) fbest=f(j); zbest=z(j)
Tehospektri Tehospektri (engl. Power spectrum: Scargle 1982, ApJ 263, 853: Eq. 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 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 Suurennos laskuharjoituksen tehospektristä f j = monikerta f 0 = vihreät pallot f j = monikerta f step = punaiset pallot Huippu kohdassa fbest = sininen ruksi Riittävän lyhyt testattavien frekvensssien f j askel f step antaa tarkan arvon pbest=1/fbest Matka f yksiköissä huipulta perustasoon noin kahden vihreän pallon väli f 0 0.07 0.06 0.05 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, ydot= y i = y i m y ja f= f j luotu 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 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ön kuvassa on pyydetty plottaamaan myös havainnot kuvan yläosaan python ja octave voivat antaa eri tuloksen, esim. P = 1.91 ja P = 1.92 Kuvassa havaittu yöllä eli P 1 ikkuna Tehospektrin P varmasti oikea, jos sinikäyrä on oikea malli havainnoille 7.80 7.75 7.70 7.65 Vihje: Laskuharjoituksessa H6b laskettiin aiemmin τ, 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