def interpolate_complex_frequency(series, delta_f, zeros_offset=0, side='right'): """Interpolate complex frequency series to desired delta_f. Return a new complex frequency series that has been interpolated to the desired delta_f. Parameters ---------- series : FrequencySeries Frequency series to be interpolated. delta_f : float The desired delta_f of the output zeros_offset : optional, {0, int} Number of sample to delay the start of the zero padding side : optional, {'right', str} The side of the vector to zero pad Returns ------- interpolated series : FrequencySeries A new FrequencySeries that has been interpolated. """ new_n = int((len(series) - 1) * series.delta_f / delta_f + 1) old_N = int((len(series) - 1) * 2) new_N = int((new_n - 1) * 2) time_series = TimeSeries(zeros(old_N), delta_t=1.0 / (series.delta_f * old_N), dtype=real_same_precision_as(series)) ifft(series, time_series) time_series.roll(-zeros_offset) time_series.resize(new_N) if side == 'left': time_series.roll(zeros_offset + new_N - old_N) elif side == 'right': time_series.roll(zeros_offset) out_series = FrequencySeries(zeros(new_n), epoch=series.epoch, delta_f=delta_f, dtype=series.dtype) fft(time_series, out_series) return out_series
def interpolate_complex_frequency(series, delta_f, zeros_offset=0, side='right'): """Interpolate complex frequency series to desired delta_f. Return a new complex frequency series that has been interpolated to the desired delta_f. Parameters ---------- series : FrequencySeries Frequency series to be interpolated. delta_f : float The desired delta_f of the output zeros_offset : optional, {0, int} Number of sample to delay the start of the zero padding side : optional, {'right', str} The side of the vector to zero pad Returns ------- interpolated series : FrequencySeries A new FrequencySeries that has been interpolated. """ new_n = int( (len(series)-1) * series.delta_f / delta_f + 1) samples = numpy.arange(0, new_n) * delta_f old_N = int( (len(series)-1) * 2 ) new_N = int( (new_n - 1) * 2 ) time_series = TimeSeries(zeros(old_N), delta_t =1.0/(series.delta_f*old_N), dtype=real_same_precision_as(series)) ifft(series, time_series) time_series.roll(-zeros_offset) time_series.resize(new_N) if side == 'left': time_series.roll(zeros_offset + new_N - old_N) elif side == 'right': time_series.roll(zeros_offset) out_series = FrequencySeries(zeros(new_n), epoch=series.epoch, delta_f=delta_f, dtype=series.dtype) fft(time_series, out_series) return out_series
outname = outdir + '/' + cname + "_t_realh" + ".dat" np.savetxt(outname, list(zip(mk1.times, np.real(mk1.h)))) print("match between {} and the mk1:".format(approximant)) wf_dt = wf_t[1] - wf_t[0] mk1_t = mk1.times mk1_dt = mk1_t[1] - mk1_t[0] #f_lower_int = phenom.HztoMf(sys['f_lower'], sys['mtot']) ts1 = TimeSeries(np.real(wf_h), delta_t=wf_dt) ts2 = TimeSeries(np.real(mk1.h), delta_t=mk1_dt) tlen = max(len(ts1), len(ts2)) ts1.resize(tlen) ts2.resize(tlen) #ma, _ = pycbc.filter.match(ts1, ts2, low_frequency_cutoff=f_lower_int) ma, _ = pycbc.filter.match(ts1, ts2) print("\t {}".format(ma)) print('plotting aligned waveform') #ts1, ts2 = pycbc.waveform.utils.coalign_waveforms(ts1, ts2, low_frequency_cutoff=f_lower_int) ts1, ts2 = pycbc.waveform.utils.coalign_waveforms(ts1, ts2) _, mk1_idx = ts2.abs_max_loc() mk1_shift = ts2.sample_times[mk1_idx] figname = outdir + '/' + "{}-vs-mk1".format(sys['name']) + '.png'