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
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
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
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
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
# 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))