Skip to content
Snippets Groups Projects
Commit 9745ee1e authored by Aaron Viets's avatar Aaron Viets
Browse files

lal_transferfunction: Made fir filter length independent of fft length. Added...

lal_transferfunction:  Made fir filter length independent of fft length. Added ability to resample and low-pass filter transfer functions to produce fir filters. Reduces noise in transfer functions wieh multiple witness channels are equally well correlated with the signal to be cleaned.
parent 035a22e0
No related branches found
No related tags found
No related merge requests found
......@@ -1511,8 +1511,10 @@ static GstFlowReturn transform(GstBaseTransform *trans, GstBuffer *inbuf, GstBuf
normalization += element->sinc_table[j];
for(j = i; j <= element->sinc_length / 2; j += cadence)
element->sinc_table[j] /= normalization;
for(j = cadence - i; j <= element->sinc_length / 2; j += cadence)
element->sinc_table[j] /= normalization;
if(i) {
for(j = cadence - i; j <= element->sinc_length / 2; j += cadence)
element->sinc_table[j] /= normalization;
}
}
/* If cadence is even, we need to account for one more normalization without "over-normalizing." */
if(!((cadence) % 2)) {
......
This diff is collapsed.
......@@ -653,7 +653,7 @@ def update_filter(filter_maker, arg, filter_taker, maker_prop_name, taker_prop_n
firfilter = filter_maker.get_property(maker_prop_name)[filter_number][::-1]
filter_taker.set_property(taker_prop_name, firfilter)
def clean_data(pipeline, signal, signal_rate, witnesses, witness_rate, fft_length, fft_overlap, num_ffts, update_samples, obsready = None, filename = None):
def clean_data(pipeline, signal, signal_rate, witnesses, witness_rate, fft_length, fft_overlap, num_ffts, update_samples, fir_length, frequency_resolution, obsready = None, filename = None):
#
# Note: this function can cause pipelines to lock up. Adding queues does not seem to help.
......@@ -677,7 +677,7 @@ def clean_data(pipeline, signal, signal_rate, witnesses, witness_rate, fft_lengt
transfer_functions = mkinterleave(pipeline, numpy.insert(witness_tees, 0, resampled_signal, axis = 0))
if obsready is not None:
transfer_functions = mkgate(pipeline, transfer_functions, obsready, 1)
transfer_functions = pipeparts.mkgeneric(pipeline, transfer_functions, "lal_transferfunction", fft_length = fft_length, fft_overlap = fft_overlap, num_ffts = num_ffts, update_samples = update_samples, make_fir_filters = -1, update_after_gap = True, filename = filename)
transfer_functions = pipeparts.mkgeneric(pipeline, transfer_functions, "lal_transferfunction", fft_length = fft_length, fft_overlap = fft_overlap, num_ffts = num_ffts, update_samples = update_samples, make_fir_filters = -1, fir_length = fir_length, frequency_resolution = frequency_resolution, high_pass = 9, update_after_gap = True, filename = filename)
signal_minus_noise = [signal_tee]
for i in range(0, len(witnesses)):
minus_noise = pipeparts.mkgeneric(pipeline, witness_tees[i], "lal_tdwhiten", kernel = default_fir_filter, latency = fft_length / 2, taper_length = 20 * fft_length)
......
......@@ -108,7 +108,7 @@ def lal_transferfunction_02(pipeline, name):
rate = 16384 # Hz
buffer_length = 1.0 # seconds
test_duration = 100.0 # seconds
test_duration = 500.0 # seconds
width = 64 # bits
channels = 1
freq = 512 # Hz
......@@ -126,7 +126,7 @@ def lal_transferfunction_02(pipeline, name):
witness1 = calibration_parts.mkadder(pipeline, calibration_parts.list_srcs(pipeline, calibration_parts.highpass(pipeline, hoft, rate, fcut = 400), calibration_parts.lowpass(pipeline, noise, rate, fcut = 400)))
witness2 = calibration_parts.mkadder(pipeline, calibration_parts.list_srcs(pipeline, calibration_parts.lowpass(pipeline, hoft, rate, fcut = 600), calibration_parts.highpass(pipeline, noise, rate, fcut = 600)))
clean_data = calibration_parts.clean_data(pipeline, hoft, rate, calibration_parts.list_srcs(pipeline, witness1, witness2), rate, rate / 2, rate / 4, 128, rate * test_duration, filename = "highpass_lowpass_tfs.txt")
clean_data = calibration_parts.clean_data(pipeline, hoft, rate, calibration_parts.list_srcs(pipeline, witness1, witness2), rate, rate / 2, rate / 4, 128, rate * test_duration, int(0.75 * rate), 20.0 / rate, filename = "highpass_lowpass_tfs.txt")
pipeparts.mknxydumpsink(pipeline, clean_data, "%s_out.txt" % name)
return pipeline
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment