j1=0,
        k0=k0)  # perform wavelet
    amplitude = np.sqrt(
        np.power(np.real(wave), 2) + np.power(np.imag(wave), 2))
    amplitude = amplitude[0, :]
    phase_amp = np.arctan2(np.imag(wave), np.real(wave))
    phase_amp = phase_amp[0, :]

    # fitting oscillatory phase / amplitude to actual SAT
    reconstruction = amplitude * np.cos(phase_amp)
    fit_x = np.vstack([reconstruction, np.ones(reconstruction.shape[0])]).T
    m, c = np.linalg.lstsq(fit_x, g_amp.data)[0]
    amplitude = m * amplitude + c

mean, var, trend = g.get_seasonality(True)
sg.copy_field(g)
g.return_seasonality(mean, var, trend)
if AMPLITUDE:
    mean2, var2, trend2 = g_amp.get_seasonality(True)
    sg_amp.copy_field(g_amp)
    g_amp.return_seasonality(mean2, var2, trend2)

main_cut_ndx = g.select_date(date(1838, 7, 28), date(2010, 1, 1))
y1 = 1838
phase = phase[0, main_cut_ndx]
if AMPLITUDE:
    amplitude = amplitude[main_cut_ndx]

difference_data = []
meanvar_data = []
示例#2
0
                cond_means[iota] = np.mean(g.data[ndx])
            else:
                cond_means[iota] = np.var(g.data[ndx], ddof=1)
        difference[i, j] = cond_means.max() - cond_means.min(
        )  # append difference to list
        mean_var[i, j] = np.mean(cond_means)

print(
    "[%s] Wavelet analysis done. Now computing wavelet for MF surrogates in parallel..."
    % str(datetime.now()))
surrogates_difference = np.zeros([num_surr] + list(difference.shape))
surrogates_mean_var = np.zeros_like(surrogates_difference)
surr_completed = 0

sg = SurrogateField()
sg.copy_field(g)
mean, var, trend = g.get_seasonality(DETREND=True)


def _cond_difference_surrogates(sg, jobq, resq):
    while jobq.get() is not None:
        difference = np.zeros((sg.lats.shape[0], sg.lons.shape[0]))
        mean_var = np.zeros_like(difference)
        sg.construct_multifractal_surrogates()
        sg.add_seasonality(mean, var, trend)
        for i in range(sg.lats.shape[0]):
            for j in range(sg.lons.shape[0]):
                wave, _, _, _ = wavelet_analysis.continous_wavelet(
                    sg.surr_data[:, i, j],
                    1,
                    False,
示例#3
0
 surr_completed = 0
 diffs = np.zeros((NUM_SURR, ))
 mean_vars = np.zeros_like(diffs)
 g_surrs.data = g.data[start_idx:end_idx].copy()
 g_surrs.time = g.time[start_idx:end_idx].copy()
 if np.all(np.isnan(g_surrs.data) == False):
     # construct the job queue
     jobQ = Queue()
     resQ = Queue()
     for i in range(NUM_SURR):
         jobQ.put(1)
     for i in range(WORKERS):
         jobQ.put(None)
     a = g_surrs.get_seasonality(DETREND=True)
     sg = SurrogateField()
     sg.copy_field(g_surrs)
     if SURR_TYPE == 'AR':
         sg.prepare_AR_surrogates()
     workers = [
         Process(target=_cond_difference_surrogates,
                 args=(sg, g_surrs, a, start_cut, jobQ, resQ))
         for iota in range(WORKERS)
     ]
     for w in workers:
         w.start()
     while surr_completed < NUM_SURR:
         # get result
         diff, meanVar = resQ.get()
         diffs[surr_completed] = diff
         mean_vars[surr_completed] = meanVar
         surr_completed += 1
if AMPLITUDE:
    s0_amp = (1 * y) / fourier_factor
    wave, _, _, _ = wavelet_analysis.continous_wavelet(g_amp.data, 1, False, wavelet_analysis.morlet, dj = 0, s0 = s0_amp, j1 = 0, k0 = k0) # perform wavelet
    amplitude = np.sqrt(np.power(np.real(wave),2) + np.power(np.imag(wave),2))
    amplitude = amplitude[0, :]
    phase_amp = np.arctan2(np.imag(wave), np.real(wave))
    phase_amp = phase_amp[0, :]

    # fitting oscillatory phase / amplitude to actual SAT
    reconstruction = amplitude * np.cos(phase_amp)
    fit_x = np.vstack([reconstruction, np.ones(reconstruction.shape[0])]).T
    m, c = np.linalg.lstsq(fit_x, g_amp.data)[0]
    amplitude = m * amplitude + c

mean, var, trend = g.get_seasonality(True)
sg.copy_field(g)
g.return_seasonality(mean, var, trend)
if AMPLITUDE:
    mean2, var2, trend2 = g_amp.get_seasonality(True)
    sg_amp.copy_field(g_amp)
    g_amp.return_seasonality(mean2, var2, trend2)

main_cut_ndx = g.select_date(date(1838,7,28), date(2010,1,1))
y1 = 1838
phase = phase[0, main_cut_ndx]
if AMPLITUDE:
    amplitude = amplitude[main_cut_ndx]

difference_data = []
meanvar_data = []
示例#5
0
            ndx = ((phase[0,:] >= phase_bins[iota]) & (phase[0,:] <= phase_bins[iota+1]))
            if MEANS:
                cond_means[iota] = np.mean(g.data[ndx])
            else:
                cond_means[iota] = np.var(g.data[ndx], ddof = 1)
        difference[i, j] = cond_means.max() - cond_means.min() # append difference to list    
        mean_var[i, j] = np.mean(cond_means)
        

print("[%s] Wavelet analysis done. Now computing wavelet for MF surrogates in parallel..." % str(datetime.now()))
surrogates_difference = np.zeros([num_surr] + list(difference.shape))
surrogates_mean_var = np.zeros_like(surrogates_difference)
surr_completed = 0

sg = SurrogateField()
sg.copy_field(g)
mean, var, trend = g.get_seasonality(DETREND = True)

def _cond_difference_surrogates(sg, jobq, resq):
    while jobq.get() is not None:
        difference = np.zeros((sg.lats.shape[0], sg.lons.shape[0]))
        mean_var = np.zeros_like(difference)
        sg.construct_multifractal_surrogates()
        sg.add_seasonality(mean, var, trend)
        for i in range(sg.lats.shape[0]):
            for j in range(sg.lons.shape[0]):
                wave, _, _, _ = wavelet_analysis.continous_wavelet(sg.surr_data[:, i, j], 1, False, wavelet_analysis.morlet, dj = 0, s0 = s0, j1 = 0, k0 = k0) # perform wavelet
                phase = np.arctan2(np.imag(wave), np.real(wave)) # get phases from oscillatory modes
                for iota in range(cond_means.shape[0]): # get conditional means for current phase range
                    #phase_bins = get_equiquantal_bins(phase_temp) # equiquantal bins
                    phase_bins = get_equidistant_bins() # equidistant bins
示例#6
0
 surr_completed = 0
 diffs = np.zeros((NUM_SURR,))
 mean_vars = np.zeros_like(diffs)
 g_surrs.data = g.data[start_idx : end_idx].copy()
 g_surrs.time = g.time[start_idx : end_idx].copy()
 if np.all(np.isnan(g_surrs.data) == False):
     # construct the job queue
     jobQ = Queue()
     resQ = Queue()
     for i in range(NUM_SURR):
         jobQ.put(1)
     for i in range(WORKERS):
         jobQ.put(None)
     a = g_surrs.get_seasonality(DETREND = True)
     sg = SurrogateField()
     sg.copy_field(g_surrs)
     if SURR_TYPE == 'AR':
         sg.prepare_AR_surrogates()
     workers = [Process(target = _cond_difference_surrogates, args = (sg, g_surrs, a, start_cut, jobQ, resQ)) for iota in range(WORKERS)]
     for w in workers:
         w.start()
     while surr_completed < NUM_SURR:
         # get result
         diff, meanVar = resQ.get()
         diffs[surr_completed] = diff
         mean_vars[surr_completed] = meanVar
         surr_completed += 1
     for w in workers:
         w.join()
         
     difference_surr.append(np.mean(diffs))
from src.data_class import DataField
from datetime import date, timedelta
import matplotlib.pyplot as plt
import numpy as np
from surrogates.surrogates import SurrogateField
import calendar


ts = OscillatoryTimeSeries('TG_STAID000027.txt', date(1834,7,28), date(2014,1,1), False)
sg = SurrogateField()
g = DataField()


daily_var = np.zeros((365,3))
mean, var_data, trend = ts.g.get_seasonality(True)
sg.copy_field(ts.g)

#MF
sg.construct_multifractal_surrogates()
sg.add_seasonality(mean, var_data, trend)

g.data = sg.surr_data.copy()
g.time = sg.time.copy()

_, var_surr_MF, _ = g.get_seasonality(True)

#FT
sg.construct_fourier_surrogates_spatial()
sg.add_seasonality(mean, var_data, trend)

g.data = sg.surr_data.copy()
示例#8
0
from src.oscillatory_time_series import OscillatoryTimeSeries
from src.data_class import DataField
from datetime import date, timedelta
import matplotlib.pyplot as plt
import numpy as np
from surrogates.surrogates import SurrogateField
import calendar

ts = OscillatoryTimeSeries('TG_STAID000027.txt', date(1834, 7, 28),
                           date(2014, 1, 1), False)
sg = SurrogateField()
g = DataField()

daily_var = np.zeros((365, 3))
mean, var_data, trend = ts.g.get_seasonality(True)
sg.copy_field(ts.g)

#MF
sg.construct_multifractal_surrogates()
sg.add_seasonality(mean, var_data, trend)

g.data = sg.surr_data.copy()
g.time = sg.time.copy()

_, var_surr_MF, _ = g.get_seasonality(True)

#FT
sg.construct_fourier_surrogates_spatial()
sg.add_seasonality(mean, var_data, trend)

g.data = sg.surr_data.copy()