30 from pylal.xlal.datatypes.real8frequencyseries
import REAL8FrequencySeries
40 def factors_to_fir_kernel(coh_facs):
42 Compute a finite impulse-response filter kernel from a power
43 spectral density conforming to the LAL normalization convention,
44 such that if zero-mean unit-variance Gaussian random noise is fed
45 into an FIR filter using the kernel the filter's output will
46 possess the given PSD. The PSD must be provided as a
47 REAL8FrequencySeries object (see
48 pylal.xlal.datatypes.real8frequencyseries).
50 The return value is the tuple (kernel, latency, sample rate). The
51 kernel is a numpy array containing the filter kernel, the latency
52 is the filter latency in samples and the sample rate is in Hz.
58 assert coh_facs.f0 == 0.0
65 sample_rate = 2 * int(round(coh_facs.f0 + len(data) * coh_facs.deltaF))
72 data[0] = data[-1] = 0.0
73 tmp = numpy.zeros((2 * len(data) - 1,), dtype = data.dtype)
78 kernel = scipy.fftpack.irfft(data)
79 kernel = numpy.roll(kernel, (len(kernel) - 1) / 2)
86 norm_before = numpy.dot(kernel, kernel)
87 kernel *= lal.CreateTukeyREAL8Window(len(kernel), .5).data.data
88 kernel *= math.sqrt(norm_before / numpy.dot(kernel, kernel))
94 latency = (len(kernel) + 1) / 2 - 1
100 return kernel, latency, sample_rate
102 def psd_to_impulse_response(PSD1, PSD2):
104 assert PSD1.f0 == PSD2.f0
105 assert PSD1.deltaF == PSD2.deltaF
106 assert len(PSD1.data) == len(PSD2.data)
108 coh_facs_H1 = REAL8FrequencySeries()
109 coh_facs_H1.f0 = PSD1.f0
110 coh_facs_H1.deltaF = PSD1.deltaF
111 coh_facs_H1.data = PSD2.data/(PSD1.data + PSD2.data)
113 data = coh_facs_H1.data
114 data[0] = data[-1] = 0.0
115 coh_facs_H1.data = data
117 coh_facs_H2 = REAL8FrequencySeries()
118 coh_facs_H2.f0 = PSD2.f0
119 coh_facs_H2.deltaF = PSD2.deltaF
120 coh_facs_H2.data = PSD1.data/(PSD1.data + PSD2.data)
122 data = coh_facs_H2.data
123 data[0] = data[-1] = 0.0
124 coh_facs_H2.data = data
130 H1_impulse, H1_latency, H1_srate = factors_to_fir_kernel(coh_facs_H1)
131 H2_impulse, H2_latency, H2_srate = factors_to_fir_kernel(coh_facs_H2)
133 assert H1_srate == H2_srate
135 return H1_impulse, H1_latency, H2_impulse, H2_latency, H1_srate