Example #1
0
def PSD_palm(t_para, tSeq, zInd, xNum, yNum, varSeq, segNum):

    t_start = t_para[0]
    t_end = t_para[1]
    t_delta = t_para[2]
    fs = 1 / t_delta  # sampling frequency
    t_num = int((t_end - t_start) / t_delta + 1)
    t_seq = np.linspace(t_start, t_end, t_num)

    PSD_list = []
    for yInd in range(yNum):
        for xInd in range(xNum):
            vSeq = varSeq[:, zInd, yInd, xInd]
            # interpolate
            f = interp1d(tSeq, vSeq, kind='linear', fill_value='extrapolate')
            v_seq = f(t_seq)
            # detrend
            deg_ = 1
            polyFunc = np.poly1d(np.polyfit(t_seq, v_seq, deg=deg_))
            tmp = v_seq - polyFunc(t_seq)
            tmp = tmp - tmp.mean()
            # bell tapering
            tmp = funcs.window_weight(tmp)
            # FFT
            # omega_seq, tmp = PSD_omega(t_seq,tmp)
            f_seq, tmp = scipy.signal.csd(tmp,
                                          tmp,
                                          fs,
                                          nperseg=segNum,
                                          noverlap=None)
            PSD_list.append(tmp)
    PSD_seq = np.average(np.array(PSD_list), axis=0)

    return f_seq, PSD_seq
Example #2
0
def PSD_ky_sowfa(tSeq, ySeq, xSeq, zInd, d, varSeq, segNum):
    tNum = tSeq.size
    xNum = xSeq.size
    yNum = ySeq.size
    pInd_start = xNum * yNum * zInd
    pInd_end = xNum * yNum * (zInd + 1)

    psd_list = []
    for t in range(tNum):
        v = varSeq[pInd_start:pInd_end, t]
        # detrend
        deg_ = 1
        polyFunc = np.poly1d(np.polyfit(ySeq, v, deg=deg_))
        v_ = v - polyFunc(ySeq)
        # bell tapering
        v_ = funcs.window_weight(v_)
        # FFT
        # omega_seq, tmp = PSD_omega(t_seq,tmp)
        ky_seq, psd = scipy.signal.csd(v_,
                                       v_,
                                       2 * np.pi / d,
                                       nperseg=segNum,
                                       noverlap=None)
        psd_list.append(psd)
    psd_seq = np.average(np.array(psd_list), axis=0)
    return ky_seq, psd_seq
Example #3
0
def PSD_sowfa(t_para, tSeq, zInd, xNum, yNum, varSeq, segNum):
    """
    Calculate power spectral density
    INPUT
        t_para: time parameters, tuple, e.g. (144000.0, 146400, 0.1)
        tSeq: 1D array of times
        zInd: height
        xNum: length of xSeq
        yNum: length of ySeq
        varSeq: 2D array of the target variable, 1st dim point ID, 2nd dim time
        segNum: length of the segment
    OUTPUT
        f_seq: frequency sequence
        PSD_seq: PSD sequence
    """
    t_start = t_para[0]
    t_end = t_para[1]
    t_delta = t_para[2]
    fs = 1 / t_delta  # sampling frequency
    t_num = int((t_end - t_start) / t_delta + 1)
    t_seq = np.linspace(t_start, t_end, t_num)

    data = varSeq
    tNum = tSeq.size
    pInd_start = xNum * yNum * zInd
    pInd_end = xNum * yNum * (zInd + 1)
    # coors = data_org['coors'][xNum*yNum*zInd:xNum*yNum*(zInd+1)]
    # pNum = coors.shape[0]
    PSD_list = []
    for p in range(pInd_start, pInd_end):
        vSeq = varSeq[p]
        # interpolate
        f = interp1d(tSeq, vSeq, kind='linear', fill_value='extrapolate')
        v_seq = f(t_seq)
        # detrend
        deg_ = 1
        polyFunc = np.poly1d(np.polyfit(t_seq, v_seq, deg=deg_))
        tmp = v_seq - polyFunc(t_seq)
        tmp = tmp - tmp.mean()
        # bell tapering
        tmp = funcs.window_weight(tmp)
        # FFT
        # omega_seq, tmp = PSD_omega(t_seq,tmp)
        f_seq, tmp = scipy.signal.csd(tmp,
                                      tmp,
                                      fs,
                                      nperseg=segNum,
                                      noverlap=None)
        PSD_list.append(tmp)
    PSD_seq = np.average(np.array(PSD_list), axis=0)
    return f_seq, PSD_seq
Example #4
0
def PSD_ky_palm(tSeq, ySeq, zInd, d, varSeq, segNum):
    psd_list = []
    for tInd in range(tSeq.size):
        v = varSeq[tInd, zInd, :, 0]
        # detrend
        deg_ = 1
        polyFunc = np.poly1d(np.polyfit(ySeq, v, deg=deg_))
        v_ = v - polyFunc(ySeq)
        # bell tapering
        v_ = funcs.window_weight(v_)
        ky_seq, psd = scipy.signal.csd(v_,
                                       v_,
                                       2 * np.pi / d,
                                       nperseg=segNum,
                                       noverlap=None)
        psd_list.append(psd)
    psd_seq = np.average(np.array(psd_list), axis=0)
    return ky_seq, psd_seq
Example #5
0
def PSD(t_para, tSeq, zInd, xNum, yNum, varSeq, segNum):

    t_start = t_para[0]
    t_end = t_para[1]
    t_delta = t_para[2]
    fs = 1 / t_delta  # sampling frequency
    t_num = int((t_end - t_start) / t_delta + 1)
    t_seq = np.linspace(t_start, t_end, t_num)

    data = varSeq
    tNum = tSeq.size
    pInd_start = xNum * yNum * zInd
    pInd_end = xNum * yNum * (zInd + 1)

    # coors = data_org['coors'][xNum*yNum*zInd:xNum*yNum*(zInd+1)]
    # pNum = coors.shape[0]

    PSD_list = []
    for p in range(pInd_start, pInd_end):
        vSeq = varSeq[p]
        # interpolate
        f = interp1d(tSeq, vSeq, kind='linear', fill_value='extrapolate')
        v_seq = f(t_seq)
        # detrend
        deg_ = 1
        polyFunc = np.poly1d(np.polyfit(t_seq, v_seq, deg=deg_))
        tmp = v_seq - polyFunc(t_seq)
        tmp = tmp - tmp.mean()
        # bell tapering
        tmp = funcs.window_weight(tmp)
        # FFT
        # omega_seq, tmp = PSD_omega(t_seq,tmp)
        f_seq, tmp = scipy.signal.csd(tmp,
                                      tmp,
                                      fs,
                                      nperseg=segNum,
                                      noverlap=None)
        PSD_list.append(tmp)
    PSD_seq = np.average(np.array(PSD_list), axis=0)

    return f_seq, PSD_seq
Example #6
0
    # coors = data_org['coors'][xNum*yNum*zInd:xNum*yNum*(zInd+1)]
    # pNum = coors.shape[0]

    PSD_list = []
    for p in range(pInd_start, pInd_end):
        vSeq = data[p][:, varD]
        # interpolate
        f = interp1d(tSeq, vSeq, fill_value='extrapolate')
        v_seq = f(t_seq)
        # detrend
        deg_ = 1
        polyFunc = np.poly1d(np.polyfit(t_seq, v_seq, deg=deg_))
        tmp = v_seq - polyFunc(t_seq)
        tmp = tmp - tmp.mean()
        # bell tapering
        tmp = funcs.window_weight(tmp)
        # FFT
        # omega_seq, tmp = PSD_omega(t_seq,tmp)
        f_seq, tmp = scipy.signal.csd(tmp,
                                      tmp,
                                      fs,
                                      nperseg=segNum,
                                      noverlap=None)
        PSD_list.append(tmp)
    PSD_seq = np.average(np.array(PSD_list), axis=0)
    plotDataList.append((f_seq, PSD_seq))

# plot
fig, ax = plt.subplots(figsize=(8, 5))
colors = plt.cm.jet(np.linspace(0, 1, zNum))