def generate_subset_weights_and_err(spectra, eigvals): K, L = spectra.shape all_weights, _ = utils.adaptive_weights_cython( spectra, eigvals, L ) # the K delete-one adaptive weightings jackknifed_weights = np.empty( (K, K-1, L) ) # the K RMS errors between original w{k != i} and delete-one w{k != i} rms_err = np.empty( (K, L) ) full_set = set(range(K)) for i in full_set: sub = list( full_set.difference(set([i])) ) ts_i = np.take(spectra, sub, axis=0) eigs_i = np.take(eigvals, sub) jackknifed_weights[i], _ = utils.adaptive_weights_cython( ts_i, eigs_i, L ) orig_weights = np.take(all_weights, sub, axis=0) err = orig_weights - jackknifed_weights[i] rms_err[i] = (err**2).mean(axis=0)**0.5 return rms_err, jackknifed_weights, all_weights
def compare_weight_methods(spectra, eigvals): L = spectra.shape[-1] fxf_weights, _ = utils.adaptive_weights_cython(spectra, eigvals, L) vec_weights, _ = utils.adaptive_weights(spectra, eigvals, L) err = np.abs(fxf_weights - vec_weights) return err
NW = 5 K = 2*NW-1 tapers, eigs = alg.DPSS_windows(n_samples, NW, 2*NW-1) tdata = tapers[None,:,:] * pdata[:,None,:] tspectra = np.fft.fft(tdata) mag_sqr_spectra = np.abs(tspectra) np.power(mag_sqr_spectra, 2, mag_sqr_spectra) # Only compute half the spectrum.. coherence for real sequences is symmetric L = n_samples/2 + 1 #L = n_samples w = np.empty( (nseq, K, L) ) for i in xrange(nseq): w[i], _ = utils.adaptive_weights_cython(mag_sqr_spectra[i], eigs, L) # calculate the coherence csd_mat = np.zeros((nseq, nseq, L), 'D') psd_mat = np.zeros((2, nseq, nseq, L), 'd') coh_mat = np.zeros((nseq, nseq, L), 'd') coh_var = np.zeros_like(coh_mat) for i in xrange(nseq): for j in xrange(i): sxy = alg.mtm_cross_spectrum( tspectra[i], tspectra[j], (w[i], w[j]), sides='onesided' ) sxx = alg.mtm_cross_spectrum( tspectra[i], tspectra[i], (w[i], w[i]), sides='onesided' ).real syy = alg.mtm_cross_spectrum(