<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Breakthrough Listen
Step1:  Now, let's read the observation data using Waterfall()
Step2:  We can get basic info about the file by reading the filterbank header. The info() method will do this
Step3:  The specifics are discussed in detail in the SIGPROC user guide. Briefly, astronomers use a Celestial coordinate system to specify the location of objects in outer space. The src_raj and src_dej specify the J2000 coordinates, in terms of Right Ascension and Declination (RA & DEC), toward which the telescope is pointing. tstart specifies the Julian Date of the observation, and fch1 and foff specify the frequency of the first and frequency increment of each data channel respectively, in MHz. 
We can also look directly at the header and data, which are stored as objects in the Waterfall() class
Step4:  The data has the shape (2, 66060288), meaning that is has 2 time integrations, and  66,060,288 channels, over a bandwidth of 187 MHz. For the record, that's a lot of channels! The corresponding channel bandwidth is far more than that required for most astrophysical observations.
Plotting the data
The Waterfall() class provides a plot_spectrum() function to plot the data
Step5:  What we see here is the power spectral density (or simply "spectrum") of the data contained in the filterbank file. Apparent in the plot are discontinuities due to the BL digital filters, but not a lot else. Voyager is a very narrowband signal, so we can't easily see it in this plot. However, if we zoom in on where Voyager's telemetry is known to be, we see some very narrowband signals
Step6:  This is it
<ASSISTANT_TASK:>
Python Code:
%matplotlib inline
import pylab as plt
from blimpy import Waterfall
Explanation: Breakthrough Listen: Voyager 1 Observations
Voyager 1 is the most distant man-made object from Earth. Launched by NASA in 1977, it has travelled at fantastic speed (roughly 17,000 m/s), past the outer boundaries of our Solar System and into interstellar space (>12.5 billion miles from the Sun).
Remarkably, 38 years on, Voyager 1 is still sending telemetry data from the depths of interstellar space. This makes it a great systems test for the Breakthrough Listen signal processing pipeline.
In this tutorial, we load, read, and plot some Breakthrough Listen (BL) observations of Voyager 1. The data were taken using the Robert C. Byrd Greenbank Telescope in West Virginia.
About this tutorial
This tutorial introduces you to BL filterbank data. It is intended for intermediate to advanced users, who have experience with Python, Numpy and basic astronomy. You'll need to have Jupyter installed, along with a scientific Python installation (numpy, scipy, matplotlib, and astropy).
About the data
We used the Greenbank X-band receiver (8.0-11.6 GHz) on December 30, 2015, to observe the known position of Voyager 1. The BL digital signal processing system saves digitized data in a 'raw' format, which we have converted into 'filterbank' format using our gpuspec code (see guppi2spectra.c in https://github.com/UCBerkeleySETI/gbt_seti/tree/master/src ). For advanced users who want to start from scratch, the specific command is:
time /gbt_seti/bin/gpuspec -i ./blc3_2bit_guppi_57386_VOYAGER1_0004.0000.raw \
    -B 2 -f 1032192 -t 15 -V -o /datax2/scratch/dprice/
For the purposes of this tutorial, we suggest that you download the 504 MB file voyager_f1032192_t300_v2.fil from the BL data archive. There is also a smaller file consisting of a subset of frequencies (corresponding to a single coarse channel) in the blimpy github distribution.
Filterbank format
The voyager data is stored in filterbank format, a simple binary file format that is detailed in the SIGPROC user guide. For this tutorial, we've provided a simple Python class to load and interpret the filterbank file into a numpy array. 
Let's get started!
Firstly, let's setup the notebook and import the Waterfall() class to read the data.
End of explanation
obs = Waterfall('voyager_f1032192_t300_v2.fil')
Explanation: Now, let's read the observation data using Waterfall():
End of explanation
obs.info()
Explanation: We can get basic info about the file by reading the filterbank header. The info() method will do this:
End of explanation
print obs.header
print obs.data.shape
Explanation: The specifics are discussed in detail in the SIGPROC user guide. Briefly, astronomers use a Celestial coordinate system to specify the location of objects in outer space. The src_raj and src_dej specify the J2000 coordinates, in terms of Right Ascension and Declination (RA & DEC), toward which the telescope is pointing. tstart specifies the Julian Date of the observation, and fch1 and foff specify the frequency of the first and frequency increment of each data channel respectively, in MHz. 
We can also look directly at the header and data, which are stored as objects in the Waterfall() class:
End of explanation
obs.plot_spectrum()
Explanation: The data has the shape (2, 66060288), meaning that is has 2 time integrations, and  66,060,288 channels, over a bandwidth of 187 MHz. For the record, that's a lot of channels! The corresponding channel bandwidth is far more than that required for most astrophysical observations.
Plotting the data
The Waterfall() class provides a plot_spectrum() function to plot the data:
End of explanation
obs.plot_spectrum(f_start=8420.18, f_stop=8420.25)
Explanation: What we see here is the power spectral density (or simply "spectrum") of the data contained in the filterbank file. Apparent in the plot are discontinuities due to the BL digital filters, but not a lot else. Voyager is a very narrowband signal, so we can't easily see it in this plot. However, if we zoom in on where Voyager's telemetry is known to be, we see some very narrowband signals:
End of explanation
plt.figure(figsize=(8, 6))
plt.subplot(3,1,1)
obs.plot_spectrum(f_start=8420.193, f_stop=8420.195) # left sideband
plt.subplot(3,1,2)
obs.plot_spectrum(f_start=8420.2163, f_stop=8420.2166) # carrier
plt.subplot(3,1,3)
obs.plot_spectrum(f_start=8420.238, f_stop=8420.24) # right sideband
plt.tight_layout()
Explanation: This is it: the telemetry signal from Voyager 1! What you see is the carrier (center) and two sidebands that carry the data. We can zoom in on these to see more features:
End of explanation
<END_TASK>