Danych Meteorologicznych Sylwester Arabas (ćwiczenia do wykładu dra Krzysztofa Markowicza) Instytut Geofizyki, Wydział Fizyki Uniwersytetu Warszawskiego 11. stycznia 2010 r.
Zadanie 13.1 dane: pomiary z obserwatorium SMEAR II w Hyytiälä w Finlandii http://www.atm.helsinki.fi/smear/ http://www.mm.helsinki.fi/hyytiala/ Hyytiälä Forestry Field Station The Station: Welcome! Front Page Information Teaching Research Links History : Hyytiälä Forestry Field Station is part of the Faculty of Agriculture and Forestry at the Helsinki Contact Information: University. The object of the station is to enable both teaching and research at field conditions. The station also provides facilities for arrangement of meetings and seminars as well as Office: possibilities for different leisure activities. Hyytiäläntie 124 35500 Korkeakoski Finland polecenie: znalezienie widma mocy składowych fourierowskich (periodogramu a ) serii czasowej pomiarów stosunku zmieszania CO 2 w Hyytiälä (przy okazji wyznaczenie trendu liniowego). a Dla zbiorów danych zawierających dane nieregularnie rozłożone w czasie (również ze względu na brakujące rekordytak jak w tym przypadku) lepiej stosować np. periodogram Lomba
Palaeoclimate Chapter 6 Figure 6.1. (Top) Atmospheric CO and continental glaciation 400 Ma to present. Vertical blue bars mark the timing and palaeolatitudinal extent of ice sheets (after Crowley, 441 Figure 6.1. (Top) Atmospheric CO2 and continental glaciation 400 Ma to present. Vertical blue bars mark the timing and palaeolatitudinal extent of ice sheets (after Crowley, 1998). Plotted CO2 records represent five-point running averages from each of the four major proxies (see Royer, 2006 for details of compilation). Also plotted are the plausible ranges of CO2 from the geochemical carbon cycle model GEOCARB III (Berner and Kothavala, 2001). All data have been adjusted to the Gradstein et al. (2004) time scale. (Middle) Global compilation of deep-sea benthic foraminifera 18O isotope records from 40 Deep Sea Drilling Program and Ocean Drilling Program sites (Zachos et al., 2001) updated with high-resolution records for the Eocene through Miocene interval (Billups et al., 2002; Bohaty and Zachos, 2003; Lear et al., 2004). Most data were derived from analyses of two common and long-lived benthic taxa, Cibicidoides and Nuttallides. To correct for genus-specific isotope vital effects, the 18O values were adjusted by +0.64 and +0.4 (Shackleton et al., 1984), respectively. The ages are relative to the geomagnetic polarity time scale of Berggren et al. (1995). The raw data were smoothed using a fivepoint running mean, and curve-fitted with a locally weighted mean. The 18O temperature values assume an ice-free ocean ( 1.0 Standard Mean Ocean Water), and thus only apply to the time preceding large-scale antarctic glaciation (~35 Ma). After the early Oligocene much of the variability (~70%) in the 18O record reflects changes in antarctic and Northern Hemisphere ice volume, which is represented by light blue horizontal bars (e.g., Hambrey et al., 1991; Wise et al., 1991; Ehrmann and Mackensen, 1992). Where the bars are dashed, they represent periods of ephemeral ice or ice sheets smaller than present, while the solid bars represent ice sheets of modern or greater size. The evolution and stability of the West Antarctic Ice Sheet (e.g., Lemasurier and Rocchi, 2005) remains an important area of uncertainty that could affect estimates of future sea level rise. (Bottom) Detailed record of CO2 for the last 65 Myr. Individual records of CO2 and associated errors are colour-coded by proxy method; when possible, records are based on replicate samples (see Royer, 2006 for details and data references). Dating errors are typically less than ±1 Myr. The range of error for each CO2 proxy varies considerably, with estimates based on soil nodules yielding the greatest uncertainty. Also plotted are the plausible ranges of CO2 from three geochemical carbon cycle models. Chapter 6 Zadanie 13.1 kontekst historyczno-polityczny IPCC 4AR-WG1: ilustracja 6.1 ze strony 441 (rozdział 6) Palaeoclimate
Zadanie 13.1 przykładowe rozwiązanie (1/2) pod powłoką (razem ze wstępnym przygotowaniem danych) $ awk {for (f=1;f<=nf;f++) print f : $f} hdr lista kolumn i ich numeracja $ cat *.dat awk $20== NaN {i++} END {print i / NR} sprawdzenie jaka część rekordów to NaN $ cat *.dat awk $20!= NaN {i++} i>0 {print $20} > data pomiary CO2 od pierwszego nie- NaN $ tail -r data awk $1!= NaN {i++} i>0 {print $1} > atad j.w. od końca $ tail -r atad > data powrócenie do normalnego porządku rekordów $ gdl > zad13 1 trend: 2.02946 ppm/rok
Zadanie 13.1 przykładowe rozwiązanie (2/2) zad13 1.pro 1 pro periodogram, czas, sgnl, _extra = ex 2 n = n_elements(czas) 3 dt = czas[1]-czas[0] 4 f = findgen(n/2+1) / n / dt 5 amp2 = abs((fft(sgnl))[0:n/2])^2 6 amp2[1:n/2-1] *= 2 ; uwzgl. częstości ujemnych 7 moc_db = 10*alog10(amp2/max(amp2)) 8 oplot, f, moc_db, _extra = ex 9 end 10 11 pro zad13_1 12!P.MULTI = [0,1,2] &!X.STYLE = 1 13 14 ; wczytanie i wykreślenie danych z pliku 15 sgnl = (read_ascii('dane/data')).field1 16 dt = 30*60d 17 n = n_elements(sgnl) 18 czas = findgen(n) * dt 19 plot, czas, sgnl, xtitle="czas [s]", ytitle="stosunek zmieszania CO2 [ppm]", $ 20 /ynozero 21 22 ; NaN -> wartości interp. (lepiej interp. sinusoidami/periodogram Lomba) 23 corr = where(finite(sgnl), n_corr, complement=nans, ncomplement=n_nans) 24 if n_nans gt 0 then sgnl[nans] = interpol(sgnl[corr], corr, nans) 25 26 ; odjęcie i wypisanie trendu liniowego 27 lfit = linfit(czas, sgnl, yfit=trend) 28 sgnl -= trend 29 print, "trend: ", float(lfit[1]*60*60*24*365), " ppm/rok" 30 31 ; przemnożenie przez okno Hanna 32 sgnl *= hanning(n) 33 34 ; obliczenie i wykreślenie widma mocy 35 plot, [1./n/dt, 1d/60/60], [0d, -40], /nodata, xtitle="f [Hz]", $ 36 /xlog, ytitle="widmo mocy (periodogram) [db]" 37 periodogram, czas, sgnl, psym=10 38 oplot, psym=4, [1d/60/60/24, 1d/60/60/24/7, 1d/60/60/24/365], [-2,-2,-2] 39 xyouts, 1.1*[1d/60/60/24, 1d/60/60/24/7, 1d/60/60/24/365], $ 40 [-3,-3,-3], ['doba','tydzien','rok'] 41 end
Zadanie Odfiltrowanie w sygnale analizowanym w zadaniu 13.1 zmienności rocznej.
Szybka Transformacja Fouriera (FFT) w u fft() zwraca dyskretną transformatę Fouriera argumentu (zespolone współczynniki rozkładu w bazie fourierowskiej) lub transformatę odwrotną; tablica przekazana w argumencie rzutowana jest na typ zespolony; funkcja może też obliczać transformaty tablic wielowymiarowych (np. analiza obrazów); obliczenia, w zależności od konfiguracji a wykonywane są przez biblioteki GSL lub FFTW sposób użycia trnsfrmt = fft(sgnł) dla tablicy jednowymiarowej (sgnł, trnsfrmt C): trnsfmt[m] = N 1 2πi sgnł[k] e N k mk sgnł = fft(trnsfrmt, /inverse) sgnł[k] = k wybrane argumenty nazwane i flagi 2πi trnsfrmt[m] e N mk dimension=n określenie dla którego wymiaru liczona jest transformata w przypadku argumentu wielowymiarowego (domyślnie liczona jest w każdym z wymiarów) /overwrite zapis wyniku do tablicy przekazanej w argumencie (algorytm in-situ) /inverse transformacja odwrotna interpretacja m i k dla parzystego N próbek próbkowanych co t (jednostki przykładowe ) t(k) = k t czas [s] f (m N 2 ) = N t m częstotliwości [Hz] od 0 (DC) do N/2 N t = 2 t 1 (Nyquista) f (m > N 2 ) = m N częstotliwości [Hz] od N/2 1 do 1 N t N t N t interpretacja sgnł[k] i trnsfmt[m] logmod=alog10(abs(trnsfrmt)) ( trnsfrmt ) A(m) = 10 log 10 amplitudy [db] amp=10*(logmod-max(logmod)) max( trnsfrmt ) φ(m) = arg(trnsfmt) ( fazy składowych ) [1 ] phi=atan(trnsfmt, /phase)/!dtor trnsfrmt P(m) = 10 log 2 10 max( trnsfrmt 2 periodogram (estymator widma mocy) [db] moc=2*amp ) dla sygnału R: trnsfrmt = trnsfrmt, A(f ) = A( f ), φ(f ) = φ( f ) przykład użycia w zadaniu 13.1
odjęcie trendu liniowego od sygnału przed FFT : dopasowanie prostej metodą najmn. kwadr. trend demo.pro 1 pro periodogram, czas, sgnl, _extra = ex 2 n = n_elements(czas) 3 dt = czas[1]-czas[0] 4 f = findgen(n/2+1) / n / dt 5 amp2 = abs((fft(sgnl))[0:n/2])^2 6 amp2[1:n/2-1] *= 2 ; uwzgl. cz!sto"ci ujemnych 7 moc_db = 10*alog10(amp2/max(amp2)) 8 oplot, f, moc_db, psym=10, _extra = ex 9 end 10 11 pro trend_demo 12 n = 512 & dt = 1./(n-1) * 2 *!PI 13 nyquist =.5 / dt 14 15 czas = findgen(n) * dt 16 sgnl = sin(nyquist/16 * 2*!PI * czas) + $ 17 cos(nyquist/4 * 2*!PI * czas) / 4 + $ 18 czas 19 lfit = linfit(czas, sgnl, yfit=trnd) 20 21!P.MULTI = [0,1,2] &!X.STYLE = 1 22 23 plot, linestyle=0, czas, sgnl, $ 24 xtitle="czas [s]", ytitle="amplituda", $ 25 title="y=sin(fnyq/16 * 2pi * x) +" + $ 26 " cos(fnyq/4 * 2pi * x)/4 + x" 27 oplot, linestyle=4, czas, sgnl - trnd 28 oplot, czas, trnd 29 30 plot, [0, nyquist], [0, -75], /nodata, $ 31 xtitle="f [Hz]", /xlog, $ 32 ytitle="widmo mocy (periodogram) [db]" 33 periodogram, linestyle=0, czas, sgnl 34 periodogram, linestyle=4, czas, sgnl - trnd 35 end linfit() wyznacza współczynniki ([a,b]) prostej (y=a+bx) dopasowanej do danych przekazanych w argumencie metodą najmniejszych kwadratów (minimalizacja χ 2 przy założeniu błędów/szumów o rozkładzie Gaussa); współczynniki = linfit(wartości x, wartości y) współczynniki = linfit(wartości x, wartości y, measure errors=niepewności y) współczynniki = linfit(wartości x, wartości y, chisq=niezredukowane chi kwadrat) współczynniki = linfit(wartości x, wartości y, yfit=dopasowane y)
Przeciekanie widma a kształt okna czasowego : okna Hanna i Hamminga hann demo.pro 1 pro periodogram, czas, sgnl, _extra = ex 2 n = n_elements(czas) 3 dt = czas[1]-czas[0] 4 f = findgen(n/2+1) / n / dt 5 amp2 = abs((fft(sgnl))[0:n/2])^2 6 amp2[1:n/2-1] *= 2 ; uwzgl. cz!sto"ci ujemnych 7 moc_db = 10*alog10(amp2/max(amp2)) 8 ; norm. do max wi!c bez norm. do sumy wag w oknie 9 oplot, f, moc_db, psym=10, _extra = ex 10 end 11 12 pro hann_demo 13 n = 512 & dt = 1./(n-1) * 2 *!PI 14 nyquist =.5 / dt 15 16 czas = findgen(n) * dt 17 sgnl = sin(nyquist/11 * 2*!PI * czas) + $ 18 cos(nyquist/3 * 2*!PI * czas) / 4 19 hann = hanning(n) 20 21!P.MULTI = [0,1,2] &!X.STYLE = 1 22 23 plot, linestyle=4, czas, sgnl, $ 24 xtitle="czas [s]", ytitle="amplituda", $ 25 title="y=sin(fnyq/11 * 2pi * x) +" + $ 26 " cos(fnyq/3 * 2pi * x)/4" 27 oplot, linestyle=0, czas, sgnl*hann 28 oplot, czas, hann 29 30 plot, [0, nyquist], [0, -150], /nodata, $ 31 xtitle="f [Hz]", /xlog, $ 32 ytitle="widmo mocy (periodogram) [db]" 33 periodogram, linestyle=4, czas, sgnl 34 periodogram, linestyle=0, czas, sgnl * hann 35 end hanning() zwraca tablicę o długości zadanej w argumencie, z wartościami funkcji ( ) 2πk cosinusowego okna czasowego wyliczonymi wg wzoru w[k]=α (1 α) cos N okno Hanna = hanning(n) okno Hamminga = hanning(n, alpha=.54)
: zmienne systemowe w strukturze!values finite() zwraca prawdę gdy wartość argumentu nie jest ani nieskończona, ani nieokreślona (NaN) prawda gdy wyrażenie skończone i określone = finite(wyrażenie) zmienne systemowe (tylko do odczytu) w strukturze!values!values.f INFINITY nieskończoność dla typu rzeczywistego 32-bitowego (float)!values.f NAN wartość nieokreślona dla typu rzeczywistego 32-bitowego (double)!values.d INFINITY nieskończoność dla typu rzeczywistego 64-bitowego (double)!values.d NAN wartość nieokreślona dla typu rzeczywistego 64-bitowego (double) przykład użycia > print, finite(double( nan ))? okreslone : nieokreslone nieokreslone > print, finite(1)? okreslone : nieokreslone okreslone > print, finite(!values.d NAN)? okreslone : nieokreslone nieokreslone
: prosta pętla w bashu, zarządzanie procesami przykład prostej pętli w bashu $ for i in *.ps; do ps2pdf $i; done; wykona ps2pdf dla wszystkich plików ps w aktualnym katalogu podstawowe polecenia związane z zarządzaniem procesami ps wypisuje listę procesów użytkownika ( pidy w pierwszej kol.) ps ux j.w. dla wszystkich użytkowników ( pidy w drugiej kolumnie) kill pid wysyła sygnał do procesu (domyślnie TERM) killall nazwa wysyła sygnał (domyślnie TERM) do procesów o podanej nazwie top wyświetla, aktualizowaną na bieżąco, tabelę procesów
Narzędzia owe: przykład użycia (składnia analogiczna do cp) man ścieżka lokalna użytkownik@host:ścieżka zdalna kopiuje plik na serwer użytkownik@host:ścieżka zdalna. kopiuje plik z serwera do aktualnego katalogu (.) -r katalog użytkownik@host:ścieżka zdalna przesyła cały katalog -C... włącza kompresję przesyłanych danych
narzędzia owe: cat, tac, head i tail cat przekazuje na standardowe wyjście zawartość pliku tac działa jak cat, ale odwraca kolejność linii head przekazuje na standardowe wyjście zadaną (domyślnie 10) ilość początkowych linii/bajtów standardowego wejścia/pliku man head head PLIK head -N LINII PLIK head -c N BAJTÓW PLIK... head tail przekazuje na standardowe wyjście zadaną (domyślnie 10) ilość końcowych linii/bajtów standardowego wejścia/pliku man tail tail PLIK tail -N LINII PLIK tail -c N BAJTÓW PLIK... tail tail -f nie kończy działania po napotkaniu na koniec pliku czeka na nowe dane tail -r równoznaczne tac (patrz powyżej)