43 def factors_to_fir_kernel(coh_facs):
45 Compute a finite impulse-response filter kernel from a power 46 spectral density conforming to the LAL normalization convention, 47 such that if zero-mean unit-variance Gaussian random noise is fed 48 into an FIR filter using the kernel the filter's output will 49 possess the given PSD. The PSD must be provided as a 50 REAL8FrequencySeries object (see lal's swig binding documentation). 52 The return value is the tuple (kernel, latency, sample rate). The 53 kernel is a numpy array containing the filter kernel, the latency 54 is the filter latency in samples and the sample rate is in Hz. 60 assert coh_facs.f0 == 0.0
66 data = coh_facs.data.data
67 sample_rate = 2 * int(round(coh_facs.f0 + len(data) * coh_facs.deltaF))
74 data[0] = data[-1] = 0.0
75 tmp = numpy.zeros((2 * len(data) - 1,), dtype = data.dtype)
80 kernel = scipy.fftpack.irfft(data)
81 kernel = numpy.roll(kernel, (len(kernel) - 1) / 2)
88 norm_before = numpy.dot(kernel, kernel)
89 kernel *= lal.CreateTukeyREAL8Window(len(kernel), .5).data.data
90 kernel *= math.sqrt(norm_before / numpy.dot(kernel, kernel))
96 latency = (len(kernel) + 1) / 2 - 1
102 return kernel, latency, sample_rate
104 def psd_to_impulse_response(PSD1, PSD2):
106 assert PSD1.f0 == PSD2.f0
107 assert PSD1.deltaF == PSD2.deltaF
108 assert len(PSD1.data.data) == len(PSD2.data.data)
110 coh_facs_H1 = lal.CreateREAL8FrequencySeries(
114 deltaF = PSD1.deltaF,
115 sampleUnits = lal.DimensionlessUnit,
116 length = len(PSD1.data.data)
118 coh_facs_H1.data.data = PSD2.data.data / (PSD1.data.data + PSD2.data.data)
119 coh_facs_H1.data.data[0] = coh_facs_H1.data.data[-1] = 0.0
121 coh_facs_H2 = lal.REAL8FrequencySeries(
125 deltaF = PSD2.deltaF,
126 sampleUnits = lal.DimensionlessUnit,
127 length = len(PSD2.data.data)
129 coh_facs_H2.data = PSD1.data.data / (PSD1.data.data + PSD2.data.data)
130 coh_facs_H2.data[0] = coh_facs_H2.data[-1] = 0.0
136 H1_impulse, H1_latency, H1_srate = factors_to_fir_kernel(coh_facs_H1)
137 H2_impulse, H2_latency, H2_srate = factors_to_fir_kernel(coh_facs_H2)
139 assert H1_srate == H2_srate
141 return H1_impulse, H1_latency, H2_impulse, H2_latency, H1_srate